From: Lennart Poettering Date: Mon, 11 May 2015 20:51:49 +0000 (+0200) Subject: core: rename SystemdRunningAs to ManagerRunningAs X-Git-Tag: v226.4~1^2~394 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=57ceb09c123ff52a2229413e5ac42a02d80089b6;hp=625299542476ecfbfc3a0452e2efe9a997aaf787 core: rename SystemdRunningAs to ManagerRunningAs It's primarily just a property of the Manager object after all, and we try to refer to PID 1 as "manager" instead of "systemd", hence let's to stick to this here too. --- diff --git a/src/shared/apparmor-util.h b/src/shared/apparmor-util.h index a3d1b3b06..d2d4a7f19 100644 --- a/src/shared/apparmor-util.h +++ b/src/shared/apparmor-util.h @@ -1,11 +1,9 @@ /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ -#pragma once - /*** This file is part of systemd. - Copyright 2013 Lennart Poettering + Copyright 2014 Zbigniew Jędrzejewski-Szmek systemd is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -21,6 +19,10 @@ along with systemd; If not, see . ***/ +#pragma once + #include -bool mac_apparmor_use(void); +#include "path-lookup.h" + +int verify_units(char **filenames, ManagerRunningAs running_as, bool check_man); diff --git a/src/shared/path-lookup.c b/src/shared/path-lookup.c index 3d16e37d0..f6a127174 100644 --- a/src/shared/path-lookup.c +++ b/src/shared/path-lookup.c @@ -218,9 +218,24 @@ static char** user_dirs( return tmp; } +char **generator_paths(ManagerRunningAs running_as) { + if (running_as == MANAGER_USER) + return strv_new("/run/systemd/user-generators", + "/etc/systemd/user-generators", + "/usr/local/lib/systemd/user-generators", + USER_GENERATOR_PATH, + NULL); + else + return strv_new("/run/systemd/system-generators", + "/etc/systemd/system-generators", + "/usr/local/lib/systemd/system-generators", + SYSTEM_GENERATOR_PATH, + NULL); +} + int lookup_paths_init( LookupPaths *p, - SystemdRunningAs running_as, + ManagerRunningAs running_as, bool personal, const char *root_dir, const char *generator, @@ -262,7 +277,7 @@ int lookup_paths_init( * we include /lib in the search path for the system * stuff but avoid it for user stuff. */ - if (running_as == SYSTEMD_USER) { + if (running_as == MANAGER_USER) { if (personal) unit_path = user_dirs(generator, generator_early, generator_late); else @@ -322,8 +337,78 @@ int lookup_paths_init( p->unit_path = NULL; } - if (running_as == SYSTEMD_SYSTEM) { + if (running_as == MANAGER_SYSTEM) { +#ifdef HAVE_SYSV_COMPAT + /* /etc/init.d/ compatibility does not matter to users */ + + e = getenv("SYSTEMD_SYSVINIT_PATH"); + if (e) { + p->sysvinit_path = path_split_and_make_absolute(e); + if (!p->sysvinit_path) + return -ENOMEM; + } else + p->sysvinit_path = NULL; + + if (strv_isempty(p->sysvinit_path)) { + strv_free(p->sysvinit_path); + + p->sysvinit_path = strv_new( + SYSTEM_SYSVINIT_PATH, /* /etc/init.d/ */ + NULL); + if (!p->sysvinit_path) + return -ENOMEM; + } + + e = getenv("SYSTEMD_SYSVRCND_PATH"); + if (e) { + p->sysvrcnd_path = path_split_and_make_absolute(e); + if (!p->sysvrcnd_path) + return -ENOMEM; + } else + p->sysvrcnd_path = NULL; + + if (strv_isempty(p->sysvrcnd_path)) { + strv_free(p->sysvrcnd_path); + + p->sysvrcnd_path = strv_new( + SYSTEM_SYSVRCND_PATH, /* /etc/rcN.d/ */ + NULL); + if (!p->sysvrcnd_path) + return -ENOMEM; + } + + if (!path_strv_resolve_uniq(p->sysvinit_path, root_dir)) + return -ENOMEM; + + if (!path_strv_resolve_uniq(p->sysvrcnd_path, root_dir)) + return -ENOMEM; + + if (!strv_isempty(p->sysvinit_path)) { + _cleanup_free_ char *t = strv_join(p->sysvinit_path, "\n\t"); + if (!t) + return -ENOMEM; + log_debug("Looking for SysV init scripts in:\n\t%s", t); + } else { + log_debug("Ignoring SysV init scripts."); + strv_free(p->sysvinit_path); + p->sysvinit_path = NULL; + } + + if (!strv_isempty(p->sysvrcnd_path)) { + _cleanup_free_ char *t = + strv_join(p->sysvrcnd_path, "\n\t"); + if (!t) + return -ENOMEM; + + log_debug("Looking for SysV rcN.d links in:\n\t%s", t); + } else { + log_debug("Ignoring SysV rcN.d links."); + strv_free(p->sysvrcnd_path); + p->sysvrcnd_path = NULL; + } +#else log_debug("SysV init scripts and rcN.d links support disabled"); +#endif } return 0; @@ -334,6 +419,12 @@ void lookup_paths_free(LookupPaths *p) { strv_free(p->unit_path); p->unit_path = NULL; + +#ifdef HAVE_SYSV_COMPAT + strv_free(p->sysvinit_path); + strv_free(p->sysvrcnd_path); + p->sysvinit_path = p->sysvrcnd_path = NULL; +#endif } int lookup_paths_init_from_scope(LookupPaths *paths, @@ -346,7 +437,7 @@ int lookup_paths_init_from_scope(LookupPaths *paths, zero(*paths); return lookup_paths_init(paths, - scope == UNIT_FILE_SYSTEM ? SYSTEMD_SYSTEM : SYSTEMD_USER, + scope == UNIT_FILE_SYSTEM ? MANAGER_SYSTEM : MANAGER_USER, scope == UNIT_FILE_USER, root_dir, NULL, NULL, NULL); diff --git a/src/shared/path-lookup.h b/src/shared/path-lookup.h index 3982974ba..31b2df3c1 100644 --- a/src/shared/path-lookup.h +++ b/src/shared/path-lookup.h @@ -27,20 +27,26 @@ typedef enum UnitFileScope UnitFileScope; typedef struct LookupPaths { char **unit_path; +#ifdef HAVE_SYSV_COMPAT + char **sysvinit_path; + char **sysvrcnd_path; +#endif } LookupPaths; -typedef enum SystemdRunningAs { - SYSTEMD_SYSTEM, - SYSTEMD_USER, - _SYSTEMD_RUNNING_AS_MAX, - _SYSTEMD_RUNNING_AS_INVALID = -1 -} SystemdRunningAs; +typedef enum ManagerRunningAs { + MANAGER_SYSTEM, + MANAGER_USER, + _MANAGER_RUNNING_AS_MAX, + _MANAGER_RUNNING_AS_INVALID = -1 +} ManagerRunningAs; int user_config_home(char **config_home); int user_runtime_dir(char **runtime_dir); +char **generator_paths(ManagerRunningAs running_as); + int lookup_paths_init(LookupPaths *p, - SystemdRunningAs running_as, + ManagerRunningAs running_as, bool personal, const char *root_dir, const char *generator,