]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/root_dse.c
move req2op selection into a helper
[openldap] / servers / slapd / root_dse.c
index 356cbc78a68182b7c59ac41ae7c6bc2bcf4ca2fd..db2d83172a5fd0cd13139ebbbe738a501e784a04 100644 (file)
@@ -35,7 +35,7 @@ static struct berval  builtin_supportedFeatures[] = {
        BER_BVC(LDAP_FEATURE_ABSOLUTE_FILTERS),         /* (&) and (|) search filters */
        BER_BVC(LDAP_FEATURE_LANGUAGE_TAG_OPTIONS),     /* Language Tag Options */
        BER_BVC(LDAP_FEATURE_LANGUAGE_RANGE_OPTIONS),   /* Language Range Options */
-#ifdef LDAP_FEATURE_SUBORDINATE_SCOPE
+#ifdef LDAP_DEVEL
        BER_BVC(LDAP_FEATURE_SUBORDINATE_SCOPE),        /* "children" search scope */
 #endif
        BER_BVNULL
@@ -213,10 +213,10 @@ root_dse_info(
        AttributeDescription *ad_ref
                = slap_schema.si_ad_ref;
 
-       e = (Entry *) SLAP_CALLOC( 1, sizeof(Entry) );
+       e = entry_alloc();
        if( e == NULL ) {
                Debug( LDAP_DEBUG_ANY,
-                       "root_dse_info: SLAP_CALLOC failed", 0, 0, 0 );
+                       "root_dse_info: entry_alloc failed", 0, 0, 0 );
                return LDAP_OTHER;
        }
 
@@ -235,15 +235,17 @@ root_dse_info(
        /* FIXME: is this really needed? */
        BER_BVSTR( &val, "top" );
        if( attr_merge_one( e, ad_objectClass, &val, NULL ) ) {
+fail:
+               entry_free( e );
                return LDAP_OTHER;
        }
 
        BER_BVSTR( &val, "OpenLDAProotDSE" );
        if( attr_merge_one( e, ad_objectClass, &val, NULL ) ) {
-               return LDAP_OTHER;
+               goto fail;
        }
        if( attr_merge_one( e, ad_structuralObjectClass, &val, NULL ) ) {
-               return LDAP_OTHER;
+               goto fail;
        }
 
        LDAP_STAILQ_FOREACH( be, &backendDB, be_next ) {
@@ -257,7 +259,7 @@ root_dse_info(
                                        &be->be_suffix[0],
                                        &be->be_nsuffix[0] ) )
                        {
-                               return LDAP_OTHER;
+                               goto fail;
                        }
                        continue;
                }
@@ -266,7 +268,7 @@ root_dse_info(
                                        &be->be_suffix[0],
                                        & be->be_nsuffix[0] ) )
                        {
-                               return LDAP_OTHER;
+                               goto fail;
                        }
                        continue;
                }
@@ -278,7 +280,7 @@ root_dse_info(
                                        &be->be_suffix[j],
                                        &be->be_nsuffix[0] ) )
                        {
-                               return LDAP_OTHER;
+                               goto fail;
                        }
                }
        }
@@ -287,19 +289,19 @@ root_dse_info(
 
        /* supportedControl */
        if ( controls_root_dse_info( e ) != 0 ) {
-               return LDAP_OTHER;
+               goto fail;
        }
 
        /* supportedExtension */
        if ( exop_root_dse_info( e ) != 0 ) {
-               return LDAP_OTHER;
+               goto fail;
        }
 
 #ifdef LDAP_SLAPI
        /* netscape supportedExtension */
        for ( i = 0; (bv = slapi_int_get_supported_extop(i)) != NULL; i++ ) {
                if( attr_merge_one( e, ad_supportedExtension, bv, NULL ) ) {
-                       return LDAP_OTHER;
+                       goto fail;
                }
        }
 #endif /* LDAP_SLAPI */
@@ -310,7 +312,7 @@ root_dse_info(
        }
 
        if( attr_merge( e, ad_supportedFeatures, supportedFeatures, NULL ) ) {
-               return LDAP_OTHER;
+               goto fail;
        }
 
        /* supportedLDAPVersion */
@@ -320,12 +322,12 @@ root_dse_info(
                 * clients.
                 */
        for ( i=LDAP_VERSION3; i<=LDAP_VERSION_MAX; i++ ) {
-               char buf[BUFSIZ];
+               char buf[sizeof("255")];
                snprintf(buf, sizeof buf, "%d", i);
                val.bv_val = buf;
                val.bv_len = strlen( val.bv_val );
                if( attr_merge_one( e, ad_supportedLDAPVersion, &val, NULL ) ) {
-                       return LDAP_OTHER;
+                       goto fail;
                }
        }
 
@@ -337,7 +339,8 @@ root_dse_info(
                        val.bv_val = supportedSASLMechanisms[i];
                        val.bv_len = strlen( val.bv_val );
                        if( attr_merge_one( e, ad_supportedSASLMechanisms, &val, NULL ) ) {
-                               return LDAP_OTHER;
+                               ldap_charray_free( supportedSASLMechanisms );
+                               goto fail;
                        }
                }
                ldap_charray_free( supportedSASLMechanisms );
@@ -345,7 +348,7 @@ root_dse_info(
 
        if ( default_referral != NULL ) {
                if( attr_merge( e, ad_ref, default_referral, NULL /* FIXME */ ) ) {
-                       return LDAP_OTHER;
+                       goto fail;
                }
        }
 
@@ -355,7 +358,7 @@ root_dse_info(
                        if( attr_merge( e, a->a_desc, a->a_vals,
                                (a->a_nvals == a->a_vals) ? NULL : a->a_nvals ) )
                        {
-                               return LDAP_OTHER;
+                               goto fail;
                        }
                }
        }
@@ -392,10 +395,10 @@ int read_root_dse_file( const char *fname )
                return EXIT_FAILURE;
        }
 
-       usr_attr = (Entry *) SLAP_CALLOC( 1, sizeof(Entry) );
+       usr_attr = entry_alloc();
        if( usr_attr == NULL ) {
                Debug( LDAP_DEBUG_ANY,
-                       "read_root_dse_file: SLAP_CALLOC failed", 0, 0, 0 );
+                       "read_root_dse_file: entry_alloc failed", 0, 0, 0 );
                ldif_close( fp );
                return LDAP_OTHER;
        }