mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-14 16:33:34 +00:00
Merged revisions 219816 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r219816 | tilghman | 2009-09-22 16:37:03 -0500 (Tue, 22 Sep 2009) | 10 lines When IMAP variables were changed during a reload, Voicemail did not use the new values. This change introduces a configuration version variable, which ensures that connections with the old values are not reused but are allowed to expire normally. (closes issue #15934) Reported by: viniciusfontes Patches: 20090922__issue15934.diff.txt uploaded by tilghman (license 14) Tested by: viniciusfontes ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@219818 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -323,6 +323,7 @@ static char imapparentfolder[64] = "\0";
|
|||||||
static char greetingfolder[64];
|
static char greetingfolder[64];
|
||||||
static char authuser[32];
|
static char authuser[32];
|
||||||
static char authpassword[42];
|
static char authpassword[42];
|
||||||
|
static int imapversion = 1;
|
||||||
|
|
||||||
static int expungeonhangup = 1;
|
static int expungeonhangup = 1;
|
||||||
static int imapgreetings = 0;
|
static int imapgreetings = 0;
|
||||||
@@ -592,6 +593,7 @@ struct ast_vm_user {
|
|||||||
char imapuser[80]; /*!< IMAP server login */
|
char imapuser[80]; /*!< IMAP server login */
|
||||||
char imappassword[80]; /*!< IMAP server password if authpassword not defined */
|
char imappassword[80]; /*!< IMAP server password if authpassword not defined */
|
||||||
char imapvmshareid[80]; /*!< Shared mailbox ID to use rather than the dialed one */
|
char imapvmshareid[80]; /*!< Shared mailbox ID to use rather than the dialed one */
|
||||||
|
int imapversion; /*!< If configuration changes, use the new values */
|
||||||
#endif
|
#endif
|
||||||
double volgain; /*!< Volume gain for voicemails sent via email */
|
double volgain; /*!< Volume gain for voicemails sent via email */
|
||||||
AST_LIST_ENTRY(ast_vm_user) list;
|
AST_LIST_ENTRY(ast_vm_user) list;
|
||||||
@@ -632,6 +634,7 @@ struct vm_state {
|
|||||||
MAILSTREAM *mailstream;
|
MAILSTREAM *mailstream;
|
||||||
int vmArrayIndex;
|
int vmArrayIndex;
|
||||||
char imapuser[80]; /*!< IMAP server login */
|
char imapuser[80]; /*!< IMAP server login */
|
||||||
|
int imapversion;
|
||||||
int interactive;
|
int interactive;
|
||||||
char introfn[PATH_MAX]; /*!< Name of prepended file */
|
char introfn[PATH_MAX]; /*!< Name of prepended file */
|
||||||
unsigned int quota_limit;
|
unsigned int quota_limit;
|
||||||
@@ -901,10 +904,13 @@ static void apply_option(struct ast_vm_user *vmu, const char *var, const char *v
|
|||||||
#ifdef IMAP_STORAGE
|
#ifdef IMAP_STORAGE
|
||||||
} else if (!strcasecmp(var, "imapuser")) {
|
} else if (!strcasecmp(var, "imapuser")) {
|
||||||
ast_copy_string(vmu->imapuser, value, sizeof(vmu->imapuser));
|
ast_copy_string(vmu->imapuser, value, sizeof(vmu->imapuser));
|
||||||
|
vmu->imapversion = imapversion;
|
||||||
} else if (!strcasecmp(var, "imappassword") || !strcasecmp(var, "imapsecret")) {
|
} else if (!strcasecmp(var, "imappassword") || !strcasecmp(var, "imapsecret")) {
|
||||||
ast_copy_string(vmu->imappassword, value, sizeof(vmu->imappassword));
|
ast_copy_string(vmu->imappassword, value, sizeof(vmu->imappassword));
|
||||||
|
vmu->imapversion = imapversion;
|
||||||
} else if (!strcasecmp(var, "imapvmshareid")) {
|
} else if (!strcasecmp(var, "imapvmshareid")) {
|
||||||
ast_copy_string(vmu->imapvmshareid, value, sizeof(vmu->imapvmshareid));
|
ast_copy_string(vmu->imapvmshareid, value, sizeof(vmu->imapvmshareid));
|
||||||
|
vmu->imapversion = imapversion;
|
||||||
#endif
|
#endif
|
||||||
} else if (!strcasecmp(var, "delete") || !strcasecmp(var, "deletevoicemail")) {
|
} else if (!strcasecmp(var, "delete") || !strcasecmp(var, "deletevoicemail")) {
|
||||||
ast_set2_flag(vmu, ast_true(value), VM_DELETE);
|
ast_set2_flag(vmu, ast_true(value), VM_DELETE);
|
||||||
@@ -1139,10 +1145,13 @@ static void apply_options_full(struct ast_vm_user *retval, struct ast_variable *
|
|||||||
#ifdef IMAP_STORAGE
|
#ifdef IMAP_STORAGE
|
||||||
} else if (!strcasecmp(var->name, "imapuser")) {
|
} else if (!strcasecmp(var->name, "imapuser")) {
|
||||||
ast_copy_string(retval->imapuser, var->value, sizeof(retval->imapuser));
|
ast_copy_string(retval->imapuser, var->value, sizeof(retval->imapuser));
|
||||||
|
retval->imapversion = imapversion;
|
||||||
} else if (!strcasecmp(var->name, "imappassword") || !strcasecmp(var->name, "imapsecret")) {
|
} else if (!strcasecmp(var->name, "imappassword") || !strcasecmp(var->name, "imapsecret")) {
|
||||||
ast_copy_string(retval->imappassword, var->value, sizeof(retval->imappassword));
|
ast_copy_string(retval->imappassword, var->value, sizeof(retval->imappassword));
|
||||||
|
retval->imapversion = imapversion;
|
||||||
} else if (!strcasecmp(var->name, "imapvmshareid")) {
|
} else if (!strcasecmp(var->name, "imapvmshareid")) {
|
||||||
ast_copy_string(retval->imapvmshareid, var->value, sizeof(retval->imapvmshareid));
|
ast_copy_string(retval->imapvmshareid, var->value, sizeof(retval->imapvmshareid));
|
||||||
|
retval->imapversion = imapversion;
|
||||||
#endif
|
#endif
|
||||||
} else
|
} else
|
||||||
apply_option(retval, var->name, var->value);
|
apply_option(retval, var->name, var->value);
|
||||||
@@ -1228,6 +1237,11 @@ static struct ast_vm_user *find_user(struct ast_vm_user *ivm, const char *contex
|
|||||||
context = "default";
|
context = "default";
|
||||||
|
|
||||||
AST_LIST_TRAVERSE(&users, cur, list) {
|
AST_LIST_TRAVERSE(&users, cur, list) {
|
||||||
|
#ifdef IMAP_STORAGE
|
||||||
|
if (cur->imapversion != imapversion) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
if (ast_test_flag((&globalflags), VM_SEARCH) && !strcasecmp(mailbox, cur->mailbox))
|
if (ast_test_flag((&globalflags), VM_SEARCH) && !strcasecmp(mailbox, cur->mailbox))
|
||||||
break;
|
break;
|
||||||
if (context && (!strcasecmp(context, cur->context)) && (!strcasecmp(mailbox, cur->mailbox)))
|
if (context && (!strcasecmp(context, cur->context)) && (!strcasecmp(mailbox, cur->mailbox)))
|
||||||
@@ -2254,6 +2268,7 @@ static int open_mailbox(struct vm_state *vms, struct ast_vm_user *vmu, int box)
|
|||||||
}
|
}
|
||||||
|
|
||||||
ast_copy_string(vms->imapuser, vmu->imapuser, sizeof(vms->imapuser));
|
ast_copy_string(vms->imapuser, vmu->imapuser, sizeof(vms->imapuser));
|
||||||
|
vms->imapversion = vmu->imapversion;
|
||||||
ast_debug(3, "Before init_mailstream, user is %s\n", vmu->imapuser);
|
ast_debug(3, "Before init_mailstream, user is %s\n", vmu->imapuser);
|
||||||
|
|
||||||
if ((ret = init_mailstream(vms, box)) || !vms->mailstream) {
|
if ((ret = init_mailstream(vms, box)) || !vms->mailstream) {
|
||||||
@@ -2610,6 +2625,7 @@ static struct vm_state *create_vm_state_from_user(struct ast_vm_user *vmu)
|
|||||||
ast_copy_string(vms_p->username, vmu->mailbox, sizeof(vms_p->username)); /* save for access from interactive entry point */
|
ast_copy_string(vms_p->username, vmu->mailbox, sizeof(vms_p->username)); /* save for access from interactive entry point */
|
||||||
ast_copy_string(vms_p->context, vmu->context, sizeof(vms_p->context));
|
ast_copy_string(vms_p->context, vmu->context, sizeof(vms_p->context));
|
||||||
vms_p->mailstream = NIL; /* save for access from interactive entry point */
|
vms_p->mailstream = NIL; /* save for access from interactive entry point */
|
||||||
|
vms_p->imapversion = vmu->imapversion;
|
||||||
if (option_debug > 4)
|
if (option_debug > 4)
|
||||||
ast_log(AST_LOG_DEBUG, "Copied %s to %s\n", vmu->imapuser, vms_p->imapuser);
|
ast_log(AST_LOG_DEBUG, "Copied %s to %s\n", vmu->imapuser, vms_p->imapuser);
|
||||||
vms_p->updated = 1;
|
vms_p->updated = 1;
|
||||||
@@ -2637,6 +2653,9 @@ static struct vm_state *get_vm_state_by_imapuser(const char *user, int interacti
|
|||||||
ast_debug(3, "error: vms is NULL for %s\n", user);
|
ast_debug(3, "error: vms is NULL for %s\n", user);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (vlist->vms->imapversion != imapversion) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (!vlist->vms->imapuser) {
|
if (!vlist->vms->imapuser) {
|
||||||
ast_debug(3, "error: imapuser is NULL for %s\n", user);
|
ast_debug(3, "error: imapuser is NULL for %s\n", user);
|
||||||
continue;
|
continue;
|
||||||
@@ -2673,6 +2692,9 @@ static struct vm_state *get_vm_state_by_mailbox(const char *mailbox, const char
|
|||||||
ast_debug(3, "error: vms is NULL for %s\n", mailbox);
|
ast_debug(3, "error: vms is NULL for %s\n", mailbox);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (vlist->vms->imapversion != imapversion) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (!vlist->vms->username || !vlist->vms->context) {
|
if (!vlist->vms->username || !vlist->vms->context) {
|
||||||
ast_debug(3, "error: username is NULL for %s\n", mailbox);
|
ast_debug(3, "error: username is NULL for %s\n", mailbox);
|
||||||
continue;
|
continue;
|
||||||
@@ -10721,6 +10743,8 @@ static int load_config(int reload)
|
|||||||
mail_parameters(NIL, SET_CLOSETIMEOUT, (void *) 60L);
|
mail_parameters(NIL, SET_CLOSETIMEOUT, (void *) 60L);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Increment configuration version */
|
||||||
|
imapversion++;
|
||||||
#endif
|
#endif
|
||||||
/* External voicemail notify application */
|
/* External voicemail notify application */
|
||||||
if ((val = ast_variable_retrieve(cfg, "general", "externnotify"))) {
|
if ((val = ast_variable_retrieve(cfg, "general", "externnotify"))) {
|
||||||
|
Reference in New Issue
Block a user