]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/user-sessions/user-sessions.c
tree-wide: drop {} from one-line if blocks
[thirdparty/systemd.git] / src / user-sessions / user-sessions.c
CommitLineData
e9278741
LP
1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3/***
4 This file is part of systemd.
5
6 Copyright 2010 Lennart Poettering
7
8 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
9 under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 2.1 of the License, or
e9278741
LP
11 (at your option) any later version.
12
13 systemd is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2 16 Lesser General Public License for more details.
e9278741 17
5430f7f2 18 You should have received a copy of the GNU Lesser General Public License
e9278741
LP
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
20***/
21
e9278741
LP
22#include <unistd.h>
23#include <errno.h>
24
25#include "log.h"
26#include "util.h"
a5c32cff 27#include "fileio.h"
e9278741
LP
28
29int main(int argc, char*argv[]) {
e9278741
LP
30
31 if (argc != 2) {
32 log_error("This program requires one argument.");
33 return EXIT_FAILURE;
34 }
35
4cfa2c99 36 log_set_target(LOG_TARGET_AUTO);
e9278741
LP
37 log_parse_environment();
38 log_open();
39
4c12626c
LP
40 umask(0022);
41
e9278741 42 if (streq(argv[1], "start")) {
fe5af612 43 int r = 0;
e9278741 44
ece174c5 45 if (unlink("/run/nologin") < 0 && errno != ENOENT)
76ef789d
LP
46 r = log_error_errno(errno,
47 "Failed to remove /run/nologin file: %m");
e9278741 48
4a8a5b29 49 if (unlink("/etc/nologin") < 0 && errno != ENOENT) {
bd118f8e
LP
50 /* If the file doesn't exist and /etc simply
51 * was read-only (in which case unlink()
52 * returns EROFS even if the file doesn't
53 * exist), don't complain */
54
55 if (errno != EROFS || access("/etc/nologin", F_OK) >= 0) {
56f64d95 56 log_error_errno(errno, "Failed to remove /etc/nologin file: %m");
fe5af612 57 return EXIT_FAILURE;
bd118f8e 58 }
e9278741
LP
59 }
60
fe5af612
LP
61 if (r < 0)
62 return EXIT_FAILURE;
4a8a5b29 63
e9278741 64 } else if (streq(argv[1], "stop")) {
7fb3ee51 65 int r;
e9278741 66
81b72a96 67 r = write_string_file("/run/nologin", "System is going down.", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_ATOMIC);
fe5af612 68 if (r < 0) {
da927ba9 69 log_error_errno(r, "Failed to create /run/nologin: %m");
fe5af612
LP
70 return EXIT_FAILURE;
71 }
e9278741 72
e9278741
LP
73 } else {
74 log_error("Unknown verb %s.", argv[1]);
fe5af612 75 return EXIT_FAILURE;
e9278741
LP
76 }
77
fe5af612 78 return EXIT_SUCCESS;
e9278741 79}