@@ -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 */
946983PHP_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