streamline group attr specification/diagnostics

This commit is contained in:
Pierangelo Masarati 2007-01-11 20:41:43 +00:00
parent fb2e448e87
commit 53d6d3c957
3 changed files with 48 additions and 38 deletions

View 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 );

View File

@ -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;
}

View 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 ));