diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/format.c | 81 | ||||
-rw-r--r-- | src/format.h | 2 |
2 files changed, 56 insertions, 27 deletions
diff --git a/src/format.c b/src/format.c index 8d4bb95..eed14fa 100644 --- a/src/format.c +++ b/src/format.c @@ -62,7 +62,8 @@ static int format_expand(struct plugin_state *state, char *outbuf, int outbuf_len, struct format_choice **outbuf_choices, char ***ref_attrs, - struct format_inref_attr ***inref_attrs); + struct format_inref_attr ***inref_attrs, + struct format_ref_attr_list **ref_attr_list); static char * xstrndup(const char *start, size_t length) @@ -768,7 +769,8 @@ format_first(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e, const char *args, const char *disallowed, char *outbuf, int outbuf_len, struct format_choice **outbuf_choices, - char ***ref_attrs, struct format_inref_attr ***inref_attrs) + char ***ref_attrs, struct format_inref_attr ***inref_attrs, + struct format_ref_attr_list **ref_attr_list) { int ret, i, argc, first, common_length; char **argv, **values; @@ -790,7 +792,7 @@ format_first(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e, ret = -ENOENT; values = format_get_data_set(state, e, group, set, value_format, disallowed, - ref_attrs, inref_attrs, + ref_attrs, inref_attrs, ref_attr_list, &lengths); if (values == NULL) { if (default_value == NULL) { @@ -806,7 +808,8 @@ format_first(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e, default_value, NULL, outbuf, outbuf_len, outbuf_choices, - ref_attrs, inref_attrs); + ref_attrs, inref_attrs, + ref_attr_list); ret = i; } } else { @@ -844,7 +847,8 @@ format_deref(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e, const char *args, const char *disallowed, char *outbuf, int outbuf_len, struct format_choice **outbuf_choices, - char ***ref_attrs, struct format_inref_attr ***inref_attrs) + char ***ref_attrs, struct format_inref_attr ***inref_attrs, + struct format_ref_attr_list **ref_attr_list) { int i, j, ret, argc; Slapi_Entry *ref; @@ -1021,7 +1025,8 @@ format_referred(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e, const char *args, const char *disallowed, char *outbuf, int outbuf_len, struct format_choice **outbuf_choices, - char ***ref_attrs, struct format_inref_attr ***inref_attrs) + char ***ref_attrs, struct format_inref_attr ***inref_attrs, + struct format_ref_attr_list **ref_attr_list) { int i, ret, argc; Slapi_PBlock *local_pb; @@ -1155,7 +1160,8 @@ format_merge(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e, const char *args, const char *disallowed, char *outbuf, int outbuf_len, struct format_choice **outbuf_choices, - char ***ref_attrs, struct format_inref_attr ***inref_attrs) + char ***ref_attrs, struct format_inref_attr ***inref_attrs, + struct format_ref_attr_list **ref_attr_list) { int ret, i, j, argc, slen, count; unsigned int *lengths; @@ -1185,7 +1191,7 @@ format_merge(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e, values = format_get_data_set(state, e, group, set, argv[i], disallowed, ref_attrs, inref_attrs, - &lengths); + ref_attr_list, &lengths); if (values == NULL) { slapi_log_error(SLAPI_LOG_PLUGIN, state->plugin_desc->spd_id, @@ -1244,6 +1250,7 @@ format_match_generic(struct plugin_state *state, struct format_choice **outbuf_choices, char ***ref_attrs, struct format_inref_attr ***inref_attrs, + struct format_ref_attr_list **ref_attr_list, const char *fnname, char * (*match_fn)(const char *pattern, const char *value, char **argv)) @@ -1273,7 +1280,8 @@ format_match_generic(struct plugin_state *state, lengths = NULL; values = format_get_data_set(state, e, group, set, argv[0], disallowed, - ref_attrs, inref_attrs, &lengths); + ref_attrs, inref_attrs, ref_attr_list, + &lengths); if (values != NULL) { for (i = 0; values[i] != NULL; i++) { continue; @@ -1304,6 +1312,7 @@ format_match_generic(struct plugin_state *state, argv[default_arg], disallowed, ref_attrs, inref_attrs, + ref_attr_list, &default_length); } if (default_value != NULL) { @@ -1384,6 +1393,7 @@ format_match_generic(struct plugin_state *state, disallowed, ref_attrs, inref_attrs, + ref_attr_list, &default_length); } if (default_value != NULL) { @@ -1447,12 +1457,13 @@ format_match(struct plugin_state *state, const char *args, const char *disallowed, char *outbuf, int outbuf_len, struct format_choice **outbuf_choices, - char ***ref_attrs, struct format_inref_attr ***inref_attrs) + char ***ref_attrs, struct format_inref_attr ***inref_attrs, + struct format_ref_attr_list **ref_attr_list) { return format_match_generic(state, pb, e, group, set, args, 2, 2, disallowed, outbuf, outbuf_len, outbuf_choices, - ref_attrs, inref_attrs, + ref_attrs, inref_attrs, ref_attr_list, "format_match", format_match_cb); } @@ -1478,12 +1489,13 @@ format_regmatch(struct plugin_state *state, const char *args, const char *disallowed, char *outbuf, int outbuf_len, struct format_choice **outbuf_choices, - char ***ref_attrs, struct format_inref_attr ***inref_attrs) + char ***ref_attrs, struct format_inref_attr ***inref_attrs, + struct format_ref_attr_list **ref_attr_list) { return format_match_generic(state, pb, e, group, set, args, 2, 2, disallowed, outbuf, outbuf_len, outbuf_choices, - ref_attrs, inref_attrs, + ref_attrs, inref_attrs, ref_attr_list, "format_regmatch", format_regmatch_cb); } @@ -1602,12 +1614,13 @@ format_regsub(struct plugin_state *state, const char *args, const char *disallowed, char *outbuf, int outbuf_len, struct format_choice **outbuf_choices, - char ***ref_attrs, struct format_inref_attr ***inref_attrs) + char ***ref_attrs, struct format_inref_attr ***inref_attrs, + struct format_ref_attr_list **ref_attr_list) { return format_match_generic(state, pb, e, group, set, args, 3, 3, disallowed, outbuf, outbuf_len, outbuf_choices, - ref_attrs, inref_attrs, + ref_attrs, inref_attrs, ref_attr_list, "format_regsub", format_regsub_cb); } @@ -1625,7 +1638,8 @@ format_lookup_fn(const char *fnname) char *outbuf, int outbuf_len, struct format_choice **outbuf_choices, char ***ref_attrs, - struct format_inref_attr ***inref_attrs); + struct format_inref_attr ***inref_attrs, + struct format_ref_attr_list **ref_attr_list); } fns[] = { {"first", format_first}, {"deref", format_deref}, @@ -1911,7 +1925,9 @@ format_expand_simple(struct plugin_state *state, const char *fmt, const char *disallowed, char *outbuf, int outbuf_len, struct format_choice **outbuf_choices, - char ***ref_attrs, struct format_inref_attr ***inref_attrs) + char ***ref_attrs, + struct format_inref_attr ***inref_attrs, + struct format_ref_attr_list **ref_attr_list) { char *shortstart, *longstart, *shortend, *longend; struct berval tmp, **values; @@ -2017,7 +2033,8 @@ format_expand_simple(struct plugin_state *state, default_value, NULL, outbuf, outbuf_len, outbuf_choices, - ref_attrs, inref_attrs); + ref_attrs, inref_attrs, + ref_attr_list); free(expr); return i; } else { @@ -2033,7 +2050,8 @@ format_expand_simple(struct plugin_state *state, alternate_value, NULL, outbuf, outbuf_len, outbuf_choices, - ref_attrs, inref_attrs); + ref_attrs, inref_attrs, + ref_attr_list); free(expr); format_free_bv_list(values); return i; @@ -2059,7 +2077,8 @@ format_expand_simple(struct plugin_state *state, i = format_expand(state, pb, e, group, set, alternate_value, NULL, outbuf, outbuf_len, outbuf_choices, - ref_attrs, inref_attrs); + ref_attrs, inref_attrs, + ref_attr_list); free(tmp.bv_val); free(expr); return i; @@ -2097,7 +2116,8 @@ format_expand(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e, const char *fmt, const char *disallowed, char *outbuf, int outbuf_len, struct format_choice **outbuf_choices, - char ***ref_attrs, struct format_inref_attr ***inref_attrs) + char ***ref_attrs, struct format_inref_attr ***inref_attrs, + struct format_ref_attr_list **ref_attr_list) { int i, j, used; const char *fmtstart, *fmtend, *match, *pair; @@ -2110,7 +2130,8 @@ format_expand(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e, char *outbuf, int outbuf_len, struct format_choice **outbuf_choices, char ***ref_attrs, - struct format_inref_attr ***inref_attrs); + struct format_inref_attr ***inref_attrs, + struct format_ref_attr_list **ref_attr_list); spd_id = state->plugin_desc->spd_id; @@ -2168,7 +2189,8 @@ format_expand(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e, outbuf_len - j, outbuf_choices, ref_attrs, - inref_attrs); + inref_attrs, + ref_attr_list); if (used < 0) { /* Some failure, FAIL. */ slapi_log_error(SLAPI_LOG_PLUGIN, @@ -2269,7 +2291,8 @@ format_expand(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e, params, disallowed, outbuf + j, outbuf_len - j, outbuf_choices, - ref_attrs, inref_attrs); + ref_attrs, inref_attrs, + ref_attr_list); free(params); params = NULL; if (used < 0) { @@ -2323,6 +2346,7 @@ format_format(struct plugin_state *state, Slapi_Entry *e, const char *fmt, const char *disallowed, struct format_choice **choices, char ***ref_attrs, struct format_inref_attr ***inref_attrs, + struct format_ref_attr_list **ref_attr_list, unsigned int *data_length) { Slapi_PBlock *pb; @@ -2348,7 +2372,7 @@ format_format(struct plugin_state *state, Slapi_Entry *e, i = format_expand(state, pb, e, group, set, fmt, disallowed, buf, buflen, choices, - ref_attrs, inref_attrs); + ref_attrs, inref_attrs, ref_attr_list); if ((i >= 0) && (i < buflen)) { buf[i] = '\0'; ret = xmemdup(buf, i); @@ -2409,11 +2433,12 @@ format_get_data(struct plugin_state *state, Slapi_Entry *e, const char *fmt, const char *disallowed, char ***ref_attrs, struct format_inref_attr ***inref_attrs, + struct format_ref_attr_list **ref_attr_list, unsigned int *data_length) { unsigned int ignored; return format_format(state, e, group, set, fmt, disallowed, - NULL, ref_attrs, inref_attrs, + NULL, ref_attrs, inref_attrs, ref_attr_list, data_length ? data_length : &ignored); } @@ -2435,6 +2460,7 @@ format_get_data_set(struct plugin_state *state, Slapi_Entry *e, const char *fmt, const char *disallowed, char ***ref_attrs, struct format_inref_attr ***inref_attrs, + struct format_ref_attr_list **ref_attr_list, unsigned int **data_lengths) { struct format_choice *choices, *this_choice; @@ -2444,7 +2470,8 @@ format_get_data_set(struct plugin_state *state, Slapi_Entry *e, unsigned int template_len; choices = NULL; template = format_format(state, e, group, set, fmt, disallowed, - &choices, ref_attrs, inref_attrs, + &choices, + ref_attrs, inref_attrs, ref_attr_list, &template_len); if (template == NULL) { format_free_choices(choices); diff --git a/src/format.h b/src/format.h index e9b1fcb..21763a4 100644 --- a/src/format.h +++ b/src/format.h @@ -55,6 +55,7 @@ char *format_get_data(struct plugin_state *state, struct slapi_entry *e, const char *disallowed_chars, char ***ref_attrs, struct format_inref_attr ***inref_attrs, + struct format_ref_attr_list **ref_attr_list, unsigned int *data_length); void format_free_data_set(char **data_set, unsigned int *data_lengths); char **format_get_data_set(struct plugin_state *state, Slapi_Entry *e, @@ -63,6 +64,7 @@ char **format_get_data_set(struct plugin_state *state, Slapi_Entry *e, const char *disallowed, char ***ref_attrs, struct format_inref_attr ***inref_attrs, + struct format_ref_attr_list **ref_attr_list, unsigned int **data_lengths); char *format_escape_for_filter(const char *unescaped); |