]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/quotacheck/quotacheck.c
2 This file is part of systemd.
4 Copyright 2010 Lennart Poettering
6 systemd is free software; you can redistribute it and/or modify it
7 under the terms of the GNU Lesser General Public License as published by
8 the Free Software Foundation; either version 2.1 of the License, or
9 (at your option) any later version.
11 systemd is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
16 You should have received a copy of the GNU Lesser General Public License
17 along with systemd; If not, see <http://www.gnu.org/licenses/>.
23 #include <sys/prctl.h>
26 #include "proc-cmdline.h"
27 #include "process-util.h"
28 #include "signal-util.h"
29 #include "string-util.h"
32 static bool arg_skip
= false;
33 static bool arg_force
= false;
35 static int parse_proc_cmdline_item(const char *key
, const char *value
, void *data
) {
37 if (streq(key
, "quotacheck.mode")) {
39 if (proc_cmdline_value_missing(key
, value
))
42 if (streq(value
, "auto"))
43 arg_force
= arg_skip
= false;
44 else if (streq(value
, "force"))
46 else if (streq(value
, "skip"))
49 log_warning("Invalid quotacheck.mode= parameter '%s'. Ignoring.", value
);
53 else if (streq(key
, "forcequotacheck") && !value
) {
54 log_warning("Please use 'quotacheck.mode=force' rather than 'forcequotacheck' on the kernel command line.");
62 static void test_files(void) {
65 if (access("/forcequotacheck", F_OK
) >= 0) {
66 log_error("Please pass 'quotacheck.mode=force' on the kernel command line rather than creating /forcequotacheck on the root file system.");
72 int main(int argc
, char *argv
[]) {
74 static const char * const cmdline
[] = {
84 log_error("This program takes no arguments.");
88 log_set_target(LOG_TARGET_AUTO
);
89 log_parse_environment();
94 r
= proc_cmdline_parse(parse_proc_cmdline_item
, NULL
, 0);
96 log_warning_errno(r
, "Failed to parse kernel command line, ignoring: %m");
104 if (access("/run/systemd/quotacheck", F_OK
) < 0)
110 r
= log_error_errno(errno
, "fork(): %m");
117 (void) reset_all_signal_handlers();
118 (void) reset_signal_mask();
119 assert_se(prctl(PR_SET_PDEATHSIG
, SIGTERM
) == 0);
121 execv(cmdline
[0], (char**) cmdline
);
122 _exit(1); /* Operational error */
125 r
= wait_for_terminate_and_warn("quotacheck", pid
, true);
128 return r
< 0 ? EXIT_FAILURE
: EXIT_SUCCESS
;