X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fsrc%2Froute.c;h=b6930493f6899a7d85fdc087129a620590735e53;hb=adb21834f3684b6484d8c2214ee4c3c9c504d632;hp=416effd41deb8c62997fd5cd93a6eac818e1ed0b;hpb=467c84b2115a098caeaf044fcd4d2473f236edb6;p=user%2Fhenk%2Fcode%2Fexim.git diff --git a/src/src/route.c b/src/src/route.c index 416effd41..b6930493f 100644 --- a/src/src/route.c +++ b/src/src/route.c @@ -1416,7 +1416,7 @@ set_router_vars(address_item * addr, const router_instance * r) { const uschar * varlist = r->set; tree_node ** root = (tree_node **) &addr->prop.variables; -int sep = 0; +int sep = ';'; if (!varlist) return OK; @@ -1433,7 +1433,11 @@ for (uschar * ele; (ele = string_nextinlist(&varlist, &sep, NULL, 0)); ) /* Variable name must exist and start "r_". */ if (!name || name[0] != 'r' || name[1] != '_' || !name[2]) + { + log_write(0, LOG_MAIN|LOG_PANIC, + "bad router variable name '%s' in router '%s'\n", name, r->name); return FAIL; + } name += 2; while (isspace(*assignment)) assignment++; @@ -1690,54 +1694,12 @@ for (r = addr->start_router ? addr->start_router : routers; r; r = nextr) router traversal. On the addr string they are held as a variable tree, so as to maintain the post-expansion taints separate. */ - if ((yield = set_router_vars(addr, r)) != OK) - if (yield == PASS) - continue; /* with next router */ - else - goto ROUTE_EXIT; - -#ifdef notdef - if (r->set) + switch (set_router_vars(addr, r)) { - const uschar * list = r->set; - int sep = 0; - for (uschar * ele; (ele = string_nextinlist(&list, &sep, NULL, 0)); ) - { - uschar * ee; - if (!(ee = expand_string(ele))) - if (f.expand_string_forcedfail) - { - DEBUG(D_route) debug_printf("forced failure in expansion of \"%s\" " - "(router variable): decline action taken\n", ele); - - /* Expand "more" if necessary; DEFER => an expansion failed */ - - yield = exp_bool(addr, US"router", r->name, D_route, - US"more", r->more, r->expand_more, &more); - if (yield != OK) goto ROUTE_EXIT; - - if (!more) - { - DEBUG(D_route) - debug_printf("\"more\"=false: skipping remaining routers\n"); - router_name = NULL; - r = NULL; - break; - } - else continue; /* With next router */ - } - else - { - addr->message = string_sprintf("expansion of \"%s\" failed " - "in %s router: %s", ele, r->name, expand_string_message); - yield = DEFER; - goto ROUTE_EXIT; - } - - addr->prop.set = string_append_listele(addr->prop.set, ':', ee); - } + case OK: break; + case PASS: continue; /* with next router */ + default: goto ROUTE_EXIT; } -#endif /* Finally, expand the address_data field in the router. Forced failure behaves as if the router declined. Any other failure is more serious. On