* Exim - an Internet mail transport agent *
*************************************************/
-/* Copyright (c) The Exim Maintainers 2020 - 2023 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
/* Copyright (c) University of Cambridge 1995 - 2018 */
/* See the file NOTICE for conditions of use and distribution. */
/* SPDX-License-Identifier: GPL-2.0-or-later */
void
moan_write_from(FILE *f)
{
-uschar * s = expand_string(dsn_from);
-if (!s)
+uschar * s;
+GET_OPTION("dsn_from");
+if (!(s = expand_string(dsn_from)))
{
log_write(0, LOG_MAIN|LOG_PANIC,
"Failed to expand dsn_from (using default): %s", expand_string_message);
*/
BOOL
-moan_send_message(uschar *recipient, int ident, error_block *eblock,
- header_line *headers, FILE *message_file, uschar *firstline)
+moan_send_message(const uschar * recipient, int ident, error_block * eblock,
+ header_line * headers, FILE * message_file, uschar * firstline)
{
int written = 0;
int fd;
/* For DMARC if there is a specific sender set, expand the variable for the
header From: and grab the address from that for the envelope FROM. */
+GET_OPTION("dmarc_forensic_sender");
if ( ident == ERRMESS_DMARC_FORENSIC
&& dmarc_forensic_sender
&& (s = expand_string(dmarc_forensic_sender))
{
uschar *new_sender = NULL;
if (regex_match_and_setup(regex_From, big_buffer, 0, -1))
+ {
+ GET_OPTION("uucp_from_sender");
new_sender = expand_string(uucp_from_sender);
+ }
if (new_sender) sender_address = new_sender;
- else firstline = big_buffer;
+ else firstline = big_buffer;
}
/* If viable sender address, send a message */
case ERRMESS_TOOMANYRECIP:
log_write(0, LOG_MAIN, "%s: too many recipients (max set to %d)", msg,
- recipients_max);
+ recipients_max_expanded);
break;
case ERRMESS_LOCAL_SCAN:
fprintf(f, "\nThe following address(es) have yet to be delivered:\n");
for (; addr; addr = addr->next)
{
- uschar * parent = addr->parent ? addr->parent->address : NULL;
+ const uschar * parent = addr->parent ? addr->parent->address : NULL;
fprintf(f, " %s", addr->address);
if (parent) fprintf(f, " <%s>", parent);
if (addr->basic_errno > 0) fprintf(f, ": %s", strerror(addr->basic_errno));
*/
uschar *
-moan_check_errorcopy(uschar *recipient)
+moan_check_errorcopy(const uschar * recipient)
{
-uschar *item, *localpart, *domain;
-const uschar *listptr = errors_copy;
+uschar * item;
+const uschar * localpart, * domain;
+const uschar * listptr = errors_copy;
uschar *yield = NULL;
int sep = 0;
int llen;
-if (errors_copy == NULL) return NULL;
+if (!errors_copy) return NULL;
/* Set up pointer to the local part and domain, and compute the
length of the local part. */
localpart = recipient;
domain = Ustrrchr(recipient, '@');
-if (domain == NULL) return NULL; /* should not occur, but avoid crash */
+if (!domain) return NULL; /* should not occur, but avoid crash */
llen = domain++ - recipient;
/* Scan through the configured items */
while ((item = string_nextinlist(&listptr, &sep, NULL, 0)))
{
- const uschar *newaddress = item;
- const uschar *pattern = string_dequote(&newaddress);
+ const uschar * newaddress = item;
+ const uschar * pattern = string_dequote(&newaddress);
/* If no new address found, just skip this item. */
- while (isspace(*newaddress)) newaddress++;
- if (*newaddress == 0) continue;
+ if (!Uskip_whitespace(&newaddress)) continue;
/* We now have an item to match as an address in item, and the additional
address in newaddress. If the pattern matches, expand the new address string