summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNalin Dahyabhai <nalin.dahyabhai@pobox.com>2008-11-03 19:26:06 -0500
committerNalin Dahyabhai <nalin.dahyabhai@pobox.com>2008-11-03 19:26:06 -0500
commita0e830deebd25457c53de135e770fb49bf00e384 (patch)
tree991b628e16959598dd242455d2818da2da302aff /src
parentce453beffb395046773f91f9c161dc4c0069863f (diff)
downloadslapi-nis-a0e830deebd25457c53de135e770fb49bf00e384.tar.gz
slapi-nis-a0e830deebd25457c53de135e770fb49bf00e384.tar.xz
slapi-nis-a0e830deebd25457c53de135e770fb49bf00e384.zip
- add some argument checking to functions which were missing them
- return an error if %collect doesn't have anything to return
Diffstat (limited to 'src')
-rw-r--r--src/format.c56
1 files changed, 55 insertions, 1 deletions
diff --git a/src/format.c b/src/format.c
index c09fef5..c738ff9 100644
--- a/src/format.c
+++ b/src/format.c
@@ -798,9 +798,15 @@ format_first(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e,
const char *value_format, *default_value;
unsigned int *lengths;
ret = format_parse_args(state, args, &argc, &argv);
+ if (ret != 0) {
+ slapi_log_error(SLAPI_LOG_PLUGIN, state->plugin_desc->spd_id,
+ "first: error parsing arguments\n");
+ return -EINVAL;
+ }
if (argc < 1) {
slapi_log_error(SLAPI_LOG_PLUGIN, state->plugin_desc->spd_id,
"first: error parsing arguments\n");
+ format_free_parsed_args(argv);
return -EINVAL;
}
if (argc < 2) {
@@ -2151,9 +2157,15 @@ format_ifeq(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e,
Slapi_Value *value;
ret = format_parse_args(state, args, &argc, &argv);
+ if (ret != 0) {
+ slapi_log_error(SLAPI_LOG_PLUGIN, state->plugin_desc->spd_id,
+ "ifeq: error parsing arguments\n");
+ return -EINVAL;
+ }
if (argc < 1) {
slapi_log_error(SLAPI_LOG_PLUGIN, state->plugin_desc->spd_id,
"ifeq: error parsing arguments\n");
+ format_free_parsed_args(argv);
return -EINVAL;
}
if (argc != 4) {
@@ -2231,9 +2243,15 @@ format_collect(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e,
Slapi_Value *value;
ret = format_parse_args(state, args, &argc, &argv);
+ if (ret != 0) {
+ slapi_log_error(SLAPI_LOG_PLUGIN, state->plugin_desc->spd_id,
+ "collect: error parsing arguments\n");
+ return -EINVAL;
+ }
if (argc < 1) {
slapi_log_error(SLAPI_LOG_PLUGIN, state->plugin_desc->spd_id,
"collect: error parsing arguments\n");
+ format_free_parsed_args(argv);
return -EINVAL;
}
@@ -2249,23 +2267,59 @@ format_collect(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e,
if (values != NULL) {
/* Walk the list of values. */
for (j = 0; values[j] != NULL; j++) {
+ /* Check for a non-empty value. */
+ if (lengths[j] == 0) {
+ continue;
+ }
/* Add it to the list. */
bv.bv_val = values[j];
bv.bv_len = lengths[j];
+ slapi_log_error(SLAPI_LOG_PLUGIN,
+ state->plugin_desc->spd_id,
+ "collect: \"%.*s\"\n",
+ bv.bv_len, bv.bv_val);
format_add_bv_list(&choices, &bv);
}
+ slapi_log_error(SLAPI_LOG_PLUGIN,
+ state->plugin_desc->spd_id,
+ "collect: expanded \"%s\" to produce "
+ "%d values for \"%s\"\n", argv[i], j,
+ slapi_entry_get_dn(e));
format_free_data_set(values, lengths);
+ } else {
+ slapi_log_error(SLAPI_LOG_PLUGIN,
+ state->plugin_desc->spd_id,
+ "collect: expanding \"%s\" produced "
+ "no values for \"%s\"\n", argv[i],
+ slapi_entry_get_dn(e));
}
}
if (choices != NULL) {
+ for (i = 0; choices[i] != NULL; i++) {
+ slapi_log_error(SLAPI_LOG_PLUGIN,
+ state->plugin_desc->spd_id,
+ "collect: returning \"%.*s\" for "
+ "\"%s\"\n",
+ choices[i]->bv_len,
+ choices[i]->bv_val,
+ slapi_entry_get_dn(e));
+ continue;
+ }
+ slapi_log_error(SLAPI_LOG_PLUGIN,
+ state->plugin_desc->spd_id,
+ "collect: returning %d values for \"%s\"\n", i,
+ slapi_entry_get_dn(e));
format_add_choice(outbuf_choices, outbuf, choices);
format_free_bv_list(choices);
+ ret = 0;
+ } else {
+ ret = -ENOENT;
}
format_free_parsed_args(argv);
- return 0;
+ return ret;
}
/* Choose a formatting function by name. */