@@ -3725,7 +3725,8 @@ PHP_FUNCTION(ldap_rename_ext)
37253725 */
37263726static int _php_ldap_tls_newctx (LDAP * ld )
37273727{
3728- int val = 0 , i , opts [] = {
3728+ int val = 0 , i ;
3729+ int str_opts [] = {
37293730#if (LDAP_API_VERSION > 2000 )
37303731 LDAP_OPT_X_TLS_CACERTDIR ,
37313732 LDAP_OPT_X_TLS_CACERTFILE ,
@@ -3745,21 +3746,42 @@ static int _php_ldap_tls_newctx(LDAP *ld)
37453746#endif
37463747 0 };
37473748
3748- for (i = 0 ; opts [i ] ; i ++ ) {
3749+ for (i = 0 ; str_opts [i ] ; i ++ ) {
37493750 char * path = NULL ;
37503751
3751- ldap_get_option (ld , opts [i ], & path );
3752+ ldap_get_option (ld , str_opts [i ], & path );
37523753 if (path ) { /* already set locally */
37533754 ldap_memfree (path );
37543755 } else {
3755- ldap_get_option (NULL , opts [i ], & path );
3756+ ldap_get_option (NULL , str_opts [i ], & path );
37563757 if (path ) { /* set globally, inherit */
3757- ldap_set_option (ld , opts [i ], path );
3758+ ldap_set_option (ld , str_opts [i ], path );
37583759 ldap_memfree (path );
37593760 }
37603761 }
37613762 }
37623763
3764+ #ifdef LDAP_OPT_X_TLS_PROTOCOL_MIN
3765+ int int_opts [] = {
3766+ LDAP_OPT_X_TLS_PROTOCOL_MIN ,
3767+ #ifdef LDAP_OPT_X_TLS_PROTOCOL_MAX
3768+ LDAP_OPT_X_TLS_PROTOCOL_MAX ,
3769+ #endif
3770+ 0
3771+ };
3772+ for (i = 0 ; int_opts [i ] ; i ++ ) {
3773+ int value = 0 ;
3774+
3775+ ldap_get_option (ld , int_opts [i ], & value );
3776+ if (value <= 0 ) { /* if value is not set already */
3777+ ldap_get_option (NULL , int_opts [i ], & value );
3778+ if (value > 0 ) { /* set globally, inherit */
3779+ ldap_set_option (ld , int_opts [i ], & value );
3780+ }
3781+ }
3782+ }
3783+ #endif
3784+
37633785 return ldap_set_option (ld , LDAP_OPT_X_TLS_NEWCTX , & val );
37643786}
37653787
0 commit comments