diff options
-rw-r--r-- | apps/app_voicemail.c | 34 | ||||
-rw-r--r-- | contrib/scripts/vmdb.sql | 2 |
2 files changed, 36 insertions, 0 deletions
diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index c54e51e50..2b55ad840 100644 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -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); + } + } } } diff --git a/contrib/scripts/vmdb.sql b/contrib/scripts/vmdb.sql index 59238c659..92553bbc6 100644 --- a/contrib/scripts/vmdb.sql +++ b/contrib/scripts/vmdb.sql @@ -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) ); |