]> git.sur5r.net Git - openldap/commitdiff
ITS#5857 always combine frontend and backend: restrict, requires, ssf
authorHoward Chu <hyc@openldap.org>
Wed, 28 Jan 2009 01:45:40 +0000 (01:45 +0000)
committerHoward Chu <hyc@openldap.org>
Wed, 28 Jan 2009 01:45:40 +0000 (01:45 +0000)
servers/slapd/backend.c

index fd11c69c2356ab3e2055a96927a94704e3ad06d8..7e0dbce7d99f9a6648ecc5c486afdb40fd6ea947 100644 (file)
@@ -1005,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 );
@@ -1025,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; i<sizeof(ssfs)/sizeof(slap_ssf_t); i++ ) {
+                       if ( bssf[i] ) fssf[i] = bssf[i];
+               }
        }
 
        switch( op->o_tag ) {