if (macro_read_assignment(big_buffer))
printf("Defined macro '%s'\n", mlast->name);
}
+else if (Ustrncmp(big_buffer, "set,t ", 6) == 0)
+ printf("%s\n", acl_standalone_setvar(big_buffer+6, TRUE));
else if (Ustrncmp(big_buffer, "set ", 4) == 0)
- printf("%s\n", acl_standalone_setvar(big_buffer+4));
+ printf("%s\n", acl_standalone_setvar(big_buffer+4, FALSE));
else
if ((s = expand_string(big_buffer))) printf("%s\n", CS s);
else printf("Failed: %s\n", expand_string_message);
reset_point = store_mark();
while (Ufgets(big_buffer, big_buffer_size, trust_list))
{
- uschar *start = big_buffer, *nl;
- while (*start && isspace(*start))
- start++;
- if (*start != '/')
+ uschar * start = big_buffer, * nl;
+ if (Uskip_whitespace(&start) != '/')
continue;
- nl = Ustrchr(start, '\n');
- if (nl)
- *nl = 0;
+ if ((nl = Ustrchr(start, '\n')))
+ *nl = '\0';
trusted_configs[nr_configs++] = string_copy(start);
if (nr_configs == nelem(trusted_configs))
break;
const uschar * s = argrest;
opt_D_used = TRUE;
- while (isspace(*s)) s++;
+ Uskip_whitespace(&s);
if (*s < 'A' || *s > 'Z')
exim_fail("exim: macro name set by -D must start with "
}
name[ptr] = 0;
if (ptr == 0) { badarg = TRUE; break; }
- while (isspace(*s)) s++;
- if (*s != 0)
+ if (Uskip_whitespace(&s))
{
if (*s++ != '=') { badarg = TRUE; break; }
- while (isspace(*s)) s++;
+ Uskip_whitespace(&s);
}
for (m = macros_user; m; m = m->next)
/* If a pattern for matching the gecos field was supplied, apply
it and then expand the name string. */
+ GET_OPTION("gecos_pattern");
+ GET_OPTION("gecos_name");
if (gecos_pattern && gecos_name)
{
const pcre2_code *re;
if (!originator_login || f.running_in_test_harness)
{
+ GET_OPTION("unknown_login");
if (unknown_login)
{
originator_login = expand_string(unknown_login);
else if (expansion_test_message)
{
+ uschar * rme = expand_string(recipients_max);
int save_stdin = dup(0);
int fd = Uopen(expansion_test_message, O_RDONLY, 0);
if (fd < 0)
(void) dup2(fd, 0);
filter_test = FTEST_USER; /* Fudge to make it look like filter test */
message_ended = END_NOTENDED;
+ recipients_max_expanded = atoi(CCS rme);
read_message_body(receive_msg(extract_recipients));
message_linecount += body_linecount;
(void)dup2(save_stdin, 0);
set for host checking, and for receiving messages. */
smtp_active_hostname = primary_hostname;
-if (raw_active_hostname != NULL)
+GET_OPTION("smtp_active_hostname");
+if (raw_active_hostname)
{
- uschar *nah = expand_string(raw_active_hostname);
- if (nah == NULL)
+ uschar * nah = expand_string(raw_active_hostname);
+ if (!nah)
{
if (!f.expand_string_forcedfail)
log_write(0, LOG_MAIN|LOG_PANIC_DIE, "failed to expand \"%s\" "
"(smtp_active_hostname): %s", raw_active_hostname,
expand_string_message);
}
- else if (nah[0] != 0) smtp_active_hostname = nah;
+ else if (nah[0]) smtp_active_hostname = nah;
}
/* Handle host checking: this facility mocks up an incoming SMTP call from a
else
{
+ GET_OPTION("message_size_limit");
thismessage_size_limit = expand_string_integer(message_size_limit, TRUE);
if (expand_string_message)
if (thismessage_size_limit == -1)
int rc;
if ((rc = smtp_setup_msg()) > 0)
{
- if (real_sender_address != NULL &&
- !receive_check_set_sender(sender_address))
+ if ( real_sender_address
+ && !receive_check_set_sender(sender_address))
{
sender_address = raw_sender = real_sender_address;
sender_address_unrewritten = NULL;
the very end. The result of the ACL is ignored (as for other non-SMTP
messages). It is run for its potential side effects. */
- if (smtp_batched_input && acl_not_smtp_start != NULL)
- {
- uschar *user_msg, *log_msg;
- f.enable_dollar_recipients = TRUE;
- (void)acl_check(ACL_WHERE_NOTSMTP_START, NULL, acl_not_smtp_start,
- &user_msg, &log_msg);
- f.enable_dollar_recipients = FALSE;
- }
+ if (smtp_batched_input)
+ {
+ GET_OPTION("acl_not_smtp_start");
+ if (acl_not_smtp_start)
+ {
+ uschar * user_msg, * log_msg;
+ f.enable_dollar_recipients = TRUE;
+ (void)acl_check(ACL_WHERE_NOTSMTP_START, NULL, acl_not_smtp_start,
+ &user_msg, &log_msg);
+ f.enable_dollar_recipients = FALSE;
+ }
+ }
/* Now get the data for the message */
else
{
- int rcount = 0;
- int count = argc - recipients_arg;
+ uschar * rme = expand_string(recipients_max);
+ int rcount = 0, count = argc - recipients_arg;
const uschar ** list = argv + recipients_arg;
+ recipients_max_expanded = atoi(CCS rme);
+
/* These options cannot be changed dynamically for non-SMTP messages */
f.active_local_sender_retain = local_sender_retain;
while (*s)
{
BOOL finished = FALSE;
- uschar *recipient;
- uschar *ss = parse_find_address_end(s, FALSE);
+ uschar * recipient;
+ uschar * ss = parse_find_address_end(s, FALSE);
if (*ss == ',') *ss = 0; else finished = TRUE;
/* Check max recipients - if -t was used, these aren't recipients */
- if (recipients_max > 0 && ++rcount > recipients_max &&
- !extract_recipients)
+ if ( recipients_max_expanded > 0 && ++rcount > recipients_max_expanded
+ && !extract_recipients)
+ {
+ DEBUG(D_all) debug_printf("excess reipients (max %d)\n",
+ recipients_max_expanded);
+
if (error_handling == ERRORS_STDERR)
{
fprintf(stderr, "exim: too many recipients\n");
return
moan_to_sender(ERRMESS_TOOMANYRECIP, NULL, NULL, stdin, TRUE)?
errors_sender_rc : EXIT_FAILURE;
+ }
#ifdef SUPPORT_I18N
{
}
if (!recipient)
+ {
+ DEBUG(D_all) debug_printf("bad recipient address \"%s\": %s\n",
+ string_printing(list[i]), errmess);
+
if (error_handling == ERRORS_STDERR)
{
fprintf(stderr, "exim: bad recipient address \"%s\": %s\n",
moan_to_sender(ERRMESS_BADARGADDRESS, &eblock, NULL, stdin, TRUE)?
errors_sender_rc : EXIT_FAILURE;
}
+ }
receive_add_recipient(string_copy_taint(recipient, GET_TAINTED), -1);
s = ss;
if (!finished)
- while (*(++s) != 0 && (*s == ',' || isspace(*s)));
+ while (*++s && (*s == ',' || isspace(*s)));
}
}
ignored; rejecting here would just add complication, and it can just as
well be done later. Allow $recipients to be visible in the ACL. */
+ GET_OPTION("acl_not_smtp_start");
if (acl_not_smtp_start)
{
- uschar *user_msg, *log_msg;
+ uschar * user_msg, * log_msg;
f.enable_dollar_recipients = TRUE;
(void)acl_check(ACL_WHERE_NOTSMTP_START, NULL, acl_not_smtp_start,
&user_msg, &log_msg);