mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-03-07 14:18:15 +08:00
Changed ma_rule_text to struct berval.
Changed get_filter to struct bervals
This commit is contained in:
parent
327f253183
commit
15f630545a
@ -172,16 +172,16 @@ parse_acl(
|
||||
}
|
||||
} else if ( strcasecmp( style, "base" ) == 0 ) {
|
||||
a->acl_dn_style = ACL_STYLE_BASE;
|
||||
ber_str2bv( right, 1, &a->acl_dn_pat );
|
||||
ber_str2bv( right, 0, 1, &a->acl_dn_pat );
|
||||
} else if ( strcasecmp( style, "one" ) == 0 ) {
|
||||
a->acl_dn_style = ACL_STYLE_ONE;
|
||||
ber_str2bv( right, 1, &a->acl_dn_pat );
|
||||
ber_str2bv( right, 0, 1, &a->acl_dn_pat );
|
||||
} else if ( strcasecmp( style, "subtree" ) == 0 ) {
|
||||
a->acl_dn_style = ACL_STYLE_SUBTREE;
|
||||
ber_str2bv( right, 1, &a->acl_dn_pat );
|
||||
ber_str2bv( right, 0, 1, &a->acl_dn_pat );
|
||||
} else if ( strcasecmp( style, "children" ) == 0 ) {
|
||||
a->acl_dn_style = ACL_STYLE_CHILDREN;
|
||||
ber_str2bv( right, 1, &a->acl_dn_pat );
|
||||
ber_str2bv( right, 0, 1, &a->acl_dn_pat );
|
||||
} else {
|
||||
fprintf( stderr,
|
||||
"%s: line %d: unknown dn style \"%s\" in to clause\n",
|
||||
@ -296,36 +296,39 @@ parse_acl(
|
||||
bv.bv_len = 1;
|
||||
|
||||
} else if ( strcasecmp( argv[i], "anonymous" ) == 0 ) {
|
||||
bv.bv_val = ch_strdup( "anonymous" );
|
||||
bv.bv_len = sizeof("anonymous")-1;
|
||||
ber_str2bv("anonymous",
|
||||
sizeof("anonymous")-1,
|
||||
1, &bv);
|
||||
|
||||
} else if ( strcasecmp( argv[i], "self" ) == 0 ) {
|
||||
bv.bv_val = ch_strdup( "self" );
|
||||
bv.bv_len = sizeof("self")-1;
|
||||
ber_str2bv("self",
|
||||
sizeof("self")-1,
|
||||
1, &bv);
|
||||
|
||||
} else if ( strcasecmp( argv[i], "users" ) == 0 ) {
|
||||
bv.bv_val = ch_strdup( "users" );
|
||||
bv.bv_len = sizeof("users")-1;
|
||||
ber_str2bv("users",
|
||||
sizeof("users")-1,
|
||||
1, &bv);
|
||||
|
||||
} else if ( strcasecmp( left, "dn" ) == 0 ) {
|
||||
if ( sty == ACL_STYLE_REGEX ) {
|
||||
b->a_dn_style = ACL_STYLE_REGEX;
|
||||
if( right == NULL ) {
|
||||
/* no '=' */
|
||||
bv.bv_val = ch_strdup( "users" );
|
||||
bv.bv_len = sizeof("users")-1;
|
||||
|
||||
ber_str2bv("users",
|
||||
sizeof("users")-1,
|
||||
1, &bv);
|
||||
} else if (*right == '\0' ) {
|
||||
/* dn="" */
|
||||
bv.bv_val = ch_strdup( "anonymous" );
|
||||
bv.bv_len = sizeof("anonymous")-1;
|
||||
|
||||
ber_str2bv("anonymous",
|
||||
sizeof("anonymous")-1,
|
||||
1, &bv);
|
||||
} else if ( strcmp( right, "*" ) == 0 ) {
|
||||
/* dn=* */
|
||||
/* any or users? users for now */
|
||||
bv.bv_val = ch_strdup( "users" );
|
||||
bv.bv_len = sizeof("users")-1;
|
||||
|
||||
ber_str2bv("users",
|
||||
sizeof("users")-1,
|
||||
1, &bv);
|
||||
} else if ( strcmp( right, ".+" ) == 0
|
||||
|| strcmp( right, "^.+" ) == 0
|
||||
|| strcmp( right, ".+$" ) == 0
|
||||
@ -333,9 +336,9 @@ parse_acl(
|
||||
|| strcmp( right, ".+$$" ) == 0
|
||||
|| strcmp( right, "^.+$$" ) == 0 )
|
||||
{
|
||||
bv.bv_val = ch_strdup( "users" );
|
||||
bv.bv_len = sizeof("users")-1;
|
||||
|
||||
ber_str2bv("users",
|
||||
sizeof("users")-1,
|
||||
1, &bv);
|
||||
} else if ( strcmp( right, ".*" ) == 0
|
||||
|| strcmp( right, "^.*" ) == 0
|
||||
|| strcmp( right, ".*$" ) == 0
|
||||
@ -343,8 +346,9 @@ parse_acl(
|
||||
|| strcmp( right, ".*$$" ) == 0
|
||||
|| strcmp( right, "^.*$$" ) == 0 )
|
||||
{
|
||||
bv.bv_val = ch_strdup( "*" );
|
||||
bv.bv_len = 1;
|
||||
ber_str2bv("*",
|
||||
sizeof("*")-1,
|
||||
1, &bv);
|
||||
|
||||
} else {
|
||||
bv.bv_val = right;
|
||||
@ -358,7 +362,7 @@ parse_acl(
|
||||
acl_usage();
|
||||
|
||||
} else {
|
||||
ber_str2bv( right, 1, &bv );
|
||||
ber_str2bv( right, 0, 1, &bv );
|
||||
}
|
||||
|
||||
} else {
|
||||
@ -470,7 +474,7 @@ parse_acl(
|
||||
b->a_group_pat = bv;
|
||||
} else {
|
||||
struct berval *ndn = NULL;
|
||||
ber_str2bv( right, 0, &bv );
|
||||
ber_str2bv( right, 0, 0, &bv );
|
||||
dnNormalize( NULL, &bv, &ndn );
|
||||
b->a_group_pat = *ndn;
|
||||
free(ndn);
|
||||
@ -702,7 +706,7 @@ parse_acl(
|
||||
}
|
||||
|
||||
b->a_set_style = sty;
|
||||
ber_str2bv( right, 1, &b->a_set_pat );
|
||||
ber_str2bv( right, 0, 1, &b->a_set_pat );
|
||||
|
||||
continue;
|
||||
}
|
||||
|
@ -18,14 +18,14 @@ static int get_filter_list(
|
||||
Connection *conn,
|
||||
BerElement *ber,
|
||||
Filter **f,
|
||||
char **fstr,
|
||||
struct berval *fstr,
|
||||
const char **text );
|
||||
|
||||
static int get_substring_filter(
|
||||
Connection *conn,
|
||||
BerElement *ber,
|
||||
Filter *f,
|
||||
char **fstr,
|
||||
struct berval *fstr,
|
||||
const char **text );
|
||||
|
||||
static int filter_escape_value(
|
||||
@ -37,14 +37,14 @@ get_filter(
|
||||
Connection *conn,
|
||||
BerElement *ber,
|
||||
Filter **filt,
|
||||
char **fstr,
|
||||
struct berval *fstr,
|
||||
const char **text )
|
||||
{
|
||||
ber_tag_t tag;
|
||||
ber_len_t len;
|
||||
int err;
|
||||
Filter *f;
|
||||
char *ftmp = NULL;
|
||||
struct berval ftmp = { 0, NULL };
|
||||
struct berval escaped;
|
||||
|
||||
#ifdef NEW_LOGGING
|
||||
@ -97,7 +97,7 @@ get_filter(
|
||||
f->f_next = NULL;
|
||||
|
||||
err = LDAP_SUCCESS;
|
||||
*fstr = NULL;
|
||||
*fstr = ftmp;
|
||||
f->f_choice = tag;
|
||||
|
||||
switch ( f->f_choice ) {
|
||||
@ -117,11 +117,13 @@ get_filter(
|
||||
|
||||
filter_escape_value( f->f_av_value, &escaped );
|
||||
|
||||
*fstr = ch_malloc( sizeof("(=)")
|
||||
fstr->bv_len = sizeof("(=)")-1
|
||||
+ f->f_av_desc->ad_cname.bv_len
|
||||
+ escaped.bv_len );
|
||||
+ escaped.bv_len;
|
||||
|
||||
sprintf( *fstr, "(%s=%s)",
|
||||
fstr->bv_val = ch_malloc( fstr->bv_len + 1 );
|
||||
|
||||
sprintf( fstr->bv_val, "(%s=%s)",
|
||||
f->f_av_desc->ad_cname.bv_val,
|
||||
escaped.bv_val );
|
||||
|
||||
@ -152,11 +154,13 @@ get_filter(
|
||||
|
||||
filter_escape_value( f->f_av_value, &escaped );
|
||||
|
||||
*fstr = ch_malloc( sizeof("(>=)")
|
||||
fstr->bv_len = sizeof("(>=)")-1
|
||||
+ f->f_av_desc->ad_cname.bv_len
|
||||
+ escaped.bv_len );
|
||||
+ escaped.bv_len;
|
||||
|
||||
sprintf( *fstr, "(%s>=%s)",
|
||||
fstr->bv_val = ch_malloc( fstr->bv_len + 1 );
|
||||
|
||||
sprintf( fstr->bv_val, "(%s>=%s)",
|
||||
f->f_av_desc->ad_cname.bv_val,
|
||||
escaped.bv_val );
|
||||
|
||||
@ -178,11 +182,13 @@ get_filter(
|
||||
|
||||
filter_escape_value( f->f_av_value, &escaped );
|
||||
|
||||
*fstr = ch_malloc( sizeof("(<=)")
|
||||
fstr->bv_len = sizeof("(<=)")-1
|
||||
+ f->f_av_desc->ad_cname.bv_len
|
||||
+ escaped.bv_len );
|
||||
+ escaped.bv_len;
|
||||
|
||||
sprintf( *fstr, "(%s<=%s)",
|
||||
fstr->bv_val = ch_malloc( fstr->bv_len + 1 );
|
||||
|
||||
sprintf( fstr->bv_val, "(%s<=%s)",
|
||||
f->f_av_desc->ad_cname.bv_val,
|
||||
escaped.bv_val );
|
||||
|
||||
@ -211,7 +217,8 @@ get_filter(
|
||||
/* unrecognized attribute description or other error */
|
||||
f->f_choice = SLAPD_FILTER_COMPUTED;
|
||||
f->f_result = LDAP_COMPARE_FALSE;
|
||||
*fstr = ch_strdup( "(unrecogized=*)" );
|
||||
ber_str2bv("(unrecognized=*)",
|
||||
sizeof("(unrecognized=*)")-1, 1, fstr);
|
||||
ch_free( type.bv_val );
|
||||
err = LDAP_SUCCESS;
|
||||
break;
|
||||
@ -219,9 +226,10 @@ get_filter(
|
||||
|
||||
ch_free( type.bv_val );
|
||||
|
||||
*fstr = ch_malloc( sizeof("(=*)")
|
||||
+ f->f_desc->ad_cname.bv_len );
|
||||
sprintf( *fstr, "(%s=*)",
|
||||
fstr->bv_len = sizeof("(=*)") - 1
|
||||
+ f->f_desc->ad_cname.bv_len;
|
||||
fstr->bv_val = ch_malloc( fstr->bv_len + 1);
|
||||
sprintf( fstr->bv_val, "(%s=*)",
|
||||
f->f_desc->ad_cname.bv_val );
|
||||
|
||||
} break;
|
||||
@ -240,11 +248,12 @@ get_filter(
|
||||
|
||||
filter_escape_value( f->f_av_value, &escaped );
|
||||
|
||||
*fstr = ch_malloc( sizeof("(~=)")
|
||||
fstr->bv_len = sizeof("(~=)") - 1
|
||||
+ f->f_av_desc->ad_cname.bv_len
|
||||
+ escaped.bv_len );
|
||||
+ escaped.bv_len;
|
||||
fstr->bv_val = ch_malloc( fstr->bv_len + 1);
|
||||
|
||||
sprintf( *fstr, "(%s~=%s)",
|
||||
sprintf( fstr->bv_val, "(%s~=%s)",
|
||||
f->f_av_desc->ad_cname.bv_val,
|
||||
escaped.bv_val );
|
||||
|
||||
@ -262,10 +271,10 @@ get_filter(
|
||||
if ( err != LDAP_SUCCESS ) {
|
||||
break;
|
||||
}
|
||||
*fstr = ch_malloc( sizeof("(&)")
|
||||
+ ( ftmp == NULL ? 0 : strlen( ftmp ) ) );
|
||||
sprintf( *fstr, "(&%s)",
|
||||
ftmp == NULL ? "" : ftmp );
|
||||
fstr->bv_len = sizeof("(&)") - 1 + ftmp.bv_len;
|
||||
fstr->bv_val = ch_malloc( fstr->bv_len + 1 );
|
||||
sprintf( fstr->bv_val, "(&%s)",
|
||||
ftmp.bv_len ? ftmp.bv_val : "" );
|
||||
break;
|
||||
|
||||
case LDAP_FILTER_OR:
|
||||
@ -279,10 +288,10 @@ get_filter(
|
||||
if ( err != LDAP_SUCCESS ) {
|
||||
break;
|
||||
}
|
||||
*fstr = ch_malloc( sizeof("(!)")
|
||||
+ ( ftmp == NULL ? 0 : strlen( ftmp ) ) );
|
||||
sprintf( *fstr, "(|%s)",
|
||||
ftmp == NULL ? "" : ftmp );
|
||||
fstr->bv_len = sizeof("(|)") - 1 + ftmp.bv_len;
|
||||
fstr->bv_val = ch_malloc( fstr->bv_len + 1 );
|
||||
sprintf( fstr->bv_val, "(|%s)",
|
||||
ftmp.bv_len ? ftmp.bv_val : "" );
|
||||
break;
|
||||
|
||||
case LDAP_FILTER_NOT:
|
||||
@ -297,10 +306,10 @@ get_filter(
|
||||
if ( err != LDAP_SUCCESS ) {
|
||||
break;
|
||||
}
|
||||
*fstr = ch_malloc( sizeof("(!)")
|
||||
+ ( ftmp == NULL ? 0 : strlen( ftmp ) ) );
|
||||
sprintf( *fstr, "(!%s)",
|
||||
ftmp == NULL ? "" : ftmp );
|
||||
fstr->bv_len = sizeof("(!)") - 1 + ftmp.bv_len;
|
||||
fstr->bv_val = ch_malloc( fstr->bv_len + 1 );
|
||||
sprintf( fstr->bv_val, "(!%s)",
|
||||
ftmp.bv_len ? ftmp.bv_val : "" );
|
||||
break;
|
||||
|
||||
case LDAP_FILTER_EXT:
|
||||
@ -320,16 +329,17 @@ get_filter(
|
||||
|
||||
filter_escape_value( f->f_mr_value, &escaped );
|
||||
|
||||
*fstr = ch_malloc( sizeof("(:dn::=)")
|
||||
fstr->bv_len = sizeof("(:dn::=)") - 1
|
||||
+ (f->f_mr_desc ? f->f_mr_desc->ad_cname.bv_len : 0)
|
||||
+ (f->f_mr_rule_text ? strlen(f->f_mr_rule_text) : 0)
|
||||
+ escaped.bv_len );
|
||||
+ f->f_mr_rule_text.bv_len
|
||||
+ escaped.bv_len;
|
||||
|
||||
sprintf( *fstr, "(%s%s%s%s:=%s)",
|
||||
fstr->bv_val = ch_malloc( fstr->bv_len + 1 );
|
||||
sprintf( fstr->bv_val, "(%s%s%s%s:=%s)",
|
||||
(f->f_mr_desc ? f->f_mr_desc->ad_cname.bv_val : ""),
|
||||
(f->f_mr_dnattrs ? ":dn" : ""),
|
||||
(f->f_mr_rule_text ? ":" : ""),
|
||||
(f->f_mr_rule_text ? f->f_mr_rule_text : ""),
|
||||
(f->f_mr_rule_text.bv_len ? ":" : ""),
|
||||
(f->f_mr_rule_text.bv_len ? f->f_mr_rule_text.bv_val : ""),
|
||||
escaped.bv_val );
|
||||
|
||||
ber_memfree( escaped.bv_val );
|
||||
@ -347,22 +357,24 @@ get_filter(
|
||||
#endif
|
||||
f->f_choice = SLAPD_FILTER_COMPUTED;
|
||||
f->f_result = SLAPD_COMPARE_UNDEFINED;
|
||||
*fstr = ch_strdup( "(undefined)" );
|
||||
ber_str2bv( "(undefined)", sizeof("(undefined)") - 1,
|
||||
1, fstr );
|
||||
break;
|
||||
}
|
||||
|
||||
free( ftmp );
|
||||
free( ftmp.bv_val );
|
||||
|
||||
if ( err != LDAP_SUCCESS ) {
|
||||
if ( *fstr != NULL ) {
|
||||
free( *fstr );
|
||||
if ( fstr->bv_val != NULL ) {
|
||||
free( fstr->bv_val );
|
||||
}
|
||||
|
||||
if( err != SLAPD_DISCONNECT ) {
|
||||
/* ignore error */
|
||||
f->f_choice = SLAPD_FILTER_COMPUTED;
|
||||
f->f_result = SLAPD_COMPARE_UNDEFINED;
|
||||
*fstr = ch_strdup( "(badfilter)" );
|
||||
ber_str2bv( "(badfilter)", sizeof("(badfilter)") - 1,
|
||||
1, fstr );
|
||||
err = LDAP_SUCCESS;
|
||||
*filt = f;
|
||||
|
||||
@ -384,14 +396,15 @@ get_filter(
|
||||
|
||||
static int
|
||||
get_filter_list( Connection *conn, BerElement *ber,
|
||||
Filter **f, char **fstr,
|
||||
Filter **f, struct berval *fstr,
|
||||
const char **text )
|
||||
{
|
||||
Filter **new;
|
||||
int err;
|
||||
ber_tag_t tag;
|
||||
ber_len_t len;
|
||||
char *last, *ftmp;
|
||||
char *last;
|
||||
struct berval ftmp;
|
||||
|
||||
#ifdef NEW_LOGGING
|
||||
LDAP_LOG(( "filter", LDAP_LEVEL_ENTRY,
|
||||
@ -399,7 +412,6 @@ get_filter_list( Connection *conn, BerElement *ber,
|
||||
#else
|
||||
Debug( LDAP_DEBUG_FILTER, "begin get_filter_list\n", 0, 0, 0 );
|
||||
#endif
|
||||
*fstr = NULL;
|
||||
new = f;
|
||||
for ( tag = ber_first_element( ber, &len, &last ); tag != LBER_DEFAULT;
|
||||
tag = ber_next_element( ber, &len, last ) )
|
||||
@ -408,13 +420,15 @@ get_filter_list( Connection *conn, BerElement *ber,
|
||||
if ( err != LDAP_SUCCESS )
|
||||
return( err );
|
||||
|
||||
if ( *fstr == NULL ) {
|
||||
if ( !fstr->bv_len ) {
|
||||
*fstr = ftmp;
|
||||
} else {
|
||||
*fstr = ch_realloc( *fstr, strlen( *fstr ) +
|
||||
strlen( ftmp ) + 1 );
|
||||
strcat( *fstr, ftmp );
|
||||
free( ftmp );
|
||||
int i = fstr->bv_len;
|
||||
fstr->bv_len += ftmp.bv_len;
|
||||
fstr->bv_val = ch_realloc( fstr->bv_val,
|
||||
fstr->bv_len + 1 );
|
||||
strcpy( fstr->bv_val+i, ftmp.bv_val );
|
||||
free( ftmp.bv_val );
|
||||
}
|
||||
new = &(*new)->f_next;
|
||||
}
|
||||
@ -434,7 +448,7 @@ get_substring_filter(
|
||||
Connection *conn,
|
||||
BerElement *ber,
|
||||
Filter *f,
|
||||
char **fstr,
|
||||
struct berval *fstr,
|
||||
const char **text
|
||||
)
|
||||
{
|
||||
@ -469,7 +483,7 @@ get_substring_filter(
|
||||
ch_free( f->f_sub );
|
||||
f->f_choice = SLAPD_FILTER_COMPUTED;
|
||||
f->f_result = SLAPD_COMPARE_UNDEFINED;
|
||||
*fstr = ch_strdup( "(undefined)" );
|
||||
ber_str2bv( "(undefined)", sizeof("(undefined)")-1, 1, fstr );
|
||||
return LDAP_SUCCESS;
|
||||
}
|
||||
|
||||
@ -477,11 +491,10 @@ get_substring_filter(
|
||||
f->f_sub_any = NULL;
|
||||
f->f_sub_final = NULL;
|
||||
|
||||
if( fstr ) {
|
||||
*fstr = ch_malloc( sizeof("(=" /*)*/) +
|
||||
f->f_sub_desc->ad_cname.bv_len );
|
||||
sprintf( *fstr, "(%s=" /*)*/, f->f_sub_desc->ad_cname.bv_val );
|
||||
}
|
||||
fstr->bv_len = sizeof("(=" /*)*/) - 1 +
|
||||
f->f_sub_desc->ad_cname.bv_len;
|
||||
fstr->bv_val = ch_malloc( fstr->bv_len + 1 );
|
||||
sprintf( fstr->bv_val, "(%s=" /*)*/, f->f_sub_desc->ad_cname.bv_val );
|
||||
|
||||
for ( tag = ber_first_element( ber, &len, &last ); tag != LBER_DEFAULT;
|
||||
tag = ber_next_element( ber, &len, last ) )
|
||||
@ -560,11 +573,13 @@ get_substring_filter(
|
||||
|
||||
f->f_sub_initial = value;
|
||||
|
||||
if( fstr ) {
|
||||
if( fstr->bv_val ) {
|
||||
int i = fstr->bv_len;
|
||||
filter_escape_value( value, &escaped );
|
||||
*fstr = ch_realloc( *fstr,
|
||||
strlen( *fstr ) + escaped.bv_len + 1 );
|
||||
strcat( *fstr, escaped.bv_val );
|
||||
fstr->bv_len += escaped.bv_len;
|
||||
fstr->bv_val = ch_realloc( fstr->bv_val,
|
||||
fstr->bv_len + 1 );
|
||||
strcpy( fstr->bv_val+i, escaped.bv_val );
|
||||
ber_memfree( escaped.bv_val );
|
||||
}
|
||||
break;
|
||||
@ -588,12 +603,14 @@ get_substring_filter(
|
||||
goto return_error;
|
||||
}
|
||||
|
||||
if( fstr ) {
|
||||
if( fstr->bv_val ) {
|
||||
int i = fstr->bv_len;
|
||||
filter_escape_value( value, &escaped );
|
||||
*fstr = ch_realloc( *fstr,
|
||||
strlen( *fstr ) + escaped.bv_len + 2 );
|
||||
strcat( *fstr, "*" );
|
||||
strcat( *fstr, escaped.bv_val );
|
||||
fstr->bv_len += escaped.bv_len + 2;
|
||||
fstr->bv_val = ch_realloc( fstr->bv_val,
|
||||
fstr->bv_len + 1 );
|
||||
strcpy( fstr->bv_val+i, "*" );
|
||||
strcpy( fstr->bv_val+i+1, escaped.bv_val );
|
||||
ber_memfree( escaped.bv_val );
|
||||
}
|
||||
break;
|
||||
@ -614,12 +631,14 @@ get_substring_filter(
|
||||
|
||||
f->f_sub_final = value;
|
||||
|
||||
if( fstr ) {
|
||||
if( fstr->bv_val ) {
|
||||
int i = fstr->bv_len;
|
||||
filter_escape_value( value, &escaped );
|
||||
*fstr = ch_realloc( *fstr,
|
||||
strlen( *fstr ) + escaped.bv_len + 2 );
|
||||
strcat( *fstr, "*" );
|
||||
strcat( *fstr, escaped.bv_val );
|
||||
fstr->bv_len += escaped.bv_len + 2;
|
||||
fstr->bv_val = ch_realloc( fstr->bv_val,
|
||||
fstr->bv_len + 1 );
|
||||
strcpy( fstr->bv_val+i, "*" );
|
||||
strcpy( fstr->bv_val+i+1, escaped.bv_val );
|
||||
ber_memfree( escaped.bv_val );
|
||||
}
|
||||
break;
|
||||
@ -646,9 +665,10 @@ return_error:
|
||||
Debug( LDAP_DEBUG_FILTER, " error=%ld\n",
|
||||
(long) rc, 0, 0 );
|
||||
#endif
|
||||
if( fstr ) {
|
||||
free( *fstr );
|
||||
*fstr = NULL;
|
||||
if( fstr->bv_val ) {
|
||||
free( fstr->bv_val );
|
||||
fstr->bv_val = NULL;
|
||||
fstr->bv_len = 0;
|
||||
}
|
||||
|
||||
ber_bvfree( f->f_sub_initial );
|
||||
@ -659,12 +679,15 @@ return_error:
|
||||
}
|
||||
}
|
||||
|
||||
if( fstr ) {
|
||||
*fstr = ch_realloc( *fstr, strlen( *fstr ) + 3 );
|
||||
if( fstr->bv_val ) {
|
||||
int i = fstr->bv_len;
|
||||
fstr->bv_len += 3;
|
||||
fstr->bv_val = ch_realloc( fstr->bv_val, fstr->bv_len + 3 );
|
||||
if ( f->f_sub_final == NULL ) {
|
||||
strcat( *fstr, "*" );
|
||||
strcpy( fstr->bv_val+i, "*" );
|
||||
i++;
|
||||
}
|
||||
strcat( *fstr, /*(*/ ")" );
|
||||
strcpy( fstr->bv_val+i, /*(*/ ")" );
|
||||
}
|
||||
|
||||
#ifdef NEW_LOGGING
|
||||
|
@ -21,7 +21,7 @@ mra_free(
|
||||
int freeit
|
||||
)
|
||||
{
|
||||
ch_free( mra->ma_rule_text );
|
||||
ch_free( mra->ma_rule_text.bv_val );
|
||||
ber_bvfree( mra->ma_value );
|
||||
if ( freeit ) {
|
||||
ch_free( (char *) mra );
|
||||
@ -42,7 +42,8 @@ get_mra(
|
||||
|
||||
ma = ch_malloc( sizeof( MatchingRuleAssertion ) );
|
||||
ma->ma_rule = NULL;
|
||||
ma->ma_rule_text = NULL;
|
||||
ma->ma_rule_text.bv_val = NULL;
|
||||
ma->ma_rule_text.bv_len = 0;
|
||||
ma->ma_desc = NULL;
|
||||
ma->ma_dnattrs = 0;
|
||||
ma->ma_value = NULL;
|
||||
@ -63,11 +64,11 @@ get_mra(
|
||||
}
|
||||
|
||||
if ( tag == LDAP_FILTER_EXT_OID ) {
|
||||
rc = ber_scanf( ber, "a", &ma->ma_rule_text );
|
||||
rc = ber_scanf( ber, "o", &ma->ma_rule_text );
|
||||
if ( rc == LBER_ERROR ) {
|
||||
#ifdef NEW_LOGGING
|
||||
LDAP_LOG(( "operation", LDAP_LEVEL_ERR,
|
||||
"get_mra: ber_scanf(\"a\") failure.\n" ));
|
||||
"get_mra: ber_scanf(\"o\") failure.\n" ));
|
||||
#else
|
||||
Debug( LDAP_DEBUG_ANY, " get_mra ber_scanf for mr\n", 0, 0, 0 );
|
||||
#endif
|
||||
@ -76,7 +77,7 @@ get_mra(
|
||||
mra_free( ma, 1 );
|
||||
return SLAPD_DISCONNECT;
|
||||
}
|
||||
ma->ma_rule = mr_find( ma->ma_rule_text );
|
||||
ma->ma_rule = mr_find( ma->ma_rule_text.bv_val );
|
||||
|
||||
rc = ber_scanf( ber, "t", &tag );
|
||||
|
||||
|
@ -445,7 +445,7 @@ LDAP_SLAPD_F (int) get_filter LDAP_P((
|
||||
Connection *conn,
|
||||
BerElement *ber,
|
||||
Filter **filt,
|
||||
char **fstr,
|
||||
struct berval *fstr,
|
||||
const char **text ));
|
||||
|
||||
LDAP_SLAPD_F (void) filter_free LDAP_P(( Filter *f ));
|
||||
|
@ -36,7 +36,7 @@ do_search(
|
||||
struct berval base = { 0, NULL };
|
||||
struct berval *pbase = NULL;
|
||||
struct berval *nbase = NULL;
|
||||
char *fstr = NULL;
|
||||
struct berval fstr = { 0, NULL };
|
||||
Filter *filter = NULL;
|
||||
struct berval **attrs = NULL;
|
||||
Backend *be;
|
||||
@ -165,9 +165,9 @@ do_search(
|
||||
|
||||
#ifdef NEW_LOGGING
|
||||
LDAP_LOG(( "operation", LDAP_LEVEL_ARGS,
|
||||
"do_search: conn %d filter: %s\n", conn->c_connid, fstr ));
|
||||
"do_search: conn %d filter: %s\n", conn->c_connid, fstr.bv_val ));
|
||||
#else
|
||||
Debug( LDAP_DEBUG_ARGS, " filter: %s\n", fstr, 0, 0 );
|
||||
Debug( LDAP_DEBUG_ARGS, " filter: %s\n", fstr.bv_val, 0, 0 );
|
||||
#endif
|
||||
|
||||
|
||||
@ -221,7 +221,7 @@ do_search(
|
||||
|
||||
Statslog( LDAP_DEBUG_STATS,
|
||||
"conn=%ld op=%d SRCH base=\"%s\" scope=%d filter=\"%s\"\n",
|
||||
op->o_connid, op->o_opid, pbase->bv_val, scope, fstr );
|
||||
op->o_connid, op->o_opid, pbase->bv_val, scope, fstr.bv_val );
|
||||
|
||||
manageDSAit = get_manageDSAit( op );
|
||||
|
||||
@ -329,7 +329,7 @@ do_search(
|
||||
if ( be->be_search ) {
|
||||
(*be->be_search)( be, conn, op, pbase->bv_val, nbase->bv_val,
|
||||
scope, deref, sizelimit,
|
||||
timelimit, filter, fstr, attrs, attrsonly );
|
||||
timelimit, filter, fstr.bv_val, attrs, attrsonly );
|
||||
} else {
|
||||
send_ldap_result( conn, op, rc = LDAP_UNWILLING_TO_PERFORM,
|
||||
NULL, "operation not supported within namingContext", NULL, NULL );
|
||||
@ -340,7 +340,7 @@ return_results:;
|
||||
if( pbase != NULL) ber_bvfree( pbase );
|
||||
if( nbase != NULL) ber_bvfree( nbase );
|
||||
|
||||
if( fstr != NULL) free( fstr );
|
||||
if( fstr.bv_val != NULL) free( fstr.bv_val );
|
||||
if( filter != NULL) filter_free( filter );
|
||||
if ( attrs != NULL ) {
|
||||
ber_bvecfree( attrs );
|
||||
|
@ -543,7 +543,7 @@ typedef struct slap_ss_assertion {
|
||||
|
||||
typedef struct slap_mr_assertion {
|
||||
MatchingRule *ma_rule; /* optional */
|
||||
char *ma_rule_text; /* optional */
|
||||
struct berval ma_rule_text; /* optional */
|
||||
AttributeDescription *ma_desc; /* optional */
|
||||
int ma_dnattrs; /* boolean */
|
||||
struct berval *ma_value; /* required */
|
||||
|
Loading…
Reference in New Issue
Block a user