[Asterisk-cvs] asterisk/apps app_voicemail.c,1.55.2.1,1.55.2.2

markster at lists.digium.com markster at lists.digium.com
Tue Feb 24 12:23:05 CST 2004


Update of /usr/cvsroot/asterisk/apps
In directory mongoose.digium.com:/tmp/cvs-serv27889/apps

Modified Files:
      Tag: v1-0_stable
	app_voicemail.c 
Log Message:
Handle change password properly with multiple VM contexts (bug #1069)


Index: app_voicemail.c
===================================================================
RCS file: /usr/cvsroot/asterisk/apps/app_voicemail.c,v
retrieving revision 1.55.2.1
retrieving revision 1.55.2.2
diff -u -d -r1.55.2.1 -r1.55.2.2
--- app_voicemail.c	11 Feb 2004 03:54:20 -0000	1.55.2.1
+++ app_voicemail.c	24 Feb 2004 17:11:39 -0000	1.55.2.2
@@ -450,11 +450,14 @@
 	
         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 @@
         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 @@
 				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 @@
 					}
 				} 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);




More information about the svn-commits mailing list