]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Fix an issue with IMAP storage and realtime voicemail.
authorJason Parker <jparker@digium.com>
Tue, 16 Jan 2007 22:50:19 +0000 (22:50 +0000)
committerJason Parker <jparker@digium.com>
Tue, 16 Jan 2007 22:50:19 +0000 (22:50 +0000)
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/branches/1.4@51167 65c4cc65-6c06-0410-ace0-fbb531ad65f3

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

index c54e51e501b0e8d6c2709e177d9dadeb52754341..2b55ad840d1bca376875ef5d9de3f61967decba1 100644 (file)
@@ -673,6 +673,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;
@@ -8244,6 +8250,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)
@@ -8379,6 +8407,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)
 );