From e851856fc72bf126f7b649a007fb7040140d5d3c Mon Sep 17 00:00:00 2001 From: Jeremy Harris Date: Fri, 24 Jan 2020 20:00:43 +0000 Subject: [PATCH] tidying --- src/src/acl.c | 378 +++++++++++++++++++------------------- src/src/queue.c | 41 ++--- src/src/rfc2047.c | 10 +- src/src/transports/smtp.c | 10 +- 4 files changed, 211 insertions(+), 228 deletions(-) diff --git a/src/src/acl.c b/src/src/acl.c index 13cda1ab4..938bea7d9 100644 --- a/src/src/acl.c +++ b/src/src/acl.c @@ -3018,193 +3018,187 @@ for (; cb; cb = cb->next) switch(control_type) { case CONTROL_AUTH_UNADVERTISED: - f.allow_auth_unadvertised = TRUE; - break; + f.allow_auth_unadvertised = TRUE; + break; - #ifdef EXPERIMENTAL_BRIGHTMAIL +#ifdef EXPERIMENTAL_BRIGHTMAIL case CONTROL_BMI_RUN: - bmi_run = 1; - break; - #endif + bmi_run = 1; + break; +#endif #ifndef DISABLE_DKIM case CONTROL_DKIM_VERIFY: - f.dkim_disable_verify = TRUE; + f.dkim_disable_verify = TRUE; # ifdef SUPPORT_DMARC - /* Since DKIM was blocked, skip DMARC too */ - f.dmarc_disable_verify = TRUE; - f.dmarc_enable_forensic = FALSE; + /* Since DKIM was blocked, skip DMARC too */ + f.dmarc_disable_verify = TRUE; + f.dmarc_enable_forensic = FALSE; # endif break; #endif #ifdef SUPPORT_DMARC case CONTROL_DMARC_VERIFY: - f.dmarc_disable_verify = TRUE; - break; + f.dmarc_disable_verify = TRUE; + break; case CONTROL_DMARC_FORENSIC: - f.dmarc_enable_forensic = TRUE; - break; + f.dmarc_enable_forensic = TRUE; + break; #endif case CONTROL_DSCP: - if (*p == '/') - { - int fd, af, level, optname, value; - /* If we are acting on stdin, the setsockopt may fail if stdin is not - a socket; we can accept that, we'll just debug-log failures anyway. */ - fd = fileno(smtp_in); - af = ip_get_address_family(fd); - if (af < 0) - { - HDEBUG(D_acl) - debug_printf_indent("smtp input is probably not a socket [%s], not setting DSCP\n", - strerror(errno)); - break; - } - if (dscp_lookup(p+1, af, &level, &optname, &value)) + if (*p == '/') { - if (setsockopt(fd, level, optname, &value, sizeof(value)) < 0) + int fd, af, level, optname, value; + /* If we are acting on stdin, the setsockopt may fail if stdin is not + a socket; we can accept that, we'll just debug-log failures anyway. */ + fd = fileno(smtp_in); + if ((af = ip_get_address_family(fd)) < 0) { - HDEBUG(D_acl) debug_printf_indent("failed to set input DSCP[%s]: %s\n", - p+1, strerror(errno)); + HDEBUG(D_acl) + debug_printf_indent("smtp input is probably not a socket [%s], not setting DSCP\n", + strerror(errno)); + break; } + if (dscp_lookup(p+1, af, &level, &optname, &value)) + if (setsockopt(fd, level, optname, &value, sizeof(value)) < 0) + { + HDEBUG(D_acl) debug_printf_indent("failed to set input DSCP[%s]: %s\n", + p+1, strerror(errno)); + } + else + { + HDEBUG(D_acl) debug_printf_indent("set input DSCP to \"%s\"\n", p+1); + } else { - HDEBUG(D_acl) debug_printf_indent("set input DSCP to \"%s\"\n", p+1); + *log_msgptr = string_sprintf("unrecognised DSCP value in \"control=%s\"", arg); + return ERROR; } } else { - *log_msgptr = string_sprintf("unrecognised DSCP value in \"control=%s\"", arg); + *log_msgptr = string_sprintf("syntax error in \"control=%s\"", arg); return ERROR; } - } - else - { - *log_msgptr = string_sprintf("syntax error in \"control=%s\"", arg); - return ERROR; - } - break; + break; case CONTROL_ERROR: - return ERROR; + return ERROR; case CONTROL_CASEFUL_LOCAL_PART: - deliver_localpart = addr->cc_local_part; - break; + deliver_localpart = addr->cc_local_part; + break; case CONTROL_CASELOWER_LOCAL_PART: - deliver_localpart = addr->lc_local_part; - break; + deliver_localpart = addr->lc_local_part; + break; case CONTROL_ENFORCE_SYNC: - smtp_enforce_sync = TRUE; - break; + smtp_enforce_sync = TRUE; + break; case CONTROL_NO_ENFORCE_SYNC: - smtp_enforce_sync = FALSE; - break; + smtp_enforce_sync = FALSE; + break; - #ifdef WITH_CONTENT_SCAN +#ifdef WITH_CONTENT_SCAN case CONTROL_NO_MBOX_UNSPOOL: - f.no_mbox_unspool = TRUE; - break; - #endif + f.no_mbox_unspool = TRUE; + break; +#endif case CONTROL_NO_MULTILINE: - f.no_multiline_responses = TRUE; - break; + f.no_multiline_responses = TRUE; + break; case CONTROL_NO_PIPELINING: - f.pipelining_enable = FALSE; - break; + f.pipelining_enable = FALSE; + break; case CONTROL_NO_DELAY_FLUSH: - f.disable_delay_flush = TRUE; - break; + f.disable_delay_flush = TRUE; + break; case CONTROL_NO_CALLOUT_FLUSH: - f.disable_callout_flush = TRUE; - break; + f.disable_callout_flush = TRUE; + break; case CONTROL_FAKEREJECT: - cancel_cutthrough_connection(TRUE, US"fakereject"); - case CONTROL_FAKEDEFER: - fake_response = (control_type == CONTROL_FAKEDEFER) ? DEFER : FAIL; - if (*p == '/') - { - const uschar *pp = p + 1; - while (*pp) pp++; - fake_response_text = expand_string(string_copyn(p+1, pp-p-1)); - p = pp; - } - else - { - /* Explicitly reset to default string */ - fake_response_text = US"Your message has been rejected but is being kept for evaluation.\nIf it was a legitimate message, it may still be delivered to the target recipient(s)."; - } - break; + cancel_cutthrough_connection(TRUE, US"fakereject"); + case CONTROL_FAKEDEFER: + fake_response = (control_type == CONTROL_FAKEDEFER) ? DEFER : FAIL; + if (*p == '/') + { + const uschar *pp = p + 1; + while (*pp) pp++; + fake_response_text = expand_string(string_copyn(p+1, pp-p-1)); + p = pp; + } + else /* Explicitly reset to default string */ + fake_response_text = US"Your message has been rejected but is being kept for evaluation.\nIf it was a legitimate message, it may still be delivered to the target recipient(s)."; + break; case CONTROL_FREEZE: - f.deliver_freeze = TRUE; - deliver_frozen_at = time(NULL); - freeze_tell = freeze_tell_config; /* Reset to configured value */ - if (Ustrncmp(p, "/no_tell", 8) == 0) - { - p += 8; - freeze_tell = NULL; - } - if (*p != 0) - { - *log_msgptr = string_sprintf("syntax error in \"control=%s\"", arg); - return ERROR; - } - cancel_cutthrough_connection(TRUE, US"item frozen"); - break; + f.deliver_freeze = TRUE; + deliver_frozen_at = time(NULL); + freeze_tell = freeze_tell_config; /* Reset to configured value */ + if (Ustrncmp(p, "/no_tell", 8) == 0) + { + p += 8; + freeze_tell = NULL; + } + if (*p) + { + *log_msgptr = string_sprintf("syntax error in \"control=%s\"", arg); + return ERROR; + } + cancel_cutthrough_connection(TRUE, US"item frozen"); + break; case CONTROL_QUEUE_ONLY: - f.queue_only_policy = TRUE; - cancel_cutthrough_connection(TRUE, US"queueing forced"); - break; + f.queue_only_policy = TRUE; + cancel_cutthrough_connection(TRUE, US"queueing forced"); + break; case CONTROL_SUBMISSION: - originator_name = US""; - f.submission_mode = TRUE; - while (*p == '/') - { - if (Ustrncmp(p, "/sender_retain", 14) == 0) - { - p += 14; - f.active_local_sender_retain = TRUE; - f.active_local_from_check = FALSE; - } - else if (Ustrncmp(p, "/domain=", 8) == 0) + originator_name = US""; + f.submission_mode = TRUE; + while (*p == '/') { - const uschar *pp = p + 8; - while (*pp && *pp != '/') pp++; - submission_domain = string_copyn(p+8, pp-p-8); - p = pp; + if (Ustrncmp(p, "/sender_retain", 14) == 0) + { + p += 14; + f.active_local_sender_retain = TRUE; + f.active_local_from_check = FALSE; + } + else if (Ustrncmp(p, "/domain=", 8) == 0) + { + const uschar *pp = p + 8; + while (*pp && *pp != '/') pp++; + submission_domain = string_copyn(p+8, pp-p-8); + p = pp; + } + /* The name= option must be last, because it swallows the rest of + the string. */ + else if (Ustrncmp(p, "/name=", 6) == 0) + { + const uschar *pp = p + 6; + while (*pp) pp++; + submission_name = string_copy(parse_fix_phrase(p+6, pp-p-6, + big_buffer, big_buffer_size)); + p = pp; + } + else break; } - /* The name= option must be last, because it swallows the rest of - the string. */ - else if (Ustrncmp(p, "/name=", 6) == 0) + if (*p) { - const uschar *pp = p + 6; - while (*pp) pp++; - submission_name = string_copy(parse_fix_phrase(p+6, pp-p-6, - big_buffer, big_buffer_size)); - p = pp; + *log_msgptr = string_sprintf("syntax error in \"control=%s\"", arg); + return ERROR; } - else break; - } - if (*p != 0) - { - *log_msgptr = string_sprintf("syntax error in \"control=%s\"", arg); - return ERROR; - } - break; + break; case CONTROL_DEBUG: { @@ -3239,99 +3233,99 @@ for (; cb; cb = cb->next) debug_logging_stop(); else debug_logging_activate(debug_tag, debug_opts); + break; } - break; case CONTROL_SUPPRESS_LOCAL_FIXUPS: - f.suppress_local_fixups = TRUE; - break; + f.suppress_local_fixups = TRUE; + break; case CONTROL_CUTTHROUGH_DELIVERY: - { - uschar * ignored = NULL; + { + uschar * ignored = NULL; #ifndef DISABLE_PRDR - if (prdr_requested) + if (prdr_requested) #else - if (0) + if (0) #endif - /* Too hard to think about for now. We might in future cutthrough - the case where both sides handle prdr and this-node prdr acl - is "accept" */ - ignored = US"PRDR active"; - else - { - if (f.deliver_freeze) - ignored = US"frozen"; - else if (f.queue_only_policy) - ignored = US"queue-only"; - else if (fake_response == FAIL) - ignored = US"fakereject"; + /* Too hard to think about for now. We might in future cutthrough + the case where both sides handle prdr and this-node prdr acl + is "accept" */ + ignored = US"PRDR active"; else { - if (rcpt_count == 1) + if (f.deliver_freeze) + ignored = US"frozen"; + else if (f.queue_only_policy) + ignored = US"queue-only"; + else if (fake_response == FAIL) + ignored = US"fakereject"; + else { - cutthrough.delivery = TRUE; /* control accepted */ - while (*p == '/') + if (rcpt_count == 1) { - const uschar * pp = p+1; - if (Ustrncmp(pp, "defer=", 6) == 0) + cutthrough.delivery = TRUE; /* control accepted */ + while (*p == '/') { - pp += 6; - if (Ustrncmp(pp, "pass", 4) == 0) cutthrough.defer_pass = TRUE; - /* else if (Ustrncmp(pp, "spool") == 0) ; default */ + const uschar * pp = p+1; + if (Ustrncmp(pp, "defer=", 6) == 0) + { + pp += 6; + if (Ustrncmp(pp, "pass", 4) == 0) cutthrough.defer_pass = TRUE; + /* else if (Ustrncmp(pp, "spool") == 0) ; default */ + } + else + while (*pp && *pp != '/') pp++; + p = pp; } - else - while (*pp && *pp != '/') pp++; - p = pp; } + else + ignored = US"nonfirst rcpt"; } - else - ignored = US"nonfirst rcpt"; } + DEBUG(D_acl) if (ignored) + debug_printf(" cutthrough request ignored on %s item\n", ignored); } - DEBUG(D_acl) if (ignored) - debug_printf(" cutthrough request ignored on %s item\n", ignored); - } break; #ifdef SUPPORT_I18N case CONTROL_UTF8_DOWNCONVERT: - if (*p == '/') - { - if (p[1] == '1') + if (*p == '/') { - message_utf8_downconvert = 1; - addr->prop.utf8_downcvt = TRUE; - addr->prop.utf8_downcvt_maybe = FALSE; - p += 2; - break; + if (p[1] == '1') + { + message_utf8_downconvert = 1; + addr->prop.utf8_downcvt = TRUE; + addr->prop.utf8_downcvt_maybe = FALSE; + p += 2; + break; + } + if (p[1] == '0') + { + message_utf8_downconvert = 0; + addr->prop.utf8_downcvt = FALSE; + addr->prop.utf8_downcvt_maybe = FALSE; + p += 2; + break; + } + if (p[1] == '-' && p[2] == '1') + { + message_utf8_downconvert = -1; + addr->prop.utf8_downcvt = FALSE; + addr->prop.utf8_downcvt_maybe = TRUE; + p += 3; + break; + } + *log_msgptr = US"bad option value for control=utf8_downconvert"; } - if (p[1] == '0') + else { - message_utf8_downconvert = 0; - addr->prop.utf8_downcvt = FALSE; + message_utf8_downconvert = 1; + addr->prop.utf8_downcvt = TRUE; addr->prop.utf8_downcvt_maybe = FALSE; - p += 2; - break; - } - if (p[1] == '-' && p[2] == '1') - { - message_utf8_downconvert = -1; - addr->prop.utf8_downcvt = FALSE; - addr->prop.utf8_downcvt_maybe = TRUE; - p += 3; break; } - *log_msgptr = US"bad option value for control=utf8_downconvert"; - } - else - { - message_utf8_downconvert = 1; - addr->prop.utf8_downcvt = TRUE; - addr->prop.utf8_downcvt_maybe = FALSE; - break; - } - return ERROR; + return ERROR; #endif } diff --git a/src/src/queue.c b/src/src/queue.c index a57801426..f808ed103 100644 --- a/src/src/queue.c +++ b/src/src/queue.c @@ -1421,33 +1421,26 @@ queue_check_only(void) { int sep = 0; struct stat statbuf; -const uschar *s; -uschar *ss; -uschar buffer[1024]; +const uschar * s = queue_only_file; +uschar * ss; -if (queue_only_file == NULL) return; - -s = queue_only_file; -while ((ss = string_nextinlist(&s, &sep, buffer, sizeof(buffer))) != NULL) - { - if (Ustrncmp(ss, "smtp", 4) == 0) - { - ss += 4; - if (Ustat(ss, &statbuf) == 0) - { - f.queue_smtp = TRUE; - DEBUG(D_receive) debug_printf("queue_smtp set because %s exists\n", ss); - } - } - else - { - if (Ustat(ss, &statbuf) == 0) +if (s) + while ((ss = string_nextinlist(&s, &sep, NULL, 0))) + if (Ustrncmp(ss, "smtp", 4) == 0) { - queue_only = TRUE; - DEBUG(D_receive) debug_printf("queue_only set because %s exists\n", ss); + ss += 4; + if (Ustat(ss, &statbuf) == 0) + { + f.queue_smtp = TRUE; + DEBUG(D_receive) debug_printf("queue_smtp set because %s exists\n", ss); + } } - } - } + else + if (Ustat(ss, &statbuf) == 0) + { + queue_only = TRUE; + DEBUG(D_receive) debug_printf("queue_only set because %s exists\n", ss); + } } #endif /*!COMPILE_UTILITY*/ diff --git a/src/src/rfc2047.c b/src/src/rfc2047.c index f7085007a..039c8493e 100644 --- a/src/src/rfc2047.c +++ b/src/src/rfc2047.c @@ -233,17 +233,11 @@ while (mimeword) #if HAVE_ICONV *q1 = 0; - if (target != NULL && strcmpic(target, mimeword+2) != 0) - { - icd = iconv_open(CS target, CS(mimeword+2)); - - if (icd == (iconv_t)(-1)) - { + if (target && strcmpic(target, mimeword+2) != 0) + if ((icd = iconv_open(CS target, CS(mimeword+2))) == (iconv_t)-1) *error = string_sprintf("iconv_open(\"%s\", \"%s\") failed: %s%s", target, mimeword+2, strerror(errno), (errno == EINVAL)? " (maybe unsupported conversion)" : ""); - } - } *q1 = '?'; #endif diff --git a/src/src/transports/smtp.c b/src/src/transports/smtp.c index 58fe055b7..6559d4170 100644 --- a/src/src/transports/smtp.c +++ b/src/src/transports/smtp.c @@ -4866,10 +4866,12 @@ retry_non_continued: were not in it. We don't want to hold up all SMTP deliveries! Except when doing a two-stage queue run, don't do this if forcing. */ - if ((!f.deliver_force || f.queue_2stage) && (f.queue_smtp || - match_isinlist(addrlist->domain, - (const uschar **)&queue_smtp_domains, 0, - &domainlist_anchor, NULL, MCL_DOMAIN, TRUE, NULL) == OK)) + if ( (!f.deliver_force || f.queue_2stage) + && ( f.queue_smtp + || match_isinlist(addrlist->domain, + CUSS &queue_smtp_domains, 0, + &domainlist_anchor, NULL, MCL_DOMAIN, TRUE, NULL) == OK) + ) { expired = FALSE; for (address_item * addr = addrlist; addr; addr = addr->next) -- 2.30.2