diff options
-rw-r--r-- | man/sd_path_lookup.xml | 23 | ||||
-rw-r--r-- | src/libsystemd/sd-path/sd-path.c | 97 | ||||
-rw-r--r-- | src/path/path.c | 23 | ||||
-rw-r--r-- | src/systemd/sd-path.h | 24 |
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, }; |