summaryrefslogtreecommitdiff
path: root/src/systemctl/systemctl-set-environment.c
Commit message (Collapse)AuthorAgeFilesLines
* strv: make iterator in STRV_FOREACH() declaread in the loopYu Watanabe2022-03-191-3/+0
| | | | This also avoids multiple evaluations in STRV_FOREACH_BACKWARDS()
* systemctl: systematically rename verb entrypoints verb_xyz()Lennart Poettering2022-02-221-3/+3
| | | | | | | | | Let's clean up our function naming a bit, and always name the verb_xyz(), where the xyz maps to the command line verb as closely as possible. No actual code changes, just an attempt to make the systemctl sources a bit more systematic, and less surprising.
* systemctl: strings returned by sd_bus_message_read_basic() are immutableLennart Poettering2022-02-021-13/+12
| | | | | | | | | | It's totally not OK to write to the strings returned by it, the data is shared by all code that references the message. While we are at it, simplify the code via json_variant_set_field_string(). Follow-up for: 5ef599b324efbcb7af317c102b59c662df068500
* systemctl: support JSON output for "show-environment"Joris Hartog2021-12-061-4/+49
| | | | | | | | This commit adds a function which converts a bus message containing the environment variables to a JSON object and uses this function to support JSON formatted output for the "systemctl show-environment" command. Fixes #21348
* Make pager_open() return voidZbigniew Jędrzejewski-Szmek2021-11-031-1/+1
|
* Flagsify EscapeStyle and make ESCAPE_BACKSLASH_ONELINE implicitZbigniew Jędrzejewski-Szmek2021-04-011-1/+1
| | | | | | | | | | | | I want to tweak behaviour further, and that'll be easier when "style" is converted to a bitfield. Some callers used ESCAPE_BACKSLASH_ONELINE, and others not. But the ones that didn't, simply didn't care, because the argument was assumed to be one-line anyway (e.g. a service name). In environment-generator, this could make a difference. But I think it's better to escape the newlines there too. So newlines are now always escaped, to simplify the code and the test matrix.
* systemctl: warn when importing environment variables with control charactersZbigniew Jędrzejewski-Szmek2021-01-191-0/+10
| | | | | | | | | | | | | | | | | | | | | | | | I don't think it is useful to warn about about environemnt variables where the user explicitly configured some value. If they went through the effort of escaping the cc to include it in the setting (e.g. Environment="VAR=\efoo"), and we pass this through, there isn't anything to warn about. This also applies to 'systemctl set-environment', where the variable name and value are passed as arguments. The only case where the warning *might* be useful is where the user might be surprised by the value. This occurs when importing variables from the inherited environment, i.e. in 'systemctl import-environment'. In not convinced that this is useful, since the user better control their shell environment anyway. $ systemctl import-environment Calling import-environment without a list of variable names is deprecated. Environment variable $LESS_TERMCAP_mb contains control characters, importing anyway. Environment variable $LESS_TERMCAP_md contains control characters, importing anyway. Environment variable $LESS_TERMCAP_me contains control characters, importing anyway. Environment variable $LESS_TERMCAP_se contains control characters, importing anyway. Environment variable $LESS_TERMCAP_so contains control characters, importing anyway. Environment variable $LESS_TERMCAP_ue contains control characters, importing anyway. Environment variable $LESS_TERMCAP_us contains control characters, importing anyway. Environment variable $ZZZ contains control characters, importing anyway.
* systemctl: print a warning when trying to import a nonexistent variableZbigniew Jędrzejewski-Szmek2021-01-191-2/+7
| | | | | | | | | | | | | | | I was quite confused what is happening: $ XXX=xxx $ systemctl --user import-environment XXX $ systemctl --user show-environment | grep XXX (nothing) Obviously, 'export XXX' was missing. Without any indication why the export is not happening, this can be hard to figure out. Another option would be to error out. But so far we didn't, and doing that could break some script which optimistically tries to export some variables, if present.
* systemctl: deprecate blanket import-environmentZbigniew Jędrzejewski-Szmek2021-01-081-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Importing the full environment is convenient, but it doesn't work too well in practice, because we get a metric ton of shell-specific crap that should never end up in the global environment block: $ systemctl --user show-environment ... SHELL=/bin/zsh AUTOJUMP_ERROR_PATH=/home/zbyszek/.local/share/autojump/errors.log AUTOJUMP_SOURCED=1 CONDA_SHLVL=0 CVS_RSH=ssh DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus DESKTOP_SESSION=gnome DISPLAY=:0 FPATH=/usr/share/Modules/init/zsh-functions:/usr/local/share/zsh/site-functions:/usr/share/zsh/site-functions:/usr/share/zsh/5.8/functions GDMSESSION=gnome GDM_LANG=en_US.UTF-8 GNOME_SETUP_DISPLAY=:1 GUESTFISH_INIT=$'\\e[1;34m' GUESTFISH_OUTPUT=$'\\e[0m' GUESTFISH_PS1=$'\\[\\e[1;32m\\]><fs>\\[\\e[0;31m\\] ' GUESTFISH_RESTORE=$'\\e[0m' HISTCONTROL=ignoredups HISTSIZE=1000 LOADEDMODULES= OLDPWD=/home/zbyszek PWD=/home/zbyszek QTDIR=/usr/lib64/qt-3.3 QTINC=/usr/lib64/qt-3.3/include QTLIB=/usr/lib64/qt-3.3/lib QT_IM_MODULE=ibus SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS=0 SESSION_MANAGER=local/unix:@/tmp/.ICE-unix/2612,unix/unix:/tmp/.ICE-unix/2612 SHLVL=0 STEAM_FRAME_FORCE_CLOSE=1 TERM=xterm-256color USERNAME=zbyszek WISECONFIGDIR=/usr/share/wise2/ ... Plenty of shell-specific and terminal-specific stuff that have no global significance. Let's start warning when this is used to push people towards importing only specific variables. Putative NEWS entry: * systemctl import-environment will now emit a warning when called without any arguments (i.e. to import the full environment block of the called program). This command will usually be invoked from a shell, which means that it'll inherit a bunch of variables which are specific to that shell, and usually to the tty the shell is connected to, and don't have any meaning in the global context of the system or user service manager. Instead, only specific variables should be imported into the manager environment block. Similarly, programs which update the manager environment block by directly calling the D-Bus API of the manager, should also push specific variables, and not the full inherited environment.
* license: LGPL-2.1+ -> LGPL-2.1-or-laterYu Watanabe2020-11-091-1/+1
|
* systemctl: fix tabs indentationsLennart Poettering2020-10-151-4/+4
|
* systemctl: ignore invalid variables in import-environmentZbigniew Jędrzejewski-Szmek2020-10-121-3/+18
| | | | | | | | | | When doing import-environment, we shouldn't fail if some assignment is invalid. OTOH, if the invalid assignment is specified as a positional argument, we should keep failing. This would also fix https://bugzilla.redhat.com/show_bug.cgi?id=1754395, by ignoring certain variables which are not important in that scenario. It seems like the right thing to do in general.
* systemctl: split up humungous systemctl.c fileLennart Poettering2020-10-071-0/+154
This is just some refactoring: shifting around of code, not change in codeflow. This splits up the way too huge systemctl.c in multiple more easily digestable files. It roughly follows the rule that each family of verbs gets its own .c/.h file pair, and so do all the compat executable names we support. Plus three extra files for sysv compat (which existed before already, but I renamed slightly, to get the systemctl- prefix lik everything else), a -util file with generic stuff everything uses, and a -logind file with everything that talks directly to logind instead of PID1. systemctl is still a bit too complex for my taste, but I think this way itc omes in a more digestable bits at least. No change of behaviour, just reshuffling of some code.