]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
IMAP storage did not honor the maxmsg setting in voicemail.conf, and it also had...
authorMark Michelson <mmichelson@digium.com>
Thu, 6 Dec 2007 20:25:11 +0000 (20:25 +0000)
committerMark Michelson <mmichelson@digium.com>
Thu, 6 Dec 2007 20:25:11 +0000 (20:25 +0000)
of crashing if a user had more than 256 messages in their voicemail. This patch kills two birds with
one stone by adding maxmsg support and also setting a hard limit on the number of messages at 255 so
that the crashes cannot happen.

(closes issue #11101, reported by Skavin, patched by me)

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@91541 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_voicemail.c

index b124de468cc4e3043247f43111a516c1ffc169a7..490ecf1084515bd410e7a47d98739708108dad33 100644 (file)
@@ -160,7 +160,11 @@ static struct vmstate *vmstates = NULL;
 #define INTRO "vm-intro"
 
 #define MAXMSG 100
+#ifndef IMAP_STORAGE
 #define MAXMSGLIMIT 9999
+#else
+#define MAXMSGLIMIT 255
+#endif
 
 #define BASEMAXINLINE 256
 #define BASELINELEN 72
@@ -2560,6 +2564,10 @@ static int copy_message(struct ast_channel *chan, struct ast_vm_user *vmu, int i
        char dest[256];
        struct vm_state *sendvms = NULL, *destvms = NULL;
        char messagestring[10]; /*I guess this could be a problem if someone has more than 999999999 messages...*/
+       if(msgnum >= recip->maxmsg) {
+               ast_log(LOG_WARNING, "Unable to copy mail, mailbox %s is full\n", recip->mailbox);
+               return -1;
+       }
        if(!(sendvms = get_vm_state_by_imapuser(vmu->imapuser, 2)))
        {
                ast_log(LOG_ERROR, "Couldn't get vm_state for originator's mailbox!!\n");
@@ -3006,6 +3014,12 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, struct leave_vm_
                        ast_play_and_wait(chan, "vm-mailboxfull");
                        return -1;
                }
+               /* Check if we have exceeded maxmsg */
+               if (msgnum >= vmu->maxmsg) {
+                       ast_log(LOG_WARNING, "Unable to leave message since we will exceed the maximum number of messages allowed (%u > %u)\n", msgnum, vmu->maxmsg);
+                       ast_play_and_wait(chan, "vm-mailboxfull");
+                       return -1;
+               }
                /* here is a big difference! We add one to it later */
                if (option_debug > 2)
                        ast_log(LOG_DEBUG, "Messagecount set to %d\n",msgnum);