I encount a strange
problem while using variable allocated by ber_memalloc_x().
For each operation
request, slapd will malloc a buffer to contain the DN and NDN by using
ber_memalloc_x() for fields o_req_dn & o_req_ndn in struct operation.
Now I want to
rewrite the DN and NDN myself, and below is the code.
I always get segment
fault while running it.
But when I set
MALLOC_CHECK_, the code does work and will not be crashed.
So what's the matter
of my code?
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
...
wrap_dn(op->o_req_dn,
op->o_tmpmemctx);
...
wrap_dn(struct
berval *dn, void *ctx)
{
char *tmp_buf=NULL, *psub=NULL;
int len_tmp_buf=0;
lem_tmp_buf = dn->bv_len + 5;
dn->bv_val = LDAP_REALLOCX(dn->bv_val, len_tmp_buf,
ctx);
dn->bv_len = len_tmp_buf;
tmp_buf = malloc(len_tmp_buf + 1);
memset(tmp_buf, 0, len_tmp_buf + 1);
memcpy(tmp_buf, dn->bv_val, len_tmp_buf);
psub = strcasestr(tmp_buf, "dc=com");
assert( psub != NULL);
sprintf(p_sub, "dc=1,%s", "dc=com");
memcpy(dn->bv_val, tmp_buf, len_tmp_buf);
free(tmp_buf);
return;
}
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+