mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-21 03:10:25 +08:00
Fix ITS#4267, don't bother with unique_search if no relevant attributes
were modified. Also use tmpmem for the constructed filter.
This commit is contained in:
parent
6650f07f50
commit
4dbc76ebef
@ -384,7 +384,7 @@ static int unique_search(
|
|||||||
nop->o_bd = on->on_info->oi_origdb;
|
nop->o_bd = on->on_info->oi_origdb;
|
||||||
rc = nop->o_bd->be_search(nop, &nrs);
|
rc = nop->o_bd->be_search(nop, &nrs);
|
||||||
filter_free_x(nop, nop->ors_filter);
|
filter_free_x(nop, nop->ors_filter);
|
||||||
ch_free( key );
|
op->o_tmpfree( key, op->o_tmpmemctx );
|
||||||
|
|
||||||
if(rc != LDAP_SUCCESS && rc != LDAP_NO_SUCH_OBJECT) {
|
if(rc != LDAP_SUCCESS && rc != LDAP_NO_SUCH_OBJECT) {
|
||||||
op->o_bd->bd_info = (BackendInfo *) on->on_info;
|
op->o_bd->bd_info = (BackendInfo *) on->on_info;
|
||||||
@ -404,6 +404,8 @@ static int unique_search(
|
|||||||
return(SLAP_CB_CONTINUE);
|
return(SLAP_CB_CONTINUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define ALLOC_EXTRA 16 /* extra slop */
|
||||||
|
|
||||||
static int unique_add(
|
static int unique_add(
|
||||||
Operation *op,
|
Operation *op,
|
||||||
SlapReply *rs
|
SlapReply *rs
|
||||||
@ -415,7 +417,7 @@ static int unique_add(
|
|||||||
|
|
||||||
Attribute *a;
|
Attribute *a;
|
||||||
char *key, *kp;
|
char *key, *kp;
|
||||||
int ks = 16;
|
int ks = 0;
|
||||||
|
|
||||||
Debug(LDAP_DEBUG_TRACE, "==> unique_add <%s>\n", op->o_req_dn.bv_val, 0, 0);
|
Debug(LDAP_DEBUG_TRACE, "==> unique_add <%s>\n", op->o_req_dn.bv_val, 0, 0);
|
||||||
|
|
||||||
@ -438,7 +440,11 @@ static int unique_add(
|
|||||||
ks = count_filter_len(ud, a->a_desc, a->a_vals, ks);
|
ks = count_filter_len(ud, a->a_desc, a->a_vals, ks);
|
||||||
}
|
}
|
||||||
|
|
||||||
key = ch_malloc(ks);
|
if ( !ks )
|
||||||
|
return SLAP_CB_CONTINUE;
|
||||||
|
|
||||||
|
ks += ALLOC_EXTRA;
|
||||||
|
key = op->o_tmpalloc(ks, op->o_tmpmemctx);
|
||||||
|
|
||||||
kp = key + sprintf(key, "(|");
|
kp = key + sprintf(key, "(|");
|
||||||
|
|
||||||
@ -465,7 +471,7 @@ static int unique_modify(
|
|||||||
|
|
||||||
Modifications *m;
|
Modifications *m;
|
||||||
char *key, *kp;
|
char *key, *kp;
|
||||||
int ks = 16; /* a handful of extra bytes */
|
int ks = 0;
|
||||||
|
|
||||||
Debug(LDAP_DEBUG_TRACE, "==> unique_modify <%s>\n", op->o_req_dn.bv_val, 0, 0);
|
Debug(LDAP_DEBUG_TRACE, "==> unique_modify <%s>\n", op->o_req_dn.bv_val, 0, 0);
|
||||||
|
|
||||||
@ -489,7 +495,11 @@ static int unique_modify(
|
|||||||
ks = count_filter_len(ud, m->sml_desc, m->sml_values, ks);
|
ks = count_filter_len(ud, m->sml_desc, m->sml_values, ks);
|
||||||
}
|
}
|
||||||
|
|
||||||
key = ch_malloc(ks);
|
if ( !ks )
|
||||||
|
return SLAP_CB_CONTINUE;
|
||||||
|
|
||||||
|
ks += ALLOC_EXTRA;
|
||||||
|
key = op->o_tmpalloc(ks, op->o_tmpmemctx);
|
||||||
|
|
||||||
kp = key + sprintf(key, "(|");
|
kp = key + sprintf(key, "(|");
|
||||||
|
|
||||||
@ -516,7 +526,7 @@ static int unique_modrdn(
|
|||||||
Operation nop = *op;
|
Operation nop = *op;
|
||||||
|
|
||||||
char *key, *kp;
|
char *key, *kp;
|
||||||
int i, ks = 16; /* a handful of extra bytes */
|
int i, ks = 0;
|
||||||
LDAPRDN newrdn;
|
LDAPRDN newrdn;
|
||||||
struct berval bv[2];
|
struct berval bv[2];
|
||||||
|
|
||||||
@ -553,7 +563,11 @@ static int unique_modrdn(
|
|||||||
ks = count_filter_len(ud, newrdn[i]->la_private, bv, ks);
|
ks = count_filter_len(ud, newrdn[i]->la_private, bv, ks);
|
||||||
}
|
}
|
||||||
|
|
||||||
key = ch_malloc(ks);
|
if ( !ks )
|
||||||
|
return SLAP_CB_CONTINUE;
|
||||||
|
|
||||||
|
ks += ALLOC_EXTRA;
|
||||||
|
key = op->o_tmpalloc(ks, op->o_tmpmemctx);
|
||||||
kp = key + sprintf(key, "(|");
|
kp = key + sprintf(key, "(|");
|
||||||
|
|
||||||
for(i = 0; newrdn[i]; i++) {
|
for(i = 0; newrdn[i]; i++) {
|
||||||
|
Loading…
Reference in New Issue
Block a user