int *msgidp )
{
BerElement *ber;
+ int rc;
Debug( LDAP_DEBUG_TRACE, "ldap_extended_operation\n", 0, 0, 0 );
return( ld->ld_errno );
}
- if ( ber_printf( ber, "{it{tstO}", /* '}' */
- ++ld->ld_msgid, LDAP_REQ_EXTENDED, LDAP_TAG_EXOP_REQ_OID,
- reqoid, LDAP_TAG_EXOP_REQ_VALUE, reqdata ) == -1 )
- {
+ if ( reqdata != NULL ) {
+ rc = ber_printf( ber, "{it{tstO}", /* '}' */
+ ++ld->ld_msgid, LDAP_REQ_EXTENDED,
+ LDAP_TAG_EXOP_REQ_OID, reqoid,
+ LDAP_TAG_EXOP_REQ_VALUE, reqdata );
+
+ } else {
+ rc = ber_printf( ber, "{it{ts}", /* '}' */
+ ++ld->ld_msgid, 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 );
return ld->ld_errno;
}
+ if( res->lm_msgtype == LDAP_RES_EXTENDED ) {
+ ld->ld_errno = LDAP_PARAM_ERROR;
+ return ld->ld_errno;
+ }
+
if( retoidp != NULL ) *retoidp = NULL;
if( retdatap != NULL ) *retdatap = NULL;
tag = ber_peek_tag( ber, &len );
+ if( tag == LDAP_TAG_REFERRAL ) {
+ /* skip over referral */
+ tag = ber_scanf( ber, "x" );
+
+ if( tag != LBER_ERROR ) {
+ tag = ber_peek_tag( ber, &len );
+ }
+ }
+
if( tag == LDAP_TAG_EXOP_RES_OID ) {
/* we have a resoid */
if( ber_scanf( ber, "a", &resoid ) == LBER_ERROR ) {