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

