]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/user-sessions/user-sessions.c
util-lib: split our string related calls from util.[ch] into its own file string...
[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 22#include <errno.h>
07630cea 23#include <unistd.h>
e9278741 24
07630cea 25#include "fileio.h"
e9278741 26#include "log.h"
07630cea 27#include "string-util.h"
e9278741 28#include "util.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
ece174c5 46 if (unlink("/run/nologin") < 0 && errno != ENOENT)
76ef789d
LP
47 r = log_error_errno(errno,
48 "Failed to remove /run/nologin file: %m");
e9278741 49
4a8a5b29 50 if (unlink("/etc/nologin") < 0 && errno != ENOENT) {
bd118f8e
LP
51 /* If the file doesn't exist and /etc simply
52 * was read-only (in which case unlink()
53 * returns EROFS even if the file doesn't
54 * exist), don't complain */
55
56 if (errno != EROFS || access("/etc/nologin", F_OK) >= 0) {
56f64d95 57 log_error_errno(errno, "Failed to remove /etc/nologin file: %m");
fe5af612 58 return EXIT_FAILURE;
bd118f8e 59 }
e9278741
LP
60 }
61
fe5af612
LP
62 if (r < 0)
63 return EXIT_FAILURE;
4a8a5b29 64
e9278741 65 } else if (streq(argv[1], "stop")) {
7fb3ee51 66 int r;
e9278741 67
81b72a96 68 r = write_string_file("/run/nologin", "System is going down.", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_ATOMIC);
fe5af612 69 if (r < 0) {
da927ba9 70 log_error_errno(r, "Failed to create /run/nologin: %m");
fe5af612
LP
71 return EXIT_FAILURE;
72 }
e9278741 73
e9278741
LP
74 } else {
75 log_error("Unknown verb %s.", argv[1]);
fe5af612 76 return EXIT_FAILURE;
e9278741
LP
77 }
78
fe5af612 79 return EXIT_SUCCESS;
e9278741 80}