diff options
author | Nalin Dahyabhai <nalin@dahyabhai.net> | 2014-03-17 18:32:39 -0400 |
---|---|---|
committer | Nalin Dahyabhai <nalin@dahyabhai.net> | 2014-03-17 18:32:39 -0400 |
commit | 911f373ea9c745894c79fa7892db855a0f64a766 (patch) | |
tree | 8168a96897729fdd2731ddd4c25bc81bde2f2298 | |
parent | 673667320c6b473512b54a5388e619f962dad9c3 (diff) | |
download | slapi-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.c | 14 |
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; |