@@ -942,6 +942,43 @@ PHP_MINFO_FUNCTION(ldap)
942
942
}
943
943
/* }}} */
944
944
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
+
945
982
/* {{{ Connect to an LDAP server */
946
983
PHP_FUNCTION (ldap_connect )
947
984
{
@@ -3727,9 +3764,6 @@ PHP_FUNCTION(ldap_start_tls)
3727
3764
zval * link ;
3728
3765
ldap_linkdata * ld ;
3729
3766
int rc , protocol = LDAP_VERSION3 ;
3730
- #ifdef LDAP_OPT_X_TLS_NEWCTX
3731
- int val = 0 ;
3732
- #endif
3733
3767
3734
3768
if (zend_parse_parameters (ZEND_NUM_ARGS (), "O" , & link , ldap_link_ce ) != SUCCESS ) {
3735
3769
RETURN_THROWS ();
@@ -3740,7 +3774,7 @@ PHP_FUNCTION(ldap_start_tls)
3740
3774
3741
3775
if (((rc = ldap_set_option (ld -> link , LDAP_OPT_PROTOCOL_VERSION , & protocol )) != LDAP_SUCCESS ) ||
3742
3776
#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 ) ||
3744
3778
#endif
3745
3779
((rc = ldap_start_tls_s (ld -> link , NULL , NULL )) != LDAP_SUCCESS )
3746
3780
) {
0 commit comments