CONF_SECTION *cs;
uint8_t const *p;
char const *ptr = stack->ptr;
+ char *name2;
cf_stack_frame_t *frame = &stack->frame[stack->depth];
CONF_SECTION *parent = frame->current;
char *buff[4];
tmpl_rules_t t_rules;
- xlat_exp_head_t *head = NULL;
fr_sbuff_parse_rules_t p_rules = { };
p_rules.terminals = &if_terminals;
*/
memcpy(buff[2], stack->ptr, slen);
buff[2][slen] = '\0';
+ name2 = buff[2];
+
while (slen > 0) {
if (!isspace((int) buff[2][slen])) break;
ptr = buff[3];
slen = my_slen;
- parse_error:
fr_canonicalize_error(cs, &spaces, &text, slen, ptr);
cf_log_err(cs, "Parse error in condition");
}
if (main_config->parse_new_conditions) {
- my_slen = xlat_tokenize_condition(cs, &head, &FR_SBUFF_IN(buff[3], strlen(buff[3])), &p_rules, &t_rules);
- if (my_slen <= 0) {
- ptr = buff[3];
- slen = my_slen;
- goto parse_error;
- }
+ name2 = buff[3];
}
}
- MEM(cs->name2 = talloc_typed_strdup(cs, buff[2]));
+ MEM(cs->name2 = talloc_typed_strdup(cs, name2));
cs->name2_quote = T_BARE_WORD;
ptr += slen;
cf_data_add(cs, cond, NULL, true);
}
- if (main_config->parse_new_conditions) {
- cf_data_add(cs, head, NULL, true);
- }
stack->ptr = ptr;
cs->allow_unlang = true;
return c;
}
+static const fr_sbuff_term_t if_terminals = FR_SBUFF_TERMS(
+ L(""),
+ L("{"),
+);
+
static unlang_t *compile_if_subsection(unlang_t *parent, unlang_compile_t *unlang_ctx, CONF_SECTION *cs,
unlang_ext_t const *ext)
{
* Migration support.
*/
if (main_config->parse_new_conditions) {
- head = cf_data_value(cf_data_find(cs, xlat_exp_head_t, NULL));
- fr_assert(head != NULL);
+ char const *name2 = cf_section_name2(cs);
+ ssize_t slen;
+
+ tmpl_rules_t t_rules = (tmpl_rules_t) {
+ .attr = {
+ .dict_def = xr_rules.tr_rules->dict_def,
+ .allow_unresolved = true,
+ .allow_unknown = true
+ }
+ };
+
+ fr_sbuff_parse_rules_t p_rules = { };
+
+ p_rules.terminals = &if_terminals;
+
+ slen = xlat_tokenize_condition(cs, &head, &FR_SBUFF_IN(name2, strlen(name2)), &p_rules, &t_rules);
+ if (slen <= 0) {
+ char *spaces, *text;
+
+ fr_canonicalize_error(cs, &spaces, &text, slen, name2);
+
+ cf_log_err(cs, "Parse error in condition!!!!");
+ cf_log_err(cs, "%s", text);
+ cf_log_err(cs, "%s^ %s", spaces, fr_strerror());
+
+ talloc_free(spaces);
+ talloc_free(text);
+ return NULL;
+ }
/*
* Resolve the xlat first.