@@ -1016,6 +1016,75 @@ PHP_FUNCTION(ldap_connect)
1016
1016
}
1017
1017
/* }}} */
1018
1018
1019
+ #if defined(HAVE_ORALDAP ) && defined(LDAP_API_FEATURE_X_OPENLDAP )
1020
+ PHP_FUNCTION (ldap_connect_wallet ) {
1021
+ char * host = NULL ;
1022
+ size_t hostlen = 0 ;
1023
+ char * wallet = NULL , * walletpasswd = NULL ;
1024
+ size_t walletlen = 0 , walletpasswdlen = 0 ;
1025
+ zend_long authmode = GSLC_SSL_NO_AUTH ;
1026
+ bool ssl = false;
1027
+
1028
+ ldap_linkdata * ld ;
1029
+ LDAP * ldap = NULL ;
1030
+
1031
+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "s!ss|l" ,
1032
+ & host , & hostlen , & wallet , & walletlen , & walletpasswd , & walletpasswdlen , & authmode ) != SUCCESS
1033
+ ) {
1034
+ RETURN_THROWS ();
1035
+ }
1036
+
1037
+ if (authmode != 0 ) {
1038
+ ssl = true;
1039
+ }
1040
+
1041
+ if (LDAPG (max_links ) != -1 && LDAPG (num_links ) >= LDAPG (max_links )) {
1042
+ php_error_docref (NULL , E_WARNING , "Too many open links (" ZEND_LONG_FMT ")" , LDAPG (num_links ));
1043
+ RETURN_FALSE ;
1044
+ }
1045
+
1046
+ object_init_ex (return_value , ldap_link_ce );
1047
+ ld = Z_LDAP_LINK_P (return_value );
1048
+
1049
+ {
1050
+ int rc = LDAP_SUCCESS ;
1051
+ char * url = host ;
1052
+ if (url && !ldap_is_ldap_url (url )) {
1053
+ size_t urllen = hostlen + sizeof ( "ldap://:65535" );
1054
+
1055
+ url = emalloc (urllen );
1056
+ snprintf ( url , urllen , "ldap://%s" , host );
1057
+ }
1058
+
1059
+ /* ldap_init() is deprecated, use ldap_initialize() instead. */
1060
+ rc = ldap_initialize (& ldap , url );
1061
+ if (url != host ) {
1062
+ efree (url );
1063
+ }
1064
+ if (rc != LDAP_SUCCESS ) {
1065
+ zval_ptr_dtor (return_value );
1066
+ php_error_docref (NULL , E_WARNING , "Could not create session handle: %s" , ldap_err2string (rc ));
1067
+ RETURN_FALSE ;
1068
+ }
1069
+ }
1070
+
1071
+ if (ldap == NULL ) {
1072
+ zval_ptr_dtor (return_value );
1073
+ RETURN_FALSE ;
1074
+ } else {
1075
+ if (ssl ) {
1076
+ if (ldap_init_SSL (& ldap -> ld_sb , wallet , walletpasswd , authmode )) {
1077
+ zval_ptr_dtor (return_value );
1078
+ php_error_docref (NULL , E_WARNING , "SSL init failed" );
1079
+ RETURN_FALSE ;
1080
+ }
1081
+ }
1082
+ LDAPG (num_links )++ ;
1083
+ ld -> link = ldap ;
1084
+ }
1085
+ }
1086
+ #endif
1087
+
1019
1088
/* {{{ _get_lderrno */
1020
1089
static int _get_lderrno (LDAP * ldap )
1021
1090
{
0 commit comments