X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fbackend.c;h=7e0dbce7d99f9a6648ecc5c486afdb40fd6ea947;hb=e841247c9086053d774d66e4fbb058d0ead706b2;hp=df66dd0f0992f9e23b7fee5cce8c272a64ba9cb1;hpb=753a6d00083061920741a29f8fa37de19c9b5fdf;p=openldap
diff --git a/servers/slapd/backend.c b/servers/slapd/backend.c
index df66dd0f09..7e0dbce7d9 100644
--- a/servers/slapd/backend.c
+++ b/servers/slapd/backend.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software .
*
- * Copyright 1998-2008 The OpenLDAP Foundation.
+ * Copyright 1998-2009 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -612,6 +612,9 @@ backend_db_init(
nbackends--;
}
} else {
+ if ( !bi->bi_nDB ) {
+ backend_init_controls( bi );
+ }
bi->bi_nDB++;
}
return( be );
@@ -1002,13 +1005,19 @@ backend_check_restrictions(
slap_mask_t requires;
slap_mask_t opflag;
slap_mask_t exopflag = 0;
- slap_ssf_set_t *ssf;
+ slap_ssf_set_t ssfs, *ssf;
int updateop = 0;
int starttls = 0;
int session = 0;
+ restrictops = frontendDB->be_restrictops;
+ requires = frontendDB->be_requires;
+ ssfs = frontendDB->be_ssf_set;
+ ssf = &ssfs;
+
if ( op->o_bd ) {
- int rc = SLAP_CB_CONTINUE;
+ slap_ssf_t *fssf, *bssf;
+ int rc = SLAP_CB_CONTINUE, i;
if ( op->o_bd->be_chk_controls ) {
rc = ( *op->o_bd->be_chk_controls )( op, rs );
@@ -1022,14 +1031,13 @@ backend_check_restrictions(
return rs->sr_err;
}
- restrictops = op->o_bd->be_restrictops;
- requires = op->o_bd->be_requires;
- ssf = &op->o_bd->be_ssf_set;
-
- } else {
- restrictops = frontendDB->be_restrictops;
- requires = frontendDB->be_requires;
- ssf = &frontendDB->be_ssf_set;
+ restrictops |= op->o_bd->be_restrictops;
+ requires |= op->o_bd->be_requires;
+ bssf = &op->o_bd->be_ssf_set.sss_ssf;
+ fssf = &ssfs.sss_ssf;
+ for ( i=0; io_tag ) {