Skip to content

Commit 72aada3

Browse files
committed
Implement ldap_connect_wallet()
1 parent 1486f52 commit 72aada3

File tree

3 files changed

+95
-4
lines changed

3 files changed

+95
-4
lines changed

ext/ldap/ldap.c

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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 */
10201089
static int _get_lderrno(LDAP *ldap)
10211090
{

ext/ldap/ldap.stub.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -609,11 +609,14 @@
609609
const LDAP_CONTROL_VLVRESPONSE = UNKNOWN;
610610
#endif
611611

612-
#ifdef HAVE_ORALDAP
612+
#ifdef HAVE_ORALDAP
613613
function ldap_connect(?string $uri = null, int $port = 389, string $wallet = UNKNOWN, #[\SensitiveParameter] string $password = UNKNOWN, int $auth_mode = GSLC_SSL_NO_AUTH): LDAP\Connection|false {}
614-
#else
614+
#ifdef LDAP_API_FEATURE_X_OPENLDAP
615+
function ldap_connect_wallet(?string $uri = null, string $wallet, #[\SensitiveParameter] string $password, int $auth_mode = GSLC_SSL_NO_AUTH): LDAP\Connection|false {}
616+
#endif
617+
#else
615618
function ldap_connect(?string $uri = null, int $port = 389): LDAP\Connection|false {}
616-
#endif
619+
#endif
617620

618621
function ldap_unbind(LDAP\Connection $ldap): bool {}
619622

ext/ldap/ldap_arginfo.h

Lines changed: 20 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)