X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/b0fa97c1588ce368d0fd490472d2a7f552c45dbf..HEAD:/src/src/exim_lock.c diff --git a/src/src/exim_lock.c b/src/src/exim_lock.c index 074a951d1..070dfd780 100644 --- a/src/src/exim_lock.c +++ b/src/src/exim_lock.c @@ -10,7 +10,8 @@ Default is -fcntl -lockfile. Argument: the name of the lock file -Copyright (c) The Exim Maintainers 2016 +Copyright (c) The Exim Maintainers 2016 - 2024 +SPDX-License-Identifier: GPL-2.0-or-later */ #include "os.h" @@ -87,7 +88,6 @@ the other stuff in os.c, so force the other macros to omit it. */ static void sigalrm_handler(int sig) { -sig = sig; /* Keep picky compilers happy */ sigalrm_seen = TRUE; } @@ -103,7 +103,7 @@ usage(void) printf("usage: exim_lock [-v] [-q] [-lockfile] [-fcntl] [-flock] [-mbx]\n" " [-retries ] [-interval ] [-timeout ] [-restore-times]\n" " [command]\n"); -exit(1); +exit(EXIT_FAILURE); } @@ -227,7 +227,7 @@ if (use_flock) { printf("exim_lock: can't use flock() because it was not available in the\n" " operating system when exim_lock was compiled\n"); - exit(1); + exit(EXIT_FAILURE); } #endif @@ -271,14 +271,14 @@ if (*filename == '~') if (pw == NULL) { printf("exim_lock: unable to expand file name %s\n", argv[i-1]); - exit(1); + exit(EXIT_FAILURE); } if ((int)strlen(pw->pw_dir) + (int)strlen(filename) + 1 > sizeof(buffer)) { printf("exim_lock: expanded file name %s%s is too long", pw->pw_dir, filename); - exit(1); + exit(EXIT_FAILURE); } strcpy(buffer, pw->pw_dir); @@ -294,7 +294,7 @@ if (use_lockfile) if (uname(&s) < 0) { printf("exim_lock: failed to find host name using uname()\n"); - exit(1); + exit(EXIT_FAILURE); } primary_hostname = s.nodename; @@ -331,7 +331,7 @@ for (j = 0; j < lock_retries; j++) { printf("exim_lock: failed to create hitching post %s: %s\n", hitchname, strerror(errno)); - exit(1); + exit(EXIT_FAILURE); } /* Apply hitching post algorithm. */ @@ -584,16 +584,28 @@ else if (restore_times) { struct stat strestore; -#ifdef EXIM_HAVE_OPENAT +#ifdef EXIM_HAVE_FUTIMENS int fd = open(filename, O_RDWR); /* use fd for both get & restore */ struct timespec tt[2]; - fstat(fd, &strestore); + if (fd < 0) + { + printf("open '%s': %s\n", filename, strerror(errno)); + yield = 1; + goto CLEAN_UP; + } + if (fstat(fd, &strestore) != 0) + { + printf("fstat '%s': %s\n", filename, strerror(errno)); + yield = 1; + close(fd); + goto CLEAN_UP; + } i = system(command); tt[0] = strestore.st_atim; tt[1] = strestore.st_mtim; - futimens(fd, tt); - close(fd); + (void) futimens(fd, tt); + (void) close(fd); #else struct utimbuf ut;