summaryrefslogtreecommitdiff
path: root/core/systemd/0001-fileio-in-envfiles-do-not-skip-lines-following-empty.patch
blob: c245ce1e2dfe337a512d83329a4563431a56a99f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
From d3b6d0c21ea5a0d15ec6dbd8b8d179138b7463bc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Sat, 13 Apr 2013 20:22:53 -0400
Subject: [PATCH] fileio: in envfiles, do not skip lines following empty lines

https://bugs.freedesktop.org/show_bug.cgi?id=63477
---
 src/binfmt/binfmt.c             |  2 +-
 src/journal/catalog.c           |  2 +-
 src/modules-load/modules-load.c |  2 +-
 src/shared/conf-parser.c        |  2 +-
 src/shared/install.c            |  2 +-
 src/shared/util.h               |  2 +-
 src/sysctl/sysctl.c             |  2 +-
 src/test/test-unit-file.c       | 31 +++++++++++++++++++++++++++++++
 8 files changed, 38 insertions(+), 7 deletions(-)

diff --git a/src/binfmt/binfmt.c b/src/binfmt/binfmt.c
index 9ca1e60..5a42b3d 100644
--- a/src/binfmt/binfmt.c
+++ b/src/binfmt/binfmt.c
@@ -110,7 +110,7 @@ static int apply_file(const char *path, bool ignore_enoent) {
                 p = strstrip(l);
                 if (!*p)
                         continue;
-                if (strchr(COMMENTS, *p))
+                if (strchr(COMMENTS "\n", *p))
                         continue;
 
                 k = apply_rule(p);
diff --git a/src/journal/catalog.c b/src/journal/catalog.c
index ebf0622..7681af6 100644
--- a/src/journal/catalog.c
+++ b/src/journal/catalog.c
@@ -180,7 +180,7 @@ int catalog_import_file(Hashmap *h, struct strbuf *sb, const char *path) {
                         continue;
                 }
 
-                if (strchr(COMMENTS, line[0]))
+                if (strchr(COMMENTS "\n", line[0]))
                         continue;
 
                 if (empty_line &&
diff --git a/src/modules-load/modules-load.c b/src/modules-load/modules-load.c
index 9ee2603..b3f7af0 100644
--- a/src/modules-load/modules-load.c
+++ b/src/modules-load/modules-load.c
@@ -206,7 +206,7 @@ static int apply_file(struct kmod_ctx *ctx, const char *path, bool ignore_enoent
                 l = strstrip(line);
                 if (!*l)
                         continue;
-                if (strchr(COMMENTS, *l))
+                if (strchr(COMMENTS "\n", *l))
                         continue;
 
                 k = load_module(ctx, l);
diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c
index fbacf98..fea2e56 100644
--- a/src/shared/conf-parser.c
+++ b/src/shared/conf-parser.c
@@ -174,7 +174,7 @@ static int parse_line(
         if (!*l)
                 return 0;
 
-        if (strchr(COMMENTS, *l))
+        if (strchr(COMMENTS "\n", *l))
                 return 0;
 
         if (startswith(l, ".include ")) {
diff --git a/src/shared/install.c b/src/shared/install.c
index f9d223e..71e0433 100644
--- a/src/shared/install.c
+++ b/src/shared/install.c
@@ -1699,7 +1699,7 @@ int unit_file_query_preset(UnitFileScope scope, const char *name) {
                         if (!*l)
                                 continue;
 
-                        if (strchr(COMMENTS, *l))
+                        if (strchr(COMMENTS "\n", *l))
                                 continue;
 
                         if (first_word(l, "enable")) {
diff --git a/src/shared/util.h b/src/shared/util.h
index 99ec0a3..ad97536 100644
--- a/src/shared/util.h
+++ b/src/shared/util.h
@@ -52,7 +52,7 @@ union dirent_storage {
 #define WHITESPACE " \t\n\r"
 #define NEWLINE "\n\r"
 #define QUOTES "\"\'"
-#define COMMENTS "#;\n"
+#define COMMENTS "#;"
 
 #define FORMAT_BYTES_MAX 8
 
diff --git a/src/sysctl/sysctl.c b/src/sysctl/sysctl.c
index e0ba78a..db18dd9 100644
--- a/src/sysctl/sysctl.c
+++ b/src/sysctl/sysctl.c
@@ -149,7 +149,7 @@ static int parse_file(Hashmap *sysctl_options, const char *path, bool ignore_eno
                 if (!*p)
                         continue;
 
-                if (strchr(COMMENTS, *p))
+                if (strchr(COMMENTS "\n", *p))
                         continue;
 
                 value = strchr(p, '=');
diff --git a/src/test/test-unit-file.c b/src/test/test-unit-file.c
index 3cf8463..1bf11e6 100644
--- a/src/test/test-unit-file.c
+++ b/src/test/test-unit-file.c
@@ -199,6 +199,17 @@ static void test_config_parse_exec(void) {
         "#--nouser-config                                     \\\n" \
         "normal=line"
 
+#define env_file_4 \
+       "# Generated\n" \
+       "\n" \
+       "HWMON_MODULES=\"coretemp f71882fg\"\n" \
+       "\n" \
+       "# For compatibility reasons\n" \
+       "\n" \
+       "MODULE_0=coretemp\n" \
+       "MODULE_1=f71882fg"
+
+
 static void test_load_env_file_1(void) {
         char _cleanup_strv_free_ **data = NULL;
         int r;
@@ -251,6 +262,25 @@ static void test_load_env_file_3(void) {
         unlink(name);
 }
 
+static void test_load_env_file_4(void) {
+        char _cleanup_strv_free_ **data = NULL;
+        int r;
+
+        char name[] = "/tmp/test-load-env-file.XXXXXX";
+        int _cleanup_close_ fd = mkstemp(name);
+        assert(fd >= 0);
+        assert_se(write(fd, env_file_4, sizeof(env_file_4)) == sizeof(env_file_4));
+
+        r = load_env_file(name, NULL, &data);
+        assert(r == 0);
+        assert(streq(data[0], "HWMON_MODULES=coretemp f71882fg"));
+        assert(streq(data[1], "MODULE_0=coretemp"));
+        assert(streq(data[2], "MODULE_1=f71882fg"));
+        assert(data[3] == NULL);
+        unlink(name);
+}
+
+
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wnonnull"
 
@@ -327,6 +357,7 @@ int main(int argc, char *argv[]) {
         test_load_env_file_1();
         test_load_env_file_2();
         test_load_env_file_3();
+        test_load_env_file_4();
         test_install_printf();
 
         return 0;
-- 
1.8.2.1