aboutsummaryrefslogtreecommitdiffstats
path: root/meta-oe/recipes-support/multipath-tools/files/0027-RH-warn-on-invalid-regex-instead-of-failing.patch
blob: 57d04d02bbc2ab2b71153b65851becc27a225094 (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
From d16de70b76919269561b4e404825f78286ea9a40 Mon Sep 17 00:00:00 2001
From: Changqing Li <changqing.li@windriver.com>
Date: Mon, 26 Nov 2018 10:31:30 +0800
Subject: [PATCH] From 0000000000000000000000000000000000000000 Mon Sep 17
 00:00:00 2001 From: Benjamin Marzinski <bmarzins@redhat.com> Date: Mon, 6 Nov
 2017 21:39:28 -0600 Subject: [PATCH] RH: warn on invalid regex instead of
 failing

multipath.conf used to allow "*" as a match everything regular expression,
instead of requiring ".*". Instead of erroring when the old style
regular expressions are used, it should print a warning and convert
them.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>

Upstream-Status: Pending

update this patch to new version

Signed-off-by: Changqing Li <changqing.li@windriver.com>
---
 libmultipath/dict.c   | 29 ++++++++++++++++++++++-------
 libmultipath/parser.c | 13 +++++++++++++
 libmultipath/parser.h |  2 +-
 3 files changed, 36 insertions(+), 8 deletions(-)

diff --git a/libmultipath/dict.c b/libmultipath/dict.c
index a81c051..0689763 100644
--- a/libmultipath/dict.c
+++ b/libmultipath/dict.c
@@ -59,6 +59,21 @@ set_str(vector strvec, void *ptr)
 }
 
 static int
+set_regex(vector strvec, void *ptr)
+{
+       char **str_ptr = (char **)ptr;
+
+       if (*str_ptr)
+               FREE(*str_ptr);
+       *str_ptr = set_regex_value(strvec);
+
+       if (!*str_ptr)
+               return 1;
+
+       return 0;
+}
+
+static int
 set_yes_no(vector strvec, void *ptr)
 {
 	char * buff;
@@ -1346,8 +1361,8 @@ ble_ ## option ## _handler (struct config *conf, vector strvec)		\
 									\
 	if (!conf->option)						\
 		return 1;						\
-									\
-	buff = set_value(strvec);					\
+									\	
+	buff = set_regex_value(strvec);					\
 	if (!buff)							\
 		return 1;						\
 									\
@@ -1363,7 +1378,7 @@ ble_ ## option ## _ ## name ## _handler (struct config *conf, vector strvec) \
 	if (!conf->option)						\
 		return 1;						\
 									\
-	buff = set_value(strvec);					\
+	buff = set_regex_value(strvec);					\
 	if (!buff)							\
 		return 1;						\
 									\
@@ -1466,16 +1481,16 @@ device_handler(struct config *conf, vector strvec)
 	return 0;
 }
 
-declare_hw_handler(vendor, set_str)
+declare_hw_handler(vendor, set_regex)
 declare_hw_snprint(vendor, print_str)
 
-declare_hw_handler(product, set_str)
+declare_hw_handler(product, set_regex)
 declare_hw_snprint(product, print_str)
 
-declare_hw_handler(revision, set_str)
+declare_hw_handler(revision, set_regex)
 declare_hw_snprint(revision, print_str)
 
-declare_hw_handler(bl_product, set_str)
+declare_hw_handler(bl_product, set_regex)
 declare_hw_snprint(bl_product, print_str)
 
 declare_hw_handler(hwhandler, set_str)
diff --git a/libmultipath/parser.c b/libmultipath/parser.c
index 92ef7cf..0e2cf49 100644
--- a/libmultipath/parser.c
+++ b/libmultipath/parser.c
@@ -384,6 +384,19 @@ set_value(vector strvec)
 	return alloc;
 }
 
+void *
+set_regex_value(vector strvec)
+{
+       char *buff = set_value(strvec);
+
+       if (buff && strcmp("*", buff) == 0) {
+               condlog(0, "Invalid regular expression \"*\" in multipath.conf. Using \".*\"");
+               FREE(buff);
+               return strdup(".*");
+       }
+       return buff;
+}
+
 /* non-recursive configuration stream handler */
 static int kw_level = 0;
 
diff --git a/libmultipath/parser.h b/libmultipath/parser.h
index 62906e9..b6899fc 100644
--- a/libmultipath/parser.h
+++ b/libmultipath/parser.h
@@ -76,7 +76,7 @@ extern int _install_keyword(vector keywords, char *string,
 extern void dump_keywords(vector keydump, int level);
 extern void free_keywords(vector keywords);
 extern vector alloc_strvec(char *string);
-extern void *set_value(vector strvec);
+extern void *set_regex_value(vector strvec);
 extern int process_file(struct config *conf, char *conf_file);
 extern struct keyword * find_keyword(vector keywords, vector v, char * name);
 int snprint_keyword(char *buff, int len, char *fmt, struct keyword *kw,
-- 
2.7.4