chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
8354c34
)
core: don't accept invalid environment assignments from the kernel cmdline
author
Lennart Poettering
<lennart@poettering.net>
Mon, 11 Feb 2013 04:51:14 +0000
(
05:51
+0100)
committer
Lennart Poettering
<lennart@poettering.net>
Mon, 11 Feb 2013 22:17:32 +0000
(23:17 +0100)
src/core/main.c
patch
|
blob
|
history
diff --git
a/src/core/main.c
b/src/core/main.c
index 1ee3c9c0e826eae390854928569780cbc74469d6..a2b0a39fd536fb271fcf35813835ea0a6bc4b6f6 100644
(file)
--- a/
src/core/main.c
+++ b/
src/core/main.c
@@
-52,6
+52,9
@@
#include "switch-root.h"
#include "capability.h"
#include "killall.h"
#include "switch-root.h"
#include "capability.h"
#include "killall.h"
+#include "env-util.h"
+#include "hwclock.h"
+#include "sd-daemon.h"
#include "mount-setup.h"
#include "loopback-setup.h"
#include "mount-setup.h"
#include "loopback-setup.h"
@@
-61,10
+64,8
@@
#include "hostname-setup.h"
#include "machine-id-setup.h"
#include "locale-setup.h"
#include "hostname-setup.h"
#include "machine-id-setup.h"
#include "locale-setup.h"
-#include "hwclock.h"
#include "selinux-setup.h"
#include "ima-setup.h"
#include "selinux-setup.h"
#include "ima-setup.h"
-#include "sd-daemon.h"
static enum {
ACTION_RUN,
static enum {
ACTION_RUN,
@@
-342,7
+343,8
@@
static int parse_proc_cmdline_word(const char *word) {
else
arg_default_std_error = r;
} else if (startswith(word, "systemd.setenv=")) {
else
arg_default_std_error = r;
} else if (startswith(word, "systemd.setenv=")) {
- char *cenv, *eq;
+ _cleanup_free_ char *cenv = NULL;
+ char *eq;
int r;
cenv = strdup(word + 15);
int r;
cenv = strdup(word + 15);
@@
-351,16
+353,23
@@
static int parse_proc_cmdline_word(const char *word) {
eq = strchr(cenv, '=');
if (!eq) {
eq = strchr(cenv, '=');
if (!eq) {
- r = unsetenv(cenv);
- if (r < 0)
- log_warning("unsetenv failed %m. Ignoring.");
+ if (!env_name_is_valid(cenv))
+ log_warning("Environment variable name '%s' is not valid. Ignoring.", cenv);
+ else {
+ r = unsetenv(cenv);
+ if (r < 0)
+ log_warning("Unsetting environment variable '%s' failed, ignoring: %m", cenv);
+ }
} else {
} else {
- *eq = 0;
- r = setenv(cenv, eq + 1, 1);
- if (r < 0)
- log_warning("setenv failed %m. Ignoring.");
+ if (!env_assignment_is_valid(cenv))
+ log_warning("Environment variable assignment '%s' is not valid. Ignoring.", cenv);
+ else {
+ *eq = 0;
+ r = setenv(cenv, eq + 1, 1);
+ if (r < 0)
+ log_warning("Setting environment variable '%s=%s' failed, ignoring: %m", cenv, eq + 1);
+ }
}
}
- free(cenv);
} else if (startswith(word, "systemd.") ||
(in_initrd() && startswith(word, "rd.systemd."))) {
} else if (startswith(word, "systemd.") ||
(in_initrd() && startswith(word, "rd.systemd."))) {