*/
lhs_type = tmpl_da(c->data.map->lhs)->type;
- } else if (tmpl_is_xlat(c->data.map->lhs) || tmpl_is_exec(c->data.map->lhs)) {
+ } else if (tmpl_is_exec(c->data.map->lhs)) {
+ lhs_type = FR_TYPE_STRING;
+
+ } else if (tmpl_is_xlat(c->data.map->lhs) && (c->data.map->lhs->quote != T_BARE_WORD)) {
+ /*
+ * bare xlats return a list of typed value-boxes.
+ * We don't know those types until run-time.
+ */
lhs_type = FR_TYPE_STRING;
} else {
} else if (tmpl_is_attr(c->data.map->rhs)) {
rhs_type = tmpl_da(c->data.map->rhs)->type;
- } else if (tmpl_is_xlat(c->data.map->rhs) || tmpl_is_exec(c->data.map->rhs)) {
+ } else if (tmpl_is_exec(c->data.map->rhs)) {
+ rhs_type = FR_TYPE_STRING;
+
+ } else if (tmpl_is_xlat(c->data.map->rhs) && (c->data.map->rhs->quote != T_BARE_WORD)) {
+ /*
+ * bare xlats return a list of typed value-boxes.
+ * We don't know those types until run-time.
+ */
rhs_type = FR_TYPE_STRING;
} else {