summaryrefslogtreecommitdiff
path: root/src/user-sessions
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2018-02-16 06:58:33 +0100
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2018-02-16 10:44:22 +0100
commitaf229d7a5be768a49a7f0d1028d878a71b797bad (patch)
treea82b02e5550ceed5efc6091e27028bb2f3941ecb /src/user-sessions
parent730f40eb5789efe59cf105e898297d188cd0588b (diff)
downloadsystemd-af229d7a5be768a49a7f0d1028d878a71b797bad.tar.gz
login,user-sessions: always warn when we fail to remove nologin file
This usually is very annoying to users who then cannot log in, so make sure we always warn if that happens (selinux, or whatever other reason). This reverts a790812cb349c5cef95d1b4a20fc80ca08d3a145.
Diffstat (limited to 'src/user-sessions')
-rw-r--r--src/user-sessions/user-sessions.c26
1 files changed, 5 insertions, 21 deletions
diff --git a/src/user-sessions/user-sessions.c b/src/user-sessions/user-sessions.c
index 795766a657..1aed9adae7 100644
--- a/src/user-sessions/user-sessions.c
+++ b/src/user-sessions/user-sessions.c
@@ -23,12 +23,14 @@
#include "fileio.h"
#include "fileio-label.h"
+#include "fs-util.h"
#include "log.h"
#include "selinux-util.h"
#include "string-util.h"
#include "util.h"
int main(int argc, char*argv[]) {
+ int r, k;
if (argc != 2) {
log_error("This program requires one argument.");
@@ -44,30 +46,12 @@ int main(int argc, char*argv[]) {
mac_selinux_init();
if (streq(argv[1], "start")) {
- int r = 0;
-
- if (unlink("/run/nologin") < 0 && errno != ENOENT)
- r = log_error_errno(errno,
- "Failed to remove /run/nologin file: %m");
-
- if (unlink("/etc/nologin") < 0 && errno != ENOENT) {
- /* If the file doesn't exist and /etc simply
- * was read-only (in which case unlink()
- * returns EROFS even if the file doesn't
- * exist), don't complain */
-
- if (errno != EROFS || access("/etc/nologin", F_OK) >= 0) {
- log_error_errno(errno, "Failed to remove /etc/nologin file: %m");
- return EXIT_FAILURE;
- }
- }
-
- if (r < 0)
+ r = unlink_or_warn("/run/nologin");
+ k = unlink_or_warn("/etc/nologin");
+ if (r < 0 || k < 0)
return EXIT_FAILURE;
} else if (streq(argv[1], "stop")) {
- int r;
-
r = write_string_file_atomic_label("/run/nologin", "System is going down.");
if (r < 0) {
log_error_errno(r, "Failed to create /run/nologin: %m");