]> git.sur5r.net Git - openldap/commitdiff
let special attrnames slip through (ITS#5760)
authorPierangelo Masarati <ando@openldap.org>
Sat, 14 Feb 2009 10:39:45 +0000 (10:39 +0000)
committerPierangelo Masarati <ando@openldap.org>
Sat, 14 Feb 2009 10:39:45 +0000 (10:39 +0000)
servers/slapd/ad.c
servers/slapd/back-meta/map.c
servers/slapd/overlays/rwmmap.c
servers/slapd/proto-slap.h

index e1dab72b3e9c67fb118c453743add7c11ba270b0..c881612799f6492f5782efa83204fb7df14e71ed 100644 (file)
 #include "slap.h"
 #include "lutil.h"
 
+static struct berval bv_no_attrs = BER_BVC( LDAP_NO_ATTRS );
+static struct berval bv_all_user_attrs = BER_BVC( "*" );
+static struct berval bv_all_operational_attrs = BER_BVC( "+" );
+
 static AttributeName anlist_no_attrs[] = {
        { BER_BVC( LDAP_NO_ATTRS ), NULL, 0, NULL },
        { BER_BVNULL, NULL, 0, NULL }
@@ -53,6 +57,10 @@ AttributeName *slap_anlist_all_user_attributes = anlist_all_user_attributes;
 AttributeName *slap_anlist_all_operational_attributes = anlist_all_operational_attributes;
 AttributeName *slap_anlist_all_attributes = anlist_all_attributes;
 
+struct berval * slap_bv_no_attrs = &bv_no_attrs;
+struct berval * slap_bv_all_user_attrs = &bv_all_user_attrs;
+struct berval * slap_bv_all_operational_attrs = &bv_all_operational_attrs;
+
 typedef struct Attr_option {
        struct berval name;     /* option name or prefix */
        int           prefix;   /* NAME is a tag and range prefix */
index 4ceaebd1743f3e74a2b622ee369d9d082eb35ff9..90ee7823225288c40699f0590182af8ab8aabb55 100644 (file)
@@ -119,6 +119,15 @@ ldap_back_mapping ( struct ldapmap *map, struct berval *s, struct ldapmapping **
 
        assert( m != NULL );
 
+       /* let special attrnames slip through (ITS#5760) */
+       if ( bvmatch( s, slap_bv_no_attrs )
+               || bvmatch( s, slap_bv_all_user_attrs )
+               || bvmatch( s, slap_bv_all_operational_attrs ) )
+       {
+               *m = NULL;
+               return 0;
+       }
+
        if ( remap == BACKLDAP_REMAP ) {
                tree = map->remap;
 
index 67655c3068e95187125da1c7d33e56faccf48eaf..5fd2fefcf13fe5a1194dbcc42e11950828a68a05 100644 (file)
@@ -121,6 +121,15 @@ rwm_mapping( struct ldapmap *map, struct berval *s, struct ldapmapping **m, int
 
        assert( m != NULL );
 
+       /* let special attrnames slip through (ITS#5760) */
+       if ( bvmatch( s, slap_bv_no_attrs )
+               || bvmatch( s, slap_bv_all_user_attrs )
+               || bvmatch( s, slap_bv_all_operational_attrs ) )
+       {
+               *m = NULL;
+               return 0;
+       }
+
        if ( remap == RWM_REMAP ) {
                tree = map->remap;
 
index f6a3478c7cb006b97b8f787c0e04bed41afc78e0..00eecbb539a63b4812cfebff556e321b21df566c 100644 (file)
@@ -191,6 +191,10 @@ LDAP_SLAPD_V( AttributeName * ) slap_anlist_all_user_attributes;
 LDAP_SLAPD_V( AttributeName * ) slap_anlist_all_operational_attributes;
 LDAP_SLAPD_V( AttributeName * ) slap_anlist_all_attributes;
 
+LDAP_SLAPD_V( struct berval * ) slap_bv_no_attrs;
+LDAP_SLAPD_V( struct berval * ) slap_bv_all_user_attrs;
+LDAP_SLAPD_V( struct berval * ) slap_bv_all_operational_attrs;
+
 /*
  * add.c
  */