+ } else { /* start of Netscape extended operation */
+ rs->sr_err = slapi_pblock_set( pb, SLAPI_EXT_OP_REQ_OID,
+ (void *)op->ore_reqoid.bv_val);
+ if ( rs->sr_err != LDAP_SUCCESS ) {
+ rs->sr_err = LDAP_OTHER;
+ goto done;
+ }
+
+ rs->sr_err = slapi_pblock_set( pb, SLAPI_EXT_OP_REQ_VALUE,
+ (void *)&reqdata);
+ if ( rs->sr_err != LDAP_SUCCESS ) {
+ rs->sr_err = LDAP_OTHER;
+ goto done;
+ }
+
+ rs->sr_err = slapi_x_pblock_set_operation( pb, op );
+ if ( rs->sr_err != LDAP_SUCCESS ) {
+ rs->sr_err = LDAP_OTHER;
+ goto done;
+ }
+
+ extop_rc = (*funcAddr)( pb );
+ if ( extop_rc == SLAPI_PLUGIN_EXTENDED_SENT_RESULT ) {
+ msg_sent = TRUE;
+
+ } else if ( extop_rc == SLAPI_PLUGIN_EXTENDED_NOT_HANDLED ) {
+ rs->sr_err = LDAP_PROTOCOL_ERROR;
+ rs->sr_text = UNSUPPORTED_EXTENDEDOP;
+
+ } else {
+ rs->sr_err = slapi_pblock_get( pb, SLAPI_EXT_OP_RET_OID,
+ &rs->sr_rspoid);
+ if ( rs->sr_err != LDAP_SUCCESS ) {
+ goto done2;
+ }
+
+ rs->sr_err = slapi_pblock_get( pb, SLAPI_EXT_OP_RET_VALUE,
+ &rs->sr_rspdata);
+ if ( rs->sr_err != LDAP_SUCCESS ) {
+ goto done2;
+ }
+
+ rs->sr_err = extop_rc;
+ send_ldap_extended( op, rs );
+ msg_sent = TRUE;
+ }
+
+done2:;
+ if ( rs->sr_err != LDAP_SUCCESS && msg_sent == FALSE ) {
+ send_ldap_result( op, rs );
+ }
+
+ if ( rs->sr_rspoid != NULL ) {
+ ch_free( (char *)rs->sr_rspoid );
+ }
+
+ if ( rs->sr_rspdata != NULL ) {
+ ber_bvfree( rs->sr_rspdata );
+ }
+
+ } /* end of Netscape extended operation */
+#endif /* defined( LDAP_SLAPI ) */