@@ -1016,6 +1016,75 @@ PHP_FUNCTION(ldap_connect)
10161016}
10171017/* }}} */
10181018
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+
10191088/* {{{ _get_lderrno */
10201089static int _get_lderrno (LDAP * ldap )
10211090{
0 commit comments