mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-09 02:52:04 +08:00
UNDO LAST COMMIT.
This commit is contained in:
parent
45118be88e
commit
815a62930c
@ -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) {
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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 );
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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 );
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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 );
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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 ));
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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 )
|
||||
|
Loading…
Reference in New Issue
Block a user