diff options
| author | Nalin Dahyabhai <nalin@dahyabhai.net> | 2008-05-13 21:56:21 -0400 |
|---|---|---|
| committer | Nalin Dahyabhai <nalin@dahyabhai.net> | 2008-05-13 21:56:21 -0400 |
| commit | 6e7e1d4736f9daa94a4fd2fe195aa835dd05aeeb (patch) | |
| tree | 1487aec65f842365199fe59a1812b44348f0cc6d /src | |
| parent | 464d0478cca4da015342ff7e2dd87e6c6b489b43 (diff) | |
| download | slapi-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.c | 48 |
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) && |
