UNDO LAST COMMIT.

This commit is contained in:
Hallvard Furuseth 1999-04-02 03:45:33 +00:00
parent 45118be88e
commit 815a62930c
19 changed files with 71 additions and 105 deletions

View File

@ -108,7 +108,7 @@ parse_acl(
break;
}
if ( strcmp( argv[i], "*" ) == 0 ) {
if ( strcasecmp( argv[i], "*" ) == 0 ) {
int e;
if ((e = regcomp( &a->acl_dnre, ".*",
REG_EXTENDED|REG_ICASE)))
@ -152,7 +152,6 @@ parse_acl(
acl_usage();
} else {
/* ### Should be normalized, but how? */
a->acl_dnpat = dn_upcase(ch_strdup( right ));
}
} else if ( strncasecmp( left, "attr", 4 )
@ -193,13 +192,12 @@ parse_acl(
/* get <who> */
split( argv[i], '=', &left, &right );
if ( strcmp( argv[i], "*" ) == 0 ) {
if ( strcasecmp( argv[i], "*" ) == 0 ) {
b->a_dnpat = ch_strdup( ".*" );
} else if ( strcasecmp( argv[i], "self" ) == 0 ) {
b->a_dnpat = ch_strdup( "self" );
} else if ( strcasecmp( left, "dn" ) == 0 ) {
regtest(fname, lineno, right);
/* ### Should be normalized, but how? */
b->a_dnpat = dn_upcase( ch_strdup( right ) );
} else if ( strcasecmp( left, "dnattr" ) == 0 ) {
b->a_dnattr = ch_strdup( right );
@ -218,7 +216,6 @@ parse_acl(
*name++ = '\0';
}
/* ### Should it be normalized? */
b->a_group = dn_upcase(ch_strdup( right ));
if (value && *value) {

View File

@ -279,7 +279,7 @@ attr_syntax_config(
strcasecmp( argv[lasti], "tel" ) == 0 ) {
a->asi_syntax = (SYNTAX_CIS | SYNTAX_TEL);
} else if ( strcasecmp( argv[lasti], "dn" ) == 0 ) {
a->asi_syntax = SYNTAX_DN;
a->asi_syntax = (SYNTAX_CIS | SYNTAX_DN);
} else if ( strcasecmp( argv[lasti], "caseexactstring" ) == 0 ||
strcasecmp( argv[lasti], "ces" ) == 0 ) {
a->asi_syntax = SYNTAX_CES;

View File

@ -222,7 +222,7 @@ char *bdb2i_derefDN ( BackendDB *be,
Debug( LDAP_DEBUG_TRACE, "<= l&g we have %s vs %s \n", matched, eNew->e_dn, 0 );
i = dn_casecmp (matched, eNew->e_dn);
i = strcasecmp (matched, eNew->e_dn);
/* free reader lock */
bdb2i_cache_return_entry_r(&li->li_cache, eNew);

View File

@ -163,7 +163,6 @@ bdb2i_back_bind_internal(
/*
* no krbName values present: check against DN
*/
/*###??? Should this be some variant of dn_casecmp? */
if ( strcasecmp( dn, krbname ) == 0 ) {
rc = 0; /* XXX wild ass guess */
break;

View File

@ -101,7 +101,7 @@ bdb2i_back_group_internal(
"<= bdb2i_back_group: failed to find %s in objectClass\n",
objectclassValue, 0, 0 );
}
else if (value_find(member->a_vals, &bvMembers, member->a_syntax, 1) != 0) {
else if (value_find(member->a_vals, &bvMembers, SYNTAX_CIS, 1) != 0) {
Debug( LDAP_DEBUG_ACL,
"<= bdb2i_back_group: \"%s\" not in \"%s\": %s\n",
op_ndn, gr_ndn, groupattrName );

View File

@ -525,7 +525,7 @@ subtree_candidates(
f->f_and->f_sub_initial = NULL;
f->f_and->f_sub_any = NULL;
f->f_and->f_sub_final = ch_strdup( base );
value_normalize( f->f_and->f_sub_final, SYNTAX_DN );
value_normalize( f->f_and->f_sub_final, SYNTAX_CIS );
f->f_and->f_next = filter;
filter = f;
}

View File

@ -221,7 +221,7 @@ char *derefDN ( Backend *be,
Debug( LDAP_DEBUG_TRACE, "<= l&g we have %s vs %s \n", matched, eNew->e_dn, 0 );
i = dn_casecmp (matched, eNew->e_dn);
i = strcasecmp (matched, eNew->e_dn);
/* free reader lock */
cache_return_entry_r(&li->li_cache, eNew);

View File

@ -164,7 +164,6 @@ ldbm_back_bind(
/*
* no krbName values present: check against DN
*/
/*###??? Should this be some variant of dn_casecmp? */
if ( strcasecmp( dn, krbname ) == 0 ) {
rc = 0; /* XXX wild ass guess */
break;

View File

@ -101,7 +101,7 @@ ldbm_back_group(
"<= ldbm_back_group: failed to find %s in objectClass\n",
objectclassValue, 0, 0 );
}
else if (value_find(member->a_vals, &bvMembers, member->a_syntax, 1) != 0) {
else if (value_find(member->a_vals, &bvMembers, SYNTAX_CIS, 1) != 0) {
Debug( LDAP_DEBUG_ACL,
"<= ldbm_back_group: \"%s\" not in \"%s\": %s\n",
op_ndn, gr_ndn, groupattrName );

View File

@ -483,7 +483,7 @@ subtree_candidates(
f->f_and->f_sub_initial = NULL;
f->f_and->f_sub_any = NULL;
f->f_and->f_sub_final = ch_strdup( base );
value_normalize( f->f_and->f_sub_final, SYNTAX_DN );
value_normalize( f->f_and->f_sub_final, SYNTAX_CIS );
f->f_and->f_next = filter;
filter = f;
}

View File

@ -208,17 +208,19 @@ read_config( char *fname )
char *alias, *aliased_dn;
alias = ch_strdup( cargv[1] );
(void) dn_normalize_case( alias );
(void) dn_normalize( alias );
aliased_dn = ch_strdup( cargv[2] );
(void) dn_normalize_case( aliased_dn );
(void) dn_normalize( aliased_dn );
if ( strcmp( alias, aliased_dn) == 0 ) {
if ( strcasecmp( alias, aliased_dn) == 0 ) {
Debug( LDAP_DEBUG_ANY,
"%s: line %d: suffixAlias %s is not different from aliased dn (ignored)\n",
fname, lineno, alias );
} else {
(void) dn_normalize_case( alias );
(void) dn_normalize_case( aliased_dn );
charray_add( &be->be_suffixAlias, alias );
charray_add( &be->be_suffixAlias, aliased_dn );
}

View File

@ -11,32 +11,24 @@
#include "slap.h"
typedef enum DnState {
B4TYPE, /* before attribute type */
INTYPE, /* in attribute type */
B4EQUAL, /* before '=' */
B4VALUE, /* before attribute value */
INVALUE, /* in attribute value */
INQUOTEDVALUE, /* in "" in attribute value */
B4SEPARATOR, /* before separator ('+', ',' or ';') */
} DnState;
#define B4TYPE 0
#define INTYPE 1
#define B4EQUAL 2
#define B4VALUE 3
#define INVALUE 4
#define INQUOTEDVALUE 5
#define B4SEPARATOR 6
/*
* dn_normalize_internal - put dn into a canonical form suitable for storing
* in a hash database. If correct_case == 1, this involves normalizing the case
* as well as the format. The dn is normalized in place as well as returned.
*
* The dn_normalize() and dn_normalize_case() macros use this function.
* dn_normalize - put dn into a canonical format. the dn is
* normalized in place, as well as returned.
*/
char *
dn_normalize_internal( char *dn, int correct_case )
dn_normalize( char *dn )
{
char *s, *d; /* source and destination pointers */
char *type; /* start of attr.type when state==INTYPE */
int gotesc; /* last char was '\\' */
int ic; /* ignore case */
DnState state;
char *d, *s;
int state, gotesc;
/* Debug( LDAP_DEBUG_TRACE, "=> dn_normalize \"%s\"\n", dn, 0, 0 ); */
@ -47,28 +39,18 @@ dn_normalize_internal( char *dn, int correct_case )
case B4TYPE:
if ( ! SPACE( *s ) ) {
state = INTYPE;
ic = 1;
type = d;
*d++ = TOUPPER( (unsigned char) *s );
*d++ = *s;
}
break;
case INTYPE:
if ( *s == '=' ) {
state = B4VALUE;
*d++ = *s;
} else if ( SPACE( *s ) ) {
state = B4EQUAL;
} else {
*d++ = TOUPPER( (unsigned char) *s );
break;
*d++ = *s;
}
/* Check if case is ignored in this type */
if ( correct_case ) {
*d = '\0';
if ( ! (attr_syntax( type ) | SYNTAX_CIS) )
ic = 0;
}
if (state == B4VALUE)
*d++ = '=';
break;
case B4EQUAL:
if ( *s == '=' ) {
@ -76,7 +58,7 @@ dn_normalize_internal( char *dn, int correct_case )
*d++ = *s;
} else if ( ! SPACE( *s ) ) {
/* not a valid dn - but what can we do here? */
*d++ = TOUPPER( (unsigned char) *s );
*d++ = *s;
}
break;
case B4VALUE:
@ -85,7 +67,7 @@ dn_normalize_internal( char *dn, int correct_case )
*d++ = *s;
} else if ( ! SPACE( *s ) ) {
state = INVALUE;
*d++ = (ic ? TOUPPER((unsigned char) *s) : *s);
*d++ = *s;
}
break;
case INVALUE:
@ -100,10 +82,10 @@ dn_normalize_internal( char *dn, int correct_case )
}
} else if ( gotesc && !NEEDSESCAPE( *s ) &&
!SEPARATOR( *s ) ) {
*--d = (ic ? TOUPPER((unsigned char) *s) : *s);
*--d = *s;
d++;
} else {
*d++ = (ic ? TOUPPER((unsigned char) *s) : *s);
*d++ = *s;
}
break;
case INQUOTEDVALUE:
@ -111,10 +93,10 @@ dn_normalize_internal( char *dn, int correct_case )
state = B4SEPARATOR;
*d++ = *s;
} else if ( gotesc && !NEEDSESCAPE( *s ) ) {
*--d = (ic ? TOUPPER((unsigned char) *s) : *s);
*--d = *s;
d++;
} else {
*d++ = (ic ? TOUPPER((unsigned char) *s) : *s);
*d++ = *s;
}
break;
case B4SEPARATOR:
@ -140,22 +122,27 @@ dn_normalize_internal( char *dn, int correct_case )
return( dn );
}
/*
* dn_casecmp - compare two DNs after normalizing (private copies of) them
* dn_normalize_case - put dn into a canonical form suitable for storing
* in a hash database. this involves normalizing the case as well as
* the format. the dn is normalized in place as well as returned.
*/
int
dn_casecmp( const char *dn1, const char *dn2 )
char *
dn_normalize_case( char *dn )
{
char *ndn1 = dn_normalize_case( ch_strdup( dn1 ) );
char *ndn2 = dn_normalize_case( ch_strdup( dn2 ) );
int i = strcmp( ndn1, ndn2 );
free( ndn1 );
free( ndn2 );
return i;
}
char *s;
/* normalize format */
dn_normalize( dn );
/* normalize case */
for ( s = dn; *s; s++ ) {
*s = TOUPPER( (unsigned char) *s );
}
return( dn );
}
/*
* dn_parent - return a copy of the dn of dn's parent

View File

@ -312,19 +312,23 @@ static RETSIGTYPE
wait4child( int sig )
{
int save_errno = errno;
#ifdef WNOHANG
errno = 0;
#ifdef HAVE_WAITPID
/*
* ### The wait3 vs. waitpid choice needs improvement.
* ### There are apparently systems where waitpid(-1, ...) fails, and
* ### others where waitpid should preferred over wait3 for some reason.
* ### Now wait3 is only here for reference, configure does not detect it.
*/
#if defined(HAVE_WAITPID) && defined(WNOHANG)
while ( waitpid( (pid_t)-1, NULL, WNOHANG ) >= 0 || errno == EINTR )
; /* NULL */
#else
#elif defined(HAVE_WAIT3) && defined(WNOHANG)
while ( wait3( NULL, WNOHANG, NULL ) >= 0 || errno == EINTR )
; /* NULL */
#endif
#else
(void) wait( NULL );
#endif
(void) SIGNAL( sig, wait4child );
(void) signal( sig, wait4child );
errno = save_errno;
}

View File

@ -130,8 +130,8 @@ void connection_done LDAP_P((Connection *));
* dn.c
*/
char * dn_normalize_internal LDAP_P(( char *dn, int correct_case ));
int dn_casecmp LDAP_P(( const char *dn1, const char *dn2 ));
char * dn_normalize LDAP_P(( char *dn ));
char * dn_normalize_case LDAP_P(( char *dn ));
char * dn_parent LDAP_P(( Backend *be, char *dn ));
char * dn_rdn LDAP_P(( Backend *be, char *dn ));
int dn_issuffix LDAP_P(( char *dn, char *suffix ));

View File

@ -273,10 +273,6 @@ send_search_entry(
! acl_access_allowed( acl, be, conn, e, a->a_vals[i], op,
ACL_READ, edn, matches) )
{
/* ### What the hell? Attributes with DN-syntax
* ### are only returned if we have access to
* ### the entry with that DN? Or...?
*/
continue;
}

View File

@ -106,7 +106,7 @@ pwdfile_search( struct ldop *op, FILE *ofp )
for ( pw = getpwent(); pw != NULL; pw = getpwent()) {
if (( entry = pw2entry( op, pw )) != NULL ) {
if ( oneentry ) {
if ( dn_casecmp( op->ldop_dn, entry->lde_dn ) == 0 ) {
if ( strcasecmp( op->ldop_dn, entry->lde_dn ) == 0 ) {
write_entry( op, entry, ofp );
break;
}

View File

@ -460,9 +460,6 @@ typedef struct slap_conn {
#define Statslog( level, fmt, connid, opid, arg1, arg2, arg3 )
#endif
#define dn_normalize(dn) dn_normalize_internal( dn, 0 )
#define dn_normalize_case(dn) dn_normalize_internal( dn, 1 )
#include "proto-slap.h"
LDAP_END_DECL

View File

@ -502,10 +502,6 @@ generate_new_centroids(
/* normalize the value */
for ( s = val[j]; *s; s++ ) {
/* May need other normalization here,
* unless that breaks compatibility
* with other centipedes
*/
*s = TOLOWER( (unsigned char) *s );
last = *s;
}

View File

@ -82,16 +82,18 @@ value_normalize(
int syntax
)
{
char *d;
char *d, *save;
if ( ! (syntax & SYNTAX_CIS) ) {
return;
}
if ( syntax & SYNTAX_DN ) {
(void) dn_normalize_case( s );
return;
}
if ( ! (syntax & SYNTAX_CIS) ) {
return;
}
save = s;
for ( d = s; *s; s++ ) {
if ( (syntax & SYNTAX_TEL) && (*s == ' ' || *s == '-') ) {
continue;
@ -110,16 +112,7 @@ value_cmp(
)
{
int rc;
unsigned char *s1, *s2;
if ( syntax & SYNTAX_DN ) /* #### TEST ### */
normalize = 3;
if ( normalize ) {
if ( ! (syntax & ~(SYNTAX_CIS | SYNTAX_CES | SYNTAX_BIN)) )
/* Normalization not needed,
* in SYNTAX_CIS's case because it's handled by strcascmp */
normalize = 0;
if ( normalize & 1 ) {
v1 = ber_bvdup( v1 );
value_normalize( v1->bv_val, syntax );
@ -128,22 +121,18 @@ value_cmp(
v2 = ber_bvdup( v2 );
value_normalize( v2->bv_val, syntax );
}
}
switch ( syntax ) {
case SYNTAX_CIS:
case (SYNTAX_CIS | SYNTAX_TEL):
case (SYNTAX_CIS | SYNTAX_DN):
rc = strcasecmp( v1->bv_val, v2->bv_val );
break;
case SYNTAX_DN:
case SYNTAX_CES:
rc = strcmp( v1->bv_val, v2->bv_val );
break;
default:
Debug( LDAP_DEBUG_ANY, "value_cmp: unknown syntax %d.\n", syntax, 0, 0);
/* Fall through */
case SYNTAX_BIN:
rc = (v1->bv_len == v2->bv_len
? memcmp( v1->bv_val, v2->bv_val, v1->bv_len )