summaryrefslogtreecommitdiff
path: root/main/db.c
diff options
context:
space:
mode:
authorDavid M. Lee <dlee@digium.com>2012-10-04 15:48:24 +0000
committerDavid M. Lee <dlee@digium.com>2012-10-04 15:48:24 +0000
commitc5acf22cec226026b7316a328d0fdd06fa9eb5b8 (patch)
tree43cd224c6eb424e83341579fbae405bd50d7778b /main/db.c
parentd78f7f92b2afa033ff959e84bf164454ca9a5de8 (diff)
Fix DBDelTree error codes for AMI, CLI and AGI
The AMI DBDelTree command will return Success/Key tree deleted successfully even if the given key does not exist. The CLI command 'database deltree' had a similar problem, but was saved because it actually responded with '0 database entries removed'. AGI had a slightly different error, where it would return success if the database was unavailable. This came from confusion about the ast_db_deltree retval, which is -1 in the event of a database error, or number of entries deleted (including 0 for deleting nothing). * Changed some poorly named res variables to num_deleted * Specified specific errors when calling ast_db_deltree (database unavailable vs. entry not found vs. success) * Fixed similar bug in AGI database deltree, where 'Database unavailable' results in successful result (closes issue AST-967) Reported by: John Bigelow Review: https://reviewboard.asterisk.org/r/2138/ ........ Merged revisions 374426 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 374427 from http://svn.asterisk.org/svn/asterisk/branches/10 ........ Merged revisions 374428 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@374429 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/db.c')
-rw-r--r--main/db.c30
1 files changed, 18 insertions, 12 deletions
diff --git a/main/db.c b/main/db.c
index 2a19ce931..bb27a9e31 100644
--- a/main/db.c
+++ b/main/db.c
@@ -589,7 +589,7 @@ static char *handle_cli_database_del(struct ast_cli_entry *e, int cmd, struct as
static char *handle_cli_database_deltree(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
{
- int res;
+ int num_deleted;
switch (cmd) {
case CLI_INIT:
@@ -608,14 +608,16 @@ static char *handle_cli_database_deltree(struct ast_cli_entry *e, int cmd, struc
if ((a->argc < 3) || (a->argc > 4))
return CLI_SHOWUSAGE;
if (a->argc == 4) {
- res = ast_db_deltree(a->argv[2], a->argv[3]);
+ num_deleted = ast_db_deltree(a->argv[2], a->argv[3]);
} else {
- res = ast_db_deltree(a->argv[2], NULL);
+ num_deleted = ast_db_deltree(a->argv[2], NULL);
}
- if (res < 0) {
+ if (num_deleted < 0) {
+ ast_cli(a->fd, "Database unavailable.\n");
+ } else if (num_deleted == 0) {
ast_cli(a->fd, "Database entries do not exist.\n");
} else {
- ast_cli(a->fd, "%d database entries removed.\n",res);
+ ast_cli(a->fd, "%d database entries removed.\n",num_deleted);
}
return CLI_SUCCESS;
}
@@ -873,22 +875,26 @@ static int manager_dbdeltree(struct mansession *s, const struct message *m)
{
const char *family = astman_get_header(m, "Family");
const char *key = astman_get_header(m, "Key");
- int res;
+ int num_deleted;
if (ast_strlen_zero(family)) {
astman_send_error(s, m, "No family specified.");
return 0;
}
- if (!ast_strlen_zero(key))
- res = ast_db_deltree(family, key);
- else
- res = ast_db_deltree(family, NULL);
+ if (!ast_strlen_zero(key)) {
+ num_deleted = ast_db_deltree(family, key);
+ } else {
+ num_deleted = ast_db_deltree(family, NULL);
+ }
- if (res <= 0)
+ if (num_deleted < 0) {
+ astman_send_error(s, m, "Database unavailable");
+ } else if (num_deleted == 0) {
astman_send_error(s, m, "Database entry not found");
- else
+ } else {
astman_send_ack(s, m, "Key tree deleted successfully");
+ }
return 0;
}