summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--man/sd_path_lookup.xml23
-rw-r--r--src/libsystemd/sd-path/sd-path.c97
-rw-r--r--src/path/path.c23
-rw-r--r--src/systemd/sd-path.h24
4 files changed, 167 insertions, 0 deletions
diff --git a/man/sd_path_lookup.xml b/man/sd_path_lookup.xml
index c14ccf0e8c..81812bc003 100644
--- a/man/sd_path_lookup.xml
+++ b/man/sd_path_lookup.xml
@@ -75,6 +75,29 @@
<constant>SD_PATH_SEARCH_CONFIGURATION_FACTORY</constant>,
<constant>SD_PATH_SEARCH_STATE_FACTORY</constant>,
<constant>SD_PATH_SEARCH_CONFIGURATION</constant>,
+
+ <constant>SD_PATH_SYSTEMD_UTIL_DIR</constant>,
+ <constant>SD_PATH_SYSTEMD_SYSTEM_UNIT_DIR</constant>,
+ <constant>SD_PATH_SYSTEMD_SYSTEM_PRESET_DIR</constant>,
+ <constant>SD_PATH_SYSTEMD_USER_UNIT_DIR</constant>,
+ <constant>SD_PATH_SYSTEMD_USER_PRESET_DIR</constant>,
+ <constant>SD_PATH_SYSTEMD_SYSTEM_CONF_DIR</constant>,
+ <constant>SD_PATH_SYSTEMD_USER_CONF_DIR</constant>,
+ <constant>SD_PATH_SYSTEMD_SYSTEM_UNIT_PATH</constant>,
+ <constant>SD_PATH_SYSTEMD_USER_UNIT_PATH</constant>,
+ <constant>SD_PATH_SYSTEMD_SYSTEM_GENERATOR_DIR</constant>,
+ <constant>SD_PATH_SYSTEMD_USER_GENERATOR_DIR</constant>,
+ <constant>SD_PATH_SYSTEMD_SYSTEM_GENERATOR_PATH</constant>,
+ <constant>SD_PATH_SYSTEMD_USER_GENERATOR_PATH</constant>,
+ <constant>SD_PATH_SYSTEMD_SLEEP_DIR</constant>,
+ <constant>SD_PATH_SYSTEMD_SHUTDOWN_DIR</constant>,
+
+ <constant>SD_PATH_TMPFILES_DIR</constant>,
+ <constant>SD_PATH_SYSUSERS_DIR</constant>,
+ <constant>SD_PATH_SYSCTL_DIR</constant>,
+ <constant>SD_PATH_BINFMT_DIR</constant>,
+ <constant>SD_PATH_MODULES_LOAD_DIR</constant>,
+ <constant>SD_PATH_CATALOG_DIR</constant>,
};</funcsynopsisinfo>
<funcprototype>
diff --git a/src/libsystemd/sd-path/sd-path.c b/src/libsystemd/sd-path/sd-path.c
index 8bdc2435a3..edc32fbd87 100644
--- a/src/libsystemd/sd-path/sd-path.c
+++ b/src/libsystemd/sd-path/sd-path.c
@@ -7,6 +7,7 @@
#include "fd-util.h"
#include "fileio.h"
#include "fs-util.h"
+#include "path-lookup.h"
#include "path-util.h"
#include "string-util.h"
#include "strv.h"
@@ -318,6 +319,76 @@ static int get_path(uint64_t type, char **buffer, const char **ret) {
case SD_PATH_USER_DESKTOP:
return from_user_dir("XDG_DESKTOP_DIR", buffer, ret);
+
+ case SD_PATH_SYSTEMD_UTIL_DIR:
+ *ret = ROOTPREFIX "lib/systemd";
+ return 0;
+
+ case SD_PATH_SYSTEMD_SYSTEM_UNIT_DIR:
+ *ret = SYSTEM_DATA_UNIT_PATH;
+ return 0;
+
+ case SD_PATH_SYSTEMD_SYSTEM_PRESET_DIR:
+ *ret = ROOTPREFIX "lib/systemd/system-preset";
+ return 0;
+
+ case SD_PATH_SYSTEMD_USER_UNIT_DIR:
+ *ret = USER_DATA_UNIT_PATH;
+ return 0;
+
+ case SD_PATH_SYSTEMD_USER_PRESET_DIR:
+ *ret = ROOTPREFIX "lib/systemd/user-preset";
+ return 0;
+
+ case SD_PATH_SYSTEMD_SYSTEM_CONF_DIR:
+ *ret = SYSTEM_CONFIG_UNIT_PATH; // FIXME: _DIR vs. _PATH
+ return 0;
+
+ case SD_PATH_SYSTEMD_USER_CONF_DIR:
+ *ret = USER_CONFIG_UNIT_PATH; // FIXME: _DIR vs. _PATH
+ return 0;
+
+ case SD_PATH_SYSTEMD_SYSTEM_GENERATOR_DIR:
+ *ret = SYSTEM_GENERATOR_PATH; // FIXME: _DIR vs. _PATH
+ return 0;
+
+ case SD_PATH_SYSTEMD_USER_GENERATOR_DIR:
+ *ret = USER_GENERATOR_PATH; // FIXME: _DIR vs. _PATH
+ return 0;
+
+ case SD_PATH_SYSTEMD_SLEEP_DIR:
+ *ret = ROOTPREFIX "lib/systemd/system-sleep";
+ return 0;
+
+ case SD_PATH_SYSTEMD_SHUTDOWN_DIR:
+ *ret = ROOTPREFIX "lib/systemd/system-shutdown";
+ return 0;
+
+ /* FIXME: systemd.pc uses ${prefix}, but CONF_PATHS_NULSTR doesn't.
+ * Should ${prefix} use in systemd.pc be removed? */
+ case SD_PATH_TMPFILES_DIR:
+ *ret = "/usr/lib/tmpfiles.d";
+ return 0;
+
+ case SD_PATH_SYSUSERS_DIR:
+ *ret = "/usr/lib/sysusers.d";
+ return 0;
+
+ case SD_PATH_SYSCTL_DIR:
+ *ret = "/usr/lib/sysctl.d";
+ return 0;
+
+ case SD_PATH_BINFMT_DIR:
+ *ret = "/usr/lib/binfmt.d";
+ return 0;
+
+ case SD_PATH_MODULES_LOAD_DIR:
+ *ret = "/usr/lib/modules-load.d";
+ return 0;
+
+ case SD_PATH_CATALOG_DIR:
+ *ret = "/usr/lib/systemd/catalog";
+ return 0;
}
return -EOPNOTSUPP;
@@ -450,6 +521,7 @@ static int search_from_environment(
#endif
static int get_search(uint64_t type, char ***list) {
+ int r;
assert(list);
@@ -535,9 +607,34 @@ static int get_search(uint64_t type, char ***list) {
case SD_PATH_SEARCH_BINARIES_DEFAULT:
return strv_from_nulstr(list, DEFAULT_PATH_NULSTR);
+ case SD_PATH_SYSTEMD_SYSTEM_UNIT_PATH:
+ case SD_PATH_SYSTEMD_USER_UNIT_PATH: {
+ _cleanup_(lookup_paths_free) LookupPaths lp = {};
+ const UnitFileScope scope = type == SD_PATH_SYSTEMD_SYSTEM_UNIT_PATH ?
+ UNIT_FILE_SYSTEM : UNIT_FILE_USER;
+
+ r = lookup_paths_init(&lp, scope, 0, NULL);
+ if (r < 0)
+ return r;
+ *list = TAKE_PTR(lp.search_path);
+ return 0;
}
+ case SD_PATH_SYSTEMD_SYSTEM_GENERATOR_PATH:
+ case SD_PATH_SYSTEMD_USER_GENERATOR_PATH: {
+ char **t;
+ const UnitFileScope scope = type == SD_PATH_SYSTEMD_SYSTEM_UNIT_PATH ?
+ UNIT_FILE_SYSTEM : UNIT_FILE_USER;
+
+ t = generator_binary_paths(scope);
+ if (!t)
+ return -ENOMEM;
+
+ *list = t;
+ return 0;
+ }}
+
return -EOPNOTSUPP;
}
diff --git a/src/path/path.c b/src/path/path.c
index 26252948c5..aefdae1d51 100644
--- a/src/path/path.c
+++ b/src/path/path.c
@@ -58,6 +58,29 @@ static const char* const path_table[_SD_PATH_MAX] = {
[SD_PATH_SEARCH_CONFIGURATION_FACTORY] = "search-configuration-factory",
[SD_PATH_SEARCH_STATE_FACTORY] = "search-state-factory",
[SD_PATH_SEARCH_CONFIGURATION] = "search-configuration",
+
+ [SD_PATH_SYSTEMD_UTIL_DIR] = "systemd-util-dir",
+ [SD_PATH_SYSTEMD_SYSTEM_UNIT_DIR] = "systemd-system-unit-dir",
+ [SD_PATH_SYSTEMD_SYSTEM_PRESET_DIR] = "systemd-system-preset-dir",
+ [SD_PATH_SYSTEMD_USER_UNIT_DIR] = "systemd-user-unit-dir",
+ [SD_PATH_SYSTEMD_USER_PRESET_DIR] = "systemd-user-preset-dir",
+ [SD_PATH_SYSTEMD_SYSTEM_CONF_DIR] = "systemd-system-conf-dir",
+ [SD_PATH_SYSTEMD_USER_CONF_DIR] = "systemd-user-conf-dir",
+ [SD_PATH_SYSTEMD_SYSTEM_UNIT_PATH] = "systemd-system-unit-path",
+ [SD_PATH_SYSTEMD_USER_UNIT_PATH] = "systemd-user-unit-path",
+ [SD_PATH_SYSTEMD_SYSTEM_GENERATOR_DIR] = "systemd-system-generator-dir",
+ [SD_PATH_SYSTEMD_USER_GENERATOR_DIR] = "systemd-user-generator-dir",
+ [SD_PATH_SYSTEMD_SYSTEM_GENERATOR_PATH] = "systemd-system-generator-path",
+ [SD_PATH_SYSTEMD_USER_GENERATOR_PATH] = "systemd-user-generator-path",
+ [SD_PATH_SYSTEMD_SLEEP_DIR] = "systemd-sleep-dir",
+ [SD_PATH_SYSTEMD_SHUTDOWN_DIR] = "systemd-shutdown-dir",
+
+ [SD_PATH_TMPFILES_DIR] = "tmpfiles-dir",
+ [SD_PATH_SYSUSERS_DIR] = "sysusers-dir",
+ [SD_PATH_SYSCTL_DIR] = "sysctl-dir",
+ [SD_PATH_BINFMT_DIR] = "binfmt-dir",
+ [SD_PATH_MODULES_LOAD_DIR] = "modules-load-dir",
+ [SD_PATH_CATALOG_DIR] = "catalog-dir",
};
static int list_homes(void) {
diff --git a/src/systemd/sd-path.h b/src/systemd/sd-path.h
index 2bb0b85244..203f01dd90 100644
--- a/src/systemd/sd-path.h
+++ b/src/systemd/sd-path.h
@@ -78,6 +78,30 @@ enum {
SD_PATH_SEARCH_STATE_FACTORY,
SD_PATH_SEARCH_CONFIGURATION,
+ /* Various systemd paths, generally mirroring systemd.pc */
+ SD_PATH_SYSTEMD_UTIL_DIR,
+ SD_PATH_SYSTEMD_SYSTEM_UNIT_DIR,
+ SD_PATH_SYSTEMD_SYSTEM_PRESET_DIR,
+ SD_PATH_SYSTEMD_USER_UNIT_DIR,
+ SD_PATH_SYSTEMD_USER_PRESET_DIR,
+ SD_PATH_SYSTEMD_SYSTEM_CONF_DIR,
+ SD_PATH_SYSTEMD_USER_CONF_DIR,
+ SD_PATH_SYSTEMD_SYSTEM_UNIT_PATH,
+ SD_PATH_SYSTEMD_USER_UNIT_PATH,
+ SD_PATH_SYSTEMD_SYSTEM_GENERATOR_DIR,
+ SD_PATH_SYSTEMD_USER_GENERATOR_DIR,
+ SD_PATH_SYSTEMD_SYSTEM_GENERATOR_PATH,
+ SD_PATH_SYSTEMD_USER_GENERATOR_PATH,
+ SD_PATH_SYSTEMD_SLEEP_DIR,
+ SD_PATH_SYSTEMD_SHUTDOWN_DIR,
+
+ SD_PATH_TMPFILES_DIR,
+ SD_PATH_SYSUSERS_DIR,
+ SD_PATH_SYSCTL_DIR,
+ SD_PATH_BINFMT_DIR,
+ SD_PATH_MODULES_LOAD_DIR,
+ SD_PATH_CATALOG_DIR,
+
_SD_PATH_MAX,
};