Skip to content

Commit b9db945

Browse files
committed
ensure TLS string options are properly inherited
1 parent 8d2682f commit b9db945

File tree

1 file changed

+38
-4
lines changed

1 file changed

+38
-4
lines changed

ext/ldap/ldap.c

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -942,6 +942,43 @@ PHP_MINFO_FUNCTION(ldap)
942942
}
943943
/* }}} */
944944

945+
/* Force new tls context creation with string options inherited from global */
946+
static int _php_ldap_newctx(LDAP *ld)
947+
{
948+
int val = 0, i, opts[] = {
949+
#if (LDAP_API_VERSION > 2000)
950+
LDAP_OPT_X_TLS_CACERTDIR,
951+
LDAP_OPT_X_TLS_CACERTFILE,
952+
LDAP_OPT_X_TLS_CERTFILE,
953+
LDAP_OPT_X_TLS_CIPHER_SUITE,
954+
LDAP_OPT_X_TLS_KEYFILE,
955+
LDAP_OPT_X_TLS_RANDOM_FILE,
956+
#endif
957+
#ifdef LDAP_OPT_X_TLS_CRLFILE
958+
LDAP_OPT_X_TLS_CRLFILE,
959+
#endif
960+
#ifdef LDAP_OPT_X_TLS_DHFILE
961+
LDAP_OPT_X_TLS_DHFILE,
962+
#endif
963+
0};
964+
965+
for (i=0 ; opts[i] ; i++) {
966+
char *path = NULL;
967+
968+
ldap_get_option(ld, opts[i], &path);
969+
if (path) { /* already set locally */
970+
ldap_memfree(path);
971+
} else {
972+
ldap_get_option(NULL, opts[i], &path);
973+
if (path) { /* set globally, inherit */
974+
ldap_set_option(ld, opts[i], &path);
975+
ldap_memfree(path);
976+
}
977+
}
978+
}
979+
return ldap_set_option(NULL, LDAP_OPT_X_TLS_NEWCTX, &val);
980+
}
981+
945982
/* {{{ Connect to an LDAP server */
946983
PHP_FUNCTION(ldap_connect)
947984
{
@@ -3727,9 +3764,6 @@ PHP_FUNCTION(ldap_start_tls)
37273764
zval *link;
37283765
ldap_linkdata *ld;
37293766
int rc, protocol = LDAP_VERSION3;
3730-
#ifdef LDAP_OPT_X_TLS_NEWCTX
3731-
int val = 0;
3732-
#endif
37333767

37343768
if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &link, ldap_link_ce) != SUCCESS) {
37353769
RETURN_THROWS();
@@ -3740,7 +3774,7 @@ PHP_FUNCTION(ldap_start_tls)
37403774

37413775
if (((rc = ldap_set_option(ld->link, LDAP_OPT_PROTOCOL_VERSION, &protocol)) != LDAP_SUCCESS) ||
37423776
#ifdef LDAP_OPT_X_TLS_NEWCTX
3743-
(LDAPG(tls_newctx) && (rc = ldap_set_option(ld->link, LDAP_OPT_X_TLS_NEWCTX, &val)) != LDAP_OPT_SUCCESS) ||
3777+
(LDAPG(tls_newctx) && (rc = _php_ldap_newctx(ld->link)) != LDAP_OPT_SUCCESS) ||
37443778
#endif
37453779
((rc = ldap_start_tls_s(ld->link, NULL, NULL)) != LDAP_SUCCESS)
37463780
) {

0 commit comments

Comments
 (0)