Merged revisions 374427 via svnmerge from

file:///srv/subversion/repos/asterisk/branches/10

................
  r374427 | dlee | 2012-10-04 10:37:11 -0500 (Thu, 04 Oct 2012) | 25 lines
  
  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
................


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/10-digiumphones@374455 65c4cc65-6c06-0410-ace0-fbb531ad65f3
10-digiumphones
Automerge script 14 years ago
parent e3f9a2b521
commit fa1312ae4c

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

@ -2693,16 +2693,18 @@ static int handle_dbdel(struct ast_channel *chan, AGI *agi, int argc, const char
static int handle_dbdeltree(struct ast_channel *chan, AGI *agi, int argc, const char * const argv[])
{
int res;
int num_deleted;
if ((argc < 3) || (argc > 4))
if ((argc < 3) || (argc > 4)) {
return RESULT_SHOWUSAGE;
if (argc == 4)
res = ast_db_deltree(argv[2], argv[3]);
else
res = ast_db_deltree(argv[2], NULL);
}
if (argc == 4) {
num_deleted = ast_db_deltree(argv[2], argv[3]);
} else {
num_deleted = ast_db_deltree(argv[2], NULL);
}
ast_agi_send(agi->fd, chan, "200 result=%c\n", res ? '0' : '1');
ast_agi_send(agi->fd, chan, "200 result=%c\n", num_deleted > 0 ? '0' : '1');
return RESULT_SUCCESS;
}

Loading…
Cancel
Save