/* result.c - routines to send ldap results, errors, and referrals */
/* $OpenLDAP$ */
/*
- * Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
+ * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
unsigned i, j;
#ifdef SLAPD_SCHEMA_NOT_COMPAT
- static AttributeDescription *ref = NULL;
+ AttributeDescription *ad_ref = slap_schema.si_ad_ref;
#else
- static const char *ref = "ref";
+ static const char *ad_ref = "ref";
#endif
- attr = attr_find( e->e_attrs, ref );
+ attr = attr_find( e->e_attrs, ad_ref );
if( attr == NULL ) return NULL;
*/
Debug( LDAP_DEBUG_CONNS, "ber_flush failed errno=%d reason=\"%s\"\n",
- err, STRERROR(err), 0 );
+ err, sock_errstr(err), 0 );
if ( err != EWOULDBLOCK && err != EAGAIN ) {
connection_closing( conn );
Debug( LDAP_DEBUG_TRACE, "send_ldap_response: msgid=%ld tag=%ld err=%ld\n",
(long) msgid, (long) tag, (long) err );
+ if( ref ) {
+ Debug( LDAP_DEBUG_ARGS, "send_ldap_response: ref=%s\n",
+ ref[0] && ref[0]->bv_val ? ref[0]->bv_val : "NULL",
+ NULL, NULL );
+ }
if ( ber == NULL ) {
Debug( LDAP_DEBUG_ANY, "ber_alloc failed\n", 0, 0, 0 );
matched == NULL ? "" : matched,
text == NULL ? "" : text );
- if( rc != -1 && ref != NULL ) {
- rc = ber_printf( ber, "{V}", ref );
+ if( rc != -1 ) {
+ if ( ref != NULL ) {
+ assert( err == LDAP_REFERRAL );
+ rc = ber_printf( ber, "t{V}",
+ LDAP_TAG_REFERRAL, ref );
+ } else {
+ assert( err != LDAP_REFERRAL );
+ }
}
if( rc != -1 && sasldata != NULL ) {
(long) op->o_connid, (long) op->o_opid, op->o_protocol );
Debug( LDAP_DEBUG_ARGS, "send_ldap_result: %d:%s:%s\n",
err, matched ? matched : "", text ? text : "" );
+ if( ref ) {
+ Debug( LDAP_DEBUG_ARGS, "send_ldap_result: referral: %s\n",
+ ref[0] && ref[0]->bv_val ? ref[0]->bv_val : "NULL",
+ NULL, NULL );
+ }
assert( err != LDAP_PARTIAL_RESULTS );
const char *matched,
const char *text,
struct berval **refs,
- char *rspoid,
+ const char *rspoid,
struct berval *rspdata,
LDAPControl **ctrls
)
int opattrs;
#ifdef SLAPD_SCHEMA_NOT_COMPAT
- static AttributeDescription *entry = NULL;
+ AttributeDescription *ad_entry = slap_schema.si_ad_entry;
#else
- static const char *entry = "entry";
+ static const char *ad_entry = "entry";
#endif
Debug( LDAP_DEBUG_TRACE, "=> send_search_entry: \"%s\"\n", e->e_dn, 0, 0 );
if ( ! access_allowed( be, conn, op, e,
- entry, NULL, ACL_READ ) )
+ ad_entry, NULL, ACL_READ ) )
{
Debug( LDAP_DEBUG_ACL, "acl: access to entry not allowed\n",
0, 0, 0 );
goto error_return;
}
- rc = ber_printf( ber, "{it{s{", op->o_msgid,
+ rc = ber_printf( ber, "{it{s{" /*}}}*/, op->o_msgid,
LDAP_RES_SEARCH_ENTRY, e->e_dn );
if ( rc == -1 ) {
for ( a = e->e_attrs; a != NULL; a = a->a_next ) {
#ifdef SLAPD_SCHEMA_NOT_COMPAT
AttributeDescription *desc = a->a_desc;
+ char *type = desc->ad_cname->bv_val;
#else
char *desc = a->a_type;
+ char *type = a->a_type;
#endif
if ( attrs == NULL ) {
continue;
}
- if (( rc = ber_printf( ber, "{s[" /*]}*/ , desc )) == -1 ) {
+ if (( rc = ber_printf( ber, "{s[" /*]}*/ , type )) == -1 ) {
Debug( LDAP_DEBUG_ANY, "ber_printf failed\n", 0, 0, 0 );
ber_free( ber, 1 );
send_ldap_result( conn, op, LDAP_OTHER,
int bytes;
#ifdef SLAPD_SCHEMA_NOT_COMPAT
- static AttributeDescription *ref = NULL;
- static AttributeDescription *entry = NULL;
+ AttributeDescription *ad_ref = slap_schema.si_ad_ref;
+ AttributeDescription *ad_entry = slap_schema.si_ad_entry;
#else
- static const char *ref = "ref";
- static const char *entry = "entry";
+ static const char *ad_ref = "ref";
+ static const char *ad_entry = "entry";
#endif
Debug( LDAP_DEBUG_TRACE, "=> send_search_reference (%s)\n", e->e_dn, 0, 0 );
if ( ! access_allowed( be, conn, op, e,
- entry, NULL, ACL_READ ) )
+ ad_entry, NULL, ACL_READ ) )
{
Debug( LDAP_DEBUG_ACL,
"send_search_reference: access to entry not allowed\n",
}
if ( ! access_allowed( be, conn, op, e,
- ref, NULL, ACL_READ ) )
+ ad_ref, NULL, ACL_READ ) )
{
Debug( LDAP_DEBUG_ACL,
"send_search_reference: access to reference not allowed\n",