]> git.sur5r.net Git - openldap/commitdiff
Add nameAndOptionalUID pretty routine... improves uniqueMember handling
authorKurt Zeilenga <kurt@openldap.org>
Fri, 22 Aug 2003 21:03:03 +0000 (21:03 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Fri, 22 Aug 2003 21:03:03 +0000 (21:03 +0000)
Should resolve ITS#2664.

14 files changed:
servers/slapd/schema_init.c
tests/data/acl.out.master
tests/data/modify.out.master
tests/data/modrdn.out.master
tests/data/modrdn.out.master.0
tests/data/search.out.master
tests/data/slapd-acl.conf
tests/data/test-glued.ldif
tests/data/test-ordered-nocp.ldif
tests/data/test-ordered.ldif
tests/data/test.ldif
tests/scripts/test003-search
tests/scripts/test004-modify
tests/scripts/test006-acls

index 056e085d0dd16f34d82317e3d89f97ac1a7f66ee..273398cda6f1fbbf091f58e5d29a8df5233d938e 100644 (file)
@@ -729,6 +729,87 @@ nameUIDValidate(
        return rc;
 }
 
+int
+nameUIDPretty(
+       Syntax *syntax,
+       struct berval *val,
+       struct berval *out,
+       void *ctx )
+{
+       assert( val );
+       assert( out );
+
+
+#ifdef NEW_LOGGING
+       LDAP_LOG( OPERATION, ARGS, ">>> nameUIDPretty: <%s>\n", val->bv_val, 0, 0 );
+#else
+       Debug( LDAP_DEBUG_TRACE, ">>> nameUIDPretty: <%s>\n", val->bv_val, 0, 0 );
+#endif
+
+       if( val->bv_len == 0 ) {
+               ber_dupbv_x( out, val, ctx );
+
+       } else if ( val->bv_len > SLAP_LDAPDN_MAXLEN ) {
+               return LDAP_INVALID_SYNTAX;
+
+       } else {
+               int rc;
+               struct berval dnval = *val;
+               struct berval uidval = { 0, NULL };
+
+               if( val->bv_val[val->bv_len-1] == 'B'
+                       && val->bv_val[val->bv_len-2] == '\'' )
+               {
+                       uidval.bv_val=strrchr( val->bv_val, '#' );
+                       if( uidval.bv_val ) {
+                               dnval.bv_len = uidval.bv_val - dnval.bv_val;
+                               uidval.bv_len = val->bv_len - dnval.bv_len;
+
+                               uidval.bv_len--;
+                               uidval.bv_val++;
+                       }
+               }
+
+               rc = dnPretty( syntax, &dnval, out, ctx );
+               if( rc != LDAP_SUCCESS ) return rc;
+
+               if( uidval.bv_val ) {
+                       char *tmp = sl_realloc( out->bv_val, out->bv_len + uidval.bv_len + 2, ctx );
+                       int i, c, got1;
+                       if( tmp == NULL ) {
+                               ber_memfree_x( out->bv_val, ctx );
+                               return LDAP_OTHER;
+                       }
+
+                       out->bv_val[out->bv_len++] = '#';
+
+                       got1 = uidval.bv_len < sizeof("'0'B"); 
+                       for(i=0; i<uidval.bv_len; i++) {
+                               c = uidval.bv_val[i];
+                               switch(c) {
+                                       case '0':
+                                               if( got1 ) out->bv_val[out->bv_len++] = c;
+                                               break;
+                                       case '1':
+                                               got1 = 1;
+                                       default:
+                                               out->bv_val[out->bv_len++] = c;
+                               }
+                       }
+
+                       out->bv_val[out->bv_len] = '\0';
+               }
+       }
+
+#ifdef NEW_LOGGING
+       LDAP_LOG( OPERATION, ARGS, "<<< nameUIDPretty: <%s>\n", out->bv_val, 0, 0 );
+#else
+       Debug( LDAP_DEBUG_TRACE, "<<< nameUIDPretty: <%s>\n", out->bv_val, 0, 0 );
+#endif
+
+       return LDAP_SUCCESS;
+}
+
 static int
 uniqueMemberNormalize(
        slap_mask_t usage,
@@ -2508,7 +2589,7 @@ static slap_syntax_defs_rec syntax_defs[] = {
        {"( 1.3.6.1.4.1.1466.115.121.1.33 DESC 'MHS OR Address' )",
                0, NULL, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.34 DESC 'Name And Optional UID' )",
-               0, nameUIDValidate, NULL},
+               0, nameUIDValidate, nameUIDPretty },
        {"( 1.3.6.1.4.1.1466.115.121.1.35 DESC 'Name Form Description' )",
                0, NULL, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.36 DESC 'Numeric String' )",
index 430f4422dfb5b2c49cc1ae1c7659e9bab23ababc..60e3f28365f490a34ceb312b3a754c480702691c 100644 (file)
@@ -119,17 +119,16 @@ dn: cn=ITD Staff,ou=Groups,o=University of Michigan,c=US
 owner: cn=Manager,o=University of Michigan,c=US
 description: All ITD Staff
 cn: ITD Staff
-objectclass: groupofnames
-member: cn=Manager,o=University of Michigan,c=US
-member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=Univers
- ity of Michigan,c=US
-member: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=Univ
- ersity of Michigan,c=US
-member: cn=John Doe,ou=Information Technology Division,ou=People,o=University 
+objectclass: groupofuniquenames
+uniquemember: cn=Manager,o=University of Michigan,c=US
+uniquemember: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=U
+ niversity of Michigan,c=US
+uniquemember: cn=James A Jones 2,ou=Information Technology Division,ou=People,
+ o=University of Michigan,c=US
+uniquemember: cn=John Doe,ou=Information Technology Division,ou=People,o=Unive
+ rsity of Michigan,c=US
+uniquemember: cn=James A Jones 1,ou=Alumni Association,ou=People,o=University 
  of Michigan,c=US
-member: cn=James A Jones 1,ou=Alumni Association,ou=People,o=University of Mic
- higan,c=US
-ou: Groups
 
 dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=Universi
  ty of Michigan,c=US
index d66f9df2cc2977002bec169c5137a4d0476879ac..e02147d7831c408a2b5c16e25efedb743a5a1f3e 100644 (file)
@@ -117,14 +117,14 @@ dn: cn=ITD Staff,ou=Groups,o=University of Michigan,c=US
 owner: cn=Manager,o=University of Michigan,c=US
 description: All ITD Staff
 cn: ITD Staff
-objectclass: groupofnames
-member: cn=Manager,o=University of Michigan,c=US
-member: cn=John Doe,ou=Information Technology Division,ou=People,o=University 
+objectclass: groupofuniquenames
+uniquemember: cn=Manager,o=University of Michigan,c=US
+uniquemember: cn=John Doe,ou=Information Technology Division,ou=People,o=Unive
+ rsity of Michigan,c=US
+uniquemember: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=University 
+ of Michigan,c=US
+uniquemember: cn=James A Jones 1,ou=Alumni Association,ou=People,o=University 
  of Michigan,c=US
-member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=University of Mic
- higan,c=US
-member: cn=James A Jones 1,ou=Alumni Association,ou=People,o=University of Mic
- higan,c=US
 
 dn: cn=James A Jones 1,ou=Alumni Association,ou=People,o=University of Michiga
  n,c=US
index 9105cb381509c281b39ec9bab6e95a2e4a82cadb..ae5444838b1a67c17a2600f8e6820840c812ab17 100644 (file)
@@ -120,14 +120,14 @@ dn: cn=ITD Staff,ou=Groups,o=University of Michigan,c=US
 owner: cn=Manager,o=University of Michigan,c=US
 description: All ITD Staff
 cn: ITD Staff
-objectclass: groupofnames
-member: cn=Manager,o=University of Michigan,c=US
-member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=Univers
- ity of Michigan,c=US
-member: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=Univ
- ersity of Michigan,c=US
-member: cn=John Doe,ou=Information Technology Division,ou=People,o=University 
- of Michigan,c=US
+objectclass: groupofuniquenames
+uniquemember: cn=Manager,o=University of Michigan,c=US
+uniquemember: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=U
niversity of Michigan,c=US
+uniquemember: cn=James A Jones 2,ou=Information Technology Division,ou=People,
o=University of Michigan,c=US
+uniquemember: cn=John Doe,ou=Information Technology Division,ou=People,o=Unive
rsity of Michigan,c=US
 
 dn: cn=James A Jones II,ou=Information Technology Division,ou=People,o=Univ
  ersity of Michigan,c=US
index e2198316396a72e1fd70f91ff14a46349c44d557..55ab5dea678979371e0662868a0cbcfe6e042ab0 100644 (file)
@@ -119,14 +119,14 @@ dn: cn=ITD Staff,ou=Groups,o=University of Michigan,c=US
 owner: cn=Manager,o=University of Michigan,c=US
 description: All ITD Staff
 cn: ITD Staff
-objectclass: groupofnames
-member: cn=Manager,o=University of Michigan,c=US
-member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=Univers
- ity of Michigan,c=US
-member: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=Univ
- ersity of Michigan,c=US
-member: cn=John Doe,ou=Information Technology Division,ou=People,o=University 
- of Michigan,c=US
+objectclass: groupofuniquenames
+uniquemember: cn=Manager,o=University of Michigan,c=US
+uniquemember: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=U
niversity of Michigan,c=US
+uniquemember: cn=James A Jones 2,ou=Information Technology Division,ou=People,
o=University of Michigan,c=US
+uniquemember: cn=John Doe,ou=Information Technology Division,ou=People,o=Unive
rsity of Michigan,c=US
 
 dn: cn=James A Jones II,ou=Information Technology Division,ou=People,o=Univers
  ity of Michigan,c=US
index fed8b0c80620d5138da36e354522dbde0963c52a..5cbf70d4e1bf600c131f308435e550efb4cfeb45 100644 (file)
@@ -89,14 +89,14 @@ dn: cn=ITD Staff,ou=Groups,o=University of Michigan,c=US
 owner: cn=Manager,o=University of Michigan,c=US
 description: All ITD Staff
 cn: ITD Staff
-objectclass: groupofnames
-member: cn=Manager,o=University of Michigan,c=US
-member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=Univers
- ity of Michigan,c=US
-member: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=Univ
- ersity of Michigan,c=US
-member: cn=John Doe,ou=Information Technology Division,ou=People,o=University 
- of Michigan,c=US
+objectClass: groupOfUniqueNames
+uniqueMember: cn=Manager,o=University of Michigan,c=US
+uniqueMember: cn=Bjorn Jensen,OU=Information Technology Division,ou=PEOPLE,o=U
niversity of Michigan,c=US
+uniqueMember: cn=James A Jones 2,ou=Information Technology Division,ou=PEOPLE,
o=University of Michigan,c=US
+uniqueMember: cn=John Doe,ou=Information Technology Division,ou=People,o=Unive
rsity of Michigan,c=US
 
 dn: cn=James A Jones 1,ou=Alumni Association,ou=People,o=University of Michiga
  n,c=US
@@ -226,14 +226,14 @@ dn: cn=ITD Staff,ou=Groups,o=University of Michigan,c=US
 owner: cn=Manager,o=University of Michigan,c=US
 description: All ITD Staff
 cn: ITD Staff
-objectclass: groupofnames
-member: cn=Manager,o=University of Michigan,c=US
-member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=Univers
- ity of Michigan,c=US
-member: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=Univ
- ersity of Michigan,c=US
-member: cn=John Doe,ou=Information Technology Division,ou=People,o=University 
- of Michigan,c=US
+objectclass: groupofuniquenames
+uniquemember: cn=Manager,o=University of Michigan,c=US
+uniquemember: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=U
niversity of Michigan,c=US
+uniquemember: cn=James A Jones 2,ou=Information Technology Division,ou=People,
o=University of Michigan,c=US
+uniquemember: cn=John Doe,ou=Information Technology Division,ou=People,o=Unive
rsity of Michigan,c=US
 
 dn: cn=Manager,o=University of Michigan,c=US
 objectClass: person
index 0eee54cdec8039bbe7bdf9e05f756fc595d0192b..a066f0628697d9517d0097add2e264f14f69b3dc 100644 (file)
@@ -52,20 +52,21 @@ access              to dn.children="ou=Alumni Association,ou=People,o=University of Michigan
                by dn.subtree="o=University of Michigan,c=US" +rs continue
                by * stop
 
-access         to attr=member
+access         to attr=member,uniquemember
                by dnattr=member selfwrite
+               by dnattr=uniquemember selfwrite
                by * read
 
-access         to attr=member filter=(mail=*edu)
+access to attr=member,uniquemember filter=(mail=*edu)
                by * read
 
-access         to filter="(objectclass=groupofnames)"
+access to filter="(&(objectclass=groupofnames)(objectClass=groupofuniquenames))"
                by dn.base="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=University of Michigan,c=US" =sc continue
                by dn.regex="^cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=University of Michigan,c=US$" +rw stop
                by * break
 
 access         to dn.children="ou=Information Technology Division,ou=People,o=University of Michigan,c=US"
-               by group.exact="cn=ITD Staff,ou=Groups,o=University of Michigan,c=US" write
+               by group/groupOfUniqueNames/uniqueMember.exact="cn=ITD Staff,ou=Groups,o=University of Michigan,c=US" write
                by * read
 
 access to filter="(name=X*Y*Z)"
index 356c3305f287da6aff37d12d048d0b4f27b0f591..d5235d09d859195d244cb8fcd4b4d671dbaf3853 100644 (file)
@@ -278,12 +278,12 @@ dn: cn=ITD Staff,ou=Groups,o=University of Michigan,c=US
 owner: cn=Manager,o=University of Michigan,c=US
 description: All ITD Staff
 cn: ITD Staff
-objectClass: groupofnames
-member: cn=Manager,o=University of Michigan,c=US
-member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=Univers
- ity of Michigan,c=US
-member: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=Univ
- ersity of Michigan,c=US
-member: cn=John Doe,ou=Information Technology Division,ou=People,o=University 
- of Michigan,c=US
+objectclass: groupofuniquenames
+uniquemember: cn=Manager,o=University of Michigan,c=US
+uniquemember: cn=Bjorn Jensen,OU=Information Technology Division,ou=PEOPLE,o=U 
+ niversity of Michigan,c=US 
+uniquemember: cn=James A Jones 2,ou=Information Technology Division,ou=PEOPLE, 
+ o=University of Michigan,c=US 
+uniquemember: cn=John Doe,ou=Information Technology Division,ou=People,o=Unive 
rsity of Michigan,c=US
 
index 2564e878a19439bb40076a0d1d9e24c9d5f8139a..6a2b71573b72796dfe90d61fa69891cb2a0fb1a0 100644 (file)
@@ -126,14 +126,14 @@ dn: cn=ITD Staff,ou=Groups,o=University of Michigan,c=US
 owner: cn=Manager,o=University of Michigan,c=US
 description: All ITD Staff
 cn: ITD Staff
-objectclass: groupofnames
-member: cn=Manager,o=University of Michigan,c=US
-member: cn=Bjorn Jensen,OU=Information Technology Division,ou=PEOPLE,o=Univers
- ity of Michigan,c=US
-member: cn=James A Jones 2,ou=Information Technology Division,ou=PEOPLE,o=Univ
- ersity of Michigan,c=US
-member: cn=John Doe,ou=Information Technology Division,ou=People,o=University 
- of Michigan,c=US
+objectclass: groupofuniquenames
+uniquemember: cn=Manager,o=University of Michigan,c=US
+uniquemember: cn=Bjorn Jensen,OU=Information Technology Division,ou=PEOPLE,o=U 
+ niversity of Michigan,c=US 
+uniquemember: cn=James A Jones 2,ou=Information Technology Division,ou=PEOPLE, 
+ o=University of Michigan,c=US 
+uniquemember: cn=John Doe,ou=Information Technology Division,ou=People,o=Unive 
rsity of Michigan,c=US
 
 dn: cn=James A Jones 1,ou=Alumni Association,ou=People,o=University of Mich
  igan,c=US
index b2d329e33521535023aa8cae16d9b30f5ac8bf85..74e479a0a0e64fb6bcecb32da436fda30ef1e5df 100644 (file)
@@ -145,14 +145,14 @@ dn: cn=ITD Staff,ou=Groups,o=University of Michigan,c=US
 owner: cn=Manager,o=University of Michigan,c=US
 description: All ITD Staff
 cn: ITD Staff
-objectclass: groupofnames
-member: cn=Manager,o=University of Michigan,c=US
-member: cn=Bjorn Jensen,OU=Information Technology Division,ou=PEOPLE,o=Univers
- ity of Michigan,c=US
-member: cn=James A Jones 2,ou=Information Technology Division,ou=PEOPLE,o=Univ
- ersity of Michigan,c=US
-member: cn=John Doe,ou=Information Technology Division,ou=People,o=University 
- of Michigan,c=US
+objectclass: groupofuniquenames
+uniquemember: cn=Manager,o=University of Michigan,c=US
+uniquemember: cn=Bjorn Jensen,OU=Information Technology Division,ou=PEOPLE,o=U
niversity of Michigan,c=US
+uniquemember: cn=James A Jones 2,ou=Information Technology Division,ou=PEOPLE,
o=University of Michigan,c=US
+uniquemember: cn=John Doe,ou=Information Technology Division,ou=People,o=Unive
rsity of Michigan,c=US
 
 dn: cn=James A Jones 1,ou=Alumni Association,ou=People,o=University of Mich
  igan,c=US
index 7b4961f5939f345e5a8e425ce2ae35d391e54e3f..a695e8a9e36696fb302bd19a2b71fdbc582a7333 100644 (file)
@@ -121,14 +121,14 @@ dn: cn=ITD Staff,ou=Groups,o=University of Michigan,c=US
 owner: cn=Manager,o=University of Michigan,c=US
 description: All ITD Staff
 cn: ITD Staff
-objectclass: groupofnames
-member: cn=Manager,o=University of Michigan,c=US
-member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=Univers
- ity of Michigan,c=US
-member: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=Univ
- ersity of Michigan,c=US
-member: cn=John Doe,ou=Information Technology Division,ou=People,o=University 
- of Michigan,c=US
+objectclass: groupofuniquenames
+uniquemember: cn=Manager,o=University of Michigan,c=US
+uniquemember: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=U
niversity of Michigan,c=US
+uniquemember: cn=James A Jones 2,ou=Information Technology Division,ou=People,
o=University of Michigan,c=US
+uniquemember: cn=John Doe,ou=Information Technology Division,ou=People,o=Unive
rsity of Michigan,c=US
 
 dn: cn=James A Jones 1,ou=Alumni Association,ou=People,o=University of Michiga
  n,c=US
index 49a3b8d72434cd9889225481e1ba9b624e513514..af32f905417b0d062d2ad2c8ed912c073b8fe2b1 100755 (executable)
@@ -73,7 +73,7 @@ fi
 
 echo "Testing OR searching..."
 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT \
-       '(|(givenname=Xx*yY*Z)(cn=)(undef=*)(objectclass=groupofnames)(sn=jones)(member=cn=Manager,o=University of Michigan,c=US))' >> $SEARCHOUT 2>&1
+       '(|(givenname=Xx*yY*Z)(cn=)(undef=*)(objectclass=groupofnames)(sn=jones)(member=cn=Manager,o=University of Michigan,c=US)(uniqueMember=cn=Manager,o=University of Michigan,c=US))' >> $SEARCHOUT 2>&1
 RC=$?
 if test $RC != 0 ; then
        echo "ldapsearch failed ($RC)!"
index 8a46a4a60d3340c81a57c133718d16143251365b..a235b93ad9bd04d3da73ee25a47f9b6b6d551410 100755 (executable)
@@ -91,13 +91,17 @@ drink: Mad Dog 20/20
 
 dn: cn=ITD Staff,ou=Groups,o=University of Michigan,c=US
 changetype: modify
-delete: member
-member: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=University of Michigan,c=US
-member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=University of Michigan,c=US
+delete: uniquemember
+uniquemember: cn=James A Jones 2,ou=Information Technology Division,
+ ou=People,o=University of Michigan,c=US
+uniquemember: cn=Bjorn Jensen,ou=Information Technology Division,
+ ou=People,o=University of Michigan,c=US
 -
-add: member
-member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=University of Michigan,c=US
-member: cn=James A Jones 1,ou=Alumni Association,ou=People,o=University of Michigan,c=US
+add: uniquemember
+uniquemember: cn=Dorothy Stevens,ou=Alumni Association,
+ ou=People,o=University of Michigan,c=US
+uniquemember: cn=James A Jones 1,ou=Alumni Association,
+ ou=People,o=University of Michigan,c=US
 
 dn: cn=All Staff,ou=Groups,o=University of Michigan,c=US
 changetype: modify
index 5c81dbf992183b4be89d38e402ea68b6b37933d3..70a3636f27b7aaa4ea2835207f3d7072d8106f94 100755 (executable)
@@ -97,8 +97,8 @@ $LDAPMODIFY -D "$JAJDN" -h $LOCALHOST -p $PORT -w jaj > \
 version: 1
 dn: cn=ITD Staff, ou=Groups, o=University of Michigan, c=US
 changetype: modify
-add: member
-member: cn=Barbara Jensen, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
+add: uniquemember
+uniquemember: cn=Barbara Jensen,ou=Information Technology Division,ou=People,o=University of Michigan,c=US
 
 EOMODS1
 
@@ -108,8 +108,8 @@ version: 1
 
 dn: cn=ITD Staff, ou=Groups, o=University of Michigan, c=US
 changetype: modify
-add: member
-member: cn=James A Jones 1, ou=Alumni Association, ou=People, o=University of Michigan, c=US
+add: uniquemember
+uniquemember: cn=James A Jones 1, ou=Alumni Association, ou=People, o=University of Michigan, c=US
 EOMODS2
 
 #