openldap/servers/slapd/root_dse.c
Kurt Zeilenga 97bc107537 Add macros to support testing of error categories to ldap.h
Modify ldap_result to assert returned error is not an one reserved
for API use.
Modify frontend LDAP operation routines to return an error code.
The returned value will be used to determine if an unsolicited notification
should be sent to the client.
Need to review returned error codes.  Namely some LDAP_PROTOCOL_ERROR
will like need to be changed (as they will cause unsolicited notifications).
1999-07-01 21:20:45 +00:00

111 lines
2.7 KiB
C

/* root_dse.c - Provides the ROOT DSA-Specific Entry
*
* Copyright 1999 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted only
* as authorized by the OpenLDAP Public License. A copy of this
* license is available at http://www.OpenLDAP.org/license.html or
* in file LICENSE in the top-level directory of the distribution.
*/
#include "portable.h"
#include <stdio.h>
#include "ldap_defaults.h"
#include "slap.h"
void
root_dse_info( Connection *conn, Operation *op, char **attrs, int attrsonly )
{
Entry *e;
char buf[BUFSIZ];
struct berval val;
struct berval *vals[2];
int i, j;
vals[0] = &val;
vals[1] = NULL;
e = (Entry *) ch_calloc( 1, sizeof(Entry) );
e->e_attrs = NULL;
e->e_dn = ch_strdup( LDAP_ROOT_DSE );
e->e_ndn = dn_normalize_case( ch_strdup( LDAP_ROOT_DSE ));
e->e_private = NULL;
for ( i = 0; i < nbackends; i++ ) {
for ( j = 0; backends[i].be_suffix[j] != NULL; j++ ) {
strcpy( buf, backends[i].be_suffix[j] );
val.bv_val = buf;
val.bv_len = strlen( buf );
attr_merge( e, "namingContexts", vals );
}
}
#if defined( SLAPD_MONITOR_DN )
strcpy( buf, SLAPD_MONITOR_DN );
val.bv_val = buf;
val.bv_len = strlen( buf );
attr_merge( e, "namingContexts", vals );
#endif
#if defined( SLAPD_CONFIG_DN )
strcpy( buf, SLAPD_CONFIG_DN );
val.bv_val = buf;
val.bv_len = strlen( buf );
attr_merge( e, "namingContexts", vals );
#endif
#if defined( SLAPD_SCHEMA_DN )
strcpy( buf, SLAPD_SCHEMA_DN );
val.bv_val = buf;
val.bv_len = strlen( val.bv_val );
attr_merge( e, "namingContexts", vals );
attr_merge( e, "subschemaSubentry", vals );
ldap_memfree( val.bv_val );
#endif
/* altServer unsupported */
/* supportedControl */
for ( i=0; supportedControls[i] != NULL; i++ ) {
strcpy( buf, supportedControls[i] );
val.bv_val = buf;
val.bv_len = strlen( buf );
attr_merge( e, "supportedControl", vals );
}
/* supportedExtension */
for ( i=0; supportedExtensions[i] != NULL; i++ ) {
strcpy( buf, supportedExtensions[i] );
val.bv_val = buf;
val.bv_len = strlen( buf );
attr_merge( e, "supportedExtension", vals );
}
/* supportedLDAPVersion */
for ( i=LDAP_VERSION_MIN; i<=LDAP_VERSION_MAX; i++ ) {
sprintf(buf,"%d",i);
val.bv_val = buf;
val.bv_len = strlen( buf );
attr_merge( e, "supportedLDAPVersion", vals );
}
/* supportedSASLMechanism */
for ( i=0; supportedSASLMechanisms[i] != NULL; i++ ) {
strcpy( buf, supportedSASLMechanisms[i] );
val.bv_val = buf;
val.bv_len = strlen( buf );
attr_merge( e, "supportedSASLMechanism", vals );
}
send_search_entry( &backends[0], conn, op, e, attrs, attrsonly );
send_ldap_search_result( conn, op, LDAP_SUCCESS, NULL, NULL, 1 );
entry_free( e );
}