Allow number of failed login attemps to be set
authorMark Spencer <markster@digium.com>
Sun, 11 May 2003 18:58:00 +0000 (18:58 +0000)
committerMark Spencer <markster@digium.com>
Sun, 11 May 2003 18:58:00 +0000 (18:58 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@995 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_voicemail2.c
configs/voicemail.conf.sample

index 53b7940..5b9ffcb 100755 (executable)
@@ -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")) {
index c3c0fb5..8aa3f30 100755 (executable)
@@ -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>