mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	patch to fix several things wrong with voicemail
imap storage. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@42259 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		| @@ -562,7 +562,7 @@ static void apply_option(struct ast_vm_user *vmu, const char *var, const char *v | ||||
| 		ast_copy_string(vmu->zonetag, value, sizeof(vmu->zonetag)); | ||||
| #ifdef IMAP_STORAGE | ||||
| 	} else if (!strcasecmp(var, "imapuser")) { | ||||
| 		strncpy(vmu->imapuser, value, sizeof(vmu->imapuser) - 1); | ||||
| 		ast_copy_string(vmu->imapuser, value, sizeof(vmu->imapuser)); | ||||
| #endif | ||||
| 	} else if (!strcasecmp(var, "delete") || !strcasecmp(var, "deletevoicemail")) { | ||||
| 		ast_set2_flag(vmu, ast_true(value), VM_DELETE);	 | ||||
| @@ -1651,8 +1651,7 @@ static int vm_delete(char *file) | ||||
|  | ||||
|  | ||||
| #endif | ||||
| static int | ||||
| inbuf(struct baseio *bio, FILE *fi) | ||||
| static int inbuf(struct baseio *bio, FILE *fi) | ||||
| { | ||||
| 	int l; | ||||
|  | ||||
| @@ -1673,8 +1672,7 @@ inbuf(struct baseio *bio, FILE *fi) | ||||
| 	return 1; | ||||
| } | ||||
|  | ||||
| static int  | ||||
| inchar(struct baseio *bio, FILE *fi) | ||||
| static int inchar(struct baseio *bio, FILE *fi) | ||||
| { | ||||
| 	if (bio->iocp>=bio->iolen) { | ||||
| 		if (!inbuf(bio, fi)) | ||||
| @@ -1684,8 +1682,7 @@ inchar(struct baseio *bio, FILE *fi) | ||||
| 	return bio->iobuf[bio->iocp++]; | ||||
| } | ||||
|  | ||||
| static int | ||||
| ochar(struct baseio *bio, int c, FILE *so) | ||||
| static int ochar(struct baseio *bio, int c, FILE *so) | ||||
| { | ||||
| 	if (bio->linelength>=BASELINELEN) { | ||||
| 		if (fputs(eol,so)==EOF) | ||||
| @@ -1924,7 +1921,7 @@ static int sendmail(char *srcemail, struct ast_vm_user *vmu, int msgnum, char *c | ||||
| 		fprintf(p, "X-Asterisk-VM-Caller-ID-Num: %s\n", cidnum); | ||||
| 		fprintf(p, "X-Asterisk-VM-Caller-ID-Name: %s\n", cidname); | ||||
| 		fprintf(p, "X-Asterisk-VM-Duration: %d\n", duration); | ||||
| 		if (category != NULL) | ||||
| 		if (!ast_strlen_zero(category)) | ||||
| 			fprintf(p, "X-Asterisk-VM-Category: %s\n", category); | ||||
| 		fprintf(p, "X-Asterisk-VM-Orig-date: %s\n", date); | ||||
| 		fprintf(p, "X-Asterisk-VM-Orig-time: %ld\n", (long)time(NULL)); | ||||
| @@ -2376,7 +2373,7 @@ static int count_messages_imap(const char *mailbox, int *newmsgs, int *oldmsgs) | ||||
|  		return 0; | ||||
|  	if (strchr(mailbox, ',')) { | ||||
|  		int tmpnew, tmpold; | ||||
|  		strncpy(tmp, mailbox, sizeof(tmp) - 1); | ||||
| 		ast_copy_string(tmp, mailbox, sizeof(tmp)); | ||||
|  		mb = tmp; | ||||
|  		ret = 0; | ||||
|  		while((cur = strsep(&mb, ", "))) { | ||||
| @@ -2393,8 +2390,7 @@ static int count_messages_imap(const char *mailbox, int *newmsgs, int *oldmsgs) | ||||
|  		} | ||||
|  		return 0; | ||||
|  	} | ||||
|   | ||||
|  	strncpy(tmp, mailbox, sizeof(tmp) - 1); | ||||
| 	ast_copy_string(tmp, mailbox, sizeof(tmp)); | ||||
|  	context = strchr(tmp, '@'); | ||||
|  	if (context) { | ||||
|  		*context = '\0'; | ||||
| @@ -2408,7 +2404,7 @@ static int count_messages_imap(const char *mailbox, int *newmsgs, int *oldmsgs) | ||||
|  	/* We have to get the user before we can open the stream! */ | ||||
|  	/*ast_log (LOG_DEBUG,"Before find_user, context is %s and mailbox is %s\n",context,mailbox); */ | ||||
|  	vmu = find_user(NULL, context, mailboxnc); | ||||
|  	if (vmu == NULL) { | ||||
|  	if (!vmu) { | ||||
| 		ast_log (LOG_ERROR,"Couldn't find mailbox %s in context %s\n",mailboxnc,context); | ||||
|  		return -1; | ||||
|  	} else { | ||||
| @@ -2421,10 +2417,10 @@ static int count_messages_imap(const char *mailbox, int *newmsgs, int *oldmsgs) | ||||
|   | ||||
|  	/* check if someone is accessing this box right now... */ | ||||
|  	vms_p = get_vm_state_by_imapuser(vmu->imapuser,1); | ||||
|  	if (vms_p == NULL) { | ||||
|  	if (!vms_p) { | ||||
|  		vms_p = get_vm_state_by_mailbox(mailboxnc,1); | ||||
|  	} | ||||
|  	if (vms_p != NULL) { | ||||
|  	if (vms_p) { | ||||
| 		if(option_debug > 2) | ||||
| 			ast_log (LOG_DEBUG,"Returning before search - user is logged in\n"); | ||||
|  		*newmsgs = vms_p->newmessages; | ||||
| @@ -2434,29 +2430,29 @@ static int count_messages_imap(const char *mailbox, int *newmsgs, int *oldmsgs) | ||||
|   | ||||
|  	/* add one if not there... */ | ||||
|  	vms_p = get_vm_state_by_imapuser(vmu->imapuser,0); | ||||
|  	if (vms_p == NULL) { | ||||
|  	if (!vms_p) { | ||||
|  		vms_p = get_vm_state_by_mailbox(mailboxnc,0); | ||||
|  	} | ||||
|   | ||||
|  	if (vms_p == NULL) { | ||||
|  	if (!vms_p) { | ||||
| 		if(option_debug > 2) | ||||
| 			ast_log (LOG_DEBUG,"Adding new vmstate for %s\n",vmu->imapuser); | ||||
|  		vms_p = (struct vm_state *)malloc(sizeof(struct vm_state)); | ||||
|  		strcpy(vms_p->imapuser,vmu->imapuser); | ||||
|  		strcpy(vms_p->username,mailboxnc); /* save for access from interactive entry point */ | ||||
|  		ast_copy_string(vms_p->username, mailboxnc, sizeof(vms_p->username)); /* save for access from interactive entry point */ | ||||
|  		vms_p->mailstream = NIL; /* save for access from interactive entry point */ | ||||
| 		if(option_debug > 2) | ||||
| 			ast_log (LOG_DEBUG,"Copied %s to %s\n",vmu->imapuser,vms_p->imapuser); | ||||
|  		vms_p->updated = 1; | ||||
|  		vms_p->interactive = 0; | ||||
|  		/* set mailbox to INBOX! */ | ||||
|  		strncpy(vms_p->curbox, mbox(0), sizeof(vms_p->curbox) - 1); | ||||
| 		ast_copy_string(vms_p->curbox, mbox(0), sizeof(vms_p->curbox)); | ||||
|  		init_vm_state(vms_p); | ||||
|  		vmstate_insert(vms_p); | ||||
|  	} | ||||
|  	if (vms_p->mailstream == NULL) | ||||
|  	if (!vms_p->mailstream) | ||||
|  		ret = init_mailstream(vms_p); | ||||
|  	if (vms_p->mailstream == NULL) { | ||||
|  	if (!vms_p->mailstream) { | ||||
| 		ast_log (LOG_ERROR,"Houston we have a problem - IMAP mailstream is NULL\n"); | ||||
|  		return -1; | ||||
|  	} | ||||
| @@ -2508,6 +2504,7 @@ static int count_messages_imap(const char *mailbox, int *newmsgs, int *oldmsgs) | ||||
| /* copy message only used by file storage */ | ||||
| static int copy_message(struct ast_channel *chan, struct ast_vm_user *vmu, int imbox, int msgnum, long duration, struct ast_vm_user *recip, char *fmt) | ||||
| { | ||||
| 	 | ||||
| 	char fromdir[256], todir[256], frompath[256], topath[256]; | ||||
| 	const char *frombox = mbox(imbox); | ||||
| 	int recipmsgnum; | ||||
| @@ -2869,7 +2866,7 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, struct leave_vm_ | ||||
| 		/* Is ext a mailbox? */ | ||||
| 		/* must open stream for this user to get info! */ | ||||
| 		vms = get_vm_state_by_mailbox(ext,0); | ||||
| 		if (vms != NULL) { | ||||
| 		if (vms) { | ||||
| 			if(option_debug > 2) | ||||
| 				ast_log(LOG_DEBUG, "Using vm_state, interactive set to %d.\n",vms->interactive); | ||||
| 			newmsgs = vms->newmessages++; | ||||
| @@ -3933,7 +3930,6 @@ static int forward_message(struct ast_channel *chan, char *context, struct vm_st | ||||
| 		if (!cmd) { | ||||
| 			AST_LIST_TRAVERSE_SAFE_BEGIN(&extensions, vmtmp, list) { | ||||
| #ifdef IMAP_STORAGE | ||||
|  				/* NEED TO CHANGE username to mailbox!! - JAR */ | ||||
|  				/* Need to get message content */ | ||||
| 				if(option_debug > 2) | ||||
| 	 				ast_log (LOG_DEBUG,"Before mail_fetchheaders, curmsg is: %d, imap messages is %lu\n",vms->curmsg, vms->msgArray[vms->curmsg]); | ||||
| @@ -3945,13 +3941,13 @@ static int forward_message(struct ast_channel *chan, char *context, struct vm_st | ||||
|  				/* This will only work for new messages... */ | ||||
| 				header_content = mail_fetchheader (vms->mailstream, vms->msgArray[vms->curmsg]); | ||||
|  				/* empty string means no valid header */ | ||||
|  				if (header_content == "" || header_content == NULL) { | ||||
|  				if (ast_strlen(header_content)) { | ||||
|  					ast_log (LOG_ERROR,"Could not fetch header for message number %ld\n",vms->msgArray[vms->curmsg]); | ||||
|  					return -1; | ||||
|  				} | ||||
|  				/* Get header info needed by sendmail */ | ||||
|  				temp = get_header_by_tag(header_content, "X-Asterisk-VM-Duration:"); | ||||
|  				if (temp != NULL) | ||||
|  				if (temp) | ||||
|  					duration = atoi(temp); | ||||
|  				else | ||||
|  					duration = 0; | ||||
| @@ -4317,7 +4313,7 @@ static int play_message(struct ast_channel *chan, struct ast_vm_user *vmu, struc | ||||
| 	/* This will only work for new messages... */ | ||||
| 	header_content = mail_fetchheader (vms->mailstream, vms->msgArray[vms->curmsg]); | ||||
| 	/* empty string means no valid header */ | ||||
| 	if (header_content == "" || header_content == NULL) { | ||||
| 	if (ast_strlen(header_content)) { | ||||
| 		ast_log (LOG_ERROR,"Could not fetch header for message number %ld\n",vms->msgArray[vms->curmsg]); | ||||
| 		return -1; | ||||
| 	} | ||||
| @@ -4343,35 +4339,35 @@ static int play_message(struct ast_channel *chan, struct ast_vm_user *vmu, struc | ||||
| 	/* Get info from headers!!  */ | ||||
| 	temp = get_header_by_tag(header_content, "X-Asterisk-VM-Caller-ID-Num:"); | ||||
|  | ||||
| 	if (temp != NULL) | ||||
| 	if (temp) | ||||
| 		strcpy(cid,temp);  | ||||
| 	else  | ||||
| 		cid[0] = '\0'; | ||||
|  | ||||
| 	temp = get_header_by_tag(header_content, "X-Asterisk-VM-Context:"); | ||||
|  | ||||
| 	if (temp != NULL) | ||||
| 	if (temp) | ||||
| 		strcpy(context,temp);  | ||||
| 	else | ||||
| 		context[0] = '\0'; | ||||
|  | ||||
| 	temp = get_header_by_tag(header_content, "X-Asterisk-VM-Orig-time:"); | ||||
|  | ||||
| 	if (temp != NULL) | ||||
| 	if (temp) | ||||
| 		strcpy(origtime,temp); | ||||
| 	else | ||||
| 		origtime[0] = '\0'; | ||||
|  | ||||
| 	temp = get_header_by_tag(header_content, "X-Asterisk-VM-Duration:"); | ||||
|  | ||||
| 	if (temp != NULL) | ||||
| 	if (temp) | ||||
| 		strcpy(duration,temp); | ||||
| 	else | ||||
| 		duration[0] = '\0'; | ||||
| 	 | ||||
| 	temp = get_header_by_tag(header_content, "X-Asterisk-VM-Category:"); | ||||
| 	 | ||||
| 	if (temp != NULL) | ||||
| 	if (temp) | ||||
| 		strcpy(category,temp); | ||||
| 	else | ||||
| 		category[0] = '\0'; | ||||
| @@ -4383,7 +4379,7 @@ static int play_message(struct ast_channel *chan, struct ast_vm_user *vmu, struc | ||||
|  | ||||
|  | ||||
| 	/* What is the category thing?  JAR */ | ||||
| 	if ((!res) && category[0] != '\0' && category != NULL) { | ||||
| 	if ((!res) && !ast_strlen_zero(category)) { | ||||
| 		res = play_message_category(chan, category); | ||||
| 	} | ||||
|  | ||||
| @@ -4518,27 +4514,13 @@ static int open_mailbox(struct vm_state *vms, struct ast_vm_user *vmu,int box) | ||||
|  | ||||
| 	strcpy(vms->imapuser,vmu->imapuser); | ||||
| 	if (box == 1) { | ||||
| 		strncpy(vms->curbox, mbox(0), sizeof(vms->curbox) - 1); | ||||
| 		ast_copy_string(vms->curbox, mbox(0), sizeof(vms->curbox)); | ||||
| 		sprintf(vms->vmbox, "vm-%s", mbox(1)); | ||||
| 	} else { | ||||
| 		strncpy(vms->curbox, mbox(box), sizeof(vms->curbox) - 1); | ||||
| 		ast_copy_string(vms->curbox, mbox(box), sizeof(vms->curbox)); | ||||
| 		snprintf(vms->vmbox, sizeof(vms->vmbox), "vm-%s", vms->curbox); | ||||
| 	} | ||||
|  | ||||
| 	/* No need to do another search! */ | ||||
| 	/* | ||||
| 	if (vms->interactive == 1)  { | ||||
| 		strncpy(vms->curbox, mbox(box), sizeof(vms->curbox) - 1); | ||||
| 		snprintf(vms->vmbox, sizeof(vms->vmbox), "vm-%s", vms->curbox); | ||||
| 		if (box == 0) { | ||||
| 			vms->lastmsg = vms->newmessages - 1; | ||||
| 		} else if (box == 1) { | ||||
| 			vms->lastmsg = vms->oldmessages - 1; | ||||
| 		} | ||||
| 		return 0; | ||||
| 	} | ||||
| 	*/ | ||||
|  | ||||
| 	if(option_debug > 2) | ||||
| 		ast_log(LOG_DEBUG,"Before init_mailstream, user is %s\n",vmu->imapuser); | ||||
| 	ret = init_mailstream(vms); | ||||
| @@ -6957,35 +6939,34 @@ static int load_config(void) | ||||
| #ifdef IMAP_STORAGE | ||||
| 		/* IMAP server address */ | ||||
| 		if ((imap_server = ast_variable_retrieve(cfg, "general", "imapserver"))) { | ||||
| 			strncpy(imapserver,imap_server,sizeof(imapserver) - 1); | ||||
| 			ast_copy_string(imapserver, imap_server, sizeof(imapserver)); | ||||
| 		} else { | ||||
| 			strcpy(imapserver,"localhost"); | ||||
| 		} | ||||
| 		/* IMAP server port */ | ||||
| 		if ((imap_port = ast_variable_retrieve(cfg, "general", "imapport"))) { | ||||
| 			strncpy(imapport,imap_port,sizeof(imapport) - 1); | ||||
| 			ast_copy_string(imapport, imap_port, sizeof(imapport)); | ||||
| 		} else { | ||||
| 			strcpy(imapport,"143"); | ||||
| 		} | ||||
| 		/* IMAP server flags */ | ||||
| 		if ((imap_flags = ast_variable_retrieve(cfg, "general", "imapflags"))) { | ||||
| 			strncpy(imapflags,imap_flags,sizeof(imapflags) - 1); | ||||
| 			ast_copy_string(imapflags, imap_flags, sizeof(imapflags)); | ||||
| 		} | ||||
| 		/* IMAP server master username */ | ||||
| 		if ((auth_user = ast_variable_retrieve(cfg, "general", "authuser"))) { | ||||
| 			strncpy(authuser,auth_user,sizeof(authuser) - 1); | ||||
| 			ast_copy_string(authuser, auth_user, sizeof(authuser)); | ||||
| 		} | ||||
| 		/* IMAP server master password */ | ||||
| 		if ((auth_password = ast_variable_retrieve(cfg, "general", "authpassword"))) { | ||||
| 			strncpy(authpassword,auth_password,sizeof(authpassword) - 1); | ||||
| 			ast_copy_string(authpassword, auth_password, sizeof(authpassword)); | ||||
| 		} | ||||
| 		/* Expunge on exit */ | ||||
| 		if ((expunge_on_hangup = ast_variable_retrieve(cfg, "general", "expungeonhangup"))) { | ||||
| 			if (strcmp(expunge_on_hangup,"no") == 0 || strcmp(expunge_on_hangup,"No") == 0) { | ||||
| 			if(!ast_false(expunge_on_hangup)) | ||||
| 				expungeonhangup = 0; | ||||
| 			} else { | ||||
| 			else | ||||
| 				expungeonhangup = 1; | ||||
| 			} | ||||
| 		} else { | ||||
| 			expungeonhangup = 1; | ||||
| 		} | ||||
| @@ -7467,7 +7448,7 @@ static int advanced_options(struct ast_channel *chan, struct ast_vm_user *vmu, s | ||||
| 	/* This will only work for new messages... */ | ||||
| 	header_content = mail_fetchheader (vms->mailstream, vms->msgArray[vms->curmsg]); | ||||
| 	/* empty string means no valid header */ | ||||
| 	if (header_content == "" || header_content == NULL) { | ||||
| 	if (ast_strlen_zero(header_content)) { | ||||
| 		ast_log (LOG_ERROR,"Could not fetch header for message number %ld\n",vms->msgArray[vms->curmsg]); | ||||
| 		return -1; | ||||
| 	} | ||||
| @@ -7475,7 +7456,7 @@ static int advanced_options(struct ast_channel *chan, struct ast_vm_user *vmu, s | ||||
| 	/* Get info from headers!!  */ | ||||
| 	temp = get_header_by_tag(header_content, "X-Asterisk-VM-Caller-ID-Num:"); | ||||
| 	 | ||||
| 	if (temp != NULL) | ||||
| 	if (temp) | ||||
| 		strcpy(cidS,temp); | ||||
| 	else | ||||
| 		cidS[0] = '\0'; | ||||
| @@ -7483,7 +7464,7 @@ static int advanced_options(struct ast_channel *chan, struct ast_vm_user *vmu, s | ||||
| 	cid = &cidS[0]; | ||||
| 	temp = get_header_by_tag(header_content, "X-Asterisk-VM-Context:"); | ||||
| 	 | ||||
| 	if (temp != NULL) | ||||
| 	if (temp) | ||||
| 		strcpy(contextS,temp); | ||||
| 	else | ||||
| 		contextS[0] = '\0'; | ||||
| @@ -7491,7 +7472,7 @@ static int advanced_options(struct ast_channel *chan, struct ast_vm_user *vmu, s | ||||
| 	context = &contextS[0]; | ||||
| 	temp = get_header_by_tag(header_content, "X-Asterisk-VM-Orig-time:"); | ||||
| 	 | ||||
| 	if (temp != NULL) | ||||
| 	if (temp) | ||||
| 		strcpy(origtimeS,temp); | ||||
| 	else | ||||
| 		origtimeS[0] = '\0'; | ||||
| @@ -7877,13 +7858,13 @@ static int init_mailstream(struct vm_state *vms) | ||||
| 	 | ||||
| 	 | ||||
| 	 | ||||
| 	if (vms == NULL) { | ||||
| 	if (!vms) { | ||||
| 		ast_log (LOG_ERROR,"vm_state is NULL!\n"); | ||||
| 		return -1; | ||||
| 	} | ||||
| 	if(option_debug > 2) | ||||
| 		ast_log (LOG_DEBUG,"vm_state user is:%s\n",vms->imapuser); | ||||
| 	if (vms->mailstream == NIL || vms->mailstream == NULL) { | ||||
| 	if (vms->mailstream == NIL || !vms->mailstream) { | ||||
| 		ast_log (LOG_DEBUG,"mailstream not set.\n"); | ||||
| 	} else { | ||||
| 		stream = vms->mailstream; | ||||
| @@ -7932,7 +7913,7 @@ void mm_searched(MAILSTREAM *stream, unsigned long number) | ||||
| 	user = get_user_by_mailbox(mailbox); | ||||
| 	 | ||||
| 	vms = get_vm_state_by_imapuser(user,2); | ||||
| 	if (vms != NULL) { | ||||
| 	if (vms) { | ||||
| 		if(option_debug > 2) | ||||
| 			ast_log (LOG_DEBUG, "saving mailbox message number %lu as message %d. Interactive set to %d\n",number,vms->vmArrayIndex,vms->interactive); | ||||
| 		vms->msgArray[vms->vmArrayIndex++] = number; | ||||
| @@ -8147,47 +8128,36 @@ void mm_notify(MAILSTREAM * stream, char *string, long errflg) | ||||
|  | ||||
| void mm_list(MAILSTREAM * stream, int delim, char *mailbox, long attributes) | ||||
| { | ||||
| 	ast_log (LOG_NOTICE,"****** Entering callback\n"); | ||||
| 	putchar (' '); | ||||
| 	if (delimiter) { | ||||
| 		putchar (delimiter); | ||||
| 	if (delimiter) | ||||
| 		delimiter = delim; | ||||
| 		ast_log (LOG_NOTICE,"Delimiter set to %c\n",delim); | ||||
| 	} else { | ||||
| 		fputs ("NIL", stdout); | ||||
| 	} | ||||
| 	putchar (' '); | ||||
| 	fputs (mailbox, stdout); | ||||
| 	if (option_debug > 4) { | ||||
| 		ast_log(LOG_DEBUG, "Delimiter set to %c and mailbox %s\n",delim, mailbox); | ||||
| 	if (attributes & LATT_NOINFERIORS) | ||||
| 		fputs (", no inferiors", stdout); | ||||
| 		ast_log(LOG_DEBUG, "no inferiors\n"); | ||||
| 	if (attributes & LATT_NOSELECT) | ||||
| 		fputs (", no select", stdout); | ||||
| 		ast_log(LOG_DEBUG, "no select\n"); | ||||
| 	if (attributes & LATT_MARKED) | ||||
| 		fputs (", marked", stdout); | ||||
| 		ast_log(LOG_DEBUG, "marked\n"); | ||||
| 	if (attributes & LATT_UNMARKED) | ||||
| 		fputs (", unmarked", stdout); | ||||
| 	putchar ('\n'); | ||||
| 		ast_log(LOG_DEBUG, "unmarked\n"); | ||||
| 	} | ||||
| } | ||||
|  | ||||
|  | ||||
| void mm_lsub(MAILSTREAM * stream, int delimiter, char *mailbox, long attributes) | ||||
| { | ||||
| 	putchar (' '); | ||||
| 	if (delimiter) | ||||
| 		putchar (delimiter); | ||||
| 	else | ||||
| 		fputs ("NIL", stdout); | ||||
| 	putchar (' '); | ||||
| 	fputs (mailbox, stdout); | ||||
|  | ||||
| 	if (option_debug > 4) { | ||||
| 		ast_log(LOG_DEBUG, "Delimiter set to %c and mailbox %s\n",delimiter, mailbox); | ||||
| 	if (attributes & LATT_NOINFERIORS) | ||||
| 		fputs (", no inferiors", stdout); | ||||
| 		ast_log(LOG_DEBUG, "no inferiors\n"); | ||||
| 	if (attributes & LATT_NOSELECT) | ||||
| 		fputs (", no select", stdout); | ||||
| 		ast_log(LOG_DEBUG, "no select\n"); | ||||
| 	if (attributes & LATT_MARKED) | ||||
| 		fputs (", marked", stdout); | ||||
| 		ast_log(LOG_DEBUG, "marked\n"); | ||||
| 	if (attributes & LATT_UNMARKED) | ||||
| 		fputs (", unmarked", stdout); | ||||
| 	putchar ('\n'); | ||||
| 		ast_log(LOG_DEBUG, "unmarked\n"); | ||||
| 	} | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -8290,7 +8260,7 @@ static void mm_parsequota(MAILSTREAM *stream, unsigned char *msg, QUOTALIST *pqu | ||||
| 	unsigned long usage = 0; | ||||
| 	unsigned long limit = 0; | ||||
| 	 | ||||
| 	while (pquota != NULL) { | ||||
| 	while (pquota) { | ||||
| 		usage = pquota->usage; | ||||
| 		limit = pquota->limit; | ||||
| 		pquota = pquota->next; | ||||
| @@ -8299,7 +8269,7 @@ static void mm_parsequota(MAILSTREAM *stream, unsigned char *msg, QUOTALIST *pqu | ||||
| 	mailbox = stream->mailbox; | ||||
| 	user = get_user_by_mailbox(mailbox); | ||||
| 	vms = get_vm_state_by_imapuser(user,2); | ||||
| 	if (vms != NULL) { | ||||
| 	if (vms) { | ||||
| 		if(option_debug > 2) | ||||
| 			ast_log (LOG_DEBUG, "User %s usage is %lu, limit is %lu\n",user,usage,limit); | ||||
| 		vms->quota_usage = usage; | ||||
| @@ -8315,15 +8285,18 @@ static char *get_header_by_tag(char *header, char *tag) | ||||
| 	int taglen; | ||||
| 	char *eol_pnt; | ||||
|  | ||||
| 	if (header == NULL || tag == NULL) return NULL; | ||||
| 	if (!header || !tag) | ||||
| 		return NULL; | ||||
|  | ||||
| 	taglen = strlen(tag) + 1; | ||||
| 	if (taglen < 1) return NULL; | ||||
| 	if (taglen < 1) | ||||
| 		return NULL; | ||||
|  | ||||
| 	start = strstr(header, tag); | ||||
| 	if (start == NULL) return NULL; | ||||
| 	if (!start) | ||||
| 		return NULL; | ||||
|  | ||||
| 	strncpy(temp,start+taglen,sizeof(temp)-1); | ||||
| 	ast_copy_string(temp, start+taglen, sizeof(temp)); | ||||
| 	eol_pnt = strchr(temp,'\n'); | ||||
| 	*eol_pnt = '\0'; | ||||
| 	return temp; | ||||
| @@ -8334,18 +8307,19 @@ static char *get_user_by_mailbox(char *mailbox) | ||||
| 	char *start, *quote; | ||||
| 	char *eol_pnt; | ||||
|  | ||||
| 	if (mailbox == NULL) return NULL; | ||||
| 	if (!mailbox) | ||||
| 		return NULL; | ||||
|  | ||||
| 	start = strstr(mailbox,"user="); | ||||
| 	if (start == NULL) return NULL; | ||||
| 	if (!start) | ||||
| 		return NULL; | ||||
|  | ||||
| 	/* strncpy(temp,start+1,sizeof(temp)-1); */ | ||||
| 	strcpy(temp,start+5); | ||||
|  | ||||
| 	quote = strchr(temp,'\"'); | ||||
| 	if (quote == NULL) {  /* if username is not in quotes */ | ||||
| 	if (!quote) {  /* if username is not in quotes */ | ||||
| 		eol_pnt = strchr(temp,'/'); | ||||
| 		if (eol_pnt == NULL) { | ||||
| 		if (!eol_pnt) { | ||||
| 			eol_pnt = strchr(temp,'}'); | ||||
| 		} | ||||
| 		*eol_pnt = '\0'; | ||||
| @@ -8363,9 +8337,9 @@ static struct vm_state *get_vm_state_by_imapuser(char *user, int interactive) | ||||
|  | ||||
| 	vlist = vmstates; | ||||
| 	while (vlist) { | ||||
| 		if (vlist->vms != NULL) { | ||||
| 			if (vlist->vms->imapuser != NULL) { | ||||
| 				if (strcmp(vlist->vms->imapuser,user) == 0) { | ||||
| 		if (vlist->vms) { | ||||
| 			if (vlist->vms->imapuser) { | ||||
| 				if (!strcmp(vlist->vms->imapuser,user)) { | ||||
| 					if (interactive == 2) { | ||||
| 						return vlist->vms; | ||||
| 					} else if (vlist->vms->interactive == interactive) { | ||||
| @@ -8395,11 +8369,11 @@ static struct vm_state *get_vm_state_by_mailbox(const char *mailbox, int interac | ||||
| 	if(option_debug > 2)  | ||||
| 		ast_log(LOG_DEBUG, "Mailbox set to %s\n",mailbox); | ||||
| 	while (vlist) { | ||||
| 		if (vlist->vms != NULL) { | ||||
| 			if (vlist->vms->username != NULL) { | ||||
| 		if (vlist->vms) { | ||||
| 			if (vlist->vms->username) { | ||||
| 				if(option_debug > 2) | ||||
| 					ast_log(LOG_DEBUG, "	comparing mailbox %s (i=%d) to vmstate mailbox %s (i=%d)\n",mailbox,interactive,vlist->vms->username,vlist->vms->interactive); | ||||
| 				if (strcmp(vlist->vms->username,mailbox) == 0 && vlist->vms->interactive == interactive) { | ||||
| 				if (!strcmp(vlist->vms->username,mailbox) && vlist->vms->interactive == interactive) { | ||||
| 					if(option_debug > 2) | ||||
| 						ast_log(LOG_DEBUG, "	Found it!\n"); | ||||
| 					return vlist->vms; | ||||
| @@ -8429,7 +8403,7 @@ static void vmstate_insert(struct vm_state *vms) | ||||
| 	   We can compare the username to find the duplicate */ | ||||
| 	if (vms->interactive == 1) { | ||||
| 		altvms = get_vm_state_by_mailbox(vms->username,0); | ||||
| 		if (altvms != NULL) { | ||||
| 		if (altvms) { | ||||
| 			if(option_debug > 2) | ||||
| 				ast_log(LOG_DEBUG, "Duplicate mailbox %s, copying message info...\n",vms->username); | ||||
| 			vms->newmessages = altvms->newmessages; | ||||
| @@ -8455,7 +8429,7 @@ static void vmstate_insert(struct vm_state *vms) | ||||
| 	} | ||||
|  | ||||
| 	v = (struct vmstate *)malloc(sizeof(struct vmstate)); | ||||
| 	if (v == NULL) { | ||||
| 	if (!v) { | ||||
| 		ast_log(LOG_ERROR, "Out of memory\n"); | ||||
| 	} | ||||
| 	if(option_debug > 2) | ||||
| @@ -8476,7 +8450,7 @@ static void vmstate_delete(struct vm_state *vms) | ||||
| 	   back to the persistent state (to make update immediate) */ | ||||
| 	if (vms->interactive == 1) { | ||||
| 		altvms = vms->persist_vms; | ||||
| 		if (altvms != NULL) { | ||||
| 		if (altvms) { | ||||
| 			if(option_debug > 2) | ||||
| 				ast_log(LOG_DEBUG, "Duplicate mailbox %s, copying message info...\n",vms->username); | ||||
| 			altvms->newmessages = vms->newmessages; | ||||
| @@ -8501,7 +8475,7 @@ static void vmstate_delete(struct vm_state *vms) | ||||
| 		vl = vc; | ||||
| 		vc = vc->next; | ||||
| 	} | ||||
| 	if (vf == NULL) { | ||||
| 	if (!vf) { | ||||
| 		ast_log(LOG_ERROR, "No vmstate found for user:%s, mailbox %s\n",vms->imapuser,vms->username); | ||||
| 	} else { | ||||
| 		free(vf); | ||||
| @@ -8518,7 +8492,7 @@ static void set_update(MAILSTREAM * stream) | ||||
| 	mailbox = stream->mailbox; | ||||
| 	user = get_user_by_mailbox(mailbox); | ||||
| 	vms = get_vm_state_by_imapuser(user, 0); | ||||
| 	if (vms != NULL) { | ||||
| 	if (vms) { | ||||
| 		if(option_debug > 2) | ||||
| 			ast_log (LOG_DEBUG, "User %s mailbox set for update.\n",user); | ||||
| 		vms->updated = 2; /* set updated flag since mailbox changed */ | ||||
| @@ -8564,7 +8538,8 @@ static int save_body(BODY *body, struct vm_state *vms, char *section, char *form | ||||
| 	unsigned long newlen; | ||||
| 	char filename[256]; | ||||
| 	 | ||||
| 	if (body == NULL || body == NIL) return -1; | ||||
| 	if (!body || body == NIL) | ||||
| 		return -1; | ||||
| 	display_body (body, NIL, (long) 0); | ||||
| 	body_content = mail_fetchbody (vms->mailstream, vms->msgArray[vms->curmsg], section, &len); | ||||
| 	if (body_content != NIL) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user