mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-04-06 15:00:40 +08:00
ITS#8262 more
extended ops
This commit is contained in:
parent
34ccd14f3e
commit
db3175eaba
@ -77,6 +77,8 @@ ldap_build_compare_req(
|
||||
ber_free( ber, 1 );
|
||||
return( NULL );
|
||||
}
|
||||
|
||||
return( ber );
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -25,6 +25,57 @@
|
||||
#include "ldap-int.h"
|
||||
#include "ldap_log.h"
|
||||
|
||||
BerElement *
|
||||
ldap_build_extended_req(
|
||||
LDAP *ld,
|
||||
LDAP_CONST char *reqoid,
|
||||
struct berval *reqdata,
|
||||
LDAPControl **sctrls,
|
||||
LDAPControl **cctrls,
|
||||
ber_int_t *msgidp )
|
||||
{
|
||||
BerElement *ber;
|
||||
int rc;
|
||||
|
||||
/* create a message to send */
|
||||
if ( (ber = ldap_alloc_ber_with_options( ld )) == NULL ) {
|
||||
return( NULL );
|
||||
}
|
||||
|
||||
LDAP_NEXT_MSGID( ld, *msgidp );
|
||||
if ( reqdata != NULL ) {
|
||||
rc = ber_printf( ber, "{it{tstON}", /* '}' */
|
||||
*msgidp, LDAP_REQ_EXTENDED,
|
||||
LDAP_TAG_EXOP_REQ_OID, reqoid,
|
||||
LDAP_TAG_EXOP_REQ_VALUE, reqdata );
|
||||
|
||||
} else {
|
||||
rc = ber_printf( ber, "{it{tsN}", /* '}' */
|
||||
*msgidp, LDAP_REQ_EXTENDED,
|
||||
LDAP_TAG_EXOP_REQ_OID, reqoid );
|
||||
}
|
||||
|
||||
if( rc == -1 ) {
|
||||
ld->ld_errno = LDAP_ENCODING_ERROR;
|
||||
ber_free( ber, 1 );
|
||||
return( NULL );
|
||||
}
|
||||
|
||||
/* Put Server Controls */
|
||||
if( ldap_int_put_controls( ld, sctrls, ber ) != LDAP_SUCCESS ) {
|
||||
ber_free( ber, 1 );
|
||||
return( NULL );
|
||||
}
|
||||
|
||||
if ( ber_printf( ber, /*{*/ "N}" ) == -1 ) {
|
||||
ld->ld_errno = LDAP_ENCODING_ERROR;
|
||||
ber_free( ber, 1 );
|
||||
return( NULL );
|
||||
}
|
||||
|
||||
return( ber );
|
||||
}
|
||||
|
||||
/*
|
||||
* LDAPv3 Extended Operation Request
|
||||
* ExtendedRequest ::= [APPLICATION 23] SEQUENCE {
|
||||
@ -68,42 +119,10 @@ ldap_extended_operation(
|
||||
return( ld->ld_errno );
|
||||
}
|
||||
|
||||
/* create a message to send */
|
||||
if ( (ber = ldap_alloc_ber_with_options( ld )) == NULL ) {
|
||||
ld->ld_errno = LDAP_NO_MEMORY;
|
||||
ber = ldap_build_extended_req( ld, reqoid, reqdata,
|
||||
sctrls, cctrls, &id );
|
||||
if ( !ber )
|
||||
return( ld->ld_errno );
|
||||
}
|
||||
|
||||
LDAP_NEXT_MSGID( ld, id );
|
||||
if ( reqdata != NULL ) {
|
||||
rc = ber_printf( ber, "{it{tstON}", /* '}' */
|
||||
id, LDAP_REQ_EXTENDED,
|
||||
LDAP_TAG_EXOP_REQ_OID, reqoid,
|
||||
LDAP_TAG_EXOP_REQ_VALUE, reqdata );
|
||||
|
||||
} else {
|
||||
rc = ber_printf( ber, "{it{tsN}", /* '}' */
|
||||
id, LDAP_REQ_EXTENDED,
|
||||
LDAP_TAG_EXOP_REQ_OID, reqoid );
|
||||
}
|
||||
|
||||
if( rc == -1 ) {
|
||||
ld->ld_errno = LDAP_ENCODING_ERROR;
|
||||
ber_free( ber, 1 );
|
||||
return( ld->ld_errno );
|
||||
}
|
||||
|
||||
/* Put Server Controls */
|
||||
if( ldap_int_put_controls( ld, sctrls, ber ) != LDAP_SUCCESS ) {
|
||||
ber_free( ber, 1 );
|
||||
return ld->ld_errno;
|
||||
}
|
||||
|
||||
if ( ber_printf( ber, /*{*/ "N}" ) == -1 ) {
|
||||
ld->ld_errno = LDAP_ENCODING_ERROR;
|
||||
ber_free( ber, 1 );
|
||||
return( ld->ld_errno );
|
||||
}
|
||||
|
||||
/* send the message */
|
||||
*msgidp = ldap_send_initial_request( ld, LDAP_REQ_EXTENDED, NULL, ber, id );
|
||||
|
@ -566,6 +566,18 @@ LDAP_F (BerElement *) ldap_build_delete_req LDAP_P((
|
||||
LDAPControl **cctrls,
|
||||
ber_int_t *msgidp ));
|
||||
|
||||
/*
|
||||
* in extended.c
|
||||
*/
|
||||
|
||||
LDAP_F (BerElement *) ldap_build_extended_req LDAP_P((
|
||||
LDAP *ld,
|
||||
const char *reqoid,
|
||||
struct berval *reqdata,
|
||||
LDAPControl **sctrls,
|
||||
LDAPControl **cctrls,
|
||||
ber_int_t *msgidp ));
|
||||
|
||||
/*
|
||||
* in init.c
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user