mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-21 03:10:25 +08:00
use /-* for all parents; ignore /-0; check syntax; better parsing
This commit is contained in:
parent
4137870344
commit
a4b1ba0b5f
@ -650,27 +650,33 @@ slap_set_filter( SLAP_SET_GATHER gatherer,
|
||||
|
||||
case '-':
|
||||
if ( ( SF_TOP() == (void *)'/' )
|
||||
&& ( *filter >= '0' || *filter <= '9' ) )
|
||||
&& ( *filter == '*' || ASCII_DIGIT( *filter ) ) )
|
||||
{
|
||||
int parent = 0;
|
||||
int count = 1;
|
||||
int i;
|
||||
for ( len = 1;
|
||||
( c = filter[ len ] )
|
||||
&& ( c >= '0' && c <= '9' );
|
||||
len++ )
|
||||
/* count */ ;
|
||||
for ( i = len ; i > 0 ; i-- ) {
|
||||
parent += (int)( filter[ i - 1 ] - '0' ) * count;
|
||||
count *= 10;
|
||||
}
|
||||
SF_POP();
|
||||
if ( parent == 0 ) {
|
||||
|
||||
if ( *filter == '*' ) {
|
||||
set = set_parents( cp, SF_POP() );
|
||||
filter++;
|
||||
|
||||
} else {
|
||||
set = set_parent( cp, SF_POP(), parent );
|
||||
char *next = NULL;
|
||||
long parent = strtol( filter, &next, 10 );
|
||||
|
||||
if ( next == filter ) {
|
||||
SF_ERROR( syntax );
|
||||
}
|
||||
|
||||
set = SF_POP();
|
||||
if ( parent != 0 ) {
|
||||
set = set_parent( cp, set, parent );
|
||||
}
|
||||
filter = next;
|
||||
}
|
||||
filter += len;
|
||||
|
||||
if ( set == NULL ) {
|
||||
SF_ERROR( memory );
|
||||
}
|
||||
|
||||
SF_PUSH( set );
|
||||
set = NULL;
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user