@@ -835,6 +835,21 @@ static PHP_GINIT_FUNCTION(ldap)
835
835
}
836
836
/* }}} */
837
837
838
+ /* {{{ PHP_RINIT_FUNCTION */
839
+ static PHP_RINIT_FUNCTION (ldap )
840
+ {
841
+ #if defined(COMPILE_DL_LDAP ) && defined(ZTS )
842
+ ZEND_TSRMLS_CACHE_UPDATE ();
843
+ #endif
844
+
845
+ /* needed before first connect and after TLS option changes */
846
+ LDAPG (newctx ) = true;
847
+
848
+ return SUCCESS ;
849
+ }
850
+ /* }}} */
851
+
852
+
838
853
/* {{{ PHP_MINIT_FUNCTION */
839
854
PHP_MINIT_FUNCTION (ldap )
840
855
{
@@ -988,7 +1003,7 @@ PHP_FUNCTION(ldap_connect)
988
1003
}
989
1004
990
1005
#ifdef LDAP_OPT_X_TLS_NEWCTX
991
- if (url && !strncmp (url , "ldaps:" , 6 )) {
1006
+ if (LDAPG ( newctx ) && url && !strncmp (url , "ldaps:" , 6 )) {
992
1007
int val = 0 ;
993
1008
994
1009
/* ensure all pending TLS options are applied in a new context */
@@ -997,6 +1012,7 @@ PHP_FUNCTION(ldap_connect)
997
1012
php_error_docref (NULL , E_WARNING , "Could not create new security context" );
998
1013
RETURN_FALSE ;
999
1014
}
1015
+ LDAPG (newctx ) = false;
1000
1016
}
1001
1017
#endif
1002
1018
@@ -3185,15 +3201,7 @@ PHP_FUNCTION(ldap_set_option)
3185
3201
}
3186
3202
3187
3203
switch (option ) {
3188
- /* options with int value */
3189
- case LDAP_OPT_DEREF :
3190
- case LDAP_OPT_SIZELIMIT :
3191
- case LDAP_OPT_TIMELIMIT :
3192
- case LDAP_OPT_PROTOCOL_VERSION :
3193
- case LDAP_OPT_ERROR_NUMBER :
3194
- #ifdef LDAP_OPT_DEBUG_LEVEL
3195
- case LDAP_OPT_DEBUG_LEVEL :
3196
- #endif
3204
+ /* TLS options with int value */
3197
3205
#ifdef LDAP_OPT_X_TLS_REQUIRE_CERT
3198
3206
case LDAP_OPT_X_TLS_REQUIRE_CERT :
3199
3207
#endif
@@ -3202,6 +3210,17 @@ PHP_FUNCTION(ldap_set_option)
3202
3210
#endif
3203
3211
#ifdef LDAP_OPT_X_TLS_PROTOCOL_MIN
3204
3212
case LDAP_OPT_X_TLS_PROTOCOL_MIN :
3213
+ #endif
3214
+ LDAPG (newctx ) = true;
3215
+ ZEND_FALLTHROUGH ;
3216
+ /* other options with int value */
3217
+ case LDAP_OPT_DEREF :
3218
+ case LDAP_OPT_SIZELIMIT :
3219
+ case LDAP_OPT_TIMELIMIT :
3220
+ case LDAP_OPT_PROTOCOL_VERSION :
3221
+ case LDAP_OPT_ERROR_NUMBER :
3222
+ #ifdef LDAP_OPT_DEBUG_LEVEL
3223
+ case LDAP_OPT_DEBUG_LEVEL :
3205
3224
#endif
3206
3225
#ifdef LDAP_OPT_X_KEEPALIVE_IDLE
3207
3226
case LDAP_OPT_X_KEEPALIVE_IDLE :
@@ -3258,17 +3277,7 @@ PHP_FUNCTION(ldap_set_option)
3258
3277
}
3259
3278
} break ;
3260
3279
#endif
3261
- /* options with string value */
3262
- case LDAP_OPT_ERROR_STRING :
3263
- #ifdef LDAP_OPT_HOST_NAME
3264
- case LDAP_OPT_HOST_NAME :
3265
- #endif
3266
- #ifdef HAVE_LDAP_SASL
3267
- case LDAP_OPT_X_SASL_MECH :
3268
- case LDAP_OPT_X_SASL_REALM :
3269
- case LDAP_OPT_X_SASL_AUTHCID :
3270
- case LDAP_OPT_X_SASL_AUTHZID :
3271
- #endif
3280
+ /* TLS options with string value */
3272
3281
#if (LDAP_API_VERSION > 2000 )
3273
3282
case LDAP_OPT_X_TLS_CACERTDIR :
3274
3283
case LDAP_OPT_X_TLS_CACERTFILE :
@@ -3282,6 +3291,19 @@ PHP_FUNCTION(ldap_set_option)
3282
3291
#endif
3283
3292
#ifdef LDAP_OPT_X_TLS_DHFILE
3284
3293
case LDAP_OPT_X_TLS_DHFILE :
3294
+ #endif
3295
+ LDAPG (newctx ) = true;
3296
+ ZEND_FALLTHROUGH ;
3297
+ /* other options with string value */
3298
+ case LDAP_OPT_ERROR_STRING :
3299
+ #ifdef LDAP_OPT_HOST_NAME
3300
+ case LDAP_OPT_HOST_NAME :
3301
+ #endif
3302
+ #ifdef HAVE_LDAP_SASL
3303
+ case LDAP_OPT_X_SASL_MECH :
3304
+ case LDAP_OPT_X_SASL_REALM :
3305
+ case LDAP_OPT_X_SASL_AUTHCID :
3306
+ case LDAP_OPT_X_SASL_AUTHZID :
3285
3307
#endif
3286
3308
#ifdef LDAP_OPT_MATCHED_DN
3287
3309
case LDAP_OPT_MATCHED_DN :
@@ -3714,15 +3736,15 @@ PHP_FUNCTION(ldap_start_tls)
3714
3736
3715
3737
if (((rc = ldap_set_option (ld -> link , LDAP_OPT_PROTOCOL_VERSION , & protocol )) != LDAP_SUCCESS ) ||
3716
3738
#ifdef LDAP_OPT_X_TLS_NEWCTX
3717
- ((rc = ldap_set_option (ld -> link , LDAP_OPT_X_TLS_NEWCTX , & val )) != LDAP_OPT_SUCCESS ) ||
3739
+ (LDAPG ( newctx ) && (rc = ldap_set_option (ld -> link , LDAP_OPT_X_TLS_NEWCTX , & val )) != LDAP_OPT_SUCCESS ) ||
3718
3740
#endif
3719
3741
((rc = ldap_start_tls_s (ld -> link , NULL , NULL )) != LDAP_SUCCESS )
3720
3742
) {
3721
3743
php_error_docref (NULL , E_WARNING ,"Unable to start TLS: %s" , ldap_err2string (rc ));
3722
3744
RETURN_FALSE ;
3723
- } else {
3724
- RETURN_TRUE ;
3725
3745
}
3746
+ LDAPG (newctx ) = false;
3747
+ RETURN_TRUE ;
3726
3748
}
3727
3749
/* }}} */
3728
3750
#endif
@@ -4237,7 +4259,7 @@ zend_module_entry ldap_module_entry = { /* {{{ */
4237
4259
ext_functions ,
4238
4260
PHP_MINIT (ldap ),
4239
4261
PHP_MSHUTDOWN (ldap ),
4240
- NULL ,
4262
+ PHP_RINIT ( ldap ) ,
4241
4263
NULL ,
4242
4264
PHP_MINFO (ldap ),
4243
4265
PHP_LDAP_VERSION ,
0 commit comments