diff options
author | Nalin Dahyabhai <nalin@dahyabhai.net> | 2014-03-17 10:33:39 -0400 |
---|---|---|
committer | Nalin Dahyabhai <nalin@dahyabhai.net> | 2014-03-17 10:38:58 -0400 |
commit | 7f30ac0c3982ce2d048d0f9708c3985954993099 (patch) | |
tree | a28943f76ff4a982a8ae4838caed064e3e999506 | |
parent | 3490a3dded7ecfafd056ee13d879ac506a71f60f (diff) | |
download | slapi-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).
-rw-r--r-- | src/back-nis.c | 17 |
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); |