summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNalin Dahyabhai <nalin@dahyabhai.net>2008-05-13 21:56:21 -0400
committerNalin Dahyabhai <nalin@dahyabhai.net>2008-05-13 21:56:21 -0400
commit6e7e1d4736f9daa94a4fd2fe195aa835dd05aeeb (patch)
tree1487aec65f842365199fe59a1812b44348f0cc6d /src
parent464d0478cca4da015342ff7e2dd87e6c6b489b43 (diff)
downloadslapi-nis-6e7e1d4736f9daa94a4fd2fe195aa835dd05aeeb.tar.gz
slapi-nis-6e7e1d4736f9daa94a4fd2fe195aa835dd05aeeb.tar.xz
slapi-nis-6e7e1d4736f9daa94a4fd2fe195aa835dd05aeeb.zip
- add a "list" "function" which concatenates the values of attributes
Diffstat (limited to 'src')
-rw-r--r--src/format.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/format.c b/src/format.c
index 1109c83..d1bbd83 100644
--- a/src/format.c
+++ b/src/format.c
@@ -106,6 +106,53 @@ format_echo(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e,
return ret;
}
+/* Echo the parameter text. */
+static int
+format_list(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e,
+ const char *args, char *outbuf, int outbuf_len,
+ char ***visited_ndns)
+{
+ int ret, i, j, len, count, argc;
+ char **argv, **values;
+ ret = format_parse_args(state, args, &argc, &argv);
+ if (ret != 0) {
+ slapi_log_error(SLAPI_LOG_PLUGIN, state->plugin_desc->spd_id,
+ "list: error parsing arguments\n");
+ return -1;
+ }
+ for (i = 1, ret = 0, count = 0; i < argc; i++) {
+ values = slapi_entry_attr_get_charray(e, argv[i]);
+ for (j = 0; (values != NULL) && (values[j] != NULL); j++) {
+ if (count > 0) {
+ len = strlen(argv[0]);
+ if (ret + len > outbuf_len) {
+ slapi_log_error(SLAPI_LOG_PLUGIN,
+ state->plugin_desc->spd_id,
+ "list: out of space\n");
+ return -1;
+ }
+ memcpy(outbuf + ret, argv[0], len);
+ ret += len;
+ }
+ len = strlen(values[j]);
+ if (ret + len > outbuf_len) {
+ slapi_log_error(SLAPI_LOG_PLUGIN,
+ state->plugin_desc->spd_id,
+ "list: out of space\n");
+ slapi_ch_array_free(values);
+ format_free_parsed_args(argv);
+ return -1;
+ }
+ memcpy(outbuf + ret, values[j], len);
+ ret += len;
+ count++;
+ }
+ slapi_ch_array_free(values);
+ }
+ format_free_parsed_args(argv);
+ return ret;
+}
+
/* Choose a formatting function by name. */
static void *
format_lookup_fn(const char *fnname)
@@ -120,6 +167,7 @@ format_lookup_fn(const char *fnname)
char ***visited_ndns);
} fns[] = {
{"echo", format_echo},
+ {"list", format_list},
};
for (i = 0; i < sizeof(fns) / sizeof(fns[0]); i++) {
if ((fns[i].name != NULL) &&