chiark / gitweb /
shutdown: create /var/run/nologin instead of /etc/nologin which is supported since...
[elogind.git] / src / shutdownd.c
index 59439bca850cb2d719ac5307aff5d6abe59b98cd..bf69fb53673b859c4777c8c8e822a2128f24ff80 100644 (file)
@@ -176,7 +176,7 @@ int main(int argc, char *argv[]) {
                 _FD_MAX
         };
 
-        int r = 4, n_fds;
+        int r = EXIT_FAILURE, n_fds;
         int one = 1;
         struct shutdownd_command c;
         struct pollfd pollfd[_FD_MAX];
@@ -185,12 +185,12 @@ int main(int argc, char *argv[]) {
 
         if (getppid() != 1) {
                 log_error("This program should be invoked by init only.");
-                return 1;
+                return EXIT_FAILURE;
         }
 
         if (argc > 1) {
                 log_error("This program does not take arguments.");
-                return 1;
+                return EXIT_FAILURE;
         }
 
         log_set_target(LOG_TARGET_SYSLOG_OR_KMSG);
@@ -199,17 +199,17 @@ int main(int argc, char *argv[]) {
 
         if ((n_fds = sd_listen_fds(true)) < 0) {
                 log_error("Failed to read listening file descriptors from environment: %s", strerror(-r));
-                return 1;
+                return EXIT_FAILURE;
         }
 
         if (n_fds != 1) {
                 log_error("Need exactly one file descriptor.");
-                return 2;
+                return EXIT_FAILURE;
         }
 
         if (setsockopt(SD_LISTEN_FDS_START, SOL_SOCKET, SO_PASSCRED, &one, sizeof(one)) < 0) {
                 log_error("SO_PASSCRED failed: %m");
-                return 3;
+                return EXIT_FAILURE;
         }
 
         zero(c);
@@ -318,10 +318,10 @@ int main(int argc, char *argv[]) {
                 if (pollfd[FD_NOLOGIN_TIMER].revents) {
                         int e;
 
-                        log_info("Creating /etc/nologin, blocking further logins...");
+                        log_info("Creating /var/run/nologin, blocking further logins...");
 
-                        if ((e = touch("/etc/nologin")) < 0)
-                                log_error("Failed to create /etc/nologin: %s", strerror(-e));
+                        if ((e = write_one_line_file("/var/run/nologin", "System is going down.")) < 0)
+                                log_error("Failed to create /var/run/nologin: %s", strerror(-e));
                         else
                                 unlink_nologin = true;
 
@@ -335,7 +335,7 @@ int main(int argc, char *argv[]) {
 
         } while (c.elapse > 0);
 
-        r = 0;
+        r = EXIT_SUCCESS;
 
         log_debug("systemd-shutdownd stopped as pid %lu", (unsigned long) getpid());
 
@@ -345,6 +345,9 @@ finish:
                 if (pollfd[i].fd >= 0)
                         close_nointr_nofail(pollfd[i].fd);
 
+        if (unlink_nologin)
+                unlink("/var/run/nologin");
+
         if (exec_shutdown) {
                 char sw[3];
 
@@ -363,9 +366,6 @@ finish:
                 log_error("Failed to execute /sbin/shutdown: %m");
         }
 
-        if (unlink_nologin)
-                unlink("/etc/nologin");
-
         sd_notify(false,
                   "STATUS=Exiting...");