-#if defined( SLAPD_SCHEMA_DN )
-
-static int
-oc_schema_info( Entry *e )
-{
- struct berval val;
- struct berval *vals[2];
- ObjectClass *oc;
-
- vals[0] = &val;
- vals[1] = NULL;
-
- for ( oc = oc_list; oc; oc = oc->soc_next ) {
- val.bv_val = ldap_objectclass2str( &oc->soc_oclass );
- if ( val.bv_val ) {
- val.bv_len = strlen( val.bv_val );
- Debug( LDAP_DEBUG_TRACE, "Merging oc [%d] %s\n",
- val.bv_len, val.bv_val, 0 );
- attr_merge( e, "objectclasses", vals );
- ldap_memfree( val.bv_val );
- } else {
- return -1;
- }
- }
- return 0;
-}
-
-void
-schema_info( Connection *conn, Operation *op, char **attrs, int attrsonly )
-{
- Entry *e;
- struct berval val;
- struct berval *vals[2];
-
- vals[0] = &val;
- vals[1] = NULL;
-
- e = (Entry *) ch_calloc( 1, sizeof(Entry) );
-
- e->e_attrs = NULL;
- e->e_dn = ch_strdup( SLAPD_SCHEMA_DN );
- e->e_ndn = dn_normalize_case( ch_strdup( SLAPD_SCHEMA_DN ));
- e->e_private = NULL;
-
- val.bv_val = ch_strdup( "top" );
- val.bv_len = strlen( val.bv_val );
- attr_merge( e, "objectclass", vals );
- ldap_memfree( val.bv_val );
-
- val.bv_val = ch_strdup( "subschema" );
- val.bv_len = strlen( val.bv_val );
- attr_merge( e, "objectclass", vals );
- ldap_memfree( val.bv_val );
-
- if ( at_schema_info( e ) ) {
- /* Out of memory, do something about it */
- entry_free( e );
- return;
- }
- if ( oc_schema_info( e ) ) {