From 00d3c314965cdf06220b31db6e52437cc207b450 Mon Sep 17 00:00:00 2001
From: "Kevin P. Fleming" <kpfleming@digium.com>
Date: Tue, 8 Nov 2005 02:11:42 +0000
Subject: [PATCH] issue #5585

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@7012 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 ChangeLog |  2 ++
 manager.c | 36 ++++++++++++++++++++++--------------
 2 files changed, 24 insertions(+), 14 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index e9d7215950..30cc205d1f 100755
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 2005-11-07  Kevin P. Fleming  <kpfleming@digium.com>
 
+	* manager.c (astman_get_variables): restore old multiple-variable behavior for "Variable" header (issue #5585)
+
 	* many files: don't check for NULL before calling ast_strlen_zero, it can do it itself (issue #5648)
 
 	* pbx.c (handle_show_hints): use proper state-to-string function for hint state (issue #5583)
diff --git a/manager.c b/manager.c
index f0f7a8752f..1f38db260e 100755
--- a/manager.c
+++ b/manager.c
@@ -309,26 +309,34 @@ char *astman_get_header(struct message *m, char *var)
 
 struct ast_variable *astman_get_variables(struct message *m)
 {
-	int varlen, x;
+	int varlen, x, y;
 	struct ast_variable *head = NULL, *cur;
 	char *var, *val;
+	unsigned int var_count;
+        char *vars[32];
 	
 	varlen = strlen("Variable: ");	
 
 	for (x = 0; x < m->hdrcount; x++) {
-		if (!strncasecmp("Variable: ", m->headers[x], varlen)) {
-			var = val = ast_strdupa(m->headers[x] + varlen);
-			if (!var)
-				return head;				
-			strsep(&val, "=");
-			if (!val || ast_strlen_zero(var))
-				continue;
-			cur = ast_variable_new(var, val);
-			if (head) {
-				cur->next = head;
-				head = cur;
-			} else
-				head = cur;
+		if (strncasecmp("Variable: ", m->headers[x], varlen))
+			continue;
+
+		if (!(var = ast_strdupa(m->headers[x] + varlen)))
+			return head;
+
+		if ((var_count = ast_app_separate_args(var, '|', vars, sizeof(vars) / sizeof(var[0])))) {
+			for (y = 0; y < var_count; y++) {
+				var = val = vars[y];
+				strsep(&val, "=");
+				if (!val || ast_strlen_zero(var))
+					continue;
+				cur = ast_variable_new(var, val);
+				if (head) {
+					cur->next = head;
+					head = cur;
+				} else
+					head = cur;
+			}
 		}
 	}
 
-- 
GitLab