1 /* frontend.c - routines for dealing with frontend */
2 /* $OpenLDAP: pkg/ldap/servers/slapd/frontend.c,v 1.19.2.6 2008/04/24 08:13:39 hyc Exp $ */
3 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
5 * Copyright 1998-2008 The OpenLDAP Foundation.
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted only as authorized by the OpenLDAP
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 /* Portions Copyright (c) 1995 Regents of the University of Michigan.
17 * All rights reserved.
19 * Redistribution and use in source and binary forms are permitted
20 * provided that this notice is preserved and that due credit is given
21 * to the University of Michigan at Ann Arbor. The name of the University
22 * may not be used to endorse or promote products derived from this
23 * software without specific prior written permission. This software
24 * is provided ``as is'' without express or implied warranty.
32 #include <ac/string.h>
33 #include <ac/socket.h>
42 static BackendInfo slap_frontendInfo
;
43 static BackendDB slap_frontendDB
;
44 BackendDB
*frontendDB
;
51 AttributeDescription
*at
,
56 int rc
= LDAP_NO_SUCH_OBJECT
;
59 op
->o_bd
= select_backend( ndn
, 0 );
60 if ( op
->o_bd
!= NULL
) {
61 if ( op
->o_bd
->be_fetch
) {
62 rc
= op
->o_bd
->be_fetch( op
, ndn
, oc
, at
, rw
, e
);
77 int rc
= LDAP_NO_SUCH_OBJECT
;
80 op
->o_bd
= select_backend( &e
->e_nname
, 0 );
81 if ( op
->o_bd
!= NULL
) {
82 if ( op
->o_bd
->be_release
) {
83 rc
= op
->o_bd
->be_release( op
, e
, rw
);
95 frontendDB
= &slap_frontendDB
;
96 frontendDB
->bd_self
= frontendDB
;
99 frontendDB
->be_dfltaccess
= ACL_READ
;
102 frontendDB
->be_def_limit
.lms_t_soft
= SLAPD_DEFAULT_TIMELIMIT
; /* backward compatible limits */
103 frontendDB
->be_def_limit
.lms_t_hard
= 0;
104 frontendDB
->be_def_limit
.lms_s_soft
= SLAPD_DEFAULT_SIZELIMIT
; /* backward compatible limits */
105 frontendDB
->be_def_limit
.lms_s_hard
= 0;
106 frontendDB
->be_def_limit
.lms_s_unchecked
= -1; /* no limit on unchecked size */
107 frontendDB
->be_def_limit
.lms_s_pr
= 0; /* page limit */
108 frontendDB
->be_def_limit
.lms_s_pr_hide
= 0; /* don't hide number of entries left */
109 frontendDB
->be_def_limit
.lms_s_pr_total
= 0; /* number of total entries returned by pagedResults equal to hard limit */
112 /* FIXME: do we need this? */
113 frontendDB
->be_pcl_mutexp
= &frontendDB
->be_pcl_mutex
;
114 ldap_pvt_thread_mutex_init( frontendDB
->be_pcl_mutexp
);
118 frontendDB
->be_suffix
= ch_calloc( 2, sizeof( struct berval
) );
119 ber_str2bv( "", 0, 1, &frontendDB
->be_suffix
[0] );
120 BER_BVZERO( &frontendDB
->be_suffix
[1] );
121 frontendDB
->be_nsuffix
= ch_calloc( 2, sizeof( struct berval
) );
122 ber_str2bv( "", 0, 1, &frontendDB
->be_nsuffix
[0] );
123 BER_BVZERO( &frontendDB
->be_nsuffix
[1] );
126 frontendDB
->bd_info
= &slap_frontendInfo
;
128 SLAP_BFLAGS(frontendDB
) |= SLAP_BFLAG_FRONTEND
;
131 frontendDB
->bd_info
->bi_type
= "frontend";
134 if ( slap_known_controls
) {
137 frontendDB
->bd_info
->bi_controls
= slap_known_controls
;
139 for ( i
= 0; slap_known_controls
[ i
]; i
++ ) {
142 if ( slap_find_control_id( slap_known_controls
[ i
], &cid
)
143 == LDAP_CONTROL_NOT_FOUND
)
149 frontendDB
->bd_info
->bi_ctrls
[ cid
] = 1;
150 frontendDB
->be_ctrls
[ cid
] = 1;
155 frontendDB
->bd_info
->bi_op_abandon
= fe_op_abandon
;
156 frontendDB
->bd_info
->bi_op_add
= fe_op_add
;
157 frontendDB
->bd_info
->bi_op_bind
= fe_op_bind
;
158 frontendDB
->bd_info
->bi_op_compare
= fe_op_compare
;
159 frontendDB
->bd_info
->bi_op_delete
= fe_op_delete
;
160 frontendDB
->bd_info
->bi_op_modify
= fe_op_modify
;
161 frontendDB
->bd_info
->bi_op_modrdn
= fe_op_modrdn
;
162 frontendDB
->bd_info
->bi_op_search
= fe_op_search
;
163 frontendDB
->bd_info
->bi_extended
= fe_extended
;
164 frontendDB
->bd_info
->bi_operational
= fe_aux_operational
;
165 frontendDB
->bd_info
->bi_entry_get_rw
= fe_entry_get_rw
;
166 frontendDB
->bd_info
->bi_entry_release_rw
= fe_entry_release_rw
;
167 frontendDB
->bd_info
->bi_access_allowed
= fe_access_allowed
;
168 frontendDB
->bd_info
->bi_acl_group
= fe_acl_group
;
169 frontendDB
->bd_info
->bi_acl_attribute
= fe_acl_attribute
;
172 /* FIXME: is this too early? */
173 return backend_startup_one( frontendDB
);