upas/fs: fix sync condition

we used to check for mb->d->name != nil before stating, to avoid
stating pop3/imap mailboxes who don't really have a local file,
but this breaks when the md->d is reconstructed (faked) from
the index! resulting in the mailbox stop being refreshed.

the solution is to not have mb->d == nil for imap/pop mailoxes.
This commit is contained in:
cinap_lenrek 2017-04-09 04:32:38 +02:00
parent 35f6a75355
commit 1d94a18e56
3 changed files with 11 additions and 18 deletions

View file

@ -879,7 +879,7 @@ retry:
if(Topmsg(f->mb, f->m)){ if(Topmsg(f->mb, f->m)){
f->qid.path = PATH(f->mb->id, Qmbox); f->qid.path = PATH(f->mb->id, Qmbox);
f->qid.type = QTDIR; f->qid.type = QTDIR;
f->qid.vers = f->mb->d->qid.vers; f->qid.vers = f->mb->vers;
msgdecref(f->mb, f->mtop); msgdecref(f->mb, f->mtop);
msgdecref(f->mb, f->m); msgdecref(f->mb, f->m);
f->m = f->mtop = nil; f->m = f->mtop = nil;
@ -1462,7 +1462,7 @@ reader(void)
mb->waketime = 0; mb->waketime = 0;
break; break;
} }
if(mb->d != nil && mb->d->name != nil){ if(mb->d != nil){
d = dirstat(mb->path); d = dirstat(mb->path);
if(d != nil){ if(d != nil){
if(d->qid.path != mb->d->qid.path if(d->qid.path != mb->d->qid.path

View file

@ -39,7 +39,7 @@ typedef struct {
typedef struct Imap Imap; typedef struct Imap Imap;
struct Imap { struct Imap {
long lastread; ulong lastread;
char *mbox; char *mbox;
/* free this to free the strings below */ /* free this to free the strings below */
@ -913,7 +913,7 @@ imap4read(Imap *imap, Mailbox *mb, int doplumb, int *new)
Message *m, **ll; Message *m, **ll;
*new = 0; *new = 0;
if(time(0) - imap->lastread < 10) if((ulong)time(0) - imap->lastread < 10)
return nil; return nil;
imap->lastread = time(0); imap->lastread = time(0);
imap4cmd(imap, "status %Z (messages uidvalidity)", imap->mbox); imap4cmd(imap, "status %Z (messages uidvalidity)", imap->mbox);
@ -1008,10 +1008,9 @@ imap4sync(Mailbox *mb, int doplumb, int *new)
imap = mb->aux; imap = mb->aux;
if(err = imap4dial(imap)) if(err = imap4dial(imap))
goto out; goto out;
if((err = imap4read(imap, mb, doplumb, new)) == nil) err = imap4read(imap, mb, doplumb, new);
mb->d->atime = mb->d->mtime = time(0);
out: out:
mb->waketime = time(0) + imap->refreshtime; mb->waketime = (ulong)time(0) + imap->refreshtime;
return err; return err;
} }
@ -1185,7 +1184,6 @@ imap4mbox(Mailbox *mb, char *path)
mb->rename = imap4rename; mb->rename = imap4rename;
// mb->remove = imap4remove; // mb->remove = imap4remove;
mb->modflags = imap4modflags; mb->modflags = imap4modflags;
mb->d = emalloc(sizeof *mb->d);
mb->addfrom = 1; mb->addfrom = 1;
return nil; return nil;
} }

View file

@ -539,17 +539,13 @@ pop3sync(Mailbox *mb, int doplumb, int *new)
pop = mb->aux; pop = mb->aux;
if(err = pop3dial(pop)) { if(err = pop3dial(pop))
mb->waketime = time(0) + pop->refreshtime; goto out;
return err; if((err = pop3read(pop, mb, doplumb, new)) == nil)
}
if((err = pop3read(pop, mb, doplumb, new)) == nil){
pop3purge(pop, mb); pop3purge(pop, mb);
mb->d->atime = mb->d->mtime = time(0);
}
pop3hangup(pop); pop3hangup(pop);
mb->waketime = time(0) + pop->refreshtime; out:
mb->waketime = (ulong)time(0) + pop->refreshtime;
return err; return err;
} }
@ -661,7 +657,6 @@ pop3mbox(Mailbox *mb, char *path)
mb->sync = pop3sync; mb->sync = pop3sync;
mb->close = pop3close; mb->close = pop3close;
mb->ctl = pop3ctl; mb->ctl = pop3ctl;
mb->d = emalloc(sizeof *mb->d);
mb->addfrom = 1; mb->addfrom = 1;
return nil; return nil;
} }