]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 51167 via svnmerge from
authorJason Parker <jparker@digium.com>
Tue, 16 Jan 2007 22:53:13 +0000 (22:53 +0000)
committerJason Parker <jparker@digium.com>
Tue, 16 Jan 2007 22:53:13 +0000 (22:53 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r51167 | qwell | 2007-01-16 16:50:19 -0600 (Tue, 16 Jan 2007) | 6 lines

Fix an issue with IMAP storage and realtime voicemail.

Also update the vmdb sql script for IMAP specific options.

Issue 8819, initial patches by bsmithurst (slightly modified by me)

........

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

apps/app_voicemail.c
contrib/scripts/vmdb.sql

index f966fbce6d883233c4167f7febcda273b97bf787..8579f6da0ed9d7439bb8f85d85d7b16dc992ff2f 100644 (file)
@@ -694,6 +694,12 @@ static void apply_options_full(struct ast_vm_user *retval, struct ast_variable *
                        ast_copy_string(retval->fullname, tmp->value, sizeof(retval->fullname));
                } else if (!strcasecmp(tmp->name, "context")) {
                        ast_copy_string(retval->context, tmp->value, sizeof(retval->context));
+#ifdef IMAP_STORAGE
+               } else if (!strcasecmp(tmp->name, "imapuser")) {
+                       ast_copy_string(retval->imapuser, tmp->value, sizeof(retval->imapuser));
+               } else if (!strcasecmp(tmp->name, "imappassword")) {
+                       ast_copy_string(retval->imappassword, tmp->value, sizeof(retval->imappassword));
+#endif
                } else
                        apply_option(retval, tmp->name, tmp->value);
                tmp = tmp->next;
@@ -8407,6 +8413,28 @@ static void status(MAILSTREAM *stream)
 }
 #endif
 
+static struct ast_vm_user *find_user_realtime_imapuser(const char *imapuser)
+{
+       struct ast_variable *var;
+       struct ast_vm_user *vmu;
+
+       vmu = ast_calloc(1, sizeof *vmu);
+       if (!vmu)
+               return NULL;
+       ast_set_flag(vmu, VM_ALLOCED);
+       populate_defaults(vmu);
+
+       var = ast_load_realtime("voicemail", "imapuser", imapuser, NULL);
+       if (var) {
+               apply_options_full(vmu, var);
+               ast_variables_destroy(var);
+               return vmu;
+       } else {
+               free(vmu);
+               return NULL;
+       }
+}
+
 /* Interfaces to C-client */
 
 void mm_exists(MAILSTREAM * stream, unsigned long number)
@@ -8542,6 +8570,12 @@ void mm_login(NETMBX * mb, char *user, char *pwd, long trial)
                                break;
                        }
                }
+               if (!vmu) {
+                       if ((vmu = find_user_realtime_imapuser(mb->user))) {
+                               ast_copy_string(pwd, vmu->imappassword, MAILTMPLEN);
+                               free_user(vmu);
+                       }
+               }
        }
 }
 
index 59238c659fe72961261300aa44ad093c501139a3..92553bbc6093f86396445ea02c6cde17fbb51bc9 100644 (file)
@@ -7,5 +7,7 @@ fullname VARCHAR(80) NOT NULL DEFAULT '',
 email VARCHAR(80) NOT NULL DEFAULT '',
 pager VARCHAR(80) NOT NULL DEFAULT '',
 options VARCHAR(160) NOT NULL DEFAULT '',
+imapuser VARCHAR(80) DEFAULT NULL,
+imappassword VARCHAR(80) DEFAULT NULL,
 PRIMARY KEY (context, mailbox)
 );