diff options
author | bkruse <bkruse@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-11-13 19:29:48 +0000 |
---|---|---|
committer | bkruse <bkruse@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-11-13 19:29:48 +0000 |
commit | 16196dea32e7869f56be82737fb2a8faf4fec37b (patch) | |
tree | 673712fa8e05d0271eccb6a8f4b3a5250690850c /main/manager.c | |
parent | 677a3be4521ff0d1b4bfedfb982d039a2b5794a6 (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.1@156654 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main/manager.c')
-rw-r--r-- | main/manager.c | 42 |
1 files changed, 24 insertions, 18 deletions
diff --git a/main/manager.c b/main/manager.c index fe0a6b960..1e594d981 100644 --- a/main/manager.c +++ b/main/manager.c @@ -81,6 +81,7 @@ enum error_type { UNSPECIFIED_CATEGORY, UNSPECIFIED_ARGUMENT, FAILURE_ALLOCATION, + FAILURE_NEWCAT, FAILURE_DELCAT, FAILURE_EMPTYCAT, FAILURE_UPDATE, @@ -1285,17 +1286,24 @@ static enum error_type handle_updates(struct mansession *s, const struct message struct ast_str *str1 = ast_str_create(16), *str2 = ast_str_create(16); enum error_type result = 0; - 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 */ + result = UNSPECIFIED_CATEGORY; + break; + } + 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); @@ -1303,13 +1311,16 @@ static enum error_type handle_updates(struct mansession *s, const struct message 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)) { - result = UNSPECIFIED_CATEGORY; + if (ast_category_get(cfg,cat)) { /* check to make sure the cat doesn't */ + result = FAILURE_NEWCAT; /* already exist */ break; } if (!(category = ast_category_new(cat, dfn, -1))) { @@ -1321,7 +1332,7 @@ 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)) { result = UNSPECIFIED_ARGUMENT; break; } @@ -1331,25 +1342,17 @@ static enum error_type handle_updates(struct mansession *s, const struct message } ast_category_rename(category, value); } else if (!strcasecmp(action, "delcat")) { - if (ast_strlen_zero(cat)) { - result = UNSPECIFIED_CATEGORY; - break; - } if (ast_category_delete(cfg, cat)) { result = FAILURE_DELCAT; break; } } else if (!strcasecmp(action, "emptycat")) { - if (ast_strlen_zero(cat)) { - result = UNSPECIFIED_CATEGORY; - break; - } if (ast_category_empty(cfg, cat)) { result = FAILURE_EMPTYCAT; break; } } else if (!strcasecmp(action, "update")) { - if (ast_strlen_zero(cat) || ast_strlen_zero(var)) { + if (ast_strlen_zero(var)) { result = UNSPECIFIED_ARGUMENT; break; } @@ -1362,7 +1365,7 @@ static enum error_type handle_updates(struct mansession *s, const struct message break; } } 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))) { result = UNSPECIFIED_ARGUMENT; break; } @@ -1375,7 +1378,7 @@ static enum error_type handle_updates(struct mansession *s, const struct message break; } } else if (!strcasecmp(action, "append")) { - if (ast_strlen_zero(cat) || ast_strlen_zero(var)) { + if (ast_strlen_zero(var)) { result = UNSPECIFIED_ARGUMENT; break; } @@ -1391,7 +1394,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)) { result = UNSPECIFIED_ARGUMENT; break; } @@ -1481,6 +1484,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; |