diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2003-05-11 18:58:00 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2003-05-11 18:58:00 +0000 |
commit | 70427a68d2cbf7439b35a55162851435e9f57f8a (patch) | |
tree | 5afbc3725927d63b853e867540ae252875b92e6e | |
parent | b4f4a3a814cfdd6ae8ddd9cd035b1d86b74178cc (diff) |
Allow number of failed login attemps to be set
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@995 f38db490-d61c-443f-a65b-d21fe96a405b
-rwxr-xr-x | apps/app_voicemail2.c | 22 | ||||
-rwxr-xr-x | configs/voicemail.conf.sample | 2 |
2 files changed, 22 insertions, 2 deletions
diff --git a/apps/app_voicemail2.c b/apps/app_voicemail2.c index 53b794037..5b9ffcbcd 100755 --- a/apps/app_voicemail2.c +++ b/apps/app_voicemail2.c @@ -136,6 +136,7 @@ static char vmfmts[80]; static int vmmaxmessage; static int maxgreet; static int skipms; +static int maxlogins; STANDARD_LOCAL_USER; @@ -1843,6 +1844,7 @@ static int vm_execmain(struct ast_channel *chan, void *data) char fmtc[256] = ""; char password[80]; struct vm_state vms; + int logretries = 0; struct ast_vm_user *vmu = NULL, vmus; char *context=NULL; @@ -1897,7 +1899,7 @@ static int vm_execmain(struct ast_channel *chan, void *data) /* Authenticate them and get their mailbox/password */ - while (!valid) { + while (!valid && (logretries < maxlogins)) { /* Prompt for, and read in the username */ if (!skipuser && ast_readstring(chan, vms.username, sizeof(vms.username) - 1, 2000, 10000, "#") < 0) { ast_log(LOG_WARNING, "Couldn't read username\n"); @@ -1941,6 +1943,13 @@ static int vm_execmain(struct ast_channel *chan, void *data) if (ast_streamfile(chan, "vm-incorrect", chan->language)) break; } + logretries++; + } + if (logretries >= maxlogins) { + ast_stopstream(chan); + res = play_and_wait(chan, "vm-goodbye"); + if (res > 0) + res = 0; } if (valid) { @@ -2094,7 +2103,7 @@ static int vm_execmain(struct ast_channel *chan, void *data) break; } } - if (cmd == 't') { + if ((cmd == 't') || (cmd == '#')) { /* Timeout */ res = 0; } else { @@ -2264,6 +2273,15 @@ static int load_users(void) } } + maxlogins = 3; + if ((s = ast_variable_retrieve(cfg, "general", "maxlogins"))) { + if (sscanf(s, "%d", &x) == 1) { + maxlogins = x; + } else { + ast_log(LOG_WARNING, "Invalid max failed login attempts\n"); + } + } + cat = ast_category_browse(cfg, NULL); while(cat) { if (strcasecmp(cat, "general")) { diff --git a/configs/voicemail.conf.sample b/configs/voicemail.conf.sample index c3c0fb525..8aa3f3001 100755 --- a/configs/voicemail.conf.sample +++ b/configs/voicemail.conf.sample @@ -20,6 +20,8 @@ skipms=3000 maxsilence=10 ; Silence threshold (what we consider silence, the lower, the more sensitive) silencethreshold=128 +; Max number of failed login attempts +maxlogins=3 ; ; Each mailbox is listed in the form <mailbox>=<password>,<name>,<email>,<pager_email> |