diff options
author | bkruse <bkruse@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-11-13 19:23:37 +0000 |
---|---|---|
committer | bkruse <bkruse@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-11-13 19:23:37 +0000 |
commit | 66d9fa4e169377a2e671eade8989beade6f8f147 (patch) | |
tree | 60a911ff870b2af8b095350061aae3630b3e307c /main | |
parent | 96b2eee24422074477cfd6c512d760da3554730b (diff) |
Merged revisions 156017 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk
........
r156017 | pari | 2008-11-11 17:02:43 -0600 (Tue, 11 Nov 2008) | 5 lines
Patch by Ryan Brindley -- Make sure that manager refuses any duplicate 'new category' requests in updateconfig
(closes issue #13539)
........
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.0@156652 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main')
-rw-r--r-- | main/manager.c | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/main/manager.c b/main/manager.c index a28fae594..c34a23f58 100644 --- a/main/manager.c +++ b/main/manager.c @@ -80,6 +80,7 @@ enum error_type { UNSPECIFIED_CATEGORY, UNSPECIFIED_ARGUMENT, FAILURE_ALLOCATION, + FAILURE_NEWCAT, FAILURE_DELCAT, FAILURE_EMPTYCAT, FAILURE_UPDATE, @@ -1244,30 +1245,38 @@ static enum error_type handle_updates(struct mansession *s, const struct message struct ast_category *category; struct ast_variable *v; - for (x = 0; x < 100000; x++) { + for (x = 0; x < 100000; x++) { //100000 = the max number of allowed updates + 1 unsigned int object = 0; snprintf(hdr, sizeof(hdr), "Action-%06d", x); action = astman_get_header(m, hdr); - if (ast_strlen_zero(action)) - break; + if (ast_strlen_zero(action)) // breaks the for loop if no action header + break; // this could cause problems if actions come in misnumbered + snprintf(hdr, sizeof(hdr), "Cat-%06d", x); cat = astman_get_header(m, hdr); + if (ast_strlen_zero(cat)) //every action needs a category + return UNSPECIFIED_CATEGORY; + snprintf(hdr, sizeof(hdr), "Var-%06d", x); 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); + snprintf(hdr, sizeof(hdr), "Line-%06d", x); line = astman_get_header(m, hdr); + if (!strcasecmp(action, "newcat")) { - if (ast_strlen_zero(cat)) - return UNSPECIFIED_CATEGORY; + if (ast_category_get(cfg,cat)) //check to make sure the cat doesn't + return FAILURE_NEWCAT; //already exist if (!(category = ast_category_new(cat, dfn, -1))) return FAILURE_ALLOCATION; if (ast_strlen_zero(match)) { @@ -1275,37 +1284,33 @@ static enum error_type handle_updates(struct mansession *s, const struct message } else ast_category_insert(cfg, category, match); } else if (!strcasecmp(action, "renamecat")) { - if (ast_strlen_zero(cat) || ast_strlen_zero(value)) + if (ast_strlen_zero(value)) return UNSPECIFIED_ARGUMENT; if (!(category = ast_category_get(cfg, cat))) return UNKNOWN_CATEGORY; ast_category_rename(category, value); } else if (!strcasecmp(action, "delcat")) { - if (ast_strlen_zero(cat)) - return UNSPECIFIED_CATEGORY; if (ast_category_delete(cfg, cat)) return FAILURE_DELCAT; } else if (!strcasecmp(action, "emptycat")) { - if (ast_strlen_zero(cat)) - return UNSPECIFIED_CATEGORY; if (ast_category_empty(cfg, cat)) return FAILURE_EMPTYCAT; } else if (!strcasecmp(action, "update")) { - if (ast_strlen_zero(cat) || ast_strlen_zero(var)) + if (ast_strlen_zero(var)) return UNSPECIFIED_ARGUMENT; if (!(category = ast_category_get(cfg,cat))) return UNKNOWN_CATEGORY; if (ast_variable_update(category, var, value, match, object)) return FAILURE_UPDATE; } else if (!strcasecmp(action, "delete")) { - if (ast_strlen_zero(cat) || (ast_strlen_zero(var) && ast_strlen_zero(line))) + if ((ast_strlen_zero(var) && ast_strlen_zero(line))) return UNSPECIFIED_ARGUMENT; if (!(category = ast_category_get(cfg, cat))) return UNKNOWN_CATEGORY; if (ast_variable_delete(category, var, match, line)) return FAILURE_DELETE; } else if (!strcasecmp(action, "append")) { - if (ast_strlen_zero(cat) || ast_strlen_zero(var)) + if (ast_strlen_zero(var)) return UNSPECIFIED_ARGUMENT; if (!(category = ast_category_get(cfg, cat))) return UNKNOWN_CATEGORY; @@ -1315,7 +1320,7 @@ static enum error_type handle_updates(struct mansession *s, const struct message v->object = 1; ast_variable_append(category, v); } else if (!strcasecmp(action, "insert")) { - if (ast_strlen_zero(cat) || ast_strlen_zero(var) || ast_strlen_zero(line)) + if (ast_strlen_zero(var) || ast_strlen_zero(line)) return UNSPECIFIED_ARGUMENT; if (!(category = ast_category_get(cfg, cat))) return UNKNOWN_CATEGORY; @@ -1396,6 +1401,9 @@ static int action_updateconfig(struct mansession *s, const struct message *m) case FAILURE_ALLOCATION: astman_send_error(s, m, "Memory allocation failure, this should not happen"); break; + case FAILURE_NEWCAT: + astman_send_error(s, m, "Create category did not complete successfully"); + break; case FAILURE_DELCAT: astman_send_error(s, m, "Delete category did not complete successfully"); break; |