]> git.sur5r.net Git - openldap/commitdiff
fix ITS#6057
authorPierangelo Masarati <ando@openldap.org>
Wed, 15 Apr 2009 10:46:11 +0000 (10:46 +0000)
committerPierangelo Masarati <ando@openldap.org>
Wed, 15 Apr 2009 10:46:11 +0000 (10:46 +0000)
servers/slapd/overlays/rwm.c
servers/slapd/overlays/rwm.h

index e10ee7fa134f0915bf9fe4325b39628e84a38267..de8da75f3ef32141ed766647434662e5217d75d7 100644 (file)
@@ -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 ) {
index a46c3caa9f6d19c6842fa650c041c0b55cbf906e..849822d62cf8273ffb965bc6785d4fcdc97d4604 100644 (file)
@@ -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)