ITS#8262 more

extended ops
This commit is contained in:
Howard Chu 2015-10-02 05:14:53 +01:00
parent 34ccd14f3e
commit db3175eaba
3 changed files with 68 additions and 35 deletions

View File

@ -77,6 +77,8 @@ ldap_build_compare_req(
ber_free( ber, 1 );
return( NULL );
}
return( ber );
}
/*

View File

@ -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 );

View File

@ -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
*/