summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNalin Dahyabhai <nalin@dahyabhai.net>2014-03-17 10:33:39 -0400
committerNalin Dahyabhai <nalin@dahyabhai.net>2014-03-17 10:38:58 -0400
commit7f30ac0c3982ce2d048d0f9708c3985954993099 (patch)
treea28943f76ff4a982a8ae4838caed064e3e999506 /src
parent3490a3dded7ecfafd056ee13d879ac506a71f60f (diff)
downloadslapi-nis-7f30ac0c3982ce2d048d0f9708c3985954993099.tar.gz
slapi-nis-7f30ac0c3982ce2d048d0f9708c3985954993099.tar.xz
slapi-nis-7f30ac0c3982ce2d048d0f9708c3985954993099.zip
Better handle out-of-memory reading configuration
If we hit out-of-memory (strdup() failures) while reading the configuration, don't crash (static analysis).
Diffstat (limited to 'src')
-rw-r--r--src/back-nis.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/back-nis.c b/src/back-nis.c
index 0d4e227..b9379c0 100644
--- a/src/back-nis.c
+++ b/src/back-nis.c
@@ -113,6 +113,7 @@ static struct backend_shr_set_data *
backend_copy_set_data(const struct backend_set_data *data)
{
struct backend_set_data *ret;
+
ret = malloc(sizeof(*ret));
if (ret == NULL) {
return NULL;
@@ -122,7 +123,9 @@ backend_copy_set_data(const struct backend_set_data *data)
ret->common.group = strdup(data->common.group);
ret->common.set = strdup(data->common.set);
ret->common.bases = backend_shr_dup_strlist(data->common.bases);
- ret->common.entry_filter = strdup(data->common.entry_filter);
+ ret->common.entry_filter = data->common.entry_filter ?
+ strdup(data->common.entry_filter) :
+ NULL;
ret->common.restrict_subtrees = backend_shr_dup_sdnlist(data->common.restrict_subtrees);
ret->common.ignore_subtrees = backend_shr_dup_sdnlist(data->common.ignore_subtrees);
ret->common.rel_attrs = data->common.rel_attrs ?
@@ -456,6 +459,10 @@ backend_map_config_filter(const char *format,
{
char *ret;
int i, j, l;
+
+ if (format == NULL) {
+ return NULL;
+ }
l = 0;
for (i = 0; format[i] != '\0'; i++) {
if (format[i] == '%') {
@@ -540,7 +547,7 @@ backend_set_config_read_config(struct plugin_state *state, Slapi_Entry *e,
bases = backend_shr_get_vattr_strlist(state, e,
NIS_MAP_CONFIGURATION_BASE_ATTR);
restrict_subtrees = backend_shr_get_vattr_sdnlist(state, e,
- NIS_MAP_CONFIGURATION_RESTRICT_SUBTREES_ATTR);
+ NIS_MAP_CONFIGURATION_RESTRICT_SUBTREES_ATTR);
ignore_subtrees = backend_shr_get_vattr_sdnlist(state, e,
NIS_MAP_CONFIGURATION_IGNORE_SUBTREES_ATTR);
if (ignore_subtrees == NULL) {
@@ -727,6 +734,12 @@ backend_set_config_read_config(struct plugin_state *state, Slapi_Entry *e,
ret.n_keys_formats++;
}
*pret = backend_copy_set_data(&ret);
+ if (*pret == NULL) {
+ slapi_log_error(SLAPI_LOG_PLUGIN,
+ state->plugin_desc->spd_id,
+ "out of memory initializing map %s in %s\n",
+ map, domain);
+ }
free(ret.common.group);
free(ret.common.set);
backend_shr_free_strlist(ret.common.bases);