* Exim - an Internet mail transport agent *
*************************************************/
-/* Copyright (c) University of Cambridge 1995 - 2009 */
+/* Copyright (c) University of Cambridge 1995 - 2018 */
+/* Copyright (c) The Exim Maintainers 2020 */
/* See the file NOTICE for conditions of use and distribution. */
+/* SPDX-License-Identifier: GPL-2.0-or-later */
#include "../exim.h"
#include "rf_functions.h"
*/
int
-rf_get_errors_address(address_item *addr, router_instance *rblock,
- int verify, uschar **errors_to)
+rf_get_errors_address(address_item * addr, router_instance * rblock,
+ int verify, const uschar ** errors_to)
{
uschar *s;
-*errors_to = addr->p.errors_address;
-if (rblock->errors_to == NULL) return OK;
+*errors_to = addr->prop.errors_address;
+if (!rblock->errors_to) return OK;
s = expand_string(rblock->errors_to);
if (s == NULL)
{
- if (expand_string_forcedfail)
+ if (f.expand_string_forcedfail)
{
DEBUG(D_route)
debug_printf("forced expansion failure - ignoring errors_to\n");
if (*s == 0)
{
- setflag(addr, af_ignore_error); /* For locally detected errors */
+ addr->prop.ignore_error = TRUE; /* For locally detected errors */
*errors_to = US""; /* Return path for SMTP */
return OK;
}
}
else
{
- BOOL save_address_test_mode = address_test_mode;
- int save1 = 0;
+ BOOL save_address_test_mode = f.address_test_mode;
+ const uschar * save_sender = sender_address;
int i;
const uschar ***p;
const uschar *address_expansions_save[ADDRESS_EXPANSIONS_COUNT];
address_item *snew = deliver_make_addr(s, FALSE);
- if (sender_address != NULL)
- {
- save1 = sender_address[0];
- sender_address[0] = 0;
- }
+ if (sender_address)
+ sender_address = US"";
- for (i = 0, p = address_expansions; *p != NULL;)
+ for (i = 0, p = address_expansions; *p;)
address_expansions_save[i++] = **p++;
- address_test_mode = FALSE;
+ f.address_test_mode = FALSE;
/* NOTE: the address is verified as a recipient, not a sender. This is
perhaps confusing. It isn't immediately obvious what to do: we want to have
DEBUG(D_route|D_verify)
debug_printf("------ End verifying errors address %s ------\n", s);
- address_test_mode = save_address_test_mode;
- for (i = 0, p = address_expansions; *p != NULL;)
+ f.address_test_mode = save_address_test_mode;
+ for (i = 0, p = address_expansions; *p; )
**p++ = address_expansions_save[i++];
- if (sender_address != NULL) sender_address[0] = save1;
+ sender_address = save_sender;
}
return OK;