mirror of
https://github.com/systemd/systemd
synced 2024-07-08 20:15:55 +00:00
environment-generator: new generator to peruse environment.d
Why the strange name: the prefix is necessary to follow our own advice that environment generators should have numerical prefixes. I also put -d- in the name because otherwise the name was very easy to mistake with systemd.environment-generator. This additional letter clarifies that this on special generator that supports environment.d files.
This commit is contained in:
parent
37f3ffca27
commit
f63c4aabb2
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -19,6 +19,7 @@
|
|||
/*.tar.bz2
|
||||
/*.tar.gz
|
||||
/*.tar.xz
|
||||
/30-systemd-environment-d-generator
|
||||
/GPATH
|
||||
/GRTAGS
|
||||
/GSYMS
|
||||
|
|
|
@ -110,6 +110,7 @@ MANPAGES += \
|
|||
man/systemd-debug-generator.8 \
|
||||
man/systemd-delta.1 \
|
||||
man/systemd-detect-virt.1 \
|
||||
man/systemd-environment-d-generator.8 \
|
||||
man/systemd-escape.1 \
|
||||
man/systemd-fsck@.service.8 \
|
||||
man/systemd-fstab-generator.8 \
|
||||
|
@ -185,6 +186,7 @@ MANPAGES += \
|
|||
man/udev_new.3 \
|
||||
man/udevadm.8
|
||||
MANPAGES_ALIAS += \
|
||||
man/30-systemd-environment-d-generator.8 \
|
||||
man/SD_ALERT.3 \
|
||||
man/SD_BUS_ERROR_ACCESS_DENIED.3 \
|
||||
man/SD_BUS_ERROR_ADDRESS_IN_USE.3 \
|
||||
|
@ -542,6 +544,7 @@ MANPAGES_ALIAS += \
|
|||
man/udev_ref.3 \
|
||||
man/udev_unref.3 \
|
||||
man/user.conf.d.5
|
||||
man/30-systemd-environment-d-generator.8: man/systemd-environment-d-generator.8
|
||||
man/SD_ALERT.3: man/sd-daemon.3
|
||||
man/SD_BUS_ERROR_ACCESS_DENIED.3: man/sd-bus-errors.3
|
||||
man/SD_BUS_ERROR_ADDRESS_IN_USE.3: man/sd-bus-errors.3
|
||||
|
@ -899,6 +902,9 @@ man/udev_monitor_unref.3: man/udev_monitor_new_from_netlink.3
|
|||
man/udev_ref.3: man/udev_new.3
|
||||
man/udev_unref.3: man/udev_new.3
|
||||
man/user.conf.d.5: man/systemd-system.conf.5
|
||||
man/30-systemd-environment-d-generator.html: man/systemd-environment-d-generator.html
|
||||
$(html-alias)
|
||||
|
||||
man/SD_ALERT.html: man/sd-daemon.html
|
||||
$(html-alias)
|
||||
|
||||
|
@ -2768,6 +2774,7 @@ EXTRA_DIST += \
|
|||
man/systemd-debug-generator.xml \
|
||||
man/systemd-delta.xml \
|
||||
man/systemd-detect-virt.xml \
|
||||
man/systemd-environment-d-generator.xml \
|
||||
man/systemd-escape.xml \
|
||||
man/systemd-firstboot.xml \
|
||||
man/systemd-fsck@.service.xml \
|
||||
|
|
10
Makefile.am
10
Makefile.am
|
@ -426,6 +426,9 @@ systemgenerator_PROGRAMS = \
|
|||
systemd-system-update-generator \
|
||||
systemd-debug-generator
|
||||
|
||||
userenvgenerator_PROGRAMS = \
|
||||
30-systemd-environment-d-generator
|
||||
|
||||
dist_bashcompletion_data = \
|
||||
shell-completion/bash/busctl \
|
||||
shell-completion/bash/journalctl \
|
||||
|
@ -2817,6 +2820,13 @@ systemd_system_update_generator_SOURCES = \
|
|||
systemd_system_update_generator_LDADD = \
|
||||
libsystemd-shared.la
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
30_systemd_environment_d_generator_SOURCES = \
|
||||
src/environment-d-generator/environment-d-generator.c
|
||||
|
||||
30_systemd_environment_d_generator_LDADD = \
|
||||
libsystemd-shared.la
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
if ENABLE_HIBERNATE
|
||||
systemgenerator_PROGRAMS += \
|
||||
|
|
80
man/systemd-environment-d-generator.xml
Normal file
80
man/systemd-environment-d-generator.xml
Normal file
|
@ -0,0 +1,80 @@
|
|||
<?xml version='1.0'?> <!--*-nxml-*-->
|
||||
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
|
||||
<!ENTITY % entities SYSTEM "custom-entities.ent" >
|
||||
%entities;
|
||||
]>
|
||||
|
||||
<!--
|
||||
This file is part of systemd.
|
||||
|
||||
Copyright 2017 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
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
systemd is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
<refentry id="systemd-environment-d-generator">
|
||||
|
||||
<refentryinfo>
|
||||
<title>systemd-environment-d-generator</title>
|
||||
<productname>systemd</productname>
|
||||
|
||||
<authorgroup>
|
||||
<author>
|
||||
<contrib>Developer</contrib>
|
||||
<firstname>Zbigniew</firstname>
|
||||
<surname>Jędrzejewski-Szmek</surname>
|
||||
<email>zbyszek@in.waw.pl</email>
|
||||
</author>
|
||||
</authorgroup>
|
||||
</refentryinfo>
|
||||
|
||||
<refmeta>
|
||||
<refentrytitle>systemd-environment-d-generator</refentrytitle>
|
||||
<manvolnum>8</manvolnum>
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>systemd-environment-d-generator</refname>
|
||||
<refname>30-systemd-environment-d-generator</refname>
|
||||
<refpurpose>Load variables specified by <filename>environment.d</filename>
|
||||
</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<para><filename>&userenvgeneratordir;/30-systemd-environment-d-generator</filename></para>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para><filename>systemd-environment-d-generator</filename> is a
|
||||
<citerefentry><refentrytitle>systemd.environment-generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>
|
||||
that reads environment configuration specified by
|
||||
<citerefentry><refentrytitle>environment.d</refentrytitle><manvolnum>7</manvolnum></citerefentry>
|
||||
configuration files and passes it to the
|
||||
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
|
||||
user manager instance.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>See Also</title>
|
||||
<para>
|
||||
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
|
||||
<citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
|
||||
<citerefentry><refentrytitle>systemd.environment-generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
|
||||
<citerefentry><refentrytitle>systemd.generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
</refentry>
|
|
@ -151,6 +151,7 @@
|
|||
<title>See also</title>
|
||||
|
||||
<para>
|
||||
<citerefentry><refentrytitle>systemd-environment-d-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
|
||||
<citerefentry><refentrytitle>systemd.generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
|
||||
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
|
||||
<citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
|
||||
|
|
1
src/environment-d-generator/Makefile
Symbolic link
1
src/environment-d-generator/Makefile
Symbolic link
|
@ -0,0 +1 @@
|
|||
../Makefile
|
107
src/environment-d-generator/environment-d-generator.c
Normal file
107
src/environment-d-generator/environment-d-generator.c
Normal file
|
@ -0,0 +1,107 @@
|
|||
/***
|
||||
This file is part of systemd.
|
||||
|
||||
Copyright 2017 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
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
systemd is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
#include "sd-path.h"
|
||||
|
||||
#include "conf-files.h"
|
||||
#include "def.h"
|
||||
#include "escape.h"
|
||||
#include "fileio.h"
|
||||
#include "log.h"
|
||||
#include "path-lookup.h"
|
||||
|
||||
static int environment_dirs(char ***ret) {
|
||||
_cleanup_strv_free_ char **dirs = NULL;
|
||||
_cleanup_free_ char *c = NULL;
|
||||
int r;
|
||||
|
||||
dirs = strv_split_nulstr(CONF_PATHS_NULSTR("environment.d"));
|
||||
if (!dirs)
|
||||
return -ENOMEM;
|
||||
|
||||
/* ~/.config/systemd/environment.d */
|
||||
r = sd_path_home(SD_PATH_USER_CONFIGURATION, "environment.d", &c);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = strv_extend_front(&dirs, c);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
*ret = dirs;
|
||||
dirs = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int load_and_print(void) {
|
||||
_cleanup_strv_free_ char **dirs = NULL, **files = NULL, **env = NULL;
|
||||
char **i;
|
||||
int r;
|
||||
|
||||
r = environment_dirs(&dirs);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = conf_files_list_strv(&files, ".conf", NULL, (const char **) dirs);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
/* This will mutate the existing environment, based on the presumption
|
||||
* that in case of failure, a partial update is better than none. */
|
||||
|
||||
STRV_FOREACH(i, files) {
|
||||
r = merge_env_file(&env, NULL, *i);
|
||||
if (r == -ENOMEM)
|
||||
return r;
|
||||
}
|
||||
|
||||
STRV_FOREACH(i, env) {
|
||||
char *t;
|
||||
_cleanup_free_ char *q = NULL;
|
||||
|
||||
t = strchr(*i, '=');
|
||||
assert(t);
|
||||
|
||||
q = shell_maybe_quote(t + 1);
|
||||
if (!q)
|
||||
return log_oom();
|
||||
|
||||
printf("%.*s=%s\n", (int) (t - *i), *i, q);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
int r;
|
||||
|
||||
log_parse_environment();
|
||||
log_open();
|
||||
|
||||
if (argc > 1) {
|
||||
log_error("This program takes no arguments.");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
r = load_and_print();
|
||||
if (r < 0)
|
||||
log_error_errno(r, "Failed to load environment.d: %m");
|
||||
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
}
|
|
@ -503,8 +503,7 @@ int lookup_paths_init(
|
|||
append = true;
|
||||
}
|
||||
|
||||
/* FIXME: empty components in other places should be
|
||||
* rejected. */
|
||||
/* FIXME: empty components in other places should be rejected. */
|
||||
|
||||
r = path_split_and_make_absolute(e, &paths);
|
||||
if (r < 0)
|
||||
|
|
Loading…
Reference in New Issue
Block a user