Bladeren bron

Fixed problem with popen.c not parsing --longopt='foo bar' correctly (Daniel Bimschas #1291987)

git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@1736 f882894a-f735-0410-b71e-b25c423dba1c
Matthias Eble 18 jaren geleden
bovenliggende
commit
a25b98d939
2 gewijzigde bestanden met toevoegingen van 12 en 2 verwijderingen
  1. 1 0
      THANKS.in
  2. 11 2
      plugins/popen.c

+ 1 - 0
THANKS.in

@@ -219,3 +219,4 @@ Denis Knauf
 Matthias Flacke
 Emil Michles
 Ask Bjoern Hansen
+Daniel Bimschas

+ 11 - 2
plugins/popen.c

@@ -104,7 +104,7 @@ spopen (const char *cmdstring)
 	char *env[2];
 	char *cmd = NULL;
 	char **argv = NULL;
-	char *str;
+	char *str, *tmp;
 	int argc;
 
 	int i = 0, pfd[2], pfderr[2];
@@ -166,7 +166,15 @@ spopen (const char *cmdstring)
 			cmd = 1 + strstr (str, "'");
 			str[strcspn (str, "'")] = 0;
 		}
-		else {
+		else if (strcspn(str,"'") < strcspn (str, " \t\r\n")) {
+										/* handle --option='foo bar' strings */
+			tmp = str + strcspn(str, "'") + 1; 
+			if (!strstr (tmp, "'"))
+				return NULL;						/* balanced? */
+			tmp += strcspn(tmp,"'") + 1;
+			*tmp = 0;
+			cmd = tmp + 1;
+		} else {
 			if (strpbrk (str, " \t\r\n")) {
 				cmd = 1 + strpbrk (str, " \t\r\n");
 				str[strcspn (str, " \t\r\n")] = 0;
@@ -180,6 +188,7 @@ spopen (const char *cmdstring)
 			cmd = NULL;
 
 		argv[i++] = str;
+		printf("arg no.%i: %s\n",i,str);
 
 	}
 	argv[i] = NULL;