]> git.ipfire.org Git - thirdparty/strongswan.git/blame - src/swanctl/swanctl.c
swanctl: Make credential directories relative to swanctl.conf
[thirdparty/strongswan.git] / src / swanctl / swanctl.c
CommitLineData
e381e69f 1/*
501bd53a
TB
2 * Copyright (C) 2018 Tobias Brunner
3 * HSR Hochschule fuer Technik Rapperswil
4 *
e381e69f
MW
5 * Copyright (C) 2014 Martin Willi
6 * Copyright (C) 2014 revosec AG
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the
10 * Free Software Foundation; either version 2 of the License, or (at your
11 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
12 *
13 * This program is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 * for more details.
17 */
18
501bd53a 19#include "swanctl.h"
e381e69f
MW
20#include "command.h"
21
22#include <unistd.h>
23
24#include <library.h>
25
501bd53a
TB
26/*
27 * Described in header
28 */
29char *swanctl_dir;
30
31/*
32 * Described in header
33 */
34settings_t *load_swanctl_conf(char *file)
35{
36 settings_t *cfg;
37 char buf[PATH_MAX];
38
39 if (!file)
40 {
41 if (!strlen(swanctl_dir))
42 {
43 free(swanctl_dir);
44 swanctl_dir = strdup(getcwd(buf, sizeof(buf)));
45 }
46 file = buf;
47 snprintf(buf, sizeof(buf), "%s%s%s", swanctl_dir,
48 DIRECTORY_SEPARATOR, SWANCTL_CONF);
49 }
50
51 cfg = settings_create(file);
52 if (!cfg)
53 {
54 fprintf(stderr, "parsing '%s' failed\n", file);
55 return NULL;
56 }
57 free(swanctl_dir);
58 swanctl_dir = path_dirname(file);
59 return cfg;
60}
61
e381e69f
MW
62/**
63 * Cleanup library atexit()
64 */
65static void cleanup()
66{
501bd53a 67 free(swanctl_dir);
e381e69f
MW
68 lib->processor->cancel(lib->processor);
69 library_deinit();
70}
71
72/**
73 * Library initialization and operation parsing
74 */
75int main(int argc, char *argv[])
76{
77 atexit(cleanup);
78 if (!library_init(NULL, "swanctl"))
79 {
80 exit(SS_RC_LIBSTRONGSWAN_INTEGRITY);
81 }
82 if (lib->integrity &&
83 !lib->integrity->check_file(lib->integrity, "swanctl", argv[0]))
84 {
85 fprintf(stderr, "integrity check of swanctl failed\n");
86 exit(SS_RC_DAEMON_INTEGRITY);
87 }
88 if (!lib->plugins->load(lib->plugins,
89 lib->settings->get_str(lib->settings, "swanctl.load", PLUGINS)))
90 {
91 exit(SS_RC_INITIALIZATION_FAILED);
92 }
501bd53a
TB
93
94 swanctl_dir = strdup(getenv("SWANCTL_DIR") ?: SWANCTLDIR);
95
e381e69f
MW
96 dbg_default_set_level(0);
97 lib->processor->set_threads(lib->processor, 4);
e20e0a05 98 dbg_default_set_level(1);
e381e69f
MW
99
100 return command_dispatch(argc, argv);
101}