]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/root_dse.c
Per ITS#419, don't require SLAPD_RLOOKUPS when HAVE_TCPD
[openldap] / servers / slapd / root_dse.c
index 25d5f7ddbfdd9ba9bf1353bc52d7f2960ddfa29e..5d688c936dbb0fb9ed022b8e2bc82d28521c7bc5 100644 (file)
@@ -1,3 +1,4 @@
+/* $OpenLDAP$ */
 /* root_dse.c - Provides the ROOT DSA-Specific Entry
  *
  * Copyright 1999 The OpenLDAP Foundation.
@@ -12,8 +13,8 @@
 #include "portable.h"
 
 #include <stdio.h>
+#include <ac/string.h>
 
-#include "ldap_defaults.h"
 #include "slap.h"
 
 void
@@ -32,7 +33,8 @@ root_dse_info( Connection *conn, Operation *op, char **attrs, int attrsonly )
 
        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( e->e_ndn );
        e->e_private = NULL;
 
        for ( i = 0; i < nbackends; i++ ) {
@@ -72,8 +74,7 @@ root_dse_info( Connection *conn, Operation *op, char **attrs, int attrsonly )
        }
 
        /* supportedExtension */
-       for ( i=0; supportedExtensions[i] != NULL; i++ ) {
-               val.bv_val = supportedExtensions[i];
+       for ( i=0; (val.bv_val = get_supported_extop(i)) != NULL; i++ ) {
                val.bv_len = strlen( val.bv_val );
                attr_merge( e, "supportedExtension", vals );
        }
@@ -87,18 +88,40 @@ root_dse_info( Connection *conn, Operation *op, char **attrs, int attrsonly )
        }
 
        /* supportedSASLMechanism */
-       for ( i=0; supportedSASLMechanisms[i] != NULL; i++ ) {
-               val.bv_val = supportedSASLMechanisms[i];
+       if( supportedSASLMechanisms != NULL ) {
+               for ( i=0; supportedSASLMechanisms[i] != NULL; i++ ) {
+                       val.bv_val = supportedSASLMechanisms[i];
+                       val.bv_len = strlen( val.bv_val );
+                       attr_merge( e, "supportedSASLMechanisms", vals );
+               }
+       }
+
+#ifdef SLAPD_ACI_ENABLED
+       /* supportedACIMechanisms */
+       for ( i=0; (val.bv_val = get_supported_acimech(i)) != NULL; i++ ) {
                val.bv_len = strlen( val.bv_val );
-               attr_merge( e, "supportedSASLMechanism", vals );
+               attr_merge( e, "supportedACIMechanisms", vals );
        }
+#endif
 
        if ( default_referral != NULL ) {
                attr_merge( e, "ref", default_referral );
        }
 
+       val.bv_val = "top";
+       val.bv_len = sizeof("top")-1;
+       attr_merge( e, "objectClass", vals );
+
+       val.bv_val = "LDAProotDSE";
+       val.bv_len = sizeof("LDAProotDSE")-1;
+       attr_merge( e, "objectClass", vals );
+
+       val.bv_val = "extensibleObject";
+       val.bv_len = sizeof("extensibleObject")-1;
+       attr_merge( e, "objectClass", vals );
+
        send_search_entry( &backends[0], conn, op,
-               e, attrs, attrsonly, 1, NULL );
+               e, attrs, attrsonly, NULL );
        send_search_result( conn, op, LDAP_SUCCESS,
                NULL, NULL, NULL, NULL, 1 );