X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fsrc%2Facl.c;h=286d61568ab1c4a847848121916ba2ab8aa20444;hb=1921d2ea1648c90d45da23f26cf8855465521426;hp=ef8f06da644d4e30475bd158af59abc0249b43d2;hpb=8857ccfd03a8d84a286fc414dece305166ae4269;p=user%2Fhenk%2Fcode%2Fexim.git diff --git a/src/src/acl.c b/src/src/acl.c index ef8f06da6..286d61568 100644 --- a/src/src/acl.c +++ b/src/src/acl.c @@ -1,4 +1,4 @@ -/* $Cambridge: exim/src/src/acl.c,v 1.50 2005/10/03 13:25:33 ph10 Exp $ */ +/* $Cambridge: exim/src/src/acl.c,v 1.53 2005/12/12 15:58:53 ph10 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * @@ -752,17 +752,33 @@ while ((s = (*func)()) != NULL) if (c == ACLC_SET) { - if (Ustrncmp(s, "acl_", 4) != 0 || (s[4] != 'c' && s[4] != 'm') || - !isdigit(s[5]) || (!isspace(s[6]) && s[6] != '=')) + int offset, max, n; + uschar *endptr; + + if (Ustrncmp(s, "acl_", 4) != 0) goto BAD_ACL_VAR; + if (s[4] == 'c') + { + offset = 0; + max = ACL_CVARS; + } + else if (s[4] == 'm') + { + offset = ACL_CVARS; + max = ACL_MVARS; + } + else goto BAD_ACL_VAR; + + n = Ustrtoul(s + 5, &endptr, 10); + if ((*endptr != 0 && *endptr != '=' && !isspace(*endptr)) || n >= max) { - *error = string_sprintf("unrecognized name after \"set\" in ACL " - "modifier \"set %s\"", s); + BAD_ACL_VAR: + *error = string_sprintf("syntax error or unrecognized name after " + "\"set\" in ACL modifier \"set %s\"", s); return NULL; } - cond->u.varnumber = s[5] - '0'; - if (s[4] == 'm') cond->u.varnumber += ACL_C_MAX; - s += 6; + cond->u.varnumber = n + offset; + s = endptr; while (isspace(*s)) s++; } @@ -1146,7 +1162,7 @@ not quite kosher to treat bare domains such as EHLO 192.0.2.57 the same as address literals, but it's probably the most friendly thing to do. This is an extension to CSA, so we allow it to be turned off for proper conformance. */ -if (string_is_ip_address(domain, NULL)) +if (string_is_ip_address(domain, NULL) != 0) { if (!dns_csa_use_reverse) return CSA_UNKNOWN; dns_build_reverse(domain, target); @@ -2329,8 +2345,8 @@ for (; cb != NULL; cb = cb->next) if (cb->type == ACLC_SET) { int n = cb->u.varnumber; - int t = (n < ACL_C_MAX)? 'c' : 'm'; - if (n >= ACL_C_MAX) n -= ACL_C_MAX; + int t = (n < ACL_CVARS)? 'c' : 'm'; + if (n >= ACL_CVARS) n -= ACL_CVARS; debug_printf("acl_%c%d ", t, n); lhswidth += 7; } @@ -2802,7 +2818,7 @@ for (; cb != NULL; cb = cb->next) case ACLC_SET: { int old_pool = store_pool; - if (cb->u.varnumber < ACL_C_MAX) store_pool = POOL_PERM; + if (cb->u.varnumber < ACL_CVARS) store_pool = POOL_PERM; acl_var[cb->u.varnumber] = string_copy(arg); store_pool = old_pool; } @@ -3321,7 +3337,7 @@ while (acl != NULL) case ACL_WARN: if (cond == OK) acl_warn(where, *user_msgptr, *log_msgptr); - else if (cond == DEFER) + else if (cond == DEFER && (log_extra_selector & LX_acl_warn_skipped) != 0) log_write(0, LOG_MAIN, "%s Warning: ACL \"warn\" statement skipped: " "condition test deferred%s%s", host_and_ident(TRUE), (*log_msgptr == NULL)? US"" : US": ",