X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshutdownd%2Fshutdownd.c;h=6e4511ecea718e7a97a274e8039210891ffe12c5;hb=a37e4fcf9969c36d59e2f9683079d9b08a3dcfb1;hp=5f109f823bcfccfced151ef8864d490261de2bc4;hpb=da927ba997d68401563b927f92e6e40e021a8e5c;p=elogind.git diff --git a/src/shutdownd/shutdownd.c b/src/shutdownd/shutdownd.c index 5f109f823..6e4511ece 100644 --- a/src/shutdownd/shutdownd.c +++ b/src/shutdownd/shutdownd.c @@ -20,14 +20,10 @@ ***/ #include -#include -#include +#include #include -#include -#include #include #include -#include #include #include "systemd/sd-daemon.h" @@ -70,19 +66,21 @@ static int read_packet(int fd, union shutdown_buffer *_b) { assert(_b); n = recvmsg(fd, &msghdr, MSG_DONTWAIT); - if (n <= 0) { - if (n == 0) { - log_error("Short read"); - return -EIO; - } - + if (n < 0) { if (errno == EAGAIN || errno == EINTR) return 0; - log_error("recvmsg(): %m"); + log_error_errno(errno, "recvmsg(): %m"); return -errno; } + cmsg_close_all(&msghdr); + + if (n == 0) { + log_error("Short read"); + return -EIO; + } + if (msghdr.msg_controllen < CMSG_LEN(sizeof(struct ucred)) || control.cmsghdr.cmsg_level != SOL_SOCKET || control.cmsghdr.cmsg_type != SCM_CREDENTIALS || @@ -203,20 +201,16 @@ static int update_schedule_file(struct sd_shutdown_command *c) { assert(c); r = mkdir_safe_label("/run/systemd/shutdown", 0755, 0, 0); - if (r < 0) { - log_error_errno(r, "Failed to create shutdown subdirectory: %m"); - return r; - } + if (r < 0) + return log_error_errno(r, "Failed to create shutdown subdirectory: %m"); t = cescape(c->wall_message); if (!t) return log_oom(); r = fopen_temporary("/run/systemd/shutdown/scheduled", &f, &temp_path); - if (r < 0) { - log_error_errno(r, "Failed to save information about scheduled shutdowns: %m"); - return r; - } + if (r < 0) + return log_error_errno(r, "Failed to save information about scheduled shutdowns: %m"); fchmod(fileno(f), 0644); @@ -237,7 +231,7 @@ static int update_schedule_file(struct sd_shutdown_command *c) { fflush(f); if (ferror(f) || rename(temp_path, "/run/systemd/shutdown/scheduled") < 0) { - log_error("Failed to write information about scheduled shutdowns: %m"); + log_error_errno(errno, "Failed to write information about scheduled shutdowns: %m"); r = -errno; unlink(temp_path); @@ -300,7 +294,7 @@ int main(int argc, char *argv[]) { pollfd[i].events = POLLIN; pollfd[i].fd = timerfd_create(CLOCK_REALTIME, TFD_NONBLOCK|TFD_CLOEXEC); if (pollfd[i].fd < 0) { - log_error("timerfd_create(): %m"); + log_error_errno(errno, "timerfd_create(): %m"); goto finish; } } @@ -321,7 +315,7 @@ int main(int argc, char *argv[]) { if (errno == EAGAIN || errno == EINTR) continue; - log_error("poll(): %m"); + log_error_errno(errno, "poll(): %m"); goto finish; } @@ -358,7 +352,7 @@ int main(int argc, char *argv[]) { warn_wall(n, &b.command); } if (timerfd_settime(pollfd[FD_WALL_TIMER].fd, TFD_TIMER_ABSTIME, &its, NULL) < 0) { - log_error("timerfd_settime(): %m"); + log_error_errno(errno, "timerfd_settime(): %m"); goto finish; } @@ -366,7 +360,7 @@ int main(int argc, char *argv[]) { zero(its); timespec_store(&its.it_value, when_nologin(b.command.usec)); if (timerfd_settime(pollfd[FD_NOLOGIN_TIMER].fd, TFD_TIMER_ABSTIME, &its, NULL) < 0) { - log_error("timerfd_settime(): %m"); + log_error_errno(errno, "timerfd_settime(): %m"); goto finish; } @@ -374,7 +368,7 @@ int main(int argc, char *argv[]) { zero(its); timespec_store(&its.it_value, b.command.usec); if (timerfd_settime(pollfd[FD_SHUTDOWN_TIMER].fd, TFD_TIMER_ABSTIME, &its, NULL) < 0) { - log_error("timerfd_settime(): %m"); + log_error_errno(errno, "timerfd_settime(): %m"); goto finish; } @@ -398,7 +392,7 @@ int main(int argc, char *argv[]) { /* Restart timer */ timespec_store(&its.it_value, when_wall(n, b.command.usec)); if (timerfd_settime(pollfd[FD_WALL_TIMER].fd, TFD_TIMER_ABSTIME, &its, NULL) < 0) { - log_error("timerfd_settime(): %m"); + log_error_errno(errno, "timerfd_settime(): %m"); goto finish; } } @@ -452,7 +446,7 @@ finish: (b.command.warn_wall ? NULL : "--no-wall"), NULL); - log_error("Failed to execute /sbin/shutdown: %m"); + log_error_errno(errno, "Failed to execute /sbin/shutdown: %m"); } sd_notify(false,