]> git.sur5r.net Git - openldap/blob - servers/slapd/back-ldbm/id2children.c
Update for Alpha3 from -devel as of OPENLDAP_DEVEL_981116.
[openldap] / servers / slapd / back-ldbm / id2children.c
1 /* id2children.c - routines to deal with the id2children index */
2
3 #include "portable.h"
4
5 #include <stdio.h>
6 #include <ac/string.h>
7
8 #include <ac/socket.h>
9
10 #include "slap.h"
11 #include "back-ldbm.h"
12
13 int
14 id2children_add(
15     Backend     *be,
16     Entry       *p,
17     Entry       *e
18 )
19 {
20         struct dbcache  *db;
21         Datum           key;
22         int             len, rc;
23         IDList          *idl;
24         char            buf[20];
25
26 #ifdef HAVE_BERKELEY_DB2
27         Datum           data;
28         memset( &key, 0, sizeof( key ) );
29         memset( &data, 0, sizeof( data ) );
30 #endif
31
32         Debug( LDAP_DEBUG_TRACE, "=> id2children_add( %lu, %lu )\n",
33                p ? p->e_id : 0, e->e_id, 0 );
34
35         if ( (db = ldbm_cache_open( be, "id2children", LDBM_SUFFIX,
36             LDBM_WRCREAT )) == NULL ) {
37                 Debug( LDAP_DEBUG_ANY,
38                     "<= id2children_add -1 could not open \"id2children%s\"\n",
39                     LDBM_SUFFIX, 0, 0 );
40                 return( -1 );
41         }
42
43         sprintf( buf, "%c%ld", EQ_PREFIX, p ? p->e_id : 0 );
44         key.dptr = buf;
45         key.dsize = strlen( buf ) + 1;
46
47         if ( idl_insert_key( be, db, key, e->e_id ) != 0 ) {
48                 Debug( LDAP_DEBUG_TRACE, "<= id2children_add -1 (idl_insert)\n",
49                     0, 0, 0 );
50                 ldbm_cache_close( be, db );
51                 return( -1 );
52         }
53
54         ldbm_cache_close( be, db );
55
56         Debug( LDAP_DEBUG_TRACE, "<= id2children_add 0\n", 0, 0, 0 );
57         return( 0 );
58 }
59
60
61 int
62 id2children_remove(
63     Backend     *be,
64     Entry       *p,
65     Entry       *e
66 )
67 {
68         struct dbcache  *db;
69         Datum           key;
70         int             len, rc;
71         IDList          *idl;
72         char            buf[20];
73
74         Debug( LDAP_DEBUG_TRACE, "=> id2children_remove( %lu, %lu )\n", p ? p->e_id
75             : 0, e->e_id, 0 );
76
77         if ( (db = ldbm_cache_open( be, "id2children", LDBM_SUFFIX,
78             LDBM_WRCREAT )) == NULL ) {
79                 Debug( LDAP_DEBUG_ANY,
80                     "<= id2children_add -1 could not open \"id2children%s\"\n",
81                     LDBM_SUFFIX, 0, 0 );
82                 return( -1 );
83         }
84
85         memset( &key, 0, sizeof(key) );
86         sprintf( buf, "%c%ld", EQ_PREFIX, p ? p->e_id : 0 );
87         key.dptr = buf;
88         key.dsize = strlen( buf ) + 1;
89
90         if ( idl_delete_key( be, db, key, e->e_id ) != 0 ) {
91                 Debug( LDAP_DEBUG_TRACE, "<= id2children_add -1 (idl_insert)\n",
92                     0, 0, 0 );
93                 ldbm_cache_close( be, db );
94                 return( -1 );
95         }
96
97         ldbm_cache_close( be, db );
98
99         Debug( LDAP_DEBUG_TRACE, "<= id2children_add 0\n", 0, 0, 0 );
100         return( 0 );
101 }
102
103 int
104 has_children(
105     Backend     *be,
106     Entry       *p
107 )
108 {
109         struct dbcache  *db;
110         Datum           key;
111         int             rc;
112         IDList          *idl;
113         char            buf[20];
114
115 #ifdef HAVE_BERKELEY_DB2
116         memset( &key, 0, sizeof( key ) );
117 #endif
118
119         Debug( LDAP_DEBUG_TRACE, "=> has_children( %lu )\n", p->e_id , 0, 0 );
120
121         if ( (db = ldbm_cache_open( be, "id2children", LDBM_SUFFIX,
122             LDBM_WRCREAT )) == NULL ) {
123                 Debug( LDAP_DEBUG_ANY,
124                     "<= has_children -1 could not open \"id2children%s\"\n",
125                     LDBM_SUFFIX, 0, 0 );
126                 return( 0 );
127         }
128
129         sprintf( buf, "%c%ld", EQ_PREFIX, p->e_id );
130         key.dptr = buf;
131         key.dsize = strlen( buf ) + 1;
132
133         idl = idl_fetch( be, db, key );
134
135         ldbm_cache_close( be, db );
136         rc = idl ? 1 : 0;
137         idl_free( idl );
138
139         Debug( LDAP_DEBUG_TRACE, "<= has_children %d\n", rc, 0, 0 );
140         return( rc );
141 }