terminal_rules->terminals,
&bracket_terms));
- if (!t_rules) t_rules = &my_rules;
-
MEM(head = xlat_exp_head_alloc(ctx));
+ if (t_rules) {
+ head->dict = t_rules->attr.dict_def;
+ } else {
+ t_rules = &my_rules;
+ }
slen = tokenize_expression(head, NULL, in, terminal_rules, t_rules, T_INVALID, bracket_rules);
talloc_free(bracket_rules);
MEM(bracket_rules->terminals = fr_sbuff_terminals_amerge(bracket_rules,
terminal_rules->terminals,
&bracket_terms));
+ MEM(head = xlat_exp_head_alloc(ctx));
+
if (t_rules) {
my_rules = *t_rules;
+ head->dict = t_rules->attr.dict_def;
}
- my_rules.xlat.runtime_el = el;
- MEM(head = xlat_exp_head_alloc(ctx));
+ my_rules.xlat.runtime_el = el;
slen = tokenize_expression(head, NULL, in, terminal_rules, &my_rules, T_INVALID, bracket_rules);
talloc_free(bracket_rules);
struct xlat_exp_head {
char const *fmt; //!< The original format string (a talloced buffer).
xlat_flags_t flags; //!< Flags that control resolution and evaluation.
+ fr_dict_t const *dict; //!< dictionary for this xlat
fr_dlist_head_t dlist;
};
MEM(head = xlat_exp_head_alloc(ctx));
- if (t_rules) our_t_rules = *t_rules;
+ if (t_rules) {
+ head->dict = t_rules->attr.dict_def;
+ our_t_rules = *t_rules;
+ }
our_t_rules.xlat.runtime_el = el;
xlat_exp_head_t *head;
MEM(head = xlat_exp_head_alloc(ctx));
+ if (t_rules) head->dict = t_rules->dict_def;
if (p_rules && p_rules->terminals) {
tmp_p_rules = (fr_sbuff_parse_rules_t){ /* Stack allocated due to CL scope */
xlat_exp_head_t *head;
MEM(head = xlat_exp_head_alloc(ctx));
+ if (t_rules) head->dict = t_rules->dict_def;
fr_strerror_clear(); /* Clear error buffer */