isync

mailbox synchronization program
git clone https://git.code.sf.net/p/isync/isync
Log | Files | Refs | README | LICENSE

commit 9bbb02b8fd3850e8650ccaae95c85e083ad82f7b
parent 233f563569700bee5d9f92347d74d22016feff10
Author: Oswald Buddenhagen <ossi@users.sf.net>
Date:   Thu,  2 Jun 2011 12:43:05 +0200

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

Diffstat:
MTODO | 3---
Msrc/drv_imap.c | 8++++----
Msrc/mbsync.1 | 2--
3 files changed, 4 insertions(+), 9 deletions(-)

diff --git a/TODO b/TODO @@ -15,9 +15,6 @@ quotas are weird, they make close() fail. 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. create dbg_srec(srec, fmt, ...). diff --git a/src/drv_imap.c b/src/drv_imap.c @@ -751,7 +751,7 @@ parse_response_code( imap_store_t *ctx, struct imap_cmd *cmd, char *s ) return RESP_CANCEL; } } 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" ); 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) { done_imap_cmd( ctx, ocmd, response ); } else { - ctx->gen.uidnext = 0; + ctx->gen.uidnext = 1; if (ocmd->param.to_trash) ctx->trashnc = TrashKnown; ocmd->param.create = 0; @@ -1436,7 +1436,7 @@ imap_select( store_t *gctx, int create, prefix = ctx->prefix; } - ctx->gen.uidnext = -1; + ctx->gen.uidnext = 0; INIT_IMAP_CMD(imap_cmd_simple, cmd, cb, aux) 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; } 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 ((ctx->gen.opts & OPEN_FIND) && minuid < newuid) { sprintf( buf, "%d:%d", minuid, newuid - 1 ); diff --git a/src/mbsync.1 b/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. There is no risk as long as the IMAP mailbox is not simultaneously accessed by \fBmbsync\fR and another mail client. -.P -The IMAP message UID 0 is assumed to be impossible, which is wrong. .. .SH FILES .TP