#include <ac/unistd.h>
#include "slap.h"
+
+#ifdef LDAP_SLAPI
#include "slapi.h"
+#endif
static char *v2ref( BerVarray ref, const char *text )
{
}
#ifdef LDAP_CONNECTIONLESS
- if (conn->c_is_udp && conn->c_protocol == LDAP_VERSION2) {
+ if (conn->c_is_udp && op->o_protocol == LDAP_VERSION2) {
rc = ber_printf( ber, "t{ess" /*"}}"*/,
tag, err,
matched == NULL ? "" : matched,
rc = ber_printf( ber, /*"{"*/ "N}" );
}
+#ifdef LDAP_CONNECTIONLESS
+ if( conn->c_is_udp && op->o_protocol == LDAP_VERSION2 && rc != -1 ) {
+ rc = ber_printf( ber, /*"{"*/ "N}" );
+ }
+#endif
+
if ( rc == -1 ) {
#ifdef NEW_LOGGING
LDAP_LOG( OPERATION, ERR,
assert( err != LDAP_PARTIAL_RESULTS );
if ( err == LDAP_REFERRAL ) {
- if( op->o_noreferrals ) {
+#ifdef LDAP_CONTROL_X_DOMAIN_SCOPE
+ if( op->o_domain_scope ) {
ref = NULL;
}
+#endif
if( ref == NULL ) {
err = LDAP_NO_SUCH_OBJECT;
} else if ( op->o_protocol < LDAP_VERSION3 ) {
rspoid, rspdata, NULL, ctrls );
}
+#ifdef LDAP_RES_INTERMEDIATE_RESP
+void
+slap_send_ldap_intermediate_resp(
+ Connection *conn,
+ Operation *op,
+ ber_int_t err,
+ const char *matched,
+ const char *text,
+ BerVarray refs,
+ const char *rspoid,
+ struct berval *rspdata,
+ LDAPControl **ctrls )
+{
+ ber_tag_t tag;
+ ber_int_t msgid;
+#ifdef NEW_LOGGING
+ LDAP_LOG( OPERATION, ENTRY,
+ "send_ldap_intermediate: err=%d oid=%s len=%ld\n",
+ err, rspoid ? rspoid : "",
+ rspdata != NULL ? rspdata->bv_len : 0 );
+#else
+ Debug( LDAP_DEBUG_TRACE,
+ "send_ldap_intermediate: err=%d oid=%s len=%ld\n",
+ err,
+ rspoid ? rspoid : "",
+ rspdata != NULL ? rspdata->bv_len : 0 );
+#endif
+ tag = LDAP_RES_INTERMEDIATE_RESP;
+ msgid = (tag != LBER_SEQUENCE) ? op->o_msgid : 0;
+ send_ldap_response( conn, op, tag, msgid,
+ err, matched, text, refs,
+ rspoid, rspdata, NULL, ctrls );
+}
+#endif
void
slap_send_search_result(
ber_init_w_nullc( ber, LBER_USE_DER );
#ifdef LDAP_CONNECTIONLESS
- if (conn->c_is_udp && conn->c_protocol == LDAP_VERSION2) {
- rc = ber_printf(ber, "t{0{" /*}}*/,
+ if (conn->c_is_udp && op->o_protocol == LDAP_VERSION2) {
+ rc = ber_printf(ber, "t{O{" /*}}*/,
LDAP_RES_SEARCH_ENTRY, &e->e_name);
} else
#endif
rc = send_ldap_controls( ber, ctrls );
}
+#ifdef LDAP_CONNECTIONLESS
+ if( conn->c_is_udp && op->o_protocol == LDAP_VERSION2 ) {
+ ; /* empty, skip following if */
+ } else
+#endif
if( rc != -1 ) {
rc = ber_printf( ber, /*{*/ "N}" );
}
AttributeDescription *ad_ref = slap_schema.si_ad_ref;
AttributeDescription *ad_entry = slap_schema.si_ad_entry;
+ if (op->o_callback && op->o_callback->sc_sendreference) {
+ return op->o_callback->sc_sendreference( be, conn, op, e, refs, ctrls, v2refs );
+ }
+
#ifdef NEW_LOGGING
LDAP_LOG( OPERATION, ENTRY,
"send_search_reference: conn %lu dn=\"%s\"\n",
return( 1 );
}
- if( op->o_noreferrals ) {
+#ifdef LDAP_CONTROL_X_DOMAIN_SCOPE
+ if( op->o_domain_scope ) {
#ifdef NEW_LOGGING
LDAP_LOG( OPERATION, ERR,
- "send_search_reference: conn %lu noreferrals control in (%s).\n",
+ "send_search_reference: conn %lu domainScope control in (%s).\n",
op->o_connid, e->e_dn, 0 );
#else
Debug( LDAP_DEBUG_ANY,
- "send_search_reference: noreferrals control in (%s)\n",
+ "send_search_reference: domainScope control in (%s)\n",
e->e_dn, 0, 0 );
#endif
return( 0 );
}
+#endif
if( refs == NULL ) {
#ifdef NEW_LOGGING