Patrick Welche <prlw1@cam.ac.uk>
[netbsd-mini2440.git] / external / bsd / openldap / dist / servers / slapd / back-null / null.c
blob260fc7768fc6d2821b82f1c5e1f4448572bf8321
1 /* null.c - the null backend */
2 /* $OpenLDAP: pkg/ldap/servers/slapd/back-null/null.c,v 1.18.2.5 2008/02/12 00:58:15 quanah Exp $ */
3 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
5 * Copyright 2002-2008 The OpenLDAP Foundation.
6 * All rights reserved.
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted only as authorized by the OpenLDAP
10 * Public License.
12 * A copy of this license is available in the file LICENSE in the
13 * top-level directory of the distribution or, alternatively, at
14 * <http://www.OpenLDAP.org/license.html>.
16 /* ACKNOWLEDGEMENTS:
17 * This work was originally developed by Hallvard Furuseth for inclusion
18 * in OpenLDAP Software.
21 #include "portable.h"
23 #include <stdio.h>
24 #include <ac/string.h>
26 #include "slap.h"
27 #include "config.h"
29 struct null_info {
30 int ni_bind_allowed;
31 ID ni_nextid;
35 /* LDAP operations */
37 static int
38 null_back_bind( Operation *op, SlapReply *rs )
40 struct null_info *ni = (struct null_info *) op->o_bd->be_private;
42 if ( ni->ni_bind_allowed || be_isroot_pw( op ) ) {
43 /* front end will send result on success (0) */
44 return LDAP_SUCCESS;
47 rs->sr_err = LDAP_INVALID_CREDENTIALS;
48 send_ldap_result( op, rs );
50 return rs->sr_err;
53 /* add, delete, modify, modrdn, search */
54 static int
55 null_back_success( Operation *op, SlapReply *rs )
57 rs->sr_err = LDAP_SUCCESS;
58 send_ldap_result( op, rs );
59 return 0;
62 /* compare */
63 static int
64 null_back_false( Operation *op, SlapReply *rs )
66 rs->sr_err = LDAP_COMPARE_FALSE;
67 send_ldap_result( op, rs );
68 return 0;
72 /* for overlays */
73 static int
74 null_back_entry_get(
75 Operation *op,
76 struct berval *ndn,
77 ObjectClass *oc,
78 AttributeDescription *at,
79 int rw,
80 Entry **ent )
82 assert( *ent == NULL );
84 /* don't admit the object isn't there */
85 return oc || at ? LDAP_NO_SUCH_ATTRIBUTE : LDAP_BUSY;
89 /* Slap tools */
91 static int
92 null_tool_entry_open( BackendDB *be, int mode )
94 return 0;
97 static int
98 null_tool_entry_close( BackendDB *be )
100 assert( be != NULL );
101 return 0;
104 static ID
105 null_tool_entry_next( BackendDB *be )
107 return NOID;
110 static Entry *
111 null_tool_entry_get( BackendDB *be, ID id )
113 assert( slapMode & SLAP_TOOL_MODE );
114 return NULL;
117 static ID
118 null_tool_entry_put( BackendDB *be, Entry *e, struct berval *text )
120 assert( slapMode & SLAP_TOOL_MODE );
121 assert( text != NULL );
122 assert( text->bv_val != NULL );
123 assert( text->bv_val[0] == '\0' ); /* overconservative? */
125 e->e_id = ((struct null_info *) be->be_private)->ni_nextid++;
126 return e->e_id;
130 /* Setup */
132 static int
133 null_back_db_config(
134 BackendDB *be,
135 const char *fname,
136 int lineno,
137 int argc,
138 char **argv )
140 struct null_info *ni = (struct null_info *) be->be_private;
142 if ( ni == NULL ) {
143 fprintf( stderr, "%s: line %d: null database info is null!\n",
144 fname, lineno );
145 return 1;
148 /* bind requests allowed */
149 if ( strcasecmp( argv[0], "bind" ) == 0 ) {
150 if ( argc < 2 ) {
151 fprintf( stderr,
152 "%s: line %d: missing <on/off> in \"bind <on/off>\" line\n",
153 fname, lineno );
154 return 1;
156 ni->ni_bind_allowed = strcasecmp( argv[1], "off" );
158 /* anything else */
159 } else {
160 return SLAP_CONF_UNKNOWN;
163 return 0;
166 static int
167 null_back_db_init( BackendDB *be, ConfigReply *cr )
169 struct null_info *ni = ch_calloc( 1, sizeof(struct null_info) );
170 ni->ni_bind_allowed = 0;
171 ni->ni_nextid = 1;
172 be->be_private = ni;
173 return 0;
176 static int
177 null_back_db_destroy( Backend *be, ConfigReply *cr )
179 free( be->be_private );
180 return 0;
185 null_back_initialize( BackendInfo *bi )
187 bi->bi_open = 0;
188 bi->bi_close = 0;
189 bi->bi_config = 0;
190 bi->bi_destroy = 0;
192 bi->bi_db_init = null_back_db_init;
193 bi->bi_db_config = null_back_db_config;
194 bi->bi_db_open = 0;
195 bi->bi_db_close = 0;
196 bi->bi_db_destroy = null_back_db_destroy;
198 bi->bi_op_bind = null_back_bind;
199 bi->bi_op_unbind = 0;
200 bi->bi_op_search = null_back_success;
201 bi->bi_op_compare = null_back_false;
202 bi->bi_op_modify = null_back_success;
203 bi->bi_op_modrdn = null_back_success;
204 bi->bi_op_add = null_back_success;
205 bi->bi_op_delete = null_back_success;
206 bi->bi_op_abandon = 0;
208 bi->bi_extended = 0;
210 bi->bi_chk_referrals = 0;
212 bi->bi_connection_init = 0;
213 bi->bi_connection_destroy = 0;
215 bi->bi_entry_get_rw = null_back_entry_get;
217 bi->bi_tool_entry_open = null_tool_entry_open;
218 bi->bi_tool_entry_close = null_tool_entry_close;
219 bi->bi_tool_entry_first = null_tool_entry_next;
220 bi->bi_tool_entry_next = null_tool_entry_next;
221 bi->bi_tool_entry_get = null_tool_entry_get;
222 bi->bi_tool_entry_put = null_tool_entry_put;
224 return 0;
227 #if SLAPD_NULL == SLAPD_MOD_DYNAMIC
229 /* conditionally define the init_module() function */
230 SLAP_BACKEND_INIT_MODULE( null )
232 #endif /* SLAPD_NULL == SLAPD_MOD_DYNAMIC */