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: https://origsvn.digium.com/svn/asterisk/branches/1.6.1@156654 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Brandon Kruse
2008-11-13 19:29:48 +00:00
parent fe6767f2e1
commit cd7a9cb4fe

View File

@@ -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;