--- /root/asterisk-1.4.0/apps/app_voicemail.c 2006-12-20 02:56:09.000000000 +0000 +++ apps/app_voicemail.c 2007-01-15 12:35:34.000000000 +0000 @@ -669,6 +669,12 @@ 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; @@ -8231,6 +8237,28 @@ } #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) @@ -8366,6 +8394,10 @@ break; } } + if ((vmu = find_user_realtime_imapuser(mb->user))) { + ast_copy_string(pwd, vmu->imappassword, MAILTMPLEN); + free_user(vmu); + } } }