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?
-Shijun Chen-
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
...
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;
}
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+