Browse Source

Revert "fix UIDNEXT handling"

in fact, UIDNEXT (and UIDVALIDITY) null is *not* allowed (see RFC3501
section 9). them popping up nonetheless was a dovecot bug (which would
also confuse dovecot itself).
having it in as a workaround was no good either, as quite some other
code in mbsync assumes that UIDs are not null.

This reverts commit e1fa867 and most of 39006d7.

-REFMAIL: 4CA62BA1.4020104@lemma.co.uk
wip/maildir-uid-dupes-test
Oswald Buddenhagen 14 years ago
parent
commit
9bbb02b8fd
  1. 3
      TODO
  2. 8
      src/drv_imap.c
  3. 2
      src/mbsync.1

3
TODO

@ -15,9 +15,6 @@ quotas are weird, they make close() fail.
clarify error cases of transactions. clarify error cases of transactions.
sync.c does not consider UID 0 valid, which is wrong. fixing this requires
an incompatible change or a remapping hack in sync state files.
clarify UID 0 vs. < 0 returns vor store_msg & find_msg. clarify UID 0 vs. < 0 returns vor store_msg & find_msg.
create dbg_srec(srec, fmt, ...). create dbg_srec(srec, fmt, ...).

8
src/drv_imap.c

@ -751,7 +751,7 @@ parse_response_code( imap_store_t *ctx, struct imap_cmd *cmd, char *s )
return RESP_CANCEL; return RESP_CANCEL;
} }
} else if (!strcmp( "UIDNEXT", arg )) { } else if (!strcmp( "UIDNEXT", arg )) {
if (!(arg = next_arg( &s )) || (ctx->gen.uidnext = strtol( arg, &p, 10 ), *p)) { if (!(arg = next_arg( &s )) || !(ctx->gen.uidnext = atoi( arg ))) {
error( "IMAP error: malformed NEXTUID status\n" ); error( "IMAP error: malformed NEXTUID status\n" );
return RESP_CANCEL; return RESP_CANCEL;
} }
@ -969,7 +969,7 @@ get_cmd_result_p2( imap_store_t *ctx, struct imap_cmd *cmd, int response )
if (response != RESP_OK) { if (response != RESP_OK) {
done_imap_cmd( ctx, ocmd, response ); done_imap_cmd( ctx, ocmd, response );
} else { } else {
ctx->gen.uidnext = 0; ctx->gen.uidnext = 1;
if (ocmd->param.to_trash) if (ocmd->param.to_trash)
ctx->trashnc = TrashKnown; ctx->trashnc = TrashKnown;
ocmd->param.create = 0; ocmd->param.create = 0;
@ -1436,7 +1436,7 @@ imap_select( store_t *gctx, int create,
prefix = ctx->prefix; prefix = ctx->prefix;
} }
ctx->gen.uidnext = -1; ctx->gen.uidnext = 0;
INIT_IMAP_CMD(imap_cmd_simple, cmd, cb, aux) INIT_IMAP_CMD(imap_cmd_simple, cmd, cb, aux)
cmd->gen.param.create = create; cmd->gen.param.create = create;
@ -1480,7 +1480,7 @@ imap_load( store_t *gctx, int minuid, int maxuid, int newuid, int *excs, int nex
goto done; goto done;
} }
if (maxuid == INT_MAX) if (maxuid == INT_MAX)
maxuid = ctx->gen.uidnext >= 0 ? ctx->gen.uidnext - 1 : 1000000000; maxuid = ctx->gen.uidnext ? ctx->gen.uidnext - 1 : 1000000000;
if (maxuid >= minuid) { if (maxuid >= minuid) {
if ((ctx->gen.opts & OPEN_FIND) && minuid < newuid) { if ((ctx->gen.opts & OPEN_FIND) && minuid < newuid) {
sprintf( buf, "%d:%d", minuid, newuid - 1 ); sprintf( buf, "%d:%d", minuid, newuid - 1 );

2
src/mbsync.1

@ -466,8 +466,6 @@ lost if they are marked as deleted after the message list was retrieved but
before the mailbox is expunged. This can be fixed by using UID EXPUNGE. before the mailbox is expunged. This can be fixed by using UID EXPUNGE.
There is no risk as long as the IMAP mailbox is not simultaneously accessed There is no risk as long as the IMAP mailbox is not simultaneously accessed
by \fBmbsync\fR and another mail client. by \fBmbsync\fR and another mail client.
.P
The IMAP message UID 0 is assumed to be impossible, which is wrong.
.. ..
.SH FILES .SH FILES
.TP .TP

Loading…
Cancel
Save