aboutsummaryrefslogtreecommitdiffstats
path: root/main/manager.c
diff options
context:
space:
mode:
authorrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2007-04-20 18:19:18 +0000
committerrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2007-04-20 18:19:18 +0000
commit0cb07a4fdfcb616285b2871b4c78e5de7938c2a8 (patch)
treede9645395f9c17c7de987651bb208dbefa943899 /main/manager.c
parent75e2414dfa391f029f01296ad8e83661e856f322 (diff)
Fix the UpdateConfig manager action to properly treat "variables" and "objects"
differently (a=b versus a=>b). (issue #9568, reported by pari, patch by me) git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@61690 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main/manager.c')
-rw-r--r--main/manager.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/main/manager.c b/main/manager.c
index a937bc931..7c2e1b37a 100644
--- a/main/manager.c
+++ b/main/manager.c
@@ -1068,6 +1068,8 @@ static void handle_updates(struct mansession *s, const struct message *m, struct
struct ast_variable *v;
for (x=0;x<100000;x++) {
+ unsigned int object = 0;
+
snprintf(hdr, sizeof(hdr), "Action-%06d", x);
action = astman_get_header(m, hdr);
if (ast_strlen_zero(action))
@@ -1078,6 +1080,10 @@ static void handle_updates(struct mansession *s, const struct message *m, struct
var = astman_get_header(m, hdr);
snprintf(hdr, sizeof(hdr), "Value-%06d", x);
value = astman_get_header(m, hdr);
+ if (!ast_strlen_zero(value) && *value == '>') {
+ object = 1;
+ value++;
+ }
snprintf(hdr, sizeof(hdr), "Match-%06d", x);
match = astman_get_header(m, hdr);
if (!strcasecmp(action, "newcat")) {
@@ -1098,7 +1104,7 @@ static void handle_updates(struct mansession *s, const struct message *m, struct
ast_category_delete(cfg, (char *) cat);
} else if (!strcasecmp(action, "update")) {
if (!ast_strlen_zero(cat) && !ast_strlen_zero(var) && (category = ast_category_get(cfg, cat)))
- ast_variable_update(category, (char *) var, (char *) value, (char *) match);
+ ast_variable_update(category, var, value, match, object);
} else if (!strcasecmp(action, "delete")) {
if (!ast_strlen_zero(cat) && !ast_strlen_zero(var) && (category = ast_category_get(cfg, cat)))
ast_variable_delete(category, (char *) var, (char *) match);
@@ -1106,7 +1112,7 @@ static void handle_updates(struct mansession *s, const struct message *m, struct
if (!ast_strlen_zero(cat) && !ast_strlen_zero(var) &&
(category = ast_category_get(cfg, cat)) &&
(v = ast_variable_new(var, value))){
- if (match && !strcasecmp(match, "object"))
+ if (object || (match && !strcasecmp(match, "object")))
v->object = 1;
ast_variable_append(category, v);
}