#include <stdio.h>
-#include "ldapconfig.h"
+#include "ldap_defaults.h"
#include "slap.h"
void
-root_dse_info( Connection *conn, Operation *op )
+root_dse_info( Connection *conn, Operation *op, char **attrs, int attrsonly )
{
+ char buf[BUFSIZ];
Entry *e;
- char buf[BUFSIZ];
struct berval val;
struct berval *vals[2];
int i, j;
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_ndn = ch_strdup( LDAP_ROOT_DSE );
+ (void) dn_normalize_case( e->e_ndn );
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 );
+ val.bv_val = backends[i].be_suffix[j];
+ val.bv_len = strlen( val.bv_val );
attr_merge( e, "namingContexts", vals );
}
}
+#if defined( SLAPD_MONITOR_DN )
+ val.bv_val = SLAPD_MONITOR_DN;
+ val.bv_len = strlen( val.bv_val );
+ attr_merge( e, "namingContexts", vals );
+ /* subschemasubentry is added by send_search_entry() */
+#endif
+
+#if defined( SLAPD_CONFIG_DN )
+ val.bv_val = SLAPD_CONFIG_DN;
+ val.bv_len = strlen( val.bv_val );
+ attr_merge( e, "namingContexts", vals );
+#endif
+
#if defined( SLAPD_SCHEMA_DN )
- val.bv_val = ch_strdup( SLAPD_SCHEMA_DN );
- val.bv_len = strlen( va.bv_val );
- attr_merge( e, "subschemaSubentry", vals );
- ldap_memfree( val.bv_val );
+ val.bv_val = SLAPD_SCHEMA_DN;
+ val.bv_len = strlen( val.bv_val );
+ attr_merge( e, "namingContexts", vals );
#endif
/* altServer unsupported */
- /* supportedExtension: no extensions supported */
- /* supportedControl: no controls supported */
+ /* supportedControl */
+ for ( i=0; supportedControls[i] != NULL; i++ ) {
+ val.bv_val = supportedControls[i];
+ val.bv_len = strlen( val.bv_val );
+ attr_merge( e, "supportedControl", vals );
+ }
+
+ /* supportedExtension */
+ for ( i=0; supportedExtensions[i] != NULL; i++ ) {
+ val.bv_val = supportedExtensions[i];
+ val.bv_len = strlen( val.bv_val );
+ 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 );
+ val.bv_len = strlen( val.bv_val );
attr_merge( e, "supportedLDAPVersion", vals );
}
-
- send_search_entry( &backends[0], conn, op, e, NULL, 0 );
- send_ldap_search_result( conn, op, LDAP_SUCCESS, NULL, NULL, 1 );
+
+ /* supportedSASLMechanism */
+ for ( i=0; supportedSASLMechanisms[i] != NULL; i++ ) {
+ val.bv_val = supportedSASLMechanisms[i];
+ val.bv_len = strlen( val.bv_val );
+ attr_merge( e, "supportedSASLMechanism", vals );
+ }
+
+ if ( default_referral != NULL ) {
+ attr_merge( e, "ref", default_referral );
+ }
+
+ send_search_entry( &backends[0], conn, op,
+ e, attrs, attrsonly, 1, NULL );
+ send_search_result( conn, op, LDAP_SUCCESS,
+ NULL, NULL, NULL, NULL, 1 );
entry_free( e );
}