1*7dd7cddfSDavid du Colombier #include <u.h> 2*7dd7cddfSDavid du Colombier #include <libc.h> 3*7dd7cddfSDavid du Colombier #include <auth.h> 4*7dd7cddfSDavid du Colombier #include <bio.h> 5*7dd7cddfSDavid du Colombier #include "imap4d.h" 6*7dd7cddfSDavid du Colombier 7*7dd7cddfSDavid du Colombier void 8*7dd7cddfSDavid du Colombier boxVerify(Box *box) 9*7dd7cddfSDavid du Colombier { 10*7dd7cddfSDavid du Colombier Msg *m; 11*7dd7cddfSDavid du Colombier ulong seq, uid, recent; 12*7dd7cddfSDavid du Colombier 13*7dd7cddfSDavid du Colombier if(box == nil) 14*7dd7cddfSDavid du Colombier return; 15*7dd7cddfSDavid du Colombier recent = 0; 16*7dd7cddfSDavid du Colombier seq = 0; 17*7dd7cddfSDavid du Colombier uid = 0; 18*7dd7cddfSDavid du Colombier for(m = box->msgs; m != nil; m = m->next){ 19*7dd7cddfSDavid du Colombier if(m->seq == 0) 20*7dd7cddfSDavid du Colombier fprint(2, "m->seq == 0: m->seq=%lud\n", m->seq); 21*7dd7cddfSDavid du Colombier else if(m->seq <= seq) 22*7dd7cddfSDavid du Colombier fprint(2, "m->seq=%lud out of order: last=%lud\n", m->seq, seq); 23*7dd7cddfSDavid du Colombier seq = m->seq; 24*7dd7cddfSDavid du Colombier 25*7dd7cddfSDavid du Colombier if(m->uid == 0) 26*7dd7cddfSDavid du Colombier fprint(2, "m->uid == 0: m->seq=%lud\n", m->seq); 27*7dd7cddfSDavid du Colombier else if(m->uid <= uid) 28*7dd7cddfSDavid du Colombier fprint(2, "m->uid=%lud out of order: last=%lud\n", m->uid, uid); 29*7dd7cddfSDavid du Colombier uid = m->uid; 30*7dd7cddfSDavid du Colombier 31*7dd7cddfSDavid du Colombier if(m->flags & MRecent) 32*7dd7cddfSDavid du Colombier recent++; 33*7dd7cddfSDavid du Colombier } 34*7dd7cddfSDavid du Colombier if(seq != box->max) 35*7dd7cddfSDavid du Colombier fprint(2, "max=%lud, should be %lud\n", box->max, seq); 36*7dd7cddfSDavid du Colombier if(uid >= box->uidnext) 37*7dd7cddfSDavid du Colombier fprint(2, "uidnext=%lud, maxuid=%lud\n", box->uidnext, uid); 38*7dd7cddfSDavid du Colombier if(recent != box->recent) 39*7dd7cddfSDavid du Colombier fprint(2, "recent=%lud, should be %lud\n", box->recent, recent); 40*7dd7cddfSDavid du Colombier } 41*7dd7cddfSDavid du Colombier 42*7dd7cddfSDavid du Colombier void 43*7dd7cddfSDavid du Colombier openfiles(void) 44*7dd7cddfSDavid du Colombier { 45*7dd7cddfSDavid du Colombier Dir d; 46*7dd7cddfSDavid du Colombier int i; 47*7dd7cddfSDavid du Colombier 48*7dd7cddfSDavid du Colombier for(i = 0; i < 20; i++) 49*7dd7cddfSDavid du Colombier if(dirfstat(i, &d) >= 0) 50*7dd7cddfSDavid 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); 51*7dd7cddfSDavid du Colombier } 52*7dd7cddfSDavid du Colombier 53*7dd7cddfSDavid du Colombier void 54*7dd7cddfSDavid du Colombier ls(char *file) 55*7dd7cddfSDavid du Colombier { 56*7dd7cddfSDavid du Colombier Dir d[NDirs]; 57*7dd7cddfSDavid du Colombier int fd, i, nd; 58*7dd7cddfSDavid du Colombier 59*7dd7cddfSDavid du Colombier fd = open(file, OREAD); 60*7dd7cddfSDavid du Colombier if(fd < 0) 61*7dd7cddfSDavid du Colombier return; 62*7dd7cddfSDavid du Colombier 63*7dd7cddfSDavid du Colombier /* 64*7dd7cddfSDavid du Colombier * read box to find all messages 65*7dd7cddfSDavid du Colombier * each one has a directory, and is in numerical order 66*7dd7cddfSDavid du Colombier */ 67*7dd7cddfSDavid du Colombier if(dirfstat(fd, d) < 0){ 68*7dd7cddfSDavid du Colombier close(fd); 69*7dd7cddfSDavid du Colombier return; 70*7dd7cddfSDavid du Colombier } 71*7dd7cddfSDavid du Colombier if(!(d->mode & CHDIR)){ 72*7dd7cddfSDavid du Colombier fprint(2, "file %s\n", file); 73*7dd7cddfSDavid du Colombier close(fd); 74*7dd7cddfSDavid du Colombier return; 75*7dd7cddfSDavid du Colombier } 76*7dd7cddfSDavid du Colombier while((nd = dirread(fd, d, sizeof(Dir) * NDirs)) >= sizeof(Dir)){ 77*7dd7cddfSDavid du Colombier nd /= sizeof(Dir); 78*7dd7cddfSDavid du Colombier for(i = 0; i < nd; i++){ 79*7dd7cddfSDavid du Colombier fprint(2, "%s/%s %c\n", file, d[i].name, "-d"[(d[i].mode & CHDIR) == CHDIR]); 80*7dd7cddfSDavid du Colombier } 81*7dd7cddfSDavid du Colombier } 82*7dd7cddfSDavid du Colombier close(fd); 83*7dd7cddfSDavid du Colombier } 84