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