Skip to content

Commit 2d79174

Browse files
committed
Fix #17776 LDAP_OPT_X_TLS_REQUIRE_CERT can't be overridden
1 parent 8cbc0c5 commit 2d79174

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

ext/ldap/ldap.c

+17
Original file line numberDiff line numberDiff line change
@@ -987,6 +987,17 @@ PHP_FUNCTION(ldap_connect)
987987
snprintf( url, urllen, "ldap://%s:" ZEND_LONG_FMT, host, port );
988988
}
989989

990+
#ifdef LDAP_OPT_X_TLS_NEWCTX
991+
if (url && !strncmp(url, "ldaps:", 6)) {
992+
int val = 0;
993+
994+
/* ensure all pending TLS options are applied in a new context */
995+
if (ldap_set_option(NULL, LDAP_OPT_X_TLS_NEWCTX, &val) != LDAP_OPT_SUCCESS) {
996+
php_error_docref(NULL, E_WARNING, "Could not create new security context");
997+
}
998+
}
999+
#endif
1000+
9901001
#ifdef LDAP_API_FEATURE_X_OPENLDAP
9911002
/* ldap_init() is deprecated, use ldap_initialize() instead.
9921003
*/
@@ -3688,6 +3699,9 @@ PHP_FUNCTION(ldap_start_tls)
36883699
zval *link;
36893700
ldap_linkdata *ld;
36903701
int rc, protocol = LDAP_VERSION3;
3702+
#ifdef LDAP_OPT_X_TLS_NEWCTX
3703+
int val = 0;
3704+
#endif
36913705

36923706
if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &link, ldap_link_ce) != SUCCESS) {
36933707
RETURN_THROWS();
@@ -3697,6 +3711,9 @@ PHP_FUNCTION(ldap_start_tls)
36973711
VERIFY_LDAP_LINK_CONNECTED(ld);
36983712

36993713
if (((rc = ldap_set_option(ld->link, LDAP_OPT_PROTOCOL_VERSION, &protocol)) != LDAP_SUCCESS) ||
3714+
#ifdef LDAP_OPT_X_TLS_NEWCTX
3715+
((rc = ldap_set_option(ld->link, LDAP_OPT_X_TLS_NEWCTX, &val)) != LDAP_OPT_SUCCESS) ||
3716+
#endif
37003717
((rc = ldap_start_tls_s(ld->link, NULL, NULL)) != LDAP_SUCCESS)
37013718
) {
37023719
php_error_docref(NULL, E_WARNING,"Unable to start TLS: %s", ldap_err2string(rc));

0 commit comments

Comments
 (0)