From 6ae5ce5b664b3003378ee95c75fd1294b9f028ee Mon Sep 17 00:00:00 2001 From: Luke Howard Date: Fri, 22 Jul 2005 03:44:04 +0000 Subject: [PATCH] Cleaner version of previous patch (keep operational attr code in backend.c) --- servers/slapd/backend.c | 49 ++++++++++++++++++++++++++++++++++++++ servers/slapd/backover.c | 2 +- servers/slapd/frontend.c | 49 -------------------------------------- servers/slapd/proto-slap.h | 1 + 4 files changed, 51 insertions(+), 50 deletions(-) diff --git a/servers/slapd/backend.c b/servers/slapd/backend.c index 0fded3e421..a12bc48fed 100644 --- a/servers/slapd/backend.c +++ b/servers/slapd/backend.c @@ -1558,6 +1558,55 @@ freeit: if ( e != target ) { return rc; } +int +fe_aux_operational( + Operation *op, + SlapReply *rs ) +{ + Attribute **ap; + int rc = 0; + BackendDB *be_orig; + + for ( ap = &rs->sr_operational_attrs; *ap; ap = &(*ap)->a_next ) + /* just count them */ ; + + /* + * If operational attributes (allegedly) are required, + * and the backend supports specific operational attributes, + * add them to the attribute list + */ + if ( SLAP_OPATTRS( rs->sr_attr_flags ) || ( rs->sr_attrs && + ad_inlist( slap_schema.si_ad_entryDN, rs->sr_attrs ) ) ) + { + *ap = slap_operational_entryDN( rs->sr_entry ); + ap = &(*ap)->a_next; + } + + if ( SLAP_OPATTRS( rs->sr_attr_flags ) || ( rs->sr_attrs && + ad_inlist( slap_schema.si_ad_subschemaSubentry, rs->sr_attrs ) ) ) + { + *ap = slap_operational_subschemaSubentry( op->o_bd ); + ap = &(*ap)->a_next; + } + + if ( op->o_bd != NULL ) + { + /* Let the overlays have a chance at this */ + be_orig = op->o_bd; + if ( SLAP_ISOVERLAY( be_orig ) ) + op->o_bd = select_backend( be_orig->be_nsuffix, 0, 0 ); + + if ( ( SLAP_OPATTRS( rs->sr_attr_flags ) || rs->sr_attrs ) && + op->o_bd && op->o_bd->be_operational != NULL ) + { + rc = op->o_bd->be_operational( op, rs ); + } + op->o_bd = be_orig; + } + + return rc; +} + int backend_operational( Operation *op, SlapReply *rs ) { int rc; diff --git a/servers/slapd/backover.c b/servers/slapd/backover.c index f7167bfc51..b3c06b04f4 100644 --- a/servers/slapd/backover.c +++ b/servers/slapd/backover.c @@ -912,7 +912,7 @@ overlay_config( BackendDB *be, const char *ov ) bi->bi_chk_controls = over_aux_chk_controls; #ifdef SLAP_OVERLAY_ACCESS - /* this has a specific arglist */ + /* these have specific arglists */ bi->bi_access_allowed = over_access_allowed; bi->bi_acl_group = over_acl_group; bi->bi_acl_attribute = over_acl_attribute; diff --git a/servers/slapd/frontend.c b/servers/slapd/frontend.c index 1ae0233f2d..d97e050889 100644 --- a/servers/slapd/frontend.c +++ b/servers/slapd/frontend.c @@ -42,55 +42,6 @@ static BackendInfo slap_frontendInfo; static BackendDB slap_frontendDB; BackendDB *frontendDB; -static int -fe_aux_operational( - Operation *op, - SlapReply *rs ) -{ - Attribute **ap; - int rc = 0; - BackendDB *be_orig; - - for ( ap = &rs->sr_operational_attrs; *ap; ap = &(*ap)->a_next ) - /* just count them */ ; - - /* - * If operational attributes (allegedly) are required, - * and the backend supports specific operational attributes, - * add them to the attribute list - */ - if ( SLAP_OPATTRS( rs->sr_attr_flags ) || ( rs->sr_attrs && - ad_inlist( slap_schema.si_ad_entryDN, rs->sr_attrs ) ) ) - { - *ap = slap_operational_entryDN( rs->sr_entry ); - ap = &(*ap)->a_next; - } - - if ( SLAP_OPATTRS( rs->sr_attr_flags ) || ( rs->sr_attrs && - ad_inlist( slap_schema.si_ad_subschemaSubentry, rs->sr_attrs ) ) ) - { - *ap = slap_operational_subschemaSubentry( op->o_bd ); - ap = &(*ap)->a_next; - } - - if ( op->o_bd != NULL ) - { - /* Let the overlays have a chance at this */ - be_orig = op->o_bd; - if ( SLAP_ISOVERLAY( be_orig ) ) - op->o_bd = select_backend( be_orig->be_nsuffix, 0, 0 ); - - if ( ( SLAP_OPATTRS( rs->sr_attr_flags ) || rs->sr_attrs ) && - op->o_bd && op->o_bd->be_operational != NULL ) - { - rc = op->o_bd->be_operational( op, rs ); - } - op->o_bd = be_orig; - } - - return rc; -} - int frontend_init( void ) { diff --git a/servers/slapd/proto-slap.h b/servers/slapd/proto-slap.h index 39b4cef113..04b46116d2 100644 --- a/servers/slapd/proto-slap.h +++ b/servers/slapd/proto-slap.h @@ -1634,6 +1634,7 @@ LDAP_SLAPD_F (int) fe_op_delete LDAP_P((Operation *op, SlapReply *rs)); LDAP_SLAPD_F (int) fe_op_modify LDAP_P((Operation *op, SlapReply *rs)); LDAP_SLAPD_F (int) fe_op_modrdn LDAP_P((Operation *op, SlapReply *rs)); LDAP_SLAPD_F (int) fe_op_search LDAP_P((Operation *op, SlapReply *rs)); +LDAP_SLAPD_F (int) fe_aux_operational LDAP_P((Operation *op, SlapReply *rs)); #if 0 LDAP_SLAPD_F (int) fe_op_unbind LDAP_P((Operation *op, SlapReply *rs)); #endif -- 2.39.5