transport_feedback * tf, int * yield)
{
BOOL done = FALSE;
-host_item * host;
if (addr->transport == cutthrough.addr.transport)
- for (host = host_list; host; host = host->next)
+ for (host_item * host = host_list; host; host = host->next)
if (Ustrcmp(host->address, cutthrough.host.address) == 0)
{
int host_af;
{
smtp_transport_options_block *ob =
(smtp_transport_options_block *)addr->transport->options_block;
- host_item * host;
/* The information wasn't available in the cache, so we have to do a real
callout and save the result in the cache for next time, unless no_cache is set,
/* If we did not use a cached connection, make connections to the hosts
and do real callouts. The list of hosts is passed in as an argument. */
- for (host = host_list; host && !done; host = host->next)
+ for (host_item * host = host_list; host && !done; host = host->next)
{
int host_af;
int port = 25;
addr->message);
sx.addrlist = addr;
- sx.host = host;
- sx.host_af = host_af,
+ sx.conn_args.host = host;
+ sx.conn_args.host_af = host_af,
sx.port = port;
- sx.interface = interface;
+ sx.conn_args.interface = interface;
sx.helo_data = tf->helo_data;
- sx.tblock = addr->transport;
+ sx.conn_args.tblock = addr->transport;
sx.verify = TRUE;
tls_retry_connection:
done = TRUE;
}
break;
-#endif
-#if defined(SUPPORT_TLS) && defined(EXPERIMENTAL_REQUIRETLS)
- case ERRNO_REQUIRETLS:
- addr->user_message = US"530 5.7.4 REQUIRETLS support required";
- yield = FAIL;
- done = TRUE;
- break;
#endif
case ECONNREFUSED:
sx.send_quit = FALSE;
&& !sx.lmtp
)
{
- address_item * parent, * caddr;
-
HDEBUG(D_acl|D_v) debug_printf_indent("holding verify callout open for %s\n",
cutthrough.delivery
? "cutthrough delivery" : "potential further verifies and delivery");
cutthrough.addr = *addr;
cutthrough.addr.next = NULL;
cutthrough.addr.host_used = &cutthrough.host;
- for (caddr = &cutthrough.addr, parent = addr->parent;
+ for (address_item * caddr = &cutthrough.addr, * parent = addr->parent;
parent;
caddr = caddr->parent, parent = parent->parent)
*(caddr->parent = store_get(sizeof(address_item))) = *parent;
static uschar
cutthrough_response(client_conn_ctx * cctx, char expect, uschar ** copy, int timeout)
{
-smtp_context sx;
+smtp_context sx = {0};
uschar inbuffer[4096];
uschar responsebuffer[4096];
cutthrough_finaldot(void)
{
uschar res;
-address_item * addr;
HDEBUG(D_transport|D_acl|D_v) debug_printf_indent(" SMTP>> .\n");
/* Assume data finshed with new-line */
res = cutthrough_response(&cutthrough.cctx, '2', &cutthrough.addr.message,
CUTTHROUGH_DATA_TIMEOUT);
-for (addr = &cutthrough.addr; addr; addr = addr->next)
+for (address_item * addr = &cutthrough.addr; addr; addr = addr->next)
{
addr->message = cutthrough.addr.message;
switch(res)
global_rewrite_rules, rewrite_existflags);
if (address != old)
{
- for (i = 0; i < (MAX_NAMED_LIST * 2)/32; i++) vaddr->localpart_cache[i] = 0;
- for (i = 0; i < (MAX_NAMED_LIST * 2)/32; i++) vaddr->domain_cache[i] = 0;
+ for (int i = 0; i < (MAX_NAMED_LIST * 2)/32; i++) vaddr->localpart_cache[i] = 0;
+ for (int i = 0; i < (MAX_NAMED_LIST * 2)/32; i++) vaddr->domain_cache[i] = 0;
if (fp && !expn) fprintf(fp, "Address rewritten as: %s\n", address);
}
}
else
{
int flags;
- host_item *host, *nexthost;
host_build_hostlist(&host_list, s, tf.hosts_randomize);
/* Just ignore failures to find a host address. If we don't manage
if (tf.qualify_single) flags |= HOST_FIND_QUALIFY_SINGLE;
if (tf.search_parents) flags |= HOST_FIND_SEARCH_PARENTS;
- for (host = host_list; host; host = nexthost)
+ for (host_item * host = host_list, * nexthost; host; host = nexthost)
{
nexthost = host->next;
if (tf.gethostbyname ||
while (addr_list)
{
address_item *addr = addr_list;
- address_item *p = addr->parent;
transport_instance * tp = addr->transport;
addr_list = addr->next;
/* Now show its parents */
- for (p = addr->parent; p; p = p->parent)
+ for (address_item * p = addr->parent; p; p = p->parent)
fprintf(fp, "\n <-- %s", p->address);
fprintf(fp, "\n ");
if (addr->host_list && tp && !tp->overrides_hosts)
{
- host_item *h;
int maxlen = 0;
int maxaddlen = 0;
- for (h = addr->host_list; h; h = h->next)
+ for (host_item * h = addr->host_list; h; h = h->next)
{ /* get max lengths of host names, addrs */
int len = Ustrlen(h->name);
if (len > maxlen) maxlen = len;
len = h->address ? Ustrlen(h->address) : 7;
if (len > maxaddlen) maxaddlen = len;
}
- for (h = addr->host_list; h; h = h->next)
+ for (host_item * h = addr->host_list; h; h = h->next)
{
fprintf(fp, " host %-*s ", maxlen, h->name);
int
verify_check_headers(uschar **msgptr)
{
-header_line *h;
uschar *colon, *s;
int yield = OK;
-for (h = header_list; h && yield == OK; h = h->next)
+for (header_line * h = header_list; h && yield == OK; h = h->next)
{
if (h->type != htype_from &&
h->type != htype_reply_to &&
int
verify_check_header_names_ascii(uschar **msgptr)
{
-header_line *h;
-uschar *colon, *s;
+uschar *colon;
-for (h = header_list; h; h = h->next)
+for (header_line * h = header_list; h; h = h->next)
{
colon = Ustrchr(h->text, ':');
- for(s = h->text; s < colon; s++)
+ for(uschar * s = h->text; s < colon; s++)
if ((*s < 33) || (*s > 126))
{
*msgptr = string_sprintf("Invalid character in header \"%.*s\" found",
because (a) it requires no memory and (b) will use fewer resources when there
are many addresses in To: and/or Cc: and only one or two envelope recipients.
-Arguments: none
+Arguments: case_sensitive true if case sensitive matching should be used
Returns: OK if there are no blind recipients
FAIL if there is at least one blind recipient
*/
int
-verify_check_notblind(void)
+verify_check_notblind(BOOL case_sensitive)
{
-int i;
-for (i = 0; i < recipients_count; i++)
+for (int i = 0; i < recipients_count; i++)
{
- header_line *h;
BOOL found = FALSE;
uschar *address = recipients_list[i].address;
- for (h = header_list; !found && h != NULL; h = h->next)
+ for (header_line * h = header_list; !found && h; h = h->next)
{
uschar *colon, *s;
f.parse_allow_group = TRUE;
- while (*s != 0)
+ while (*s)
{
- uschar *ss = parse_find_address_end(s, FALSE);
- uschar *recipient,*errmess;
+ uschar * ss = parse_find_address_end(s, FALSE);
+ uschar * recipient, * errmess;
int terminator = *ss;
int start, end, domain;
*ss = terminator;
/* If we found a valid recipient that has a domain, compare it with the
- envelope recipient. Local parts are compared case-sensitively, domains
- case-insensitively. By comparing from the start with length "domain", we
- include the "@" at the end, which ensures that we are comparing the whole
- local part of each address. */
-
- if (recipient != NULL && domain != 0)
- {
- found = Ustrncmp(recipient, address, domain) == 0 &&
- strcmpic(recipient + domain, address + domain) == 0;
- if (found) break;
- }
+ envelope recipient. Local parts are compared with case-sensitivity
+ according to the routine arg, domains case-insensitively.
+ By comparing from the start with length "domain", we include the "@" at
+ the end, which ensures that we are comparing the whole local part of each
+ address. */
+
+ if (recipient && domain != 0)
+ if ((found = (case_sensitive
+ ? Ustrncmp(recipient, address, domain) == 0
+ : strncmpic(recipient, address, domain) == 0)
+ && strcmpic(recipient + domain, address + domain) == 0))
+ break;
/* Advance to the next address */
- s = ss + (terminator? 1:0);
+ s = ss + (terminator ? 1:0);
while (isspace(*s)) s++;
} /* Next address */
address_item *
verify_checked_sender(uschar *sender)
{
-address_item *addr;
-for (addr = sender_verified_list; addr != NULL; addr = addr->next)
- if (Ustrcmp(sender, addr->address) == 0) break;
-return addr;
+for (address_item * addr = sender_verified_list; addr; addr = addr->next)
+ if (Ustrcmp(sender, addr->address) == 0) return addr;
+return NULL;
}
static int header_types[] = { htype_sender, htype_reply_to, htype_from };
BOOL done = FALSE;
int yield = FAIL;
-int i;
-for (i = 0; i < 3 && !done; i++)
- {
- header_line *h;
- for (h = header_list; h != NULL && !done; h = h->next)
+for (int i = 0; i < 3 && !done; i++)
+ for (header_line * h = header_list; h != NULL && !done; h = h->next)
{
int terminator, new_ok;
uschar *s, *ss, *endname;
f.parse_allow_group = FALSE;
f.parse_found_group = FALSE;
} /* Next header, unless done */
- } /* Next header type unless done */
+ /* Next header type unless done */
if (yield == FAIL && *log_msgptr == NULL)
*log_msgptr = US"there is no valid sender in any header line";
}
else if (Ustrcmp(ss, "@[]") == 0)
{
- ip_address_item *ip;
- for (ip = host_find_interfaces(); ip != NULL; ip = ip->next)
+ for (ip_address_item * ip = host_find_interfaces(); ip; ip = ip->next)
if (Ustrcmp(ip->address, cb->host_address) == 0) return OK;
return FAIL;
}
course slashes may be present in lookups, but not preceded only by digits and
dots). */
-for (t = ss; isdigit(*t) || *t == '.'; t++);
+for (t = ss; isdigit(*t) || *t == '.'; ) t++;
if (*t == 0 || (*t == '/' && t != ss))
{
*error = US"malformed IPv4 address or address mask";
if (mlen == 0 && t == ss+3) mlen = -1; /* No mask supplied */
iplookup = (*t++ == '-');
}
-else t = ss;
+else
+ t = ss;
/* Do the IP address lookup if that is indeed what we have */
rc = host_find_byname(&h, NULL, HOST_FIND_QUALIFY_SINGLE, NULL, FALSE);
if (rc == HOST_FOUND || rc == HOST_FOUND_LOCAL)
{
- host_item *hh;
- for (hh = &h; hh != NULL; hh = hh->next)
- {
+ for (host_item * hh = &h; hh; hh = hh->next)
if (host_is_in_net(hh->address, cb->host_address, 0)) return OK;
- }
return FAIL;
}
if (rc == HOST_FIND_AGAIN) return DEFER;
if (host_aton(address, bin) == 1)
{
- int i;
int x = bin[0];
- for (i = 0; i < 4; i++)
+ for (int i = 0; i < 4; i++)
{
sprintf(CS bptr, "%d.", x & 255);
while (*bptr) bptr++;
#if HAVE_IPV6
else
- {
- int i, j;
- for (j = 3; j >= 0; j--)
+ for (int j = 3; j >= 0; j--)
{
int x = bin[j];
- for (i = 0; i < 8; i++)
+ for (int i = 0; i < 8; i++)
{
sprintf(CS bptr, "%x.", x & 15);
while (*bptr) bptr++;
x >>= 4;
}
}
- }
#endif
/* Remove trailing period -- this is needed so that both arbitrary
if (cb->rc == DNS_SUCCEED)
{
- dns_record *rr;
- dns_address **addrp = &(cb->rhs);
- for (rr = dns_next_rr(&dnsa, &dnss, RESET_ANSWERS);
- rr;
+ dns_address ** addrp = &(cb->rhs);
+ for (dns_record * rr = dns_next_rr(&dnsa, &dnss, RESET_ANSWERS); rr;
rr = dns_next_rr(&dnsa, &dnss, RESET_NEXT))
if (rr->type == T_A)
{
{
cb->text_set = TRUE;
if (dns_basic_lookup(&dnsa, query, T_TXT) == DNS_SUCCEED)
- {
- dns_record *rr;
- for (rr = dns_next_rr(&dnsa, &dnss, RESET_ANSWERS);
- rr;
+ for (dns_record * rr = dns_next_rr(&dnsa, &dnss, RESET_ANSWERS); rr;
rr = dns_next_rr(&dnsa, &dnss, RESET_NEXT))
- if (rr->type == T_TXT) break;
- if (rr)
- {
- int len = (rr->data)[0];
- if (len > 511) len = 127;
- store_pool = POOL_PERM;
- cb->text = string_sprintf("%.*s", len, CUS (rr->data+1));
- store_pool = old_pool;
- }
- }
+ if (rr->type == T_TXT)
+ {
+ int len = (rr->data)[0];
+ if (len > 511) len = 127;
+ store_pool = POOL_PERM;
+ cb->text = string_sprintf("%.*s", len, CUS (rr->data+1));
+ store_pool = old_pool;
+ break;
+ }
}
dnslist_value = addlist;
int defer_return = FAIL;
const uschar *list = *listptr;
uschar *domain;
-uschar *s;
uschar buffer[1024];
uschar revadd[128]; /* Long enough for IPv6 address */
actually causing an error here, because that would no doubt hold up incoming
mail. Instead, I'll just log it. */
- for (s = domain; *s != 0; s++)
- {
+ for (uschar * s = domain; *s; s++)
if (!isalnum(*s) && *s != '-' && *s != '.' && *s != '_')
{
log_write(0, LOG_MAIN, "dnslists domain \"%s\" contains "
"strange characters - is this right?", domain);
break;
}
- }
/* Check the alternate domain if present */
- if (domain_txt != domain) for (s = domain_txt; *s != 0; s++)
- {
+ if (domain_txt != domain) for (uschar * s = domain_txt; *s; s++)
if (!isalnum(*s) && *s != '-' && *s != '.' && *s != '_')
{
log_write(0, LOG_MAIN, "dnslists domain \"%s\" contains "
"strange characters - is this right?", domain_txt);
break;
}
- }
/* If there is no key string, construct the query by adding the domain name
onto the inverted host address, and perform a single DNS lookup. */
- if (key == NULL)
+ if (!key)
{
if (where == ACL_WHERE_NOTSMTP_START || where == ACL_WHERE_NOTSMTP)
{