X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/e3e281ccf9d8777d0df98ddd644720573e0343d1..107077d7fd6736711bf5cd980221723401d37c51:/src/src/spool_mbox.c diff --git a/src/src/spool_mbox.c b/src/src/spool_mbox.c index e5b9ad79c..fbd01c30e 100644 --- a/src/src/spool_mbox.c +++ b/src/src/spool_mbox.c @@ -2,9 +2,11 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) Tom Kistner 2003 - 2015 +/* + * Copyright (c) The Exim Maintainers 2016 - 2023 + * Copyright (c) Tom Kistner 2003 - 2015 * License: GPL - * Copyright (c) The Exim Maintainers 2016 - 2021 + * SPDX-License-Identifier: GPL-2.0-or-later */ /* Code for setting up a MBOX style spool file inside a /scan/ @@ -98,6 +100,7 @@ if (!spool_mbox_ok) } /* End headers */ + if (fwrite("\n", 1, 1, mbox_file) != 1) { log_write(0, LOG_MAIN|LOG_PANIC, "Error/short write while writing \ @@ -108,20 +111,18 @@ if (!spool_mbox_ok) /* Copy body file. If the main receive still has it open then it is holding a lock, and we must not close it (which releases the lock), so just use the global file handle. */ + if (source_file_override) l_data_file = Ufopen(source_file_override, "rb"); else if (spool_data_file) l_data_file = spool_data_file; else - { - message_subdir[1] = '\0'; for (int i = 0; i < 2; i++) { set_subdir_str(message_subdir, message_id, i); temp_string = spool_fname(US"input", message_subdir, message_id, US"-D"); if ((l_data_file = Ufopen(temp_string, "rb"))) break; } - } if (!l_data_file) { @@ -140,7 +141,7 @@ if (!spool_mbox_ok) explicitly, because the one in the file is parted of the locked area. */ if (!source_file_override) - (void)fseek(l_data_file, SPOOL_DATA_START_OFFSET, SEEK_SET); + (void)fseek(l_data_file, spool_data_start_offset(message_id), SEEK_SET); do { @@ -219,7 +220,7 @@ if (spool_mbox_ok && !f.no_mbox_unspool) { debug_printf("Unable to opendir(%s): %s\n", mbox_path, strerror(errno)); /* Just in case we still can: */ - rmdir(CS mbox_path); + (void) rmdir(CS mbox_path); return; } /* loop thru dir & delete entries */ @@ -230,13 +231,15 @@ if (spool_mbox_ok && !f.no_mbox_unspool) file_path = string_sprintf("%s/%s", mbox_path, name); debug_printf("unspool_mbox(): unlinking '%s'\n", file_path); - (void) unlink(CS file_path); + if (unlink(CS file_path) != 0) + log_write(0, LOG_MAIN|LOG_PANIC, "unlink(%s): %s", file_path, strerror(errno)); } closedir(tempdir); /* remove directory */ - rmdir(CS mbox_path); + if (rmdir(CS mbox_path) != 0) + log_write(0, LOG_MAIN|LOG_PANIC, "rmdir(%s): %s", mbox_path, strerror(errno)); store_reset(reset_point); } spool_mbox_ok = 0;