From 53d6d3c95755e16b1b9240c1fd928bb6fc8deab1 Mon Sep 17 00:00:00 2001 From: Pierangelo Masarati Date: Thu, 11 Jan 2007 20:41:43 +0000 Subject: [PATCH] streamline group attr specification/diagnostics --- servers/slapd/aclparse.c | 56 ++++++++++++++++---------------------- servers/slapd/at.c | 28 +++++++++++++++---- servers/slapd/proto-slap.h | 2 ++ 3 files changed, 48 insertions(+), 38 deletions(-) diff --git a/servers/slapd/aclparse.c b/servers/slapd/aclparse.c index 7733260f3f..37db9afd7f 100644 --- a/servers/slapd/aclparse.c +++ b/servers/slapd/aclparse.c @@ -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 ); diff --git a/servers/slapd/at.c b/servers/slapd/at.c index f49686895a..f242491d11 100644 --- a/servers/slapd/at.c +++ b/servers/slapd/at.c @@ -27,16 +27,32 @@ #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; } diff --git a/servers/slapd/proto-slap.h b/servers/slapd/proto-slap.h index 806265bbc5..9f43e56bae 100644 --- a/servers/slapd/proto-slap.h +++ b/servers/slapd/proto-slap.h @@ -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 )); -- 2.39.5