mirror of
https://github.com/php/php-src.git
synced 2024-09-22 02:17:32 +00:00
Added controls support to ldap_exop
This commit is contained in:
parent
8de071e0f7
commit
5691d8bf49
@ -3525,16 +3525,17 @@ PHP_FUNCTION(ldap_control_paged_result_response)
|
|||||||
Extended operation */
|
Extended operation */
|
||||||
PHP_FUNCTION(ldap_exop)
|
PHP_FUNCTION(ldap_exop)
|
||||||
{
|
{
|
||||||
zval *servercontrols;
|
zval *serverctrls = NULL;
|
||||||
zval *link, *retdata = NULL, *retoid = NULL;
|
zval *link, *retdata = NULL, *retoid = NULL;
|
||||||
char *lretoid = NULL;
|
char *lretoid = NULL;
|
||||||
zend_string *reqoid, *reqdata = NULL;
|
zend_string *reqoid, *reqdata = NULL;
|
||||||
struct berval lreqdata, *lretdata = NULL;
|
struct berval lreqdata, *lretdata = NULL;
|
||||||
ldap_linkdata *ld;
|
ldap_linkdata *ld;
|
||||||
LDAPMessage *ldap_res;
|
LDAPMessage *ldap_res;
|
||||||
|
LDAPControl **lserverctrls = NULL;
|
||||||
int rc, msgid;
|
int rc, msgid;
|
||||||
|
|
||||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rS|S!zz/z/", &link, &reqoid, &reqdata, &servercontrols, &retdata, &retoid) != SUCCESS) {
|
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rS|S!a!z/z/", &link, &reqoid, &reqdata, &serverctrls, &retdata, &retoid) != SUCCESS) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3549,17 +3550,26 @@ PHP_FUNCTION(ldap_exop)
|
|||||||
lreqdata.bv_len = 0;
|
lreqdata.bv_len = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (serverctrls) {
|
||||||
|
lserverctrls = _php_ldap_controls_from_array(ld->link, serverctrls);
|
||||||
|
if (lserverctrls == NULL) {
|
||||||
|
RETVAL_FALSE;
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (retdata) {
|
if (retdata) {
|
||||||
/* synchronous call */
|
/* synchronous call */
|
||||||
rc = ldap_extended_operation_s(ld->link, ZSTR_VAL(reqoid),
|
rc = ldap_extended_operation_s(ld->link, ZSTR_VAL(reqoid),
|
||||||
lreqdata.bv_len > 0 ? &lreqdata: NULL,
|
lreqdata.bv_len > 0 ? &lreqdata: NULL,
|
||||||
NULL,
|
lserverctrls,
|
||||||
NULL,
|
NULL,
|
||||||
retoid ? &lretoid : NULL,
|
retoid ? &lretoid : NULL,
|
||||||
&lretdata );
|
&lretdata );
|
||||||
if (rc != LDAP_SUCCESS ) {
|
if (rc != LDAP_SUCCESS ) {
|
||||||
php_error_docref(NULL, E_WARNING, "Extended operation %s failed: %s (%d)", ZSTR_VAL(reqoid), ldap_err2string(rc), rc);
|
php_error_docref(NULL, E_WARNING, "Extended operation %s failed: %s (%d)", ZSTR_VAL(reqoid), ldap_err2string(rc), rc);
|
||||||
RETURN_FALSE;
|
RETVAL_FALSE;
|
||||||
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (retoid) {
|
if (retoid) {
|
||||||
@ -3581,26 +3591,36 @@ PHP_FUNCTION(ldap_exop)
|
|||||||
ZVAL_EMPTY_STRING(retdata);
|
ZVAL_EMPTY_STRING(retdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
RETURN_TRUE;
|
RETVAL_TRUE;
|
||||||
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* asynchronous call */
|
/* asynchronous call */
|
||||||
rc = ldap_extended_operation(ld->link, ZSTR_VAL(reqoid),
|
rc = ldap_extended_operation(ld->link, ZSTR_VAL(reqoid),
|
||||||
lreqdata.bv_len > 0 ? &lreqdata: NULL,
|
lreqdata.bv_len > 0 ? &lreqdata: NULL,
|
||||||
NULL, NULL, &msgid);
|
lserverctrls,
|
||||||
|
NULL,
|
||||||
|
&msgid);
|
||||||
if (rc != LDAP_SUCCESS ) {
|
if (rc != LDAP_SUCCESS ) {
|
||||||
php_error_docref(NULL, E_WARNING, "Extended operation %s failed: %s (%d)", ZSTR_VAL(reqoid), ldap_err2string(rc), rc);
|
php_error_docref(NULL, E_WARNING, "Extended operation %s failed: %s (%d)", ZSTR_VAL(reqoid), ldap_err2string(rc), rc);
|
||||||
RETURN_FALSE;
|
RETVAL_FALSE;
|
||||||
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = ldap_result(ld->link, msgid, 1 /* LDAP_MSG_ALL */, NULL, &ldap_res);
|
rc = ldap_result(ld->link, msgid, 1 /* LDAP_MSG_ALL */, NULL, &ldap_res);
|
||||||
if (rc == -1) {
|
if (rc == -1) {
|
||||||
php_error_docref(NULL, E_WARNING, "Extended operation %s failed", ZSTR_VAL(reqoid));
|
php_error_docref(NULL, E_WARNING, "Extended operation %s failed", ZSTR_VAL(reqoid));
|
||||||
RETURN_FALSE;
|
RETVAL_FALSE;
|
||||||
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* return a PHP control object */
|
/* return a PHP control object */
|
||||||
RETVAL_RES(zend_register_resource(ldap_res, le_result));
|
RETVAL_RES(zend_register_resource(ldap_res, le_result));
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
if (lserverctrls) {
|
||||||
|
_php_ldap_controls_free(&lserverctrls);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
#endif
|
#endif
|
||||||
@ -3699,7 +3719,7 @@ PHP_FUNCTION(ldap_exop_passwd)
|
|||||||
} else if (err == LDAP_SUCCESS) {
|
} else if (err == LDAP_SUCCESS) {
|
||||||
RETVAL_TRUE;
|
RETVAL_TRUE;
|
||||||
} else {
|
} else {
|
||||||
php_error_docref(NULL, E_WARNING, "Passwd modify extended operation failed: %s (%d)", errmsg, err);
|
php_error_docref(NULL, E_WARNING, "Passwd modify extended operation failed: %s (%d)", (errmsg ? errmsg : ldap_err2string(err)), err);
|
||||||
RETVAL_FALSE;
|
RETVAL_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user