aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2003-05-11 18:58:00 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2003-05-11 18:58:00 +0000
commit70427a68d2cbf7439b35a55162851435e9f57f8a (patch)
tree5afbc3725927d63b853e867540ae252875b92e6e
parentb4f4a3a814cfdd6ae8ddd9cd035b1d86b74178cc (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-xapps/app_voicemail2.c22
-rwxr-xr-xconfigs/voicemail.conf.sample2
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>