]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/login/user-sessions.c
treewide: use log_*_errno whenever %m is in the format string
[thirdparty/systemd.git] / src / login / 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
22#include <string.h>
23#include <unistd.h>
24#include <errno.h>
25
26#include "log.h"
27#include "util.h"
a5c32cff 28#include "fileio.h"
e9278741
LP
29
30int main(int argc, char*argv[]) {
e9278741
LP
31
32 if (argc != 2) {
33 log_error("This program requires one argument.");
34 return EXIT_FAILURE;
35 }
36
4cfa2c99 37 log_set_target(LOG_TARGET_AUTO);
e9278741
LP
38 log_parse_environment();
39 log_open();
40
4c12626c
LP
41 umask(0022);
42
e9278741 43 if (streq(argv[1], "start")) {
fe5af612 44 int r = 0;
e9278741 45
db019b8d 46 if (unlink("/run/nologin") < 0 && errno != ENOENT) {
56f64d95 47 log_error_errno(errno, "Failed to remove /run/nologin file: %m");
4a8a5b29
LP
48 r = -errno;
49 }
e9278741 50
4a8a5b29 51 if (unlink("/etc/nologin") < 0 && errno != ENOENT) {
bd118f8e
LP
52 /* If the file doesn't exist and /etc simply
53 * was read-only (in which case unlink()
54 * returns EROFS even if the file doesn't
55 * exist), don't complain */
56
57 if (errno != EROFS || access("/etc/nologin", F_OK) >= 0) {
56f64d95 58 log_error_errno(errno, "Failed to remove /etc/nologin file: %m");
fe5af612 59 return EXIT_FAILURE;
bd118f8e 60 }
e9278741
LP
61 }
62
fe5af612
LP
63 if (r < 0)
64 return EXIT_FAILURE;
4a8a5b29 65
e9278741 66 } else if (streq(argv[1], "stop")) {
7fb3ee51 67 int r;
e9278741 68
574d5f2d 69 r = write_string_file_atomic("/run/nologin", "System is going down.");
fe5af612 70 if (r < 0) {
da927ba9 71 log_error_errno(r, "Failed to create /run/nologin: %m");
fe5af612
LP
72 return EXIT_FAILURE;
73 }
e9278741 74
e9278741
LP
75 } else {
76 log_error("Unknown verb %s.", argv[1]);
fe5af612 77 return EXIT_FAILURE;
e9278741
LP
78 }
79
fe5af612 80 return EXIT_SUCCESS;
e9278741 81}