fprintf( stderr, "%s",
escaped.bv_val );
ber_memfree( escaped.bv_val );
+ i = 1;
}
if ( f->f_sub_any != NULL ) {
for ( i = 0; f->f_sub_any[i] != NULL; i++ ) {
fprintf( stderr,
"*%s", escaped.bv_val );
ber_memfree( escaped.bv_val );
+ i = 0;
}
+ if ( i ) fprintf( stderr, "*" );
fprintf( stderr, /*(*/ ")" );
break;
str2subvals( const char *in, Filter *f )
{
char *nextstar, *val, *freeme;
- int gotstar;
+ int gotstar, rc = 0;
Debug( LDAP_DEBUG_FILTER, "str2subvals \"%s\"\n", in, 0, 0 );
gotstar = 0;
while ( val && *val ) {
- if ( (nextstar = ldap_pvt_find_wildcard( val )) != NULL )
+ if ( (nextstar = ldap_pvt_find_wildcard( val )) != NULL ) {
+ gotstar++;
+ if ( nextstar == val ) {
+ /* we got two stars in a row with no val! */
+ if ( gotstar > 1 ) {
+ rc = -1;
+ break;
+ }
+ val++;
+ continue;
+ }
*nextstar++ = '\0';
+ }
- ldap_pvt_filter_value_unescape( val );
-
- if ( gotstar == 0 ) {
- f->f_sub_initial = ber_bvstrdup( val );
+ if ( ldap_pvt_filter_value_unescape( val ) < 1 ) {
+ rc = -1;
+ break;
+ }
- } else if ( nextstar == NULL ) {
+ if ( nextstar == NULL ) {
f->f_sub_final = ber_bvstrdup( val );
+ } else if ( gotstar == 1 ) {
+ f->f_sub_initial = ber_bvstrdup( val );
+
} else {
- charray_add( (char ***) &f->f_sub_any, (char *) ber_bvstrdup( val ) );
+ ber_bvecadd( &f->f_sub_any, ber_bvstrdup( val ) );
}
- gotstar = 1;
val = nextstar;
}
free( freeme );
- return( 0 );
+ return( rc );
}
/*