Handle change password properly with multiple VM contexts (bug #1069)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@2227 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Mark Spencer
2004-02-24 17:11:23 +00:00
parent 406e4283fd
commit f62061aa78

View File

@@ -450,11 +450,14 @@ static void vm_change_password(struct ast_vm_user *vmu, char *newpassword)
FILE *configin;
FILE *configout;
int linenum=0;
char inbuf[256];
char orig[256];
char currcontext[256] ="";
char tmpin[AST_CONFIG_MAX_PATH];
char tmpout[AST_CONFIG_MAX_PATH];
char *user, *pass, *rest, *trim;
char *user, *pass, *rest, *trim, *tempcontext;
tempcontext = NULL;
snprintf((char *)tmpin, sizeof(tmpin)-1, "%s/voicemail.conf",(char *)ast_config_AST_CONFIG_DIR);
snprintf((char *)tmpout, sizeof(tmpout)-1, "%s/voicemail.conf.new",(char *)ast_config_AST_CONFIG_DIR);
configin = fopen((char *)tmpin,"r");
@@ -477,6 +480,7 @@ static void vm_change_password(struct ast_vm_user *vmu, char *newpassword)
while (!feof(configin)) {
/* Read in the line */
fgets(inbuf, sizeof(inbuf), configin);
linenum++;
if (!feof(configin)) {
/* Make a backup of it */
memcpy(orig, inbuf, sizeof(orig));
@@ -488,6 +492,18 @@ static void vm_change_password(struct ast_vm_user *vmu, char *newpassword)
user=inbuf;
while(*user < 33)
user++;
/* check for '[' (opening of context name ) */
tempcontext = strchr(user, '[');
if (tempcontext) {
strncpy(currcontext, tempcontext +1,
sizeof(currcontext) - 1);
/* now check for ']' */
tempcontext = strchr(currcontext, ']');
if (tempcontext)
*tempcontext = '\0';
else
currcontext[0] = '\0';
}
pass = strchr(user, '=');
if (pass > user) {
trim = pass - 1;
@@ -512,7 +528,11 @@ static void vm_change_password(struct ast_vm_user *vmu, char *newpassword)
}
} else
rest = NULL;
if (user && pass && *user && *pass && !strcmp(user, vmu->mailbox) && !strcmp(pass, vmu->password)) {
/* Compare user, pass AND context */
if (user && *user && !strcmp(user, vmu->mailbox) &&
pass && *pass && !strcmp(pass, vmu->password) &&
currcontext && *currcontext && !strcmp(currcontext, vmu->context)) {
/* This is the line */
if (rest) {
fprintf(configout, "%s => %s,%s\n", vmu->mailbox,newpassword,rest);