Patch by Ryan Brindley -- Make sure that manager refuses any duplicate 'new category' requests in updateconfig
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@156017 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
parent
2872f82397
commit
7a2b0102f1
|
@ -81,6 +81,7 @@ enum error_type {
|
|||
UNSPECIFIED_CATEGORY,
|
||||
UNSPECIFIED_ARGUMENT,
|
||||
FAILURE_ALLOCATION,
|
||||
FAILURE_NEWCAT,
|
||||
FAILURE_DELCAT,
|
||||
FAILURE_EMPTYCAT,
|
||||
FAILURE_UPDATE,
|
||||
|
@ -1286,17 +1287,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);
|
||||
|
||||
|
@ -1304,13 +1312,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))) {
|
||||
|
@ -1322,7 +1333,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;
|
||||
}
|
||||
|
@ -1332,25 +1343,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;
|
||||
}
|
||||
|
@ -1363,7 +1366,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;
|
||||
}
|
||||
|
@ -1376,7 +1379,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;
|
||||
}
|
||||
|
@ -1392,7 +1395,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;
|
||||
}
|
||||
|
@ -1482,6 +1485,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;
|
||||
|
|
Loading…
Reference in New Issue