1*8460358cSPatrick WilliamsFrom 9f1075f82ecd39a9960f868eef890baf2ba36d4e Mon Sep 17 00:00:00 2001 2b58112e5SPatrick WilliamsFrom: Changqing Li <changqing.li@windriver.com> 3b58112e5SPatrick WilliamsDate: Fri, 1 Mar 2024 11:45:10 +0800 4*8460358cSPatrick WilliamsSubject: [PATCH] RH: warn on invalid regex instead of failing 5b58112e5SPatrick Williams 6b58112e5SPatrick Williamsmultipath.conf used to allow "*" as a match everything regular expression, 7b58112e5SPatrick Williamsinstead of requiring ".*". Instead of erroring when the old style 8b58112e5SPatrick Williamsregular expressions are used, it should print a warning and convert 9b58112e5SPatrick Williamsthem. 10b58112e5SPatrick Williams 11b58112e5SPatrick WilliamsSigned-off-by: Benjamin Marzinski <bmarzins@redhat.com> 12b58112e5SPatrick Williams 13b58112e5SPatrick WilliamsUpstream-Status: Pending 14b58112e5SPatrick Williams 15b58112e5SPatrick Williams[OP: Rebase to 0.9.3] 16b58112e5SPatrick Williams[OP: adjusted FREE() -> free(), made set_regex_value() static] 17b58112e5SPatrick WilliamsSigned-off-by: Ovidiu Panait <ovidiu.panait@windriver.com> 18b58112e5SPatrick Williams 19b58112e5SPatrick WilliamsRebase to 0.9.8 20b58112e5SPatrick WilliamsSigned-off-by: Changqing Li <changqing.li@windriver.com> 21b58112e5SPatrick Williams--- 22b58112e5SPatrick Williams libmultipath/dict.c | 40 ++++++++++++++++++++++++++++++++++------ 23b58112e5SPatrick Williams 1 file changed, 34 insertions(+), 6 deletions(-) 24b58112e5SPatrick Williams 25b58112e5SPatrick Williamsdiff --git a/libmultipath/dict.c b/libmultipath/dict.c 26*8460358cSPatrick Williamsindex a06a6138..a734ba9b 100644 27b58112e5SPatrick Williams--- a/libmultipath/dict.c 28b58112e5SPatrick Williams+++ b/libmultipath/dict.c 29b58112e5SPatrick Williams@@ -189,6 +189,34 @@ set_str_noslash(vector strvec, void *ptr, const char *file, int line_nr) 30b58112e5SPatrick Williams return 0; 31b58112e5SPatrick Williams } 32b58112e5SPatrick Williams 33b58112e5SPatrick Williams+static void * 34b58112e5SPatrick Williams+set_regex_value(vector strvec) 35b58112e5SPatrick Williams+{ 36b58112e5SPatrick Williams+ char *buff = set_value(strvec); 37b58112e5SPatrick Williams+ 38b58112e5SPatrick Williams+ if (buff && strcmp("*", buff) == 0) { 39b58112e5SPatrick Williams+ condlog(0, "Invalid regular expression \"*\" in multipath.conf. Using \".*\""); 40b58112e5SPatrick Williams+ free(buff); 41b58112e5SPatrick Williams+ return strdup(".*"); 42b58112e5SPatrick Williams+ } 43b58112e5SPatrick Williams+ return buff; 44b58112e5SPatrick Williams+} 45b58112e5SPatrick Williams+ 46b58112e5SPatrick Williams+static int 47b58112e5SPatrick Williams+set_regex(vector strvec, void *ptr, const char *file, int line_nr) 48b58112e5SPatrick Williams+{ 49b58112e5SPatrick Williams+ char **str_ptr = (char **)ptr; 50b58112e5SPatrick Williams+ 51b58112e5SPatrick Williams+ if (*str_ptr) 52b58112e5SPatrick Williams+ free(*str_ptr); 53b58112e5SPatrick Williams+ *str_ptr = set_regex_value(strvec); 54b58112e5SPatrick Williams+ 55b58112e5SPatrick Williams+ if (!*str_ptr) 56b58112e5SPatrick Williams+ return 1; 57b58112e5SPatrick Williams+ 58b58112e5SPatrick Williams+ return 0; 59b58112e5SPatrick Williams+} 60b58112e5SPatrick Williams+ 61b58112e5SPatrick Williams static int 62b58112e5SPatrick Williams set_yes_no(vector strvec, void *ptr, const char *file, int line_nr) 63b58112e5SPatrick Williams { 64*8460358cSPatrick Williams@@ -1854,7 +1882,7 @@ ble_ ## option ## _handler (struct config *conf, vector strvec, \ 65b58112e5SPatrick Williams if (!conf->option) \ 66b58112e5SPatrick Williams return 1; \ 67b58112e5SPatrick Williams \ 68b58112e5SPatrick Williams- buff = set_value(strvec); \ 69b58112e5SPatrick Williams+ buff = set_regex_value(strvec); \ 70b58112e5SPatrick Williams if (!buff) \ 71b58112e5SPatrick Williams return 1; \ 72b58112e5SPatrick Williams \ 73*8460358cSPatrick Williams@@ -1874,7 +1902,7 @@ ble_ ## option ## _ ## name ## _handler (struct config *conf, vector strvec, \ 74b58112e5SPatrick Williams if (!conf->option) \ 75b58112e5SPatrick Williams return 1; \ 76b58112e5SPatrick Williams \ 77b58112e5SPatrick Williams- buff = set_value(strvec); \ 78b58112e5SPatrick Williams+ buff = set_regex_value(strvec); \ 79b58112e5SPatrick Williams if (!buff) \ 80b58112e5SPatrick Williams return 1; \ 81b58112e5SPatrick Williams \ 82*8460358cSPatrick Williams@@ -1980,16 +2008,16 @@ device_handler(struct config *conf, vector strvec, const char *file, 83b58112e5SPatrick Williams return 0; 84b58112e5SPatrick Williams } 85b58112e5SPatrick Williams 86b58112e5SPatrick Williams-declare_hw_handler(vendor, set_str) 87b58112e5SPatrick Williams+declare_hw_handler(vendor, set_regex) 88b58112e5SPatrick Williams declare_hw_snprint(vendor, print_str) 89b58112e5SPatrick Williams 90b58112e5SPatrick Williams-declare_hw_handler(product, set_str) 91b58112e5SPatrick Williams+declare_hw_handler(product, set_regex) 92b58112e5SPatrick Williams declare_hw_snprint(product, print_str) 93b58112e5SPatrick Williams 94b58112e5SPatrick Williams-declare_hw_handler(revision, set_str) 95b58112e5SPatrick Williams+declare_hw_handler(revision, set_regex) 96b58112e5SPatrick Williams declare_hw_snprint(revision, print_str) 97b58112e5SPatrick Williams 98b58112e5SPatrick Williams-declare_hw_handler(bl_product, set_str) 99b58112e5SPatrick Williams+declare_hw_handler(bl_product, set_regex) 100b58112e5SPatrick Williams declare_hw_snprint(bl_product, print_str) 101b58112e5SPatrick Williams 102b58112e5SPatrick Williams declare_hw_arg_str_handler(hwhandler, 0) 103b58112e5SPatrick Williams-- 104b58112e5SPatrick Williams2.25.1 105b58112e5SPatrick Williams 106