diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index 89c52d91f56a6917c06d9e2b27879e2ca9422e29..f42df964aa4378c9821d889656c6ba0c794b423a 100755 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -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);