]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/rc-local-generator/rc-local-generator.c
tree-wide: beautify remaining copyright statements
[thirdparty/systemd.git] / src / rc-local-generator / rc-local-generator.c
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
15673083 2/***
96b2fb93 3 Copyright © 2011 Michal Schmidt
15673083
MS
4***/
5
6#include <errno.h>
7#include <stdio.h>
8#include <unistd.h>
9
10#include "log.h"
49e942b2 11#include "mkdir.h"
07630cea
LP
12#include "string-util.h"
13#include "util.h"
15673083 14
dd422d1e 15static const char *arg_dest = "/tmp";
15673083 16
04b6f7c1 17static int add_symlink(const char *service, const char *where) {
449f4fc2 18 const char *from, *to;
15673083
MS
19 int r;
20
21 assert(service);
7b1132f6 22 assert(where);
15673083 23
449f4fc2
LP
24 from = strjoina(SYSTEM_DATA_UNIT_PATH "/", service);
25 to = strjoina(arg_dest, "/", where, ".wants/", service);
15673083 26
449f4fc2 27 (void) mkdir_parents_label(to, 0755);
15673083
MS
28
29 r = symlink(from, to);
30 if (r < 0) {
31 if (errno == EEXIST)
7b1132f6 32 return 0;
15673083 33
e1427b13 34 return log_error_errno(errno, "Failed to create symlink %s: %m", to);
7b1132f6 35 }
15673083 36
7b1132f6 37 return 1;
15673083
MS
38}
39
40int main(int argc, char *argv[]) {
449f4fc2 41 int ret = EXIT_SUCCESS;
15673083 42
07719a21
LP
43 if (argc > 1 && argc != 4) {
44 log_error("This program takes three or no arguments.");
15673083
MS
45 return EXIT_FAILURE;
46 }
47
07719a21
LP
48 if (argc > 1)
49 arg_dest = argv[1];
50
6c347d50
LP
51 log_set_prohibit_ipc(true);
52 log_set_target(LOG_TARGET_AUTO);
15673083
MS
53 log_parse_environment();
54 log_open();
55
07719a21 56 umask(0022);
15673083 57
7b1132f6 58 if (access(RC_LOCAL_SCRIPT_PATH_START, X_OK) >= 0) {
15673083
MS
59 log_debug("Automatically adding rc-local.service.");
60
04b6f7c1 61 if (add_symlink("rc-local.service", "multi-user.target") < 0)
449f4fc2 62 ret = EXIT_FAILURE;
04b6f7c1 63 }
15673083 64
7b1132f6 65 if (access(RC_LOCAL_SCRIPT_PATH_STOP, X_OK) >= 0) {
04b6f7c1
LP
66 log_debug("Automatically adding halt-local.service.");
67
68 if (add_symlink("halt-local.service", "final.target") < 0)
449f4fc2 69 ret = EXIT_FAILURE;
15673083
MS
70 }
71
449f4fc2 72 return ret;
15673083 73}