]> git.sur5r.net Git - openldap/blob - servers/slapd/schema.c
Eliminate second session protocol version field.
[openldap] / servers / slapd / schema.c
1 /* schema.c - routines to manage schema definitions */
2 /* $OpenLDAP$ */
3 /*
4  * Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
5  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
6  */
7
8 #include "portable.h"
9
10 #include <stdio.h>
11
12 #include <ac/ctype.h>
13 #include <ac/string.h>
14 #include <ac/socket.h>
15
16 #include "slap.h"
17 #include "ldap_pvt.h"
18
19
20 #if defined( SLAPD_SCHEMA_DN )
21
22 void
23 schema_info( Connection *conn, Operation *op, char **attrs, int attrsonly )
24 {
25         Entry           *e;
26         struct berval   val;
27         struct berval   *vals[2];
28
29         vals[0] = &val;
30         vals[1] = NULL;
31
32         e = (Entry *) ch_calloc( 1, sizeof(Entry) );
33
34         e->e_attrs = NULL;
35         e->e_dn = ch_strdup( SLAPD_SCHEMA_DN );
36         e->e_ndn = ch_strdup( SLAPD_SCHEMA_DN );
37         (void) dn_normalize( e->e_ndn );
38         e->e_private = NULL;
39
40         {
41                 char *rdn = ch_strdup( SLAPD_SCHEMA_DN );
42                 val.bv_val = strchr( rdn, '=' );
43
44                 if( val.bv_val != NULL ) {
45                         *val.bv_val = '\0';
46                         val.bv_len = strlen( ++val.bv_val );
47
48                         attr_merge( e, rdn, vals );
49                 }
50
51                 free( rdn );
52         }
53
54         if ( syn_schema_info( e ) 
55                 || mr_schema_info( e )
56                 || at_schema_info( e )
57                 || oc_schema_info( e ) )
58         {
59                 /* Out of memory, do something about it */
60                 entry_free( e );
61                 send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR,
62                         NULL, NULL, NULL, NULL );
63                 return;
64         }
65         
66         val.bv_val = "top";
67         val.bv_len = sizeof("top")-1;
68         attr_merge( e, "objectClass", vals );
69
70         val.bv_val = "LDAPsubentry";
71         val.bv_len = sizeof("LDAPsubentry")-1;
72         attr_merge( e, "objectClass", vals );
73
74         val.bv_val = "subschema";
75         val.bv_len = sizeof("subschema")-1;
76         attr_merge( e, "objectClass", vals );
77
78         val.bv_val = "extensibleObject";
79         val.bv_len = sizeof("extensibleObject")-1;
80         attr_merge( e, "objectClass", vals );
81
82         send_search_entry( &backends[0], conn, op,
83                 e, attrs, attrsonly, NULL );
84         send_search_result( conn, op, LDAP_SUCCESS,
85                 NULL, NULL, NULL, NULL, 1 );
86
87         entry_free( e );
88 }
89 #endif
90