xref: /plan9/sys/src/cmd/ip/imap4d/debug.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
17dd7cddfSDavid du Colombier #include <u.h>
27dd7cddfSDavid du Colombier #include <libc.h>
37dd7cddfSDavid du Colombier #include <auth.h>
47dd7cddfSDavid du Colombier #include <bio.h>
57dd7cddfSDavid du Colombier #include "imap4d.h"
67dd7cddfSDavid du Colombier 
77dd7cddfSDavid du Colombier void
debuglog(char * fmt,...)8*9a747e4fSDavid du Colombier debuglog(char *fmt, ...)
9*9a747e4fSDavid du Colombier {
10*9a747e4fSDavid du Colombier 	va_list arg;
11*9a747e4fSDavid du Colombier 	static int logfd;
12*9a747e4fSDavid du Colombier 
13*9a747e4fSDavid du Colombier 	if(debug == 0)
14*9a747e4fSDavid du Colombier 		return;
15*9a747e4fSDavid du Colombier 	if(logfd == 0)
16*9a747e4fSDavid du Colombier 		logfd = open("/sys/log/imap4d", OWRITE);
17*9a747e4fSDavid du Colombier 	if(logfd > 0){
18*9a747e4fSDavid du Colombier 		va_start(arg, fmt);
19*9a747e4fSDavid du Colombier 		fprint(logfd, "%s: ", username);
20*9a747e4fSDavid du Colombier 		vfprint(logfd, fmt, arg);
21*9a747e4fSDavid du Colombier 		va_end(arg);
22*9a747e4fSDavid du Colombier 	}
23*9a747e4fSDavid du Colombier }
24*9a747e4fSDavid du Colombier 
25*9a747e4fSDavid du Colombier void
boxVerify(Box * box)267dd7cddfSDavid du Colombier boxVerify(Box *box)
277dd7cddfSDavid du Colombier {
287dd7cddfSDavid du Colombier 	Msg *m;
297dd7cddfSDavid du Colombier 	ulong seq, uid, recent;
307dd7cddfSDavid du Colombier 
317dd7cddfSDavid du Colombier 	if(box == nil)
327dd7cddfSDavid du Colombier 		return;
337dd7cddfSDavid du Colombier 	recent = 0;
347dd7cddfSDavid du Colombier 	seq = 0;
357dd7cddfSDavid du Colombier 	uid = 0;
367dd7cddfSDavid du Colombier 	for(m = box->msgs; m != nil; m = m->next){
377dd7cddfSDavid du Colombier 		if(m->seq == 0)
387dd7cddfSDavid du Colombier 			fprint(2, "m->seq == 0: m->seq=%lud\n", m->seq);
397dd7cddfSDavid du Colombier 		else if(m->seq <= seq)
407dd7cddfSDavid du Colombier 			fprint(2, "m->seq=%lud out of order: last=%lud\n", m->seq, seq);
417dd7cddfSDavid du Colombier 		seq = m->seq;
427dd7cddfSDavid du Colombier 
437dd7cddfSDavid du Colombier 		if(m->uid == 0)
447dd7cddfSDavid du Colombier 			fprint(2, "m->uid == 0: m->seq=%lud\n", m->seq);
457dd7cddfSDavid du Colombier 		else if(m->uid <= uid)
467dd7cddfSDavid du Colombier 			fprint(2, "m->uid=%lud out of order: last=%lud\n", m->uid, uid);
477dd7cddfSDavid du Colombier 		uid = m->uid;
487dd7cddfSDavid du Colombier 
497dd7cddfSDavid du Colombier 		if(m->flags & MRecent)
507dd7cddfSDavid du Colombier 			recent++;
517dd7cddfSDavid du Colombier 	}
527dd7cddfSDavid du Colombier 	if(seq != box->max)
537dd7cddfSDavid du Colombier 		fprint(2, "max=%lud, should be %lud\n", box->max, seq);
547dd7cddfSDavid du Colombier 	if(uid >= box->uidnext)
557dd7cddfSDavid du Colombier 		fprint(2, "uidnext=%lud, maxuid=%lud\n", box->uidnext, uid);
567dd7cddfSDavid du Colombier 	if(recent != box->recent)
577dd7cddfSDavid du Colombier 		fprint(2, "recent=%lud, should be %lud\n", box->recent, recent);
587dd7cddfSDavid du Colombier }
597dd7cddfSDavid du Colombier 
607dd7cddfSDavid du Colombier void
openfiles(void)617dd7cddfSDavid du Colombier openfiles(void)
627dd7cddfSDavid du Colombier {
63*9a747e4fSDavid du Colombier 	Dir *d;
647dd7cddfSDavid du Colombier 	int i;
657dd7cddfSDavid du Colombier 
66*9a747e4fSDavid du Colombier 	for(i = 0; i < 20; i++){
67*9a747e4fSDavid du Colombier 		d = dirfstat(i);
68*9a747e4fSDavid du Colombier 		if(d != nil){
69*9a747e4fSDavid du Colombier 			fprint(2, "fd[%d]='%s' type=%c dev=%d user='%s group='%s'\n", i, d->name, d->type, d->dev, d->uid, d->gid);
70*9a747e4fSDavid du Colombier 			free(d);
71*9a747e4fSDavid du Colombier 		}
72*9a747e4fSDavid du Colombier 	}
737dd7cddfSDavid du Colombier }
747dd7cddfSDavid du Colombier 
757dd7cddfSDavid du Colombier void
ls(char * file)767dd7cddfSDavid du Colombier ls(char *file)
777dd7cddfSDavid du Colombier {
78*9a747e4fSDavid du Colombier 	Dir *d;
797dd7cddfSDavid du Colombier 	int fd, i, nd;
807dd7cddfSDavid du Colombier 
817dd7cddfSDavid du Colombier 	fd = open(file, OREAD);
827dd7cddfSDavid du Colombier 	if(fd < 0)
837dd7cddfSDavid du Colombier 		return;
847dd7cddfSDavid du Colombier 
857dd7cddfSDavid du Colombier 	/*
867dd7cddfSDavid du Colombier 	 * read box to find all messages
877dd7cddfSDavid du Colombier 	 * each one has a directory, and is in numerical order
887dd7cddfSDavid du Colombier 	 */
89*9a747e4fSDavid du Colombier 	d = dirfstat(fd);
90*9a747e4fSDavid du Colombier 	if(d == nil){
917dd7cddfSDavid du Colombier 		close(fd);
927dd7cddfSDavid du Colombier 		return;
937dd7cddfSDavid du Colombier 	}
94*9a747e4fSDavid du Colombier 	if(!(d->mode & DMDIR)){
957dd7cddfSDavid du Colombier 		fprint(2, "file %s\n", file);
96*9a747e4fSDavid du Colombier 		free(d);
977dd7cddfSDavid du Colombier 		close(fd);
987dd7cddfSDavid du Colombier 		return;
997dd7cddfSDavid du Colombier 	}
100*9a747e4fSDavid du Colombier 	free(d);
101*9a747e4fSDavid du Colombier 	while((nd = dirread(fd, &d)) > 0){
1027dd7cddfSDavid du Colombier 		for(i = 0; i < nd; i++){
103*9a747e4fSDavid du Colombier 			fprint(2, "%s/%s %c\n", file, d[i].name, "-d"[(d[i].mode & DMDIR) == DMDIR]);
1047dd7cddfSDavid du Colombier 		}
105*9a747e4fSDavid du Colombier 		free(d);
1067dd7cddfSDavid du Colombier 	}
1077dd7cddfSDavid du Colombier 	close(fd);
1087dd7cddfSDavid du Colombier }
109