]> git.sur5r.net Git - openldap/commitdiff
streamline group attr specification/diagnostics
authorPierangelo Masarati <ando@openldap.org>
Thu, 11 Jan 2007 20:41:43 +0000 (20:41 +0000)
committerPierangelo Masarati <ando@openldap.org>
Thu, 11 Jan 2007 20:41:43 +0000 (20:41 +0000)
servers/slapd/aclparse.c
servers/slapd/at.c
servers/slapd/proto-slap.h

index 7733260f3f2cbab9ad0822f663a2b4b5b7d4e8fd..37db9afd7f80fbdbaf8fed5496b23ed83f823ab0 100644 (file)
@@ -1110,6 +1110,7 @@ parse_acl(
                                if ( strncasecmp( left, "group", STRLENOF( "group" ) ) == 0 ) {
                                        char *name = NULL;
                                        char *value = NULL;
+                                       char *attr_name = SLAPD_GROUP_ATTR;
 
                                        switch ( sty ) {
                                        case ACL_STYLE_REGEX:
@@ -1227,50 +1228,41 @@ parse_acl(
                                        }
 
                                        if ( name && *name ) {
-                                               rc = slap_str2ad( name, &b->a_group_at, &text );
-
-                                               if( rc != LDAP_SUCCESS ) {
-                                                       char    buf[ SLAP_TEXT_BUFLEN ];
-
-                                                       snprintf( buf, sizeof( buf ),
-                                                               "group \"%s\": %s.",
-                                                               right, text );
-                                                       Debug( LDAP_DEBUG_ANY,
-                                                               "%s: line %d: %s\n",
-                                                               fname, lineno, buf );
-                                                       goto fail;
-                                               }
+                                               attr_name = name;
                                                *--name = '/';
 
-                                       } else {
-                                               rc = slap_str2ad( SLAPD_GROUP_ATTR, &b->a_group_at, &text );
+                                       }
 
-                                               if ( rc != LDAP_SUCCESS ) {
-                                                       char    buf[ SLAP_TEXT_BUFLEN ];
+                                       rc = slap_str2ad( attr_name, &b->a_group_at, &text );
+                                       if ( rc != LDAP_SUCCESS ) {
+                                               char    buf[ SLAP_TEXT_BUFLEN ];
 
-                                                       snprintf( buf, sizeof( buf ),
-                                                               "group \"%s\": %s.",
-                                                               SLAPD_GROUP_ATTR, text );
-                                                       Debug( LDAP_DEBUG_ANY,
-                                                               "%s: line %d: %s\n",
-                                                               fname, lineno, buf );
-                                                       goto fail;
-                                               }
+                                               snprintf( buf, sizeof( buf ),
+                                                       "group \"%s\": %s.",
+                                                       right, text );
+                                               Debug( LDAP_DEBUG_ANY,
+                                                       "%s: line %d: %s\n",
+                                                       fname, lineno, buf );
+                                               goto fail;
                                        }
 
                                        if ( !is_at_syntax( b->a_group_at->ad_type,
-                                                       SLAPD_DN_SYNTAX ) &&
-                                               !is_at_syntax( b->a_group_at->ad_type,
-                                                       SLAPD_NAMEUID_SYNTAX ) &&
-                                               !is_at_subtype( b->a_group_at->ad_type,
-                                                       slap_schema.si_ad_labeledURI->ad_type ) )
+                                                       SLAPD_DN_SYNTAX ) /* e.g. "member" */
+                                               && !is_at_syntax( b->a_group_at->ad_type,
+                                                       SLAPD_NAMEUID_SYNTAX ) /* e.g. memberUID */
+                                               && !is_at_subtype( b->a_group_at->ad_type,
+                                                       slap_schema.si_ad_labeledURI->ad_type ) /* e.g. memberURL */ )
                                        {
                                                char    buf[ SLAP_TEXT_BUFLEN ];
 
                                                snprintf( buf, sizeof( buf ),
-                                                       "group \"%s\": inappropriate syntax: %s.",
+                                                       "group \"%s\" attr \"%s\": inappropriate syntax: %s; "
+                                                       "must be " SLAPD_DN_SYNTAX " (DN), "
+                                                       SLAPD_NAMEUID_SYNTAX " (NameUID) "
+                                                       "or a subtype of labeledURI.",
                                                        right,
-                                                       b->a_group_at->ad_type->sat_syntax_oid );
+                                                       attr_name,
+                                                       at_syntax( b->a_group_at->ad_type ) );
                                                Debug( LDAP_DEBUG_ANY,
                                                        "%s: line %d: %s\n",
                                                        fname, lineno, buf );
index f49686895ad70e8691a4b8259cbd7dfc85c3495b..f242491d11d909ac34a5310e633d9699481a0e4a 100644 (file)
 #include "slap.h"
 
 
-int is_at_syntax(
-       AttributeType *at,
-       const char *oid )
+const char *
+at_syntax(
+       AttributeType   *at )
 {
-       for( ; at != NULL; at = at->sat_sup ) {
-               if( at->sat_syntax_oid ) {
-                       return ( strcmp( at->sat_syntax_oid, oid ) == 0 );
+       for ( ; at != NULL; at = at->sat_sup ) {
+               if ( at->sat_syntax_oid ) {
+                       return at->sat_syntax_oid;
                }
        }
 
+       assert( 0 );
+
+       return NULL;
+}
+
+int
+is_at_syntax(
+       AttributeType   *at,
+       const char      *oid )
+{
+       const char *syn_oid = at_syntax( at );
+
+       if ( syn_oid ) {
+               return strcmp( syn_oid, oid ) == 0;
+       }
+
        return 0;
 }
 
index 806265bbc58112dc5cbc07dc34dc1e05e301bcf4..9f43e56baed48f34c71e2df313b185058016b096 100644 (file)
@@ -230,6 +230,8 @@ LDAP_SLAPD_F (int) is_at_subtype LDAP_P((
        AttributeType *sub,
        AttributeType *super ));
 
+LDAP_SLAPD_F (const char *) at_syntax LDAP_P((
+       AttributeType *at ));
 LDAP_SLAPD_F (int) is_at_syntax LDAP_P((
        AttributeType *at,
        const char *oid ));