diff options
-rw-r--r-- | src/src/acl.c | 6 | ||||
-rw-r--r-- | src/src/daemon.c | 52 | ||||
-rw-r--r-- | src/src/smtp_in.c | 4 | ||||
-rw-r--r-- | src/src/spool_out.c | 31 | ||||
-rw-r--r-- | src/src/tls-gnu.c | 25 |
5 files changed, 47 insertions, 71 deletions
diff --git a/src/src/acl.c b/src/src/acl.c index fb2a7da4b..cbf71ae1f 100644 --- a/src/src/acl.c +++ b/src/src/acl.c @@ -2696,17 +2696,17 @@ uschar * errstr; hostname = string_nextinlist(&arg, &sep, NULL, 0); portstr = string_nextinlist(&arg, &sep, NULL, 0); -if (hostname == NULL) +if (!hostname) { *log_msgptr = US"missing destination host in \"udpsend\" modifier"; return ERROR; } -if (portstr == NULL) +if (!portstr) { *log_msgptr = US"missing destination port in \"udpsend\" modifier"; return ERROR; } -if (arg == NULL) +if (!arg) { *log_msgptr = US"missing datagram payload in \"udpsend\" modifier"; return ERROR; diff --git a/src/src/daemon.c b/src/src/daemon.c index 2efaeba95..60275c02d 100644 --- a/src/src/daemon.c +++ b/src/src/daemon.c @@ -161,23 +161,20 @@ DEBUG(D_any) debug_printf("Connection request from %s port %d\n", input stream. These operations fail only the exceptional circumstances. Note that never_error() won't use smtp_out if it is NULL. */ -smtp_out = fdopen(accept_socket, "wb"); -if (smtp_out == NULL) +if (!(smtp_out = fdopen(accept_socket, "wb"))) { never_error(US"daemon: fdopen() for smtp_out failed", US"", errno); goto ERROR_RETURN; } -dup_accept_socket = dup(accept_socket); -if (dup_accept_socket < 0) +if ((dup_accept_socket = dup(accept_socket)) < 0) { never_error(US"daemon: couldn't dup socket descriptor", US"Connection setup failed", errno); goto ERROR_RETURN; } -smtp_in = fdopen(dup_accept_socket, "rb"); -if (smtp_in == NULL) +if (!(smtp_in = fdopen(dup_accept_socket, "rb"))) { never_error(US"daemon: fdopen() for smtp_in failed", US"Connection setup failed", errno); @@ -293,7 +290,6 @@ if ((max_for_this_host > 0) && int other_host_count = 0; /* keep a count of non matches to optimise */ for (i = 0; i < smtp_accept_max; ++i) - { if (smtp_slots[i].host_address != NULL) { if (Ustrcmp(sender_host_address, smtp_slots[i].host_address) == 0) @@ -309,7 +305,6 @@ if ((max_for_this_host > 0) && ((smtp_accept_count - other_host_count) < max_for_this_host)) break; } - } if (host_accept_count >= max_for_this_host) { @@ -534,7 +529,7 @@ if (pid == 0) /*XXX should we pause briefly, hoping that the client will be the active TCP closer hence get the TCP_WAIT endpoint? */ DEBUG(D_receive) debug_printf("SMTP>>(close on process exit)\n"); - _exit((rc == 0)? EXIT_SUCCESS : EXIT_FAILURE); + _exit(rc ? EXIT_FAILURE : EXIT_SUCCESS); } /* Show the recipients when debugging */ @@ -590,15 +585,13 @@ if (pid == 0) very long-lived connections from scanning appliances where this is not the best strategy. In such cases, queue_only_load_latch should be set false. */ - local_queue_only = session_local_queue_only; - if (!local_queue_only && queue_only_load >= 0) + if ( !(local_queue_only = session_local_queue_only) + && queue_only_load >= 0 + && (local_queue_only = (load_average = OS_GETLOADAVG()) > queue_only_load) + ) { - local_queue_only = (load_average = OS_GETLOADAVG()) > queue_only_load; - if (local_queue_only) - { - queue_only_reason = 3; - if (queue_only_load_latch) session_local_queue_only = TRUE; - } + queue_only_reason = 3; + if (queue_only_load_latch) session_local_queue_only = TRUE; } /* Log the queueing here, when it will get a message id attached, but @@ -606,23 +599,20 @@ if (pid == 0) if (local_queue_only) switch(queue_only_reason) { - case 1: - log_write(L_delay_delivery, + case 1: log_write(L_delay_delivery, LOG_MAIN, "no immediate delivery: too many connections " "(%d, max %d)", smtp_accept_count, smtp_accept_queue); - break; + break; - case 2: - log_write(L_delay_delivery, + case 2: log_write(L_delay_delivery, LOG_MAIN, "no immediate delivery: more than %d messages " "received in one connection", smtp_accept_queue_per_connection); - break; + break; - case 3: - log_write(L_delay_delivery, + case 3: log_write(L_delay_delivery, LOG_MAIN, "no immediate delivery: load average %.2f", (double)load_average/1000.0); - break; + break; } /* If a delivery attempt is required, spin off a new process to handle it. @@ -676,10 +666,8 @@ if (pid == 0) DEBUG(D_any) debug_printf("forked delivery process %d\n", (int)dpid); } else - { log_write(0, LOG_MAIN|LOG_PANIC, "daemon: delivery process fork " "failed: %s", strerror(errno)); - } } } } @@ -690,14 +678,11 @@ failed. Otherwise, keep count of the number of accepting processes and remember the pid for ticking off when the child completes. */ if (pid < 0) - { never_error(US"daemon: accept process fork failed", US"Fork failed", errno); - } else { int i; for (i = 0; i < smtp_accept_max; ++i) - { if (smtp_slots[i].pid <= 0) { smtp_slots[i].pid = pid; @@ -706,7 +691,6 @@ else smtp_accept_count++; break; } - } DEBUG(D_any) debug_printf("%d SMTP accept process%s running\n", smtp_accept_count, (smtp_accept_count == 1)? "" : "es"); } @@ -723,7 +707,7 @@ manifest itself as a broken pipe, so drop that one too. If the streams don't exist, something went wrong while setting things up. Make sure the socket descriptors are closed, in order to drop the connection. */ -if (smtp_out != NULL) +if (smtp_out) { if (fclose(smtp_out) != 0 && errno != ECONNRESET && errno != EPIPE) log_write(0, LOG_MAIN|LOG_PANIC, "daemon: fclose(smtp_out) failed: %s", @@ -732,7 +716,7 @@ if (smtp_out != NULL) } else (void)close(accept_socket); -if (smtp_in != NULL) +if (smtp_in) { if (fclose(smtp_in) != 0 && errno != ECONNRESET && errno != EPIPE) log_write(0, LOG_MAIN|LOG_PANIC, "daemon: fclose(smtp_in) failed: %s", diff --git a/src/src/smtp_in.c b/src/src/smtp_in.c index bc6583da1..f12799279 100644 --- a/src/src/smtp_in.c +++ b/src/src/smtp_in.c @@ -1376,8 +1376,8 @@ Returns: a string describing the connection uschar * smtp_get_connection_info(void) { -uschar *hostname = (sender_fullhost == NULL)? - sender_host_address : sender_fullhost; +const uschar * hostname = sender_fullhost + ? sender_fullhost : sender_host_address; if (host_checking) return string_sprintf("SMTP connection from %s", hostname); diff --git a/src/src/spool_out.c b/src/src/spool_out.c index 82b606871..e49d89a09 100644 --- a/src/src/spool_out.c +++ b/src/src/spool_out.c @@ -17,7 +17,7 @@ *************************************************/ /* This function is called immediately after errors in writing the spool, with -errno still set. It creates and error message, depending on the circumstances. +errno still set. It creates an error message, depending on the circumstances. If errmsg is NULL, it logs the message and panic-dies. Otherwise errmsg is set to point to the message, and -1 is returned. This function makes the code of spool_write_header() a bit neater. @@ -36,22 +36,21 @@ static int spool_write_error(int where, uschar **errmsg, uschar *s, uschar *temp_name, FILE *f) { -uschar *msg = (where == SW_RECEIVING)? - string_sprintf("spool file %s error while receiving from %s: %s", s, - (sender_fullhost != NULL)? sender_fullhost : sender_ident, - strerror(errno)) - : - string_sprintf("spool file %s error while %s: %s", s, - (where == SW_DELIVERING)? "delivering" : "modifying", - strerror(errno)); - -if (temp_name != NULL) Uunlink(temp_name); -if (f != NULL) (void)fclose(f); - -if (errmsg == NULL) - log_write(0, LOG_MAIN|LOG_PANIC_DIE, "%s", msg); -else +uschar *msg = where == SW_RECEIVING + ? string_sprintf("spool file %s error while receiving from %s: %s", s, + sender_fullhost ? sender_fullhost : sender_ident, + strerror(errno)) + : string_sprintf("spool file %s error while %s: %s", s, + where == SW_DELIVERING ? "delivering" : "modifying", + strerror(errno)); + +if (temp_name) Uunlink(temp_name); +if (f) (void)fclose(f); + +if (errmsg) *errmsg = msg; +else + log_write(0, LOG_MAIN|LOG_PANIC_DIE, "%s", msg); return -1; } diff --git a/src/src/tls-gnu.c b/src/src/tls-gnu.c index 383a00f4e..7ddd7a724 100644 --- a/src/src/tls-gnu.c +++ b/src/src/tls-gnu.c @@ -493,8 +493,7 @@ else if (Ustrcmp(exp_tls_dhparam, "none") == 0) } else if (exp_tls_dhparam[0] != '/') { - m.data = US std_dh_prime_named(exp_tls_dhparam); - if (m.data == NULL) + if (!(m.data = US std_dh_prime_named(exp_tls_dhparam))) return tls_error(US"No standard prime named", CS exp_tls_dhparam, NULL); m.size = Ustrlen(m.data); } @@ -548,8 +547,7 @@ if (use_file_in_spool) /* Open the cache file for reading and if successful, read it and set up the parameters. */ -fd = Uopen(filename, O_RDONLY, 0); -if (fd >= 0) +if ((fd = Uopen(filename, O_RDONLY, 0)) >= 0) { struct stat statbuf; FILE *fp; @@ -624,8 +622,7 @@ if (rc < 0) CS filename, NULL); temp_fn = string_copy(US "%s.XXXXXXX"); - fd = mkstemp(CS temp_fn); /* modifies temp_fn */ - if (fd < 0) + if ((fd = mkstemp(CS temp_fn)) < 0) /* modifies temp_fn */ return tls_error(US"Unable to open temp file", strerror(errno), NULL); (void)fchown(fd, exim_uid, exim_gid); /* Probably not necessary */ @@ -675,23 +672,19 @@ if (rc < 0) } m.size = sz; /* shrink by 1, probably */ - sz = write_to_fd_buf(fd, m.data, (size_t) m.size); - if (sz != m.size) + if ((sz = write_to_fd_buf(fd, m.data, (size_t) m.size)) != m.size) { free(m.data); return tls_error(US"TLS cache write D-H params failed", strerror(errno), NULL); } free(m.data); - sz = write_to_fd_buf(fd, US"\n", 1); - if (sz != 1) + if ((sz = write_to_fd_buf(fd, US"\n", 1)) != 1) return tls_error(US"TLS cache write D-H params final newline failed", strerror(errno), NULL); - rc = close(fd); - if (rc) - return tls_error(US"TLS cache write close() failed", - strerror(errno), NULL); + if ((rc = close(fd))) + return tls_error(US"TLS cache write close() failed", strerror(errno), NULL); if (Urename(temp_fn, filename) < 0) return tls_error(string_sprintf("failed to rename \"%s\" as \"%s\"", @@ -1838,9 +1831,9 @@ if (rc != GNUTLS_E_SUCCESS) else { tls_error(US"gnutls_handshake", gnutls_strerror(rc), NULL); - gnutls_alert_send_appropriate(state->session, rc); + (void) gnutls_alert_send_appropriate(state->session, rc); millisleep(500); - shutdown(fileno(smtp_out), SHUT_WR); + shutdown(state->fd_in, SHUT_WR); for (rc = 1024; fgetc(smtp_in) != EOF && rc > 0; ) rc--; /* drain skt */ (void)fclose(smtp_out); (void)fclose(smtp_in); |