summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNalin Dahyabhai <nalin@dahyabhai.net>2014-03-17 18:32:39 -0400
committerNalin Dahyabhai <nalin@dahyabhai.net>2014-03-17 18:32:39 -0400
commit911f373ea9c745894c79fa7892db855a0f64a766 (patch)
tree8168a96897729fdd2731ddd4c25bc81bde2f2298
parent673667320c6b473512b54a5388e619f962dad9c3 (diff)
downloadslapi-nis-911f373ea9c745894c79fa7892db855a0f64a766.tar.gz
slapi-nis-911f373ea9c745894c79fa7892db855a0f64a766.tar.xz
slapi-nis-911f373ea9c745894c79fa7892db855a0f64a766.zip
Better handle out-of-memory reading configuration
Avoid calling strdup() in a situation where we don't need to, so that we can better handle cases where it fails (static analysis).
-rw-r--r--src/back-sch.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/src/back-sch.c b/src/back-sch.c
index 113c350..78f2627 100644
--- a/src/back-sch.c
+++ b/src/back-sch.c
@@ -109,8 +109,8 @@ backend_copy_set_config(const struct backend_set_data *data)
}
ret->common.self = ret;
ret->common.state = data->common.state;
- ret->common.group = strdup(data->common.group);
- ret->common.set = strdup(data->common.set);
+ ret->common.group = data->common.group ? strdup(data->common.group) : NULL;
+ ret->common.set = data->common.set ? strdup(data->common.set) : NULL;
ret->common.bases = backend_shr_dup_strlist(data->common.bases);
ret->common.restrict_subtrees = backend_shr_dup_sdnlist(data->common.restrict_subtrees);
ret->common.ignore_subtrees = backend_shr_dup_sdnlist(data->common.ignore_subtrees);
@@ -162,7 +162,7 @@ backend_set_config_read_config(struct plugin_state *state, Slapi_Entry *e,
const char *group, const char *container,
bool_t *flag, struct backend_shr_set_data **pret)
{
- char **bases, *entry_filter, **attributes, *rdn_format, *dn;
+ char **bases, *entry_filter, **attributes, *rdn_format, *tmp_dn;
char *nsswitch_min_id, *check_nsswitch, *strp;
bool_t check_access;
struct backend_set_data ret;
@@ -196,7 +196,6 @@ backend_set_config_read_config(struct plugin_state *state, Slapi_Entry *e,
ret.common.state = state;
tmp_sdn = slapi_sdn_new_dn_byval(group);
ret.common.group = strdup(slapi_sdn_get_ndn(tmp_sdn));
- slapi_sdn_free(&tmp_sdn);
ret.common.set = strdup(container);
ret.common.bases = bases;
ret.common.restrict_subtrees = restrict_subtrees;
@@ -216,11 +215,10 @@ backend_set_config_read_config(struct plugin_state *state, Slapi_Entry *e,
ret.common.skip_uninteresting_updates = 0;
}
if ((ret.common.set != NULL) && (strlen(ret.common.set) > 0)) {
- dn = slapi_dn_plus_rdn(ret.common.group, ret.common.set);
- } else {
- dn = strdup(ret.common.group);
+ tmp_dn = slapi_dn_plus_rdn(ret.common.group, ret.common.set);
+ slapi_sdn_free(&tmp_sdn);
+ tmp_sdn = slapi_sdn_new_dn_passin(tmp_dn);
}
- tmp_sdn = slapi_sdn_new_dn_passin(dn);
ret.container_sdn = slapi_sdn_new_dn_byval(slapi_sdn_get_ndn(tmp_sdn));
slapi_sdn_free(&tmp_sdn);
ret.rdn_format = rdn_format;