From 8ed197799c282c5edd5523fb5fc4c4b8301d46fd Mon Sep 17 00:00:00 2001 From: Pierangelo Masarati Date: Wed, 15 Apr 2009 10:46:11 +0000 Subject: [PATCH] fix ITS#6057 --- servers/slapd/overlays/rwm.c | 32 ++++++++++++++++++++++++++++++-- servers/slapd/overlays/rwm.h | 1 + 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/servers/slapd/overlays/rwm.c b/servers/slapd/overlays/rwm.c index e10ee7fa13..de8da75f3e 100644 --- a/servers/slapd/overlays/rwm.c +++ b/servers/slapd/overlays/rwm.c @@ -1197,7 +1197,8 @@ rwm_attrs( Operation *op, SlapReply *rs, Attribute** a_first, int stripEntryDN ) int last = -1; Attribute *a; - if ( op->ors_attrs != NULL && + if ( ( rwmap->rwm_flags & RWM_F_DROP_UNREQUESTED_ATTRS ) && + op->ors_attrs != NULL && !SLAP_USERATTRS( rs->sr_attr_flags ) && !ad_inlist( (*ap)->a_desc, op->ors_attrs ) ) { @@ -1829,6 +1830,7 @@ enum { RWM_CF_MAP, RWM_CF_T_F_SUPPORT, RWM_CF_NORMALIZE_MAPPED, + RWM_CF_DROP_UNREQUESTED, RWM_CF_LAST }; @@ -1883,6 +1885,14 @@ static ConfigTable rwmcfg[] = { "SINGLE-VALUE )", NULL, NULL }, + { "rwm-drop-unrequested-attrs", "true|false", + 2, 2, 0, ARG_MAGIC|ARG_ON_OFF|RWM_CF_DROP_UNREQUESTED, rwm_cf_gen, + "( OLcfgOvAt:16.5 NAME 'olcRwmDropUnrequested' " + "DESC 'Drop unrequested attributes' " + "SYNTAX OMsBoolean " + "SINGLE-VALUE )", + NULL, NULL }, + { NULL, NULL, 0, 0, 0, ARG_IGNORED } }; @@ -2051,6 +2061,10 @@ rwm_cf_gen( ConfigArgs *c ) c->value_int = ( rwmap->rwm_flags & RWM_F_NORMALIZE_MAPPED_ATTRS ); break; + case RWM_CF_DROP_UNREQUESTED: + c->value_int = ( rwmap->rwm_flags & RWM_F_DROP_UNREQUESTED_ATTRS ); + break; + default: assert( 0 ); rc = 1; @@ -2145,6 +2159,10 @@ rwm_cf_gen( ConfigArgs *c ) rwmap->rwm_flags &= ~RWM_F_NORMALIZE_MAPPED_ATTRS; break; + case RWM_CF_DROP_UNREQUESTED: + rwmap->rwm_flags &= ~RWM_F_DROP_UNREQUESTED_ATTRS; + break; + default: return 1; } @@ -2325,6 +2343,14 @@ rwm_cf_gen( ConfigArgs *c ) } break; + case RWM_CF_DROP_UNREQUESTED: + if ( c->value_int ) { + rwmap->rwm_flags |= RWM_F_DROP_UNREQUESTED_ATTRS; + } else { + rwmap->rwm_flags &= ~RWM_F_DROP_UNREQUESTED_ATTRS; + } + break; + default: assert( 0 ); return 1; @@ -2344,9 +2370,11 @@ rwm_db_init( rwmap = (struct ldaprwmap *)ch_calloc( 1, sizeof( struct ldaprwmap ) ); + /* default */ + rwmap->rwm_flags = RWM_F_DROP_UNREQUESTED_ATTRS; + rc = rwm_info_init( &rwmap->rwm_rw ); -error_return:; on->on_bi.bi_private = (void *)rwmap; if ( rc ) { diff --git a/servers/slapd/overlays/rwm.h b/servers/slapd/overlays/rwm.h index a46c3caa9f..849822d62c 100644 --- a/servers/slapd/overlays/rwm.h +++ b/servers/slapd/overlays/rwm.h @@ -81,6 +81,7 @@ struct ldaprwmap { #define RWM_F_NONE (0x0000U) #define RWM_F_NORMALIZE_MAPPED_ATTRS (0x0001U) +#define RWM_F_DROP_UNREQUESTED_ATTRS (0x0002U) #define RWM_F_SUPPORT_T_F (0x4000U) #define RWM_F_SUPPORT_T_F_DISCOVER (0x8000U) #define RWM_F_SUPPORT_T_F_MASK (RWM_F_SUPPORT_T_F) -- 2.39.5