From 73bc822fa87809a3d0b9a08b7fbdf9d037fe0d2e Mon Sep 17 00:00:00 2001 From: Jason Parker Date: Tue, 16 Jan 2007 22:53:13 +0000 Subject: Merged revisions 51167 via svnmerge from 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 | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'apps') diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index f966fbce6..8579f6da0 100644 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -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); + } + } } } -- cgit v1.2.3