@@ -3740,7 +3740,8 @@ PHP_FUNCTION(ldap_rename_ext)
37403740 */
37413741static int _php_ldap_tls_newctx (LDAP * ld )
37423742{
3743- int val = 0 , i , opts [] = {
3743+ int val = 0 , i ;
3744+ int str_opts [] = {
37443745#if (LDAP_API_VERSION > 2000 )
37453746 LDAP_OPT_X_TLS_CACERTDIR ,
37463747 LDAP_OPT_X_TLS_CACERTFILE ,
@@ -3760,21 +3761,42 @@ static int _php_ldap_tls_newctx(LDAP *ld)
37603761#endif
37613762 0 };
37623763
3763- for (i = 0 ; opts [i ] ; i ++ ) {
3764+ for (i = 0 ; str_opts [i ] ; i ++ ) {
37643765 char * path = NULL ;
37653766
3766- ldap_get_option (ld , opts [i ], & path );
3767+ ldap_get_option (ld , str_opts [i ], & path );
37673768 if (path ) { /* already set locally */
37683769 ldap_memfree (path );
37693770 } else {
3770- ldap_get_option (NULL , opts [i ], & path );
3771+ ldap_get_option (NULL , str_opts [i ], & path );
37713772 if (path ) { /* set globally, inherit */
3772- ldap_set_option (ld , opts [i ], path );
3773+ ldap_set_option (ld , str_opts [i ], path );
37733774 ldap_memfree (path );
37743775 }
37753776 }
37763777 }
37773778
3779+ #ifdef LDAP_OPT_X_TLS_PROTOCOL_MIN
3780+ int int_opts [] = {
3781+ LDAP_OPT_X_TLS_PROTOCOL_MIN ,
3782+ #ifdef LDAP_OPT_X_TLS_PROTOCOL_MAX
3783+ LDAP_OPT_X_TLS_PROTOCOL_MAX ,
3784+ #endif
3785+ 0
3786+ };
3787+ for (i = 0 ; int_opts [i ] ; i ++ ) {
3788+ int value = 0 ;
3789+
3790+ ldap_get_option (ld , int_opts [i ], & value );
3791+ if (value <= 0 ) { /* if value is not set already */
3792+ ldap_get_option (NULL , int_opts [i ], & value );
3793+ if (value > 0 ) { /* set globally, inherit */
3794+ ldap_set_option (ld , int_opts [i ], & value );
3795+ }
3796+ }
3797+ }
3798+ #endif
3799+
37783800 return ldap_set_option (ld , LDAP_OPT_X_TLS_NEWCTX , & val );
37793801}
37803802
0 commit comments