summaryrefslogtreecommitdiffstats
path: root/src/format.c
diff options
context:
space:
mode:
authorNalin Dahyabhai <nalin@dahyabhai.net>2012-01-11 19:30:06 -0500
committerNalin Dahyabhai <nalin@dahyabhai.net>2012-01-11 19:30:06 -0500
commit914642f65fcf35e48e77bd3c8ce377539af9045a (patch)
tree32e9179737cdefc7a3c9f68220399b87f6bbd706 /src/format.c
parent9743d79ec585494febdd2029b9094e948f09ac67 (diff)
downloadslapi-nis-914642f65fcf35e48e77bd3c8ce377539af9045a.tar.gz
slapi-nis-914642f65fcf35e48e77bd3c8ce377539af9045a.tar.xz
slapi-nis-914642f65fcf35e48e77bd3c8ce377539af9045a.zip
- avoid using pblocks for more than one internal operation - the server
allocates internal state each time but doesn't clean up any that's aready there if you reuse the block - correctly free values we use when constructing compat entries
Diffstat (limited to 'src/format.c')
-rw-r--r--src/format.c33
1 files changed, 8 insertions, 25 deletions
diff --git a/src/format.c b/src/format.c
index 9f5b214..ba09b41 100644
--- a/src/format.c
+++ b/src/format.c
@@ -1578,13 +1578,6 @@ format_referred(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e,
attr = argv[2];
/* Set up to search for matches. */
- local_pb = slapi_pblock_new();
- if (local_pb == NULL) {
- slapi_log_error(SLAPI_LOG_PLUGIN, state->plugin_desc->spd_id,
- "referred: out of memory\n");
- format_free_parsed_args(argv);
- return -ENOMEM;
- }
cbdata.state = state;
cbdata.attr = attr;
cbdata.choices = NULL;
@@ -1601,7 +1594,6 @@ format_referred(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e,
"no search bases defined for \"%s\"/\"%s\"?\n",
group, other_set);
backend_free_set_config(set_bases, set_filter);
- slapi_pblock_destroy(local_pb);
format_free_parsed_args(argv);
return -ENOENT;
}
@@ -1626,7 +1618,6 @@ format_referred(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e,
state->plugin_desc->spd_id,
"referred: out of memory\n");
backend_free_set_config(set_bases, set_filter);
- slapi_pblock_destroy(local_pb);
format_free_parsed_args(argv);
return -ENOMEM;
}
@@ -1638,7 +1629,6 @@ format_referred(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e,
"referred: out of memory\n");
free(tndn);
backend_free_set_config(set_bases, set_filter);
- slapi_pblock_destroy(local_pb);
format_free_parsed_args(argv);
return -ENOMEM;
}
@@ -1650,6 +1640,7 @@ format_referred(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e,
attrs[1] = NULL;
for (i = 0; (set_bases != NULL) && (set_bases[i] != NULL); i++) {
/* Set up the search. */
+ local_pb = slapi_pblock_new();
slapi_search_internal_set_pb(local_pb,
set_bases[i], LDAP_SCOPE_SUBTREE,
filter, attrs, FALSE,
@@ -1664,11 +1655,11 @@ format_referred(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e,
NULL,
format_referred_entry_cb,
NULL);
+ slapi_pblock_destroy(local_pb);
}
free(filter);
backend_free_set_config(set_bases, set_filter);
- slapi_pblock_destroy(local_pb);
format_free_parsed_args(argv);
/* Return any values we found. */
@@ -1834,15 +1825,6 @@ format_referred_r(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e,
attr_links, NULL);
free(attr_links);
- /* Set up to search for referrers. */
- local_pb = slapi_pblock_new();
- if (local_pb == NULL) {
- slapi_log_error(SLAPI_LOG_PLUGIN, state->plugin_desc->spd_id,
- "referred_r: out of memory\n");
- format_free_parsed_args(argv);
- return -ENOMEM;
- }
-
/* Get the searching parameters for the set which contains the entry,
* and all of the referred-to sets, and save them for use at the last
* link in the chain. */
@@ -1914,6 +1896,7 @@ format_referred_r(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e,
"referred_r: searching under %s"
" for \"%s\" (link=1.%d)\n",
ndn, filter, i);
+ local_pb = slapi_pblock_new();
slapi_search_internal_set_pb(local_pb,
ndn,
LDAP_SCOPE_SUBTREE,
@@ -1932,6 +1915,7 @@ format_referred_r(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e,
NULL,
format_referred_r_entry_cb,
NULL);
+ slapi_pblock_destroy(local_pb);
}
free(filter);
/* Walk the set of search bases for the next link. */
@@ -1953,6 +1937,7 @@ format_referred_r(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e,
"referred_r: searching under %s"
" for \"%s\" (link=2.%d)\n",
ndn, filter, i);
+ local_pb = slapi_pblock_new();
slapi_search_internal_set_pb(local_pb,
ndn,
LDAP_SCOPE_SUBTREE,
@@ -1971,6 +1956,7 @@ format_referred_r(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e,
NULL,
format_referred_r_entry_cb,
NULL);
+ slapi_pblock_destroy(local_pb);
}
free(filter);
free(tndn);
@@ -1984,7 +1970,6 @@ format_referred_r(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e,
}
format_free_sdn_list(these_entries, these_entries2);
- slapi_pblock_destroy(local_pb);
format_free_parsed_args(argv);
/* Return any values we found. */
@@ -3852,7 +3837,6 @@ format_format(struct plugin_state *state, Slapi_Entry *e,
spd_id = state->plugin_desc->spd_id;
buflen = DEFAULT_BUFFER_SIZE;
- pb = slapi_pblock_new();
do {
buf = malloc(buflen);
if (buf == NULL) {
@@ -3862,15 +3846,16 @@ format_format(struct plugin_state *state, Slapi_Entry *e,
"for \"%s\" failing: out of memory\n",
fmt,
slapi_entry_get_ndn(e));
- slapi_pblock_destroy(pb);
return NULL;
}
+ pb = slapi_pblock_new();
i = format_expand(state, pb, e, group, set,
fmt, disallowed,
buf, buflen, choices,
rel_attrs, ref_attrs, inref_attrs,
ref_attr_list, inref_attr_list);
+ slapi_pblock_destroy(pb);
if ((i >= 0) && (i < buflen)) {
buf[i] = '\0';
ret = xmemdup(buf, i);
@@ -3913,8 +3898,6 @@ format_format(struct plugin_state *state, Slapi_Entry *e,
free(buf);
} while (i == -ENOBUFS);
- slapi_pblock_destroy(pb);
-
return ret;
}