[dm-devel] [PATCH 4/6] Fix for parsing multipath.conf files without spaces before brackets

Benjamin Marzinski bmarzins at redhat.com
Thu Dec 11 22:10:27 UTC 2008


There's a bug in bug in the multipath.conf code that keeps multipath from
correctly parsing config files where there is no space between a section name
and the opening bracket. For instance

devices {
	device {
		...
	}
}

works but

devices {
	device{
		...
	}
}

doesn't. This patch makes sure that brackets are the recognized as seperate from
the token that they follow, unless they are part of a quoted string.

Signed-off-by: Benjamin Marzinski <bmarzins at redhat.com>
---
 libmultipath/parser.c |   12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

Index: multipath-tools-081203/libmultipath/parser.c
===================================================================
--- multipath-tools-081203.orig/libmultipath/parser.c
+++ multipath-tools-081203/libmultipath/parser.c
@@ -239,12 +239,20 @@ alloc_strvec(char *string)
 				in_string = 0;
 			else
 				in_string = 1;
+		} else if (!in_string && (*cp == '{' || *cp == '}')) {
+			token = MALLOC(2);
 
+			if (!token)
+				goto out;
+
+			*(token) = *cp;
+			*(token + 1) = '\0';
+			cp++;
 		} else {
 			while ((in_string ||
 				(!isspace((int) *cp) && isascii((int) *cp) &&
-				 *cp != '!' && *cp != '#')) &&
-			       *cp != '\0' && *cp != '"')
+				 *cp != '!' && *cp != '#' && *cp != '{' &&
+				 *cp != '}')) && *cp != '\0' && *cp != '"')
 				cp++;
 			strlen = cp - start;
 			token = MALLOC(strlen + 1);




More information about the dm-devel mailing list