[commit] master: permit leading whitespace in INTERNALDATE strings
commit e70c300f7446ba6ec1259f459a0f0e1d2d592ed9 Author: Oswald Buddenhagen Date: Wed Feb 7 11:19:41 2024 +0100 permit leading whitespace in INTERNALDATE strings the BNF specifies "(SP DIGIT) / 2DIGIT" for the date-day-fixed symbol, but "*SP 1*DIGIT" matches that closely enough for parsing purposes. REFMAIL: cyydeevz8cct.2m1t7xkt45...@jonas.vautherin.ch src/drv_imap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/drv_imap.c b/src/drv_imap.c index ad95e3d..170e7fc 100644 --- a/src/drv_imap.c +++ b/src/drv_imap.c @@ -1031,7 +1031,7 @@ parse_date( const char *str ) struct tm datetime; memset( &datetime, 0, sizeof(datetime) ); - if (!(end = strptime( str, "%e-%b-%Y %H:%M:%S ", &datetime ))) + if (!(end = strptime( str, " %e-%b-%Y %H:%M:%S ", &datetime ))) return -1; if ((date = timegm( &datetime )) == -1) return -1; ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: don't try to create already existing boxes
commit 84194a7a9fdd179ca15e4b069a3cffbeaec03bab Author: Oswald Buddenhagen Date: Tue Jan 10 11:37:26 2023 +0100 don't try to create already existing boxes if the SELECT command fails even though the box was LISTed, then the error cause is obviously not that box is absent, and so we should not attempt to CREATE it. src/sync.c | 13 +++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/sync.c b/src/sync.c index bff3684..c66370c 100644 --- a/src/sync.c +++ b/src/sync.c @@ -377,10 +377,13 @@ sync_boxes( store_t *ctx[], const char * const names[], int present[], channel_c sync_ref( svars ); for (t = 0; ; t++) { info( "Opening %s box %s...\n", str_fn[t], svars->orig_name[t] ); - if (present[t] == BOX_ABSENT) + if (present[t] == BOX_ABSENT) { box_confirmed2( svars, t ); - else + } else { + if (present[t] == BOX_PRESENT) + svars->state[t] |= ST_PRESENT; svars->drv[t]->open_box( ctx[t], box_confirmed, AUX ); + } if (t || check_cancel( svars )) break; } @@ -399,6 +402,12 @@ box_confirmed( int sts, uint uidvalidity, void *aux ) if (sts == DRV_OK) { svars->state[t] |= ST_PRESENT; svars->newuidval[t] = uidvalidity; + } else if (svars->state[t] & ST_PRESENT) { + error( "Error: channel %s: %s box %s cannot be opened.\n", + svars->chan->name, str_fn[t], svars->orig_name[t] ); + svars->ret |= SYNC_FAIL; + cancel_sync( svars ); + return; } box_confirmed2( svars, t ); } ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: Revert "actually implement imap_commit_cmds()"
commit 8b8313997c357238d85eb70e8fdee005c746eedf Author: Oswald Buddenhagen Date: Tue Jul 30 07:50:49 2024 +0200 Revert "actually implement imap_commit_cmds()" the CHECK command doesn't do what i thought; the formulation in the specs was ambiguous - it really checks for new mail, rather than committing, and each operation is supposed to be atomic. inefficient, but safe. IMAP4rev2 eliminates the command altogether, subsuming its function under NOOP. consequently, the commit callback doesn't make sense for imap. in principle, we could use it to coalesce multiple STOREs to counter the inefficiency, but that won't happen any time soon, and the implementation would look rather differently anyway. as a "side effect", this fixes an assertion failure in imap_close_box() when all flag sets failed (e.g., b/c the box was read-only), as their callbacks would be short-cut in front of the completion of the CHECK command, which was not sequenced before the close_box() call. This reverts commit cfaa4848dd7c72e628fcc81a4c4532c9be226144. src/drv_imap.c | 55 +++--- 1 file changed, 7 insertions(+), 48 deletions(-) diff --git a/src/drv_imap.c b/src/drv_imap.c index 170e7fc..681117e 100644 --- a/src/drv_imap.c +++ b/src/drv_imap.c @@ -163,8 +163,7 @@ union imap_store { // Command queue imap_cmd_t *pending, **pending_append; imap_cmd_t *in_progress, **in_progress_append; - imap_cmd_t *wait_check, **wait_check_append; - int nexttag, num_in_progress, num_wait_check; + int nexttag, num_in_progress; uint buffer_mem; // Memory currently occupied by buffers in the queue // Used during sequential operations like connect @@ -204,7 +203,6 @@ union imap_store { uint data_len; \ uint uid; /* to identify fetch responses */ \ char high_prio; /* if command is queued, put it at the front of the queue. */ \ - char wait_check; /* Don't report success until subsequent CHECK success. */ \ char to_trash; /* we are storing to trash, not current. */ \ char create; /* create the mailbox if we get an error which suggests so. */ \ char failok; /* Don't complain about NO (@1) / BAD (@2) response. */ \ @@ -352,8 +350,6 @@ new_imap_cmd( uint size ) static void done_imap_cmd( imap_store_t *ctx, imap_cmd_t *cmd, int response ) { - if (cmd->param.wait_check) - ctx->num_wait_check--; if (cmd->param.data) { free( cmd->param.data ); cmd->param.data = NULL; @@ -482,18 +478,6 @@ flush_imap_cmds( imap_store_t *ctx ) } } -static void -finalize_checked_imap_cmds( imap_store_t *ctx, int resp ) -{ - imap_cmd_t *cmd; - - while ((cmd = ctx->wait_check)) { - if (!(ctx->wait_check = cmd->next)) - ctx->wait_check_append = &ctx->wait_check; - done_imap_cmd( ctx, cmd, resp ); - } -} - static void cancel_pending_imap_cmds( imap_store_t *ctx ) { @@ -527,8 +511,6 @@ submit_imap_cmd( imap_store_t *ctx, imap_cmd_t *cmd ) assert( cmd ); assert( cmd->param.done ); - if (cmd->param.wait_check) - ctx->num_wait_check++; if ((ctx->pending && !cmd->param.high_prio) || !cmd_sendable( ctx, cmd )) { if (ctx->pending && cmd->param.high_prio) { cmd->next = ctx->pending; @@ -1943,13 +1925,7 @@ imap_socket_read( void *aux ) imap_ref( ctx ); if (resp == RESP_CANCEL) imap_invoke_bad_callback( ctx ); - if (resp == RESP_OK && cmdp->param.wait_check) { - cmdp->next = NULL; - *ctx->wait_check_append = cmdp; - ctx->wait_check_append = &cmdp->next; - } else { - done_imap_cmd( ctx, cmdp, resp ); - } + done_imap_cmd( ctx, cmdp, resp ); if (imap_deref( ctx )) return; if (ctx->canceling && !ctx->in_progress) { @@ -1972,7 +1948,6 @@ get_cmd_result_p2( imap_store_t *ctx, imap_cmd_t *cmd, int response ) if (response != RESP_OK) { done_imap_cmd( ctx, ocmd, response ); } else { - assert( !ocmd->param.wait_check ); ctx->uidnext = 1; if (ocmd->param.to_trash) ctx->trashnc = TrashKnown; @@ -1993,7 +1968,6 @@ imap_cancel_store( store_t *gctx ) sasl_dispose( &ctx->sasl ); #endif socket_close( &ctx->conn ); - finalize_checked_imap_cmds
[commit] master: remove redundant argument from BIT_FORMATTER_PROTO()
commit 31c504d43263a891b7a9d37517f9e26fb650d20b Author: Oswald Buddenhagen Date: Mon Jul 24 11:34:10 2023 +0200 remove redundant argument from BIT_FORMATTER_PROTO() it doesn't need to know the enum prefix. amends 17db5de0c & 950ebe833. src/common.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/common.h b/src/common.h index 940e74d..9c44bce 100644 --- a/src/common.h +++ b/src/common.h @@ -212,12 +212,12 @@ void fmt_bits( uint bits, uint num_bits, const char *bit_str, const int *bit_off #define BIT_FORMATTER_RET(name, pfx) \ struct name##_str { char str[sizeof(pfx##__STRINGS)]; }; -#define BIT_FORMATTER_PROTO(name, pfx, storage) \ +#define BIT_FORMATTER_PROTO(name, storage) \ storage struct name##_str ATTR_OPTIMIZE /* force RVO */ \ fmt_##name( uint bits ) #define BIT_FORMATTER_IMPL(name, pfx, storage) \ - BIT_FORMATTER_PROTO(name, pfx, storage) \ + BIT_FORMATTER_PROTO(name, storage) \ { \ static const char strings[] = pfx##__STRINGS; \ static const int offsets[] = { pfx##__OFFSETS }; \ @@ -233,7 +233,7 @@ void fmt_bits( uint bits, uint num_bits, const char *bit_str, const int *bit_off #define DECL_BIT_FORMATTER_FUNCTION(name, pfx) \ BIT_FORMATTER_RET(name, pfx) \ - BIT_FORMATTER_PROTO(name, pfx, ); + BIT_FORMATTER_PROTO(name, ); #define DEF_BIT_FORMATTER_FUNCTION(name, pfx) \ BIT_FORMATTER_IMPL(name, pfx, ) ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: cap readsz at buffer size
commit 12e30ce560c2b79f2de9ab7f44626063c0e7e2ff Author: Oswald Buddenhagen Date: Mon Jul 29 12:05:43 2024 +0200 cap readsz at buffer size otherwise we may get negative comparison sizes, which the unsigned arithmetic we use cannot represent. this would prevent buffer content downshifting, resulting in prepare_read() erroring out. amends 859b7dd. REFMAIL: 87h740x2xe@wavexx.thregr.org REFMAIL: ec0f6f2a-0151-46ad-865a-a6f77ad8e...@app.fastmail.com REFMAIL: 87edk45p9o@b3l.xyz REFMAIL: cyawiddgrht7.2ch3r3d6z3...@ferdinandy.com src/socket.c | 5 - 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/socket.c b/src/socket.c index 52cd7c2..afd3f18 100644 --- a/src/socket.c +++ b/src/socket.c @@ -908,8 +908,11 @@ socket_fill( conn_t *sock ) // IIR filter for tracking average size of bulk reads. // We use this to optimize the free space at the end of the // buffer, hence the factor of 1.5. - if (n >= MIN_BULK_READ) + if (n >= MIN_BULK_READ) { sock->readsz = (sock->readsz * 3 + n * 3 / 2) / 4; + if (sock->readsz > sizeof(sock->buf)) + sock->readsz = sizeof(sock->buf); + } socket_filled( sock, (uint)n ); } ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: add tag files to .gitignore
commit 5f81162f5e93efa8a35bbad5aa0f5d279da3a9e7 Author: Husain Alshehhi AuthorDate: Sat Jan 14 01:06:23 2023 + Commit: Oswald Buddenhagen CommitDate: Wed Jul 31 21:23:58 2024 +0200 add tag files to .gitignore The auto-generated makefile targets CTAGS, GTAGS and TAGS generate files locally that should not be checked-in into the source code. This change adds these files to the .gitignore file. The list of files match those in distclean-tags target. .gitignore | 12 AUTHORS| 1 + 2 files changed, 13 insertions(+) diff --git a/.gitignore b/.gitignore index 74de561..6b9c837 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,15 @@ Makefile Makefile.in + +GPATH +GRTAGS +GSYMS +GTAGS +ID +TAGS +cscope.files +cscope.in.out +cscope.out +cscope.po.out +tags diff --git a/AUTHORS b/AUTHORS index 01af903..f13f596 100644 --- a/AUTHORS +++ b/AUTHORS @@ -82,6 +82,7 @@ Gergely Risko Sung Pae "guns" Helmut Grohne Hugo Haas +Husain Alshehhi Jaroslav Suchanek Jeremie Courreges-Anglas Klemens Nanni ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: eliminate commit_cmds driver callback
commit 43271d8fad03c2cefd387a8cd80d578c2aa6fd34 Author: Oswald Buddenhagen Date: Tue Jul 30 08:25:20 2024 +0200 eliminate commit_cmds driver callback no driver implements it, and this isn't likely to change any time soon. src/driver.h | 3 --- src/drv_imap.c | 9 - src/drv_maildir.c| 7 --- src/drv_proxy.c | 38 +++--- src/drv_proxy_gen.pl | 1 - src/sync.c | 1 - 6 files changed, 7 insertions(+), 52 deletions(-) diff --git a/src/driver.h b/src/driver.h index d3068bc..f7c5b95 100644 --- a/src/driver.h +++ b/src/driver.h @@ -295,9 +295,6 @@ struct driver { void (*cancel_cmds)( store_t *ctx, void (*cb)( void *aux ), void *aux ); - /* Commit any pending set_msg_flags() commands. */ - void (*commit_cmds)( store_t *ctx ); - /* Get approximate amount of memory occupied by the driver. */ uint (*get_memory_usage)( store_t *ctx ); diff --git a/src/drv_imap.c b/src/drv_imap.c index 681117e..5b67535 100644 --- a/src/drv_imap.c +++ b/src/drv_imap.c @@ -3653,14 +3653,6 @@ imap_cancel_cmds( store_t *gctx, } } -/*** imap_commit_cmds ***/ - -static void -imap_commit_cmds( store_t *gctx ) -{ - (void)gctx; -} - /*** imap_get_memory_usage ***/ static uint @@ -4039,7 +4031,6 @@ struct driver imap_driver = { imap_trash_msg, imap_close_box, imap_cancel_cmds, - imap_commit_cmds, imap_get_memory_usage, imap_get_fail_state, }; diff --git a/src/drv_maildir.c b/src/drv_maildir.c index cdffc32..847bc06 100644 --- a/src/drv_maildir.c +++ b/src/drv_maildir.c @@ -1853,12 +1853,6 @@ maildir_cancel_cmds( store_t *gctx ATTR_UNUSED, cb( aux ); } -static void -maildir_commit_cmds( store_t *gctx ) -{ - (void) gctx; -} - static uint maildir_get_memory_usage( store_t *gctx ATTR_UNUSED ) { @@ -1983,7 +1977,6 @@ struct driver maildir_driver = { maildir_trash_msg, maildir_close_box, maildir_cancel_cmds, - maildir_commit_cmds, maildir_get_memory_usage, maildir_get_fail_state, }; diff --git a/src/drv_proxy.c b/src/drv_proxy.c index 37dbc34..ffe2e06 100644 --- a/src/drv_proxy.c +++ b/src/drv_proxy.c @@ -21,7 +21,6 @@ typedef union proxy_store { driver_t *real_driver; store_t *real_store; gen_cmd_t *pending_cmds, **pending_cmds_append; - gen_cmd_t *check_cmds, **check_cmds_append; wakeup_t wakeup; uint fake_nextuid; char is_fake; // Was "created" by dry-run @@ -91,42 +90,25 @@ proxy_wakeup( void *aux ) } static void -proxy_invoke( gen_cmd_t *cmd, int checked, const char *name ) +proxy_invoke( gen_cmd_t *cmd, const char *name ) { proxy_store_t *ctx = cmd->ctx; if (ctx->force_async) { - debug( "%s[% 2d] Queue %s%s\n", ctx->label, cmd->tag, name, checked ? " (checked)" : "" ); + debug( "%s[% 2d] Queue %s\n", ctx->label, cmd->tag, name ); cmd->next = NULL; - if (checked) { - *ctx->check_cmds_append = cmd; - ctx->check_cmds_append = &cmd->next; - } else { - *ctx->pending_cmds_append = cmd; - ctx->pending_cmds_append = &cmd->next; - conf_wakeup( &ctx->wakeup, 0 ); - } + *ctx->pending_cmds_append = cmd; + ctx->pending_cmds_append = &cmd->next; + conf_wakeup( &ctx->wakeup, 0 ); } else { cmd->queued_cb( cmd ); proxy_cmd_done( cmd ); } } -static void -proxy_flush_checked_cmds( proxy_store_t *ctx ) -{ - if (ctx->check_cmds) { - *ctx->pending_cmds_append = ctx->check_cmds; - ctx->pending_cmds_append = ctx->check_cmds_append; - ctx->check_cmds_append = &ctx->check_cmds; - ctx->check_cmds = NULL; - conf_wakeup( &ctx->wakeup, 0 ); - } -} - static void proxy_cancel_queued_cmds( proxy_store_t *ctx ) { - if (ctx->pending_cmds || ctx->check_cmds) { + if (ctx->pending_cmds) { // This would involve directly invoking the result callbacks with // DRV_CANCEL, for which we'd need another set of dispatch functions. // The autotest doesn't need that, so save the effort. @@ -253,7 +235,7 @@ static @type@proxy_@name@( store_t *gctx@decl_args@, void (*cb)( @decl_cb_args@v cmd->callback = cb; cmd->callback_aux = aux; @assign_state@ - proxy_invoke( &cmd->gen, @checked@, "@name@" ); + proxy_invoke( &cmd->gen, "@name@" ); } //# END @@ -382,7 +364,6 @@ static @type@proxy_@name@( store_t *gctx@decl_args@, void (*cb)( @decl_c
[commit] master: update some email addresses
commit 7bca6967a7b22cc2afe72856f340097651afe70e Author: Oswald Buddenhagen Date: Sat Sep 3 22:46:41 2022 +0200 update some email addresses noa's and jeremy's new address are confirmed. michael e.'s address is kinda confirmed, except that it's silent. AUTHORS | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/AUTHORS b/AUTHORS index f13f596..024f512 100644 --- a/AUTHORS +++ b/AUTHORS @@ -13,7 +13,7 @@ Lead Developers Oswald Buddenhagen - Current maintainer -Michael Elkins +Michael Elkins - Original author Contributors @@ -22,10 +22,10 @@ Contributors (Some of these people also contributed bugfixes and optimizations.) (In chronological order.) -Jeremy Katz +Jeremy Katz - UseNamespace & UseSSL* options -Daniel Resare +Noa (ex. Daniel) Resare - Numerous SSL handling improvements Eivind Eklund ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: don't try to qsort() NULL array
commit ceb0fa9803b27057c7a8413cf50a51f428f5d792 Author: Oswald Buddenhagen Date: Thu Jul 4 09:09:17 2024 +0200 don't try to qsort() NULL array while this actually works due to the array size being zero, it's undefined behavior which makes gcc eliminate a subsequent null check in the calling function. src/main_sync.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main_sync.c b/src/main_sync.c index 226e324..fff944c 100644 --- a/src/main_sync.c +++ b/src/main_sync.c @@ -186,7 +186,8 @@ filter_boxes( string_list_t *boxes, const char *prefix, string_list_t *patterns boxarr[num] = NULL; } } - qsort( boxarr, num, sizeof(*boxarr), cmp_box_names ); + if (boxarr) + qsort( boxarr, num, sizeof(*boxarr), cmp_box_names ); return boxarr; } ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: generalize GPL exception
commit f467b57a957672a02cd7d923603a8a9da7f0f9fc Author: Oswald Buddenhagen Date: Sun Jun 26 12:59:44 2022 +0200 generalize GPL exception we have explicit approval from: - Anton Khirnov - Jeremy Katz - Jesse Weaver - Marc Hoersken - Michael J Gruber - Noa Resare (formerly Daniel) - Oliver Runge - Patrick Steinhardt - Theodore Ts'o notably missing approval from: - Michael Elkins further missing approval from: - Eivind Eklund - Georgy Kibardin - Jack Stone - Jan Synacek still, because - isync already contains an exception for OpenSSL, - every contributor implicitly agreed to that exception, and - that exception exists specifically because of the advertising clause in OpenSSL < v3's license, i'm assuming that the MIA contributors are actually fine with the proposed change. LICENSES/LicenseRef-isync-GPL-exception.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/LICENSES/LicenseRef-isync-GPL-exception.txt b/LICENSES/LicenseRef-isync-GPL-exception.txt index 894d89c..741e349 100644 --- a/LICENSES/LicenseRef-isync-GPL-exception.txt +++ b/LICENSES/LicenseRef-isync-GPL-exception.txt @@ -8,5 +8,5 @@ Usage-Guide: SPDX-License-Identifier: WITH LicenseRef-isync-GPL-exception License-Text: -As a special exception, mbsync may be linked with the OpenSSL library, -despite that library's more restrictive license. +As a special exception, mbsync may be linked with libraries with a more +restrictive license if the only incompatibility are advertising clauses. ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: revamp automatic enumeration of power-of-two enumerators
commit ee832951e2bc2030abe49b1436760a597bd55382 Author: Oswald Buddenhagen Date: Mon Jul 24 12:04:13 2023 +0200 revamp automatic enumeration of power-of-two enumerators i found a neat trick to do it with the C pre-processor after all. this makes the enum definitions themselves arguably somewhat less legible, but on the upside the build system becomes simpler, and IDEs can build/update their code models without having to (re-)build the project first. somewhat as a side effect, this gives bit enums proper names, so we don't need to refer to them by cryptic prefixes anymore. amends 6a78e2c5f. src/.gitignore | 1 - src/Makefile.am | 26 + src/bit_enum_gen.pl | 70 --- src/common.h| 131 ++-- src/config.c| 2 +- src/driver.h| 83 ++-- src/drv_imap.c | 2 +- src/drv_proxy.c | 2 +- src/sync.c | 37 ++--- src/sync.h | 57 ++- src/sync_p.h| 43 --- src/sync_state.c| 2 +- 12 files changed, 207 insertions(+), 249 deletions(-) diff --git a/src/.gitignore b/src/.gitignore index 3139876..dea9ee7 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -1,4 +1,3 @@ -/*_enum.h /drv_proxy.inc /mbsync /mdconvert diff --git a/src/Makefile.am b/src/Makefile.am index 69cf29d..42d14f4 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -20,28 +20,6 @@ drv_proxy.$(OBJEXT): drv_proxy.inc drv_proxy.inc: $(srcdir)/driver.h $(srcdir)/drv_proxy.c $(srcdir)/drv_proxy_gen.pl perl $(srcdir)/drv_proxy_gen.pl $(srcdir)/driver.h $(srcdir)/drv_proxy.c drv_proxy.inc -ENUM_GEN = $(srcdir)/bit_enum_gen.pl - -$(mbsync_OBJECTS): common_enum.h -common_enum.h: common.h $(ENUM_GEN) - perl $(ENUM_GEN) < $< > $@ - -$(mbsync_OBJECTS): driver_enum.h -driver_enum.h: driver.h $(ENUM_GEN) - perl $(ENUM_GEN) < $< > $@ - -$(mbsync_OBJECTS): sync_enum.h -sync_enum.h: sync.h $(ENUM_GEN) - perl $(ENUM_GEN) < $< > $@ - -sync.$(OBJEXT): sync_c_enum.h -sync_c_enum.h: sync.c $(ENUM_GEN) - perl $(ENUM_GEN) < $< > $@ - -sync.$(OBJEXT) sync_state.$(OBJEXT): sync_p_enum.h -sync_p_enum.h: sync_p.h $(ENUM_GEN) - perl $(ENUM_GEN) < $< > $@ - mdconvert_SOURCES = mdconvert.c mdconvert_LDADD = $(DB_LIBS) if with_mdconvert @@ -69,6 +47,6 @@ EXTRA_PROGRAMS = tst_timers exampledir = $(docdir)/examples example_DATA = mbsyncrc.sample -EXTRA_DIST = bit_enum_gen.pl drv_proxy_gen.pl run-tests.pl $(example_DATA) $(man_MANS) +EXTRA_DIST = drv_proxy_gen.pl run-tests.pl $(example_DATA) $(man_MANS) -CLEANFILES = *_enum.h drv_proxy.inc +CLEANFILES = drv_proxy.inc diff --git a/src/bit_enum_gen.pl b/src/bit_enum_gen.pl deleted file mode 100755 index 2b1ee21..000 --- a/src/bit_enum_gen.pl +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/perl -# -# SPDX-FileCopyrightText: 2022 Oswald Buddenhagen -# SPDX-License-Identifier: GPL-2.0-or-later -# -# mbsync - mailbox synchronizer -# - -use strict; -use warnings; - -my $in_enum = 0; -my $conts; -while (<>) { - s,\s*(?://.*)?$,,; - if ($in_enum) { - if (/^\)$/) { - $conts =~ s/\s//g; - $conts =~ s/,$//; - my @vals = split(/,/, $conts); - my ($pfx, $pfx1); - for my $e (@vals) { - if (!defined($pfx)) { - $pfx1 = $pfx = ($e =~ /^([A-Z]+_)/) ? $1 : ""; - } elsif (length($pfx)) { - $pfx = "" if ((($e =~ /^([A-Z]+_)/) ? $1 : "") ne $pfx); - } - } - my $bit = 1; - my $bitn = 0; - my (@names, @nameos); - my $nameo = 0; - for my $e (@vals) { - my $bits = ($e =~ s/\((\d+)\)$//) ? $1 : 1; - my $n = substr($e, length($pfx)); - if ($bits != 1) { - die("Unsupported field size $bits\n") if ($bits != 2); - print "#define $e(b) ($bit << (b))\n"; - push @names, "F-".$n, "N-".$n; - my $nl = length($n) + 3; - push @nameos, $nameo, $nameo + $nl; - $nameo += $nl * 2; - } else { - print "#define $e $bit\n"; - push @names, $n; - push @nameos, $nameo; - $nameo += length($n) + 1; - } -
[commit] branch 'wip/gpl-exception' deleted
The branch 'wip/gpl-exception', previously at 28a4636, has been deleted. ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: generalize AUTHORS section of man page
commit 4279aea6a0bb27c6998dadfa77e0c3435a09407e Author: Oswald Buddenhagen Date: Fri Aug 2 10:03:11 2024 +0200 generalize AUTHORS section of man page src/mbsync.1.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mbsync.1.in b/src/mbsync.1.in index 89c7a4a..759dbf1 100644 --- a/src/mbsync.1.in +++ b/src/mbsync.1.in @@ -884,4 +884,4 @@ http://www.iana.org/assignments/sasl-mechanisms/sasl-mechanisms.xhtml .SH AUTHORS Originally written by Michael R. Elkins, rewritten and currently maintained by Oswald Buddenhagen, -contributions by Theodore Y. Ts'o. +contributions by many others; see the AUTHORS file for details. ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: automate setting package version
commit 8421b3cb223eced0e07ae65eaf21486d22beb573 Author: Oswald Buddenhagen Date: Fri Aug 2 09:56:02 2024 +0200 automate setting package version this avoids the need for bumping the version, which is particularly helpful if one doesn't know yet whether the next release will be a patch, minor, or major. we cache the version extracted from git, which also provides a fallback for the case of somebody rebuilding configure from a tar-ball. note that it's impossible to determine the version at configure time, so after git-tagging you need to remember to run version.sh (or autoconf) prior to rolling a tar-ball. .gitignore | 1 + Makefile.am | 2 +- configure.ac | 3 ++- version.sh | 36 4 files changed, 40 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 6b9c837..66a12ec 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ /.autoconf_trace /ChangeLog /INSTALL +/VERSION /autom4te.cache/ /aclocal.m4 /autodefs.h diff --git a/Makefile.am b/Makefile.am index 901b4a5..79067cb 100644 --- a/Makefile.am +++ b/Makefile.am @@ -4,7 +4,7 @@ SUBDIRS = src bin_SCRIPTS = mbsync-get-cert -EXTRA_DIST = LICENSES debian isync.spec $(bin_SCRIPTS) +EXTRA_DIST = LICENSES VERSION debian isync.spec $(bin_SCRIPTS) LOG_PL = \ use POSIX qw(strftime); \ diff --git a/configure.ac b/configure.ac index ee74d96..41670ca 100644 --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,8 @@ # SPDX-FileCopyrightText: 2002-2022 Oswald Buddenhagen dnl SPDX-License-Identifier: GPL-2.0-or-later -AC_INIT([isync], [1.5.0]) +m4_syscmd([./version.sh]) +AC_INIT([isync], m4_include([VERSION])) AC_CONFIG_HEADERS([autodefs.h]) AC_CANONICAL_TARGET diff --git a/version.sh b/version.sh new file mode 100755 index 000..fc1ed7d --- /dev/null +++ b/version.sh @@ -0,0 +1,36 @@ +#!/bin/sh +# SPDX-FileCopyrightText: (C) 2024 Oswald Buddenhagen +# SPDX-License-Identifier: GPL-2.0-or-later + +cd $(dirname $0) + +test -e .git || exit + +mb=$(git merge-base HEAD "@{upstream}" 2> /dev/null) +if test -z "$mb"; then + # we presume that a failure to find a merge base means no upstream. + # and no upstream may mean detached head in the middle of a rebase + br=$(git branch | sed -n -e 's/^\* (no branch, rebasing \([^\)]*\))$/\1/p') + if test -n "$br"; then + mb=$(git merge-base HEAD "$br@{upstream}" 2> /dev/null) + fi +fi +if test -z "$mb"; then + # still no upstream, so just describe HEAD as-is. + gver=$(git describe --tags HEAD) +else + # find out whether we have local work, and if so, collapse it into + # a single suffix. otherwise, we'd cause pointless rebuilds during + # development. + gver=$(git describe --tags $mb) + lcl=$(git rev-list -n 1 $mb..HEAD) + if test -n "$lcl"; then + gver="$gver-plus" + fi +fi +gver=${gver#v} +pgver=$(cat VERSION 2> /dev/null) +if [ "x$gver" != "x$pgver" ]; then + echo "$gver" > VERSION +fi + ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: substitute version and date in man pages
commit 6fbbcbb2c76a3b56e07e2ed4240506cb94973d45 Author: Oswald Buddenhagen Date: Fri Aug 2 10:14:26 2024 +0200 substitute version and date in man pages this shortens the release checklist and reduces commit churn. for the date we use configure's timestamp. this should reflect the package's creation time and be consistent with the version. configure.ac| 5 - src/.gitignore | 2 ++ src/Makefile.am | 5 - src/{mbsync.1 => mbsync.1.in} | 2 +- src/{mdconvert.1 => mdconvert.1.in} | 2 +- 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/configure.ac b/configure.ac index 41670ca..2555ce5 100644 --- a/configure.ac +++ b/configure.ac @@ -251,7 +251,10 @@ if test "x$have_macos_keychain" != xno; then AC_SUBST(KEYCHAIN_LIBS, ["-Wl,-framework,Security,-framework,CoreFoundation"]) fi -AC_CONFIG_FILES([Makefile src/Makefile isync.spec]) +RELEASE_DATE=`date -r $0 +%F` +AC_SUBST(RELEASE_DATE) + +AC_CONFIG_FILES([Makefile src/Makefile src/mbsync.1 src/mdconvert.1 isync.spec]) AC_OUTPUT AC_MSG_RESULT() diff --git a/src/.gitignore b/src/.gitignore index dea9ee7..a80a371 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -1,6 +1,8 @@ /drv_proxy.inc /mbsync +/mbsync.1 /mdconvert +/mdconvert.1 /tst_imap_msgs /tst_imap_utf7 /tst_msg_cvt diff --git a/src/Makefile.am b/src/Makefile.am index 42d14f4..d6e0407 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -27,7 +27,10 @@ mdconvert_prog = mdconvert mdconvert_man = mdconvert.1 endif +in_man = mbsync.1.in mdconvert.1.in + bin_PROGRAMS = mbsync $(mdconvert_prog) +# don't forget to update AC_CONFIG_FILES in configure.ac! man_MANS = mbsync.1 $(mdconvert_man) tst_imap_msgs_SOURCES = tst_imap_msgs.c imap_msgs.c util.c @@ -47,6 +50,6 @@ EXTRA_PROGRAMS = tst_timers exampledir = $(docdir)/examples example_DATA = mbsyncrc.sample -EXTRA_DIST = drv_proxy_gen.pl run-tests.pl $(example_DATA) $(man_MANS) +EXTRA_DIST = drv_proxy_gen.pl run-tests.pl $(example_DATA) $(in_man) CLEANFILES = drv_proxy.inc diff --git a/src/mbsync.1 b/src/mbsync.1.in similarity index 99% rename from src/mbsync.1 rename to src/mbsync.1.in index 939c8c5..89c7a4a 100644 --- a/src/mbsync.1 +++ b/src/mbsync.1.in @@ -4,7 +4,7 @@ .\" .\" mbsync - mailbox synchronizer . -.TH mbsync 1 "2022 Jun 16" +.TH mbsync 1 @RELEASE_DATE@ "@PACKAGE_STRING@" "User Commands" . .SH NAME mbsync - synchronize IMAP4 and Maildir mailboxes diff --git a/src/mdconvert.1 b/src/mdconvert.1.in similarity index 93% rename from src/mdconvert.1 rename to src/mdconvert.1.in index b616841..e8800d9 100644 --- a/src/mdconvert.1 +++ b/src/mdconvert.1.in @@ -3,7 +3,7 @@ .\" .\" mdconvert - Maildir mailbox UID storage scheme converter . -.TH mdconvert 1 "2004 Mar 27" +.TH mdconvert 1 @RELEASE_DATE@ "@PACKAGE_STRING@" "User Commands" . .SH NAME mdconvert - Maildir mailbox UID storage scheme converter ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] tag 'v1.5.0' created
The tag 'v1.5.0' has been created at 4279aea. ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: fix initial build from git
commit 4c2031d616f92bd7437fdb34cf4eafa0840c84bd Author: Oswald Buddenhagen Date: Tue Aug 6 09:33:31 2024 +0200 fix initial build from git we need to ignore the absence of VERSION, as aclocal executes the include() while ignoring the prior m4_syscmd(). configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 2555ce5..7f1fc6e 100644 --- a/configure.ac +++ b/configure.ac @@ -3,7 +3,7 @@ dnl SPDX-License-Identifier: GPL-2.0-or-later m4_syscmd([./version.sh]) -AC_INIT([isync], m4_include([VERSION])) +AC_INIT([isync], m4_sinclude([VERSION])) AC_CONFIG_HEADERS([autodefs.h]) AC_CANONICAL_TARGET ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: fix IMAP INBOX case normalization
commit d54c22d20e5d3173c5398c2e9fc5e87837a26963 Author: Oswald Buddenhagen Date: Tue Aug 6 15:16:27 2024 +0200 fix IMAP INBOX case normalization while is_INBOX() was adjusted to work with not null-terminated strings, is_inbox() wasn't. amends 3aead33. src/drv_imap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/drv_imap.c b/src/drv_imap.c index cbf5804..b4c05fd 100644 --- a/src/drv_imap.c +++ b/src/drv_imap.c @@ -1530,7 +1530,7 @@ is_inbox( imap_store_t *ctx, const char *arg, int argl ) { if (!starts_with_upper( arg, argl, "INBOX", 5 )) return 0; - if (arg[5] && arg[5] != ctx->delimiter[0]) + if (argl > 5 && arg[5] != ctx->delimiter[0]) return 0; return 1; } @@ -3602,7 +3602,7 @@ imap_list_store( store_t *gctx, int flags, // path | P [i] | i [P] | P // int pfx_is_empty = !*ctx->prefix; - int pfx_is_inbox = !pfx_is_empty && is_inbox( ctx, ctx->prefix, -1 ); + int pfx_is_inbox = !pfx_is_empty && is_inbox( ctx, ctx->prefix, strlen( ctx->prefix ) ); if (((flags & (LIST_PATH | LIST_PATH_MAYBE)) || pfx_is_empty) && !pfx_is_inbox && !(ctx->listed & LIST_PATH)) { ctx->listed |= LIST_PATH; if (pfx_is_empty) ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: add missing trailing newlines in error() calls
commit 76e5f223ee975ede474333247d43888d18d77ece Author: Oswald Buddenhagen Date: Tue Aug 6 00:43:42 2024 +0200 add missing trailing newlines in error() calls src/drv_imap.c| 2 +- src/drv_maildir.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/drv_imap.c b/src/drv_imap.c index b4c05fd..1280e3c 100644 --- a/src/drv_imap.c +++ b/src/drv_imap.c @@ -1682,7 +1682,7 @@ prepare_box( char **buf, const imap_store_t *ctx ) if (!memcmp( name, "INBOX", 5 )) { pfx = ""; } else if (!*pfx) { - error( "IMAP error: cannot use unqualified '%s'. Did you mean INBOX?", name ); + error( "IMAP error: cannot use unqualified '%s'. Did you mean INBOX?\n", name ); return -1; } } diff --git a/src/drv_maildir.c b/src/drv_maildir.c index 847bc06..d15cf46 100644 --- a/src/drv_maildir.c +++ b/src/drv_maildir.c @@ -1533,7 +1533,7 @@ maildir_fetch_msg( store_t *gctx, message_t *gmsg, msg_data_t *data, int minimal } fstat( fd, &st ); if (st.st_size > INT_MAX) { - error( "Maildir error: %s is too big", buf ); + error( "Maildir error: %s is too big\n", buf ); goto mbad; } data->len = st.st_size; ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: fix implicit listing of Maildir INBOX under Path
commit 8c781d4fb55f1dae47dab0388e7e3d40170b7d21 Author: Oswald Buddenhagen Date: Wed Aug 21 11:13:40 2024 +0200 fix implicit listing of Maildir INBOX under Path commit acd6b4b0 ("simplify/fix recursive maildir listing") argued that listing INBOX when it is encountered while listing Path would be unnecessary, as the caller would list it separately anyway if requested. however, it is actually documented that Patterns will implicitly match INBOX nested into Path. so revert that commit. REFMAIL: 20240818002409.4c918eb4@inari src/drv_maildir.c | 6 ++ 1 file changed, 6 insertions(+) diff --git a/src/drv_maildir.c b/src/drv_maildir.c index d15cf46..fe0e951 100644 --- a/src/drv_maildir.c +++ b/src/drv_maildir.c @@ -372,6 +372,8 @@ maildir_list_maildirpp( maildir_store_t *ctx, int flags, const char *inbox ) return 0; } +static int maildir_list_inbox( maildir_store_t *ctx ); + static int maildir_list_recurse( maildir_store_t *ctx, int isBox, const char *inbox, uint inboxLen, @@ -422,6 +424,10 @@ maildir_list_recurse( maildir_store_t *ctx, int isBox, pl += pathLen; if (inbox && equals( path, pl, inbox, inboxLen )) { // Inbox nested into Path. + if (maildir_list_inbox( ctx ) < 0) { + closedir( dir ); + return -1; + } } else { if (style == SUB_LEGACY) { if (*ent == '.') { ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: improve reporting of failure to open previously present mailbox
commit 17c9cc11407ace9e84cf1135aad3d4bf8eb2b6d7 Author: Oswald Buddenhagen Date: Wed Aug 21 10:38:15 2024 +0200 improve reporting of failure to open previously present mailbox tell explicitly that the box cannot be opened _any more_, so it's clear that Delete, rather than Create, would apply. fwiw, it would be preferable to actually differentiate between absent mailboxes and ones that fail to open for other reasons. but unfortunately, IMAP doesn't report the difference (gmail has a non-standard [NONEXISTENT] response code, though). src/sync.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sync.c b/src/sync.c index fa74d88..405d98f 100644 --- a/src/sync.c +++ b/src/sync.c @@ -440,12 +440,12 @@ box_confirmed2( sync_vars_t *svars, int t ) } if (svars->existing) { if (!(svars->chan->ops[t^1] & OP_REMOVE)) { - error( "Error: channel %s: %s box %s cannot be opened.\n", + error( "Error: channel %s: %s box %s cannot be opened anymore.\n", svars->chan->name, str_fn[t], svars->orig_name[t] ); goto bail; } if (svars->drv[t^1]->confirm_box_empty( svars->ctx[t^1] ) != DRV_OK) { - warn( "Warning: channel %s: %s box %s cannot be opened and %s box %s is not empty.\n", + warn( "Warning: channel %s: %s box %s cannot be opened anymore, and %s box %s is not empty.\n", svars->chan->name, str_fn[t], svars->orig_name[t], str_fn[t^1], svars->orig_name[t^1] ); goto done; } ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: fix typos
commit dd27850e5449d35686224a4db055e33d368291e6 Author: Oswald Buddenhagen Date: Mon Aug 19 12:28:15 2024 +0200 fix typos most found using https://github.com/crate-ci/typos . debian/changelog| 6 +++--- src/driver.h| 2 +- src/main_sync.c | 2 +- src/mbsync.1.in | 4 ++-- src/mbsyncrc.sample | 4 ++-- src/run-tests.pl| 4 ++-- src/sync.c | 2 +- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/debian/changelog b/debian/changelog index 9a04bbe..3f22e1a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -181,7 +181,7 @@ isync (1.0.3-1) experimental; urgency=low - It also supports unflagging messages. (Closes: #111286) - IMAP commands are sent asynchronously. (Closes: #226222) * Kill the old debconf question about upgrades from pre-0.8 versions. - * Use the (now obsolete) swedish and portugese translations anyway. + * Use the (now obsolete) swedish and portuguese translations anyway. (Closes: #337771, #378891) * New debconf note that warns about upgrades from pre-1.0 versions. * Add a build dependency on po-debconf. @@ -273,7 +273,7 @@ isync (0.9.1-1) unstable; urgency=low * Remove sample.isyncrc from debian/docs: no need to have it both as a doc and as an example. * Move package from section non-US/main (?) to mail. (Closes: #154216) - * Update versionned build-dependency on debhelper to >= 4.1.16. + * Update versioned build-dependency on debhelper to >= 4.1.16. * Bump Standards-Version to 3.6.1. (No change required.) -- Nicolas Boullis Tue, 14 Oct 2003 22:02:20 +0200 @@ -311,7 +311,7 @@ isync (0.8-1) unstable; urgency=low duplicate messages on your IMAP server. * Has better support for uploading locally added messages. Closes: #120272 - * Added a debconf queston with some info about this that lets you abort the + * Added a debconf question with some info about this that lets you abort the upgrade. * Added NEWS.Debian with same info. * New maintainer. diff --git a/src/driver.h b/src/driver.h index fde8908..ebc96b6 100644 --- a/src/driver.h +++ b/src/driver.h @@ -271,7 +271,7 @@ struct driver { /* Add/remove the named flags to/from the given message. The message may be either * a pre-fetched one (in which case the in-memory representation is updated), -* or it may be identifed by UID only. +* or it may be identified by UID only. * The operation may be delayed until commit_cmds() is called. */ void (*set_msg_flags)( store_t *ctx, message_t *msg, uint uid, int add, int del, void (*cb)( int sts, void *aux ), void *aux ); diff --git a/src/main_sync.c b/src/main_sync.c index fff944c..afd136e 100644 --- a/src/main_sync.c +++ b/src/main_sync.c @@ -532,7 +532,7 @@ store_connected( int sts, void *aux ) int bufl = snprintf( buf, sizeof(buf), "%s%s", nz( mvars->chan->boxes[t], "" ), pat ); int flags = 0; // Partial matches like "INB*" or even "*" are not considered, - // except implicity when the INBOX lives under Path. + // except implicitly when the INBOX lives under Path. if (starts_with( buf, bufl, "INBOX", 5 )) { char c = buf[5]; if (!c) { diff --git a/src/mbsync.1.in b/src/mbsync.1.in index 759dbf1..f950b3b 100644 --- a/src/mbsync.1.in +++ b/src/mbsync.1.in @@ -111,7 +111,7 @@ Enable debugging categories: .br \fBs\fR, \fBsync\fR - print synchronization debug info .in -4 -All categories except \fBcrash\fR implictly enable \fIverbose\fR mode. +All categories except \fBcrash\fR implicitly enable \fIverbose\fR mode. Without category specification, all categories except net-all are enabled. .TP \fB-q\fR, \fB--quiet\fR @@ -368,7 +368,7 @@ See \fBUserCmd\fR above for details. Whether to use the macOS Keychain to obtain the password. (Default: \fBno\fR) .IP -The neccessary keychain item can be created this way: +The necessary keychain item can be created this way: .RS .IP .nh diff --git a/src/mbsyncrc.sample b/src/mbsyncrc.sample index e7c6196..7f85527 100644 --- a/src/mbsyncrc.sample +++ b/src/mbsyncrc.sample @@ -73,12 +73,12 @@ Inbox ~/Mail/w0rk_InBoX Channel personal-joined Far :personal: Near :local-personal: -Paterns * +Patterns * Channel work-joined Far :work: Near :local-work: -Paterns * +Patterns * Group joined personal-joined work-joined diff --git a/src/run-tests.pl b/src/run-tests.pl index 459142a..eeb0171 100755 --- a/src/run-tests.pl +++ b/src/run-tests.pl @@ -36,7 +36,7 @@ if (!-d "tmp") { my $tdir = tempdir(); symlink $tdir, "tmp" or die "Cannot symlink temp directory: $!\n"; } -chdir "tmp" or die "Cannot enter temp dir
[commit] branch 'master' rewound
The branch 'master', previously at f7c5f1d, has been rewound by 2 revision(s) to 8c781d4. ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: remove stray closing brace from man page
commit f7c5f1dbf428deb9686d5d86fd8987af92ec3206 Author: Ludovico Gerardi AuthorDate: Sun Sep 29 14:46:39 2024 +0200 Commit: Oswald Buddenhagen CommitDate: Sun Sep 29 14:46:39 2024 +0200 remove stray closing brace from man page amends 5d5e07eb. src/mbsync.1.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mbsync.1.in b/src/mbsync.1.in index f950b3b..fba3669 100644 --- a/src/mbsync.1.in +++ b/src/mbsync.1.in @@ -12,7 +12,7 @@ mbsync - synchronize IMAP4 and Maildir mailboxes .SH SYNOPSIS \fBmbsync\fR [\fIoptions\fR ...] {{\fIchannel\fR[\fB:\fIbox\fR[{\fB,\fR|\fB\\n\fR}...]]|\fIgroup\fR} ...|\fB-a\fR} .br -\fBmbsync\fR --list-stores [\fIoptions\fR ...] [\fIstore\fR} ...] +\fBmbsync\fR --list-stores [\fIoptions\fR ...] [\fIstore\fR ...] . .SH DESCRIPTION \fBmbsync\fR is a command line application which synchronizes mailboxes; ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: mbsync-get-cert: add support for STARTTLS
commit 33bb58b3b3c27dbc0d09c4ce8008ca9c6ea6ee99 Author: Behnam Lal AuthorDate: Sun Sep 29 14:35:11 2024 +0200 Commit: Oswald Buddenhagen CommitDate: Sun Sep 29 14:36:30 2024 +0200 mbsync-get-cert: add support for STARTTLS nowadays, many servers offer STARTTLS on the default IMAP port 143 instead of (or in addition to) the traditional IMAP over SSL/TLS (IMAPS) on port 993. this patch has been fixed up somewhat by the maintainer. mbsync-get-cert | 30 +++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/mbsync-get-cert b/mbsync-get-cert index 19e1485..d8f194a 100755 --- a/mbsync-get-cert +++ b/mbsync-get-cert @@ -9,9 +9,25 @@ # from a trusted source. # -if [ $# != 1 ]; then - echo "Usage: $0 " >&2 +usage() { + echo "Usage: $0 [-s] " >&2 + echo " -sUse IMAP+STARTTLS (port 143) instead of IMAPS (port 993)" >&2 exit 1 +} + +STARTTLS=false + +while getopts "s" opt; do + case $opt in + s) STARTTLS=true ;; + *) usage ;; + esac +done + +shift `expr $OPTIND - 1` + +if [ $# -ne 1 ]; then + usage fi HOST=$1 @@ -33,7 +49,15 @@ TMPFILE=$TMPDIR/get-cert ERRFILE=$TMPDIR/get-cert-err CERTFILE=$TMPDIR/cert -echo QUIT | openssl s_client -connect $HOST:993 -showcerts \ +if $STARTTLS; then + FLAGS="-starttls imap" + PORT=143 +else + FLAGS= + PORT=993 +fi + +echo QUIT | openssl s_client $FLAGS -connect $HOST:$PORT -showcerts \ > $TMPFILE 2> $ERRFILE sed -e '1,/^-BEGIN CERTIFICATE-/d' \ -e '/^-END CERTIFICATE-/,$d' < $TMPFILE > $CERTFILE ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: remove stray closing brace from man page
commit 3c4b5f1c83a568f18c14c93aab95c9a853edfd15 Author: Ludovico Gerardi AuthorDate: Sun Sep 29 14:46:39 2024 +0200 Commit: Oswald Buddenhagen CommitDate: Sun Sep 29 14:48:01 2024 +0200 remove stray closing brace from man page amends 5d5e07eb. src/mbsync.1.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mbsync.1.in b/src/mbsync.1.in index f950b3b..fba3669 100644 --- a/src/mbsync.1.in +++ b/src/mbsync.1.in @@ -12,7 +12,7 @@ mbsync - synchronize IMAP4 and Maildir mailboxes .SH SYNOPSIS \fBmbsync\fR [\fIoptions\fR ...] {{\fIchannel\fR[\fB:\fIbox\fR[{\fB,\fR|\fB\\n\fR}...]]|\fIgroup\fR} ...|\fB-a\fR} .br -\fBmbsync\fR --list-stores [\fIoptions\fR ...] [\fIstore\fR} ...] +\fBmbsync\fR --list-stores [\fIoptions\fR ...] [\fIstore\fR ...] . .SH DESCRIPTION \fBmbsync\fR is a command line application which synchronizes mailboxes; ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] branch 'wip/socket-debug' reset
The branch 'wip/socket-debug', previously at 6eb5cd7, has been rewound by 3 revision(s) and subsequently fast-forwarded by 537 revision(s) to d7dc906. ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: accept zero-sized messages from IMAP
commit 15c7e02e4a5fe127bd55bce2b9aa63a5da8eb228 Author: Oswald Buddenhagen Date: Sun Nov 24 13:11:32 2024 +0100 accept zero-sized messages from IMAP while such a thing is rather pointless, completely empty messages are not forbidden. consequently, we should be able to deal with them, and above all not crash. src/drv_imap.c | 5 - src/socket.c | 1 - src/util.c | 5 + 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/drv_imap.c b/src/drv_imap.c index 1280e3c..b0be1fd 100644 --- a/src/drv_imap.c +++ b/src/drv_imap.c @@ -780,6 +780,8 @@ parse_imap_list( imap_store_t *ctx, char **sp, parse_list_state_t *sts ) if (sts->callback->atom( ctx, NULL, bytes, AtomChunkedLiteral ) != LIST_OK) goto bail; sts->in_literal = ChunkedLiteral; + if (!bytes) + goto nobytes; sts->big_literal = 1; get_chunked: n = 1; @@ -806,7 +808,7 @@ parse_imap_list( imap_store_t *ctx, char **sp, parse_list_state_t *sts ) } else if (DFlags & DEBUG_NET_ALL) { printf( "%s=\n", ctx->label ); fwrite( p, n, 1, stdout ); - if (p[n - 1] != '\n') + if (n && p[n - 1] != '\n') fputs( "\n(no-nl) ", stdout ); printf( "%s=\n", ctx->label ); } else { @@ -819,6 +821,7 @@ parse_imap_list( imap_store_t *ctx, char **sp, parse_list_state_t *sts ) bytes -= n; if (bytes > 0) goto postpone; + nobytes: if (sts->in_literal == ChunkedLiteral && sts->callback->atom( ctx, NULL, 0, AtomLiteral ) != LIST_OK) goto bail; getline: diff --git a/src/socket.c b/src/socket.c index afd3f18..1ef0e95 100644 --- a/src/socket.c +++ b/src/socket.c @@ -952,7 +952,6 @@ socket_expect_bytes( conn_t *conn, uint len ) char * socket_read( conn_t *conn, uint min_len, uint max_len, uint *out_len ) { - assert( min_len > 0 ); assert( min_len <= sizeof(conn->buf) ); assert( min_len <= max_len ); diff --git a/src/util.c b/src/util.c index e697cfb..121ab0a 100644 --- a/src/util.c +++ b/src/util.c @@ -637,6 +637,11 @@ nfmalloc( size_t sz ) { void *ret; +#ifndef __GLIBC__ + // The C standard allows NULL returns for zero-sized allocations. + if (!sz) + sz = 1; +#endif if (!(ret = malloc( sz ))) oom(); return ret; ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: make summary more concise
commit a1be7e9a369c1d038428a9d0b56ad0eb5d407441 Author: Oswald Buddenhagen Date: Tue Nov 19 13:05:00 2024 +0100 make summary more concise the verbose summary was actually hard to read due to the numbers getting lost between the words. i considered highlighting the numbers using ansi escapes, but the irregular structure would be still hard to parse, and the escapes would be unsuitable for log files. also considered was clustering the numbers at the beginnings of the lines, but that would result in a messy sentence structure. a proper tabular format would introduce a lot more spacing, and would be a lot harder to implement for little tangible benefit. i tried just using the progress counter format, but with plain numbers instead of the "x/y", but it looked kinda stupid. so instead use a slightly expanded, semi-tabular version of that, as suggested by Akshay Hegde on the list. this format bears a risk of exceeding 80 columns, and in log files the internal spacing looks kinda out of place, but these should be minor issues in practice. amends a1a3313e. REF: src/main_sync.c | 32 src/mbsync.1.in | 2 +- 2 files changed, 5 insertions(+), 29 deletions(-) diff --git a/src/main_sync.c b/src/main_sync.c index afd136e..2ea4a92 100644 --- a/src/main_sync.c +++ b/src/main_sync.c @@ -9,7 +9,6 @@ #define nz(a, b) ((a) ? (a) : (b)) -static int ops_any[2], trash_any[2], expunge_any[2]; static int chans_total, chans_done; static int boxes_total, boxes_done; @@ -84,25 +83,10 @@ summary( void ) if (!boxes_done) return; // Shut up if we errored out early. - printf( "Processed %d box(es) in %d channel(s)", boxes_done, chans_done ); - for (int t = 2; --t >= 0; ) { - if (ops_any[t]) - printf( (DFlags & DRYRUN) ? - ",\nwould %s %d new message(s) and %d flag update(s)" : - ",\n%sed %d new message(s) and %d flag update(s)", - str_hl[t], new_done[t], flags_done[t] ); - if (trash_any[t]) - printf( (DFlags & DRYRUN) ? - ",\nwould move %d %s message(s) to trash" : - ",\nmoved %d %s message(s) to trash", - trash_done[t], str_fn[t] ); - if (expunge_any[t]) - printf( (DFlags & DRYRUN) ? - ",\nwould expunge %d message(s) from %s" : - ",\nexpunged %d message(s) from %s", - expunge_done[t], str_fn[t] ); - } - puts( "." ); + printf( "Channels: %dBoxes: %dFar: +%d *%d #%d -%dNear: +%d *%d #%d -%d\n", + chans_done, boxes_done, + new_done[F], flags_done[F], trash_done[F], expunge_done[F], + new_done[N], flags_done[N], trash_done[N], expunge_done[N] ); } static int @@ -244,14 +228,6 @@ add_channel( chan_ent_t ***chanapp, channel_conf_t *chan, int ops[] ) free( ce ); return NULL; } - if (chan->ops[t] & OP_MASK_TYPE) - ops_any[t] = 1; - if (chan->ops[t] & (OP_EXPUNGE | OP_EXPUNGE_SOLO)) { - expunge_any[t] = 1; - if (chan->stores[t]->trash || - (chan->stores[t^1]->trash && chan->stores[t^1]->trash_remote_new)) - trash_any[t] = 1; - } } **chanapp = ce; diff --git a/src/mbsync.1.in b/src/mbsync.1.in index fba3669..032918b 100644 --- a/src/mbsync.1.in +++ b/src/mbsync.1.in @@ -802,7 +802,7 @@ No attempt is made to calculate the totals in advance, so they grow over time as more information is gathered. .P Irrespective of output redirection, \fBmbsync\fR will print a summary -of the above in plain language upon completion, except in quiet mode. +of the above upon completion, except in quiet mode. . .SH RECOMMENDATIONS Make sure your IMAP server does not auto-expunge deleted messages - it is ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: fix omissions in making expiration target side configurable
commit 5f953c5162cef64c26b78edf7feb37499367c371 Author: Oswald Buddenhagen Date: Mon Nov 18 15:13:14 2024 +0100 fix omissions in making expiration target side configurable amends 8566283c. src/sync.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sync.c b/src/sync.c index 38dbf06..1937d65 100644 --- a/src/sync.c +++ b/src/sync.c @@ -1013,7 +1013,7 @@ box_loaded( int sts, message_t *msgs, int total_msgs, int recent_msgs, void *aux sflags = sanitize_flags( sflags, svars, t ); if ((t != xt) && (srec->status & (S_EXPIRE | S_EXPIRED))) { /* Don't propagate deletion resulting from expiration. */ - debug( " near side expiring\n" ); + debug( " %s side expiring\n", str_fn[xt] ); sflags &= ~F_DELETED; } if (srec->status & S_DUMMY(t^1)) { @@ -1204,7 +1204,7 @@ box_loaded( int sts, message_t *msgs, int total_msgs, int recent_msgs, void *aux if (!srec->uid[xt^1]) continue; if (!(srec->status & S_PENDING)) { - // We ignore unpaired far-side messages, as there is obviously nothing + // We ignore unpaired keep-side messages, as there is obviously nothing // to expire in the first place. if (!srec->msg[xt]) continue; ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: do not let both-sided uidvalidity change deter us
commit bf34d9fd29b7e2bd82ddb6b892ea0e671fc19926 Author: Oswald Buddenhagen Date: Sat Nov 23 12:12:14 2024 +0100 do not let both-sided uidvalidity change deter us the algorithm is symmetrical, comparing the msgids that belong to the paired uids. so it doesn't matter for recovering one side if the other side's uidvalidity also changed. it does however impact our ability to say on which side the change was genuine. the pointless limitation was presumably a vestige from an earlier iteration. amends 77acc26 and 594e60b. src/sync.c | 31 +++ 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/src/sync.c b/src/sync.c index 405d98f..38dbf06 100644 --- a/src/sync.c +++ b/src/sync.c @@ -511,7 +511,7 @@ box_opened2( sync_vars_t *svars, int t ) channel_conf_t *chan; sync_rec_t *srec; uint_array_alloc_t mexcs; - uint opts[2], fails, minwuid; + uint opts[2], minwuid; svars->state[t] |= ST_SELECTED; if (!(svars->state[t^1] & ST_SELECTED)) @@ -520,23 +520,13 @@ box_opened2( sync_vars_t *svars, int t ) ctx[1] = svars->ctx[1]; chan = svars->chan; - fails = 0; - for (t = 0; t < 2; t++) - if (svars->uidval[t] != UIDVAL_BAD && svars->uidval[t] != svars->newuidval[t]) - fails++; - // If only one side changed UIDVALIDITY, we will try to re-approve it further down. - if (fails == 2) { - error( "Error: channel %s: UIDVALIDITY of both far side %s and near side %s changed.\n", - svars->chan->name, svars->orig_name[F], svars->orig_name[N]); + if (!lock_state( svars )) { bail: svars->ret = SYNC_FAIL; sync_bail( svars ); return; } - if (!lock_state( svars )) - goto bail; - int any_dummies[2] = { 0, 0 }; int any_purges[2] = { 0, 0 }; int any_upgrades[2] = { 0, 0 }; @@ -574,9 +564,11 @@ box_opened2( sync_vars_t *svars, int t ) } opts[F] = opts[N] = 0; - if (fails) - opts[F] = opts[N] = OPEN_PAIRED | OPEN_PAIRED_IDS; for (t = 0; t < 2; t++) { + if (svars->uidval[t] != UIDVAL_BAD && svars->uidval[t] != svars->newuidval[t]) { + opts[F] |= OPEN_PAIRED | OPEN_PAIRED_IDS; + opts[N] |= OPEN_PAIRED | OPEN_PAIRED_IDS; + } if (any_purges[t]) { debug( "resuming %d %s purge(s)\n", any_purges[t], str_fn[t] ); opts[t] |= OPEN_SETFLAGS; @@ -859,8 +851,15 @@ box_loaded( int sts, message_t *msgs, int total_msgs, int recent_msgs, void *aux if (!srec->msg[t^1]) continue; // Partner disappeared. if (!srec->msg[t^1]->msgid || strcmp( srec->msg[F]->msgid, srec->msg[N]->msgid )) { - error( "Error: channel %s, %s box %s: UIDVALIDITY genuinely changed (at UID %u).\n", - svars->chan->name, str_fn[t], svars->orig_name[t], srec->uid[t] ); + if (svars->uidval[t^1] != svars->newuidval[t^1]) { + error( "Error: channel %s, %s box %s (at UID %u):" + " Unable to recover from both-sided UIDVALIDITY change," + " as it is genuine on at least one side.\n", + svars->chan->name, str_fn[t], svars->orig_name[t], srec->uid[t] ); + } else { + error( "Error: channel %s, %s box %s (at UID %u): UIDVALIDITY genuinely changed.\n", + svars->chan->name, str_fn[t], svars->orig_name[t], srec->uid[t] ); + } uvchg: svars->ret |= SYNC_FAIL; cancel_sync( svars ); ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: fix crash when resuming message propagation with MaxMessages
commit 1e7a75095b82b43c60de55890d6728f68e3e9e0e Author: Oswald Buddenhagen Date: Wed Nov 20 09:08:26 2024 +0100 fix crash when resuming message propagation with MaxMessages the problem is triggered by the source-side message disappearing after a transaction to propagate it was started and then interrupted. it seems tempting to centralize the null-check, but some of the other branches are taken in situations where the relevant messages from the source store have not been requested. no autotest, as our test suite does not support injecting changes before resuming. amends 0089f49. src/sync.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/sync.c b/src/sync.c index 1937d65..8cf3c65 100644 --- a/src/sync.c +++ b/src/sync.c @@ -1229,6 +1229,8 @@ box_loaded( int sts, message_t *msgs, int total_msgs, int recent_msgs, void *aux // but we may be pulling in the real ones. nflags = (srec->pflags | srec->aflags[xt]) & ~srec->dflags[xt]; } else { + if (!srec->msg[xt^1]) + continue; nflags = srec->msg[xt^1]->flags; } } ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: mbsync-get-cert: add support for STARTTLS
commit d7305e12d9f348975eb0f1a29be3b9fd76d3 Author: Behnam Lal AuthorDate: Sun Sep 29 14:35:11 2024 +0200 Commit: Oswald Buddenhagen CommitDate: Sun Nov 24 11:22:34 2024 +0100 mbsync-get-cert: add support for STARTTLS nowadays, many servers offer STARTTLS on the default IMAP port 143 instead of (or in addition to) the traditional IMAP over SSL/TLS (IMAPS) on port 993. this patch has been fixed up somewhat by the maintainer. mbsync-get-cert | 30 +++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/mbsync-get-cert b/mbsync-get-cert index 19e1485..d8f194a 100755 --- a/mbsync-get-cert +++ b/mbsync-get-cert @@ -9,9 +9,25 @@ # from a trusted source. # -if [ $# != 1 ]; then - echo "Usage: $0 " >&2 +usage() { + echo "Usage: $0 [-s] " >&2 + echo " -sUse IMAP+STARTTLS (port 143) instead of IMAPS (port 993)" >&2 exit 1 +} + +STARTTLS=false + +while getopts "s" opt; do + case $opt in + s) STARTTLS=true ;; + *) usage ;; + esac +done + +shift `expr $OPTIND - 1` + +if [ $# -ne 1 ]; then + usage fi HOST=$1 @@ -33,7 +49,15 @@ TMPFILE=$TMPDIR/get-cert ERRFILE=$TMPDIR/get-cert-err CERTFILE=$TMPDIR/cert -echo QUIT | openssl s_client -connect $HOST:993 -showcerts \ +if $STARTTLS; then + FLAGS="-starttls imap" + PORT=143 +else + FLAGS= + PORT=993 +fi + +echo QUIT | openssl s_client $FLAGS -connect $HOST:$PORT -showcerts \ > $TMPFILE 2> $ERRFILE sed -e '1,/^-BEGIN CERTIFICATE-/d' \ -e '/^-END CERTIFICATE-/,$d' < $TMPFILE > $CERTFILE ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: build: also consider builds off of git with `git clone --depth 1`
commit 8920b6a1db443aac00783f7754a05852bb1bc71c Author: Paymon MARANDI AuthorDate: Tue Dec 3 15:25:09 2024 -0500 Commit: Oswald Buddenhagen CommitDate: Wed Dec 4 09:36:28 2024 +0100 build: also consider builds off of git with `git clone --depth 1` one case where this could happen is a shallow clone, purely for build purposes. in source based distros, like gentoo, setting depth of the clone to 1, globally, is a common configuration. this patch avoids that those builds fail. Signed-off-by: Paymon MARANDI version.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.sh b/version.sh index fc1ed7d..5dfc61b 100755 --- a/version.sh +++ b/version.sh @@ -22,7 +22,7 @@ else # find out whether we have local work, and if so, collapse it into # a single suffix. otherwise, we'd cause pointless rebuilds during # development. - gver=$(git describe --tags $mb) + gver=$(git describe --always --tags $mb) lcl=$(git rev-list -n 1 $mb..HEAD) if test -n "$lcl"; then gver="$gver-plus" ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: build: also consider builds off of git with `git clone --depth 1`
commit 884413b48871361cf6c0cfa41d01c22ed1ec8d30 Author: Paymon MARANDI AuthorDate: Tue Dec 3 15:25:09 2024 -0500 Commit: Oswald Buddenhagen CommitDate: Wed Dec 4 17:20:49 2024 +0100 build: also consider builds off of git with `git clone --depth 1` one case where this could happen is a shallow clone, purely for build purposes. in source based distros, like gentoo, setting depth of the clone to 1, globally, is a common configuration. this patch avoids that those builds fail. Signed-off-by: Paymon MARANDI version.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/version.sh b/version.sh index fc1ed7d..669f1b6 100755 --- a/version.sh +++ b/version.sh @@ -17,12 +17,12 @@ if test -z "$mb"; then fi if test -z "$mb"; then # still no upstream, so just describe HEAD as-is. - gver=$(git describe --tags HEAD) + gver=$(git describe --always --tags HEAD) else # find out whether we have local work, and if so, collapse it into # a single suffix. otherwise, we'd cause pointless rebuilds during # development. - gver=$(git describe --tags $mb) + gver=$(git describe --always --tags $mb) lcl=$(git rev-list -n 1 $mb..HEAD) if test -n "$lcl"; then gver="$gver-plus" ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] branch 'master' rewound
The branch 'master', previously at 8920b6a, has been rewound by 1 revision(s) to 15c7e02. ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: fix --dry-run without --debug-driver
commit 1e0b661d09c5a4bbb0bb2061db8071363145d5ac Author: Oswald Buddenhagen Date: Tue Jan 28 00:49:17 2025 +0100 fix --dry-run without --debug-driver the stubbing is implemented by the proxy driver, so we need to hook it in in that case as well. the driver is already prepared for that, as it's also used to implement -Ta/-TA. src/main_sync.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main_sync.c b/src/main_sync.c index 2ea4a92..f4ec34b 100644 --- a/src/main_sync.c +++ b/src/main_sync.c @@ -450,7 +450,7 @@ do_sync_chans( main_vars_t *mvars ) labels[F] = labels[N] = ""; for (int t = 0; t < 2; t++) { store_t *ctx = mvars->drv[t]->alloc_store( mvars->chan->stores[t], labels[t] ); - if ((DFlags & DEBUG_DRV) || ((DFlags & FORCEASYNC(t)) && !(dcaps[t] & DRV_ASYNC))) { + if ((DFlags & (DEBUG_DRV | DRYRUN)) || ((DFlags & FORCEASYNC(t)) && !(dcaps[t] & DRV_ASYNC))) { mvars->drv[t] = &proxy_driver; ctx = proxy_alloc_store( ctx, labels[t], DFlags & FORCEASYNC(t) ); } ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: fix -ls hanging after synchronous error
commit 61f0810bb17ba185aa12fd2197f92deaee249dbd Author: Oswald Buddenhagen Date: Tue Jan 28 10:30:47 2025 +0100 fix -ls hanging after synchronous error we need to make a note that we're already done with the Store, as otherwise we'll wait for a callback that never comes. src/main_list.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main_list.c b/src/main_list.c index c4aa63e..ff3d193 100644 --- a/src/main_list.c +++ b/src/main_list.c @@ -78,6 +78,7 @@ list_store_bad( void *aux ) { list_vars_t *lvars = (list_vars_t *)aux; + lvars->done = 1; lvars->drv->cancel_store( lvars->ctx ); lvars->cvars->ret = 1; list_next_store( lvars ); ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: explicitly strip newline from contents of VERSION
commit 277e3cee1b5c31e221b2bfd4592d09c41a9a2226 Author: Oswald Buddenhagen Date: Mon Jan 13 13:09:18 2025 +0100 explicitly strip newline from contents of VERSION while m4 1.4.19 + autoconf 2.72 from my debian unstable drop the trailing newline automatically, m4 1.4.18 + autoconf 2.69 shipped with ubuntu 20.4 don't, leading to an invalid configure script. reported and verified by Donat Wegner . configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 7f1fc6e..8c46b8b 100644 --- a/configure.ac +++ b/configure.ac @@ -3,7 +3,7 @@ dnl SPDX-License-Identifier: GPL-2.0-or-later m4_syscmd([./version.sh]) -AC_INIT([isync], m4_sinclude([VERSION])) +AC_INIT([isync], m4_chomp(m4_sinclude([VERSION]))) AC_CONFIG_HEADERS([autodefs.h]) AC_CANONICAL_TARGET ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] branch 'wip/includecmd' reset
The branch 'wip/includecmd', previously at 9e9aa1b, has been rewound by 1 revision(s) and subsequently fast-forwarded by 1 revision(s) to 07a1225. ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] branch 'wip/includecmd' created
The branch 'wip/includecmd' has been created at 9e9aa1b. ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: prefix deprecation notices with file name
commit 281a9ba465ba8be0d58fcb690ec34f9cdacdd1a9 Author: Oswald Buddenhagen Date: Tue Mar 11 12:44:22 2025 +0100 prefix deprecation notices with file name so it's (even) more obvious that these refer to the configuration, rather than being some internal sloppiness. src/config.c | 6 +++--- src/drv_imap.c | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/config.c b/src/config.c index 4ff389e..3ea4837 100644 --- a/src/config.c +++ b/src/config.c @@ -660,11 +660,11 @@ load_config( const char *where ) } fclose (cfile.fp); if (cfile.ms_warn) - warn( "Notice: Master/Slave are deprecated; use Far/Near instead.\n" ); + warn( "%s: notice: Master/Slave are deprecated; use Far/Near instead.\n", cfile.file ); if (cfile.renew_warn) - warn( "Notice: ReNew is deprecated; use Upgrade instead.\n" ); + warn( "%s: notice: ReNew is deprecated; use Upgrade instead.\n", cfile.file ); if (cfile.delete_warn) - warn( "Notice: Delete is deprecated; use Gone instead.\n" ); + warn( "%s: notice: Delete is deprecated; use Gone instead.\n", cfile.file ); cfile.err |= merge_ops( gcops, global_conf.ops, "" ); if (!global_conf.sync_state) { const char *state_home = getenv( "XDG_STATE_HOME" ); diff --git a/src/drv_imap.c b/src/drv_imap.c index b0be1fd..9b170ab 100644 --- a/src/drv_imap.c +++ b/src/drv_imap.c @@ -3824,7 +3824,7 @@ imap_parse_store( conffile_t *cfg, store_conf_t **storep ) static int sslv_warned; if (!sslv_warned) { sslv_warned = 1; - warn( "Notice: SSLVersions is deprecated. Use TLSVersions instead.\n" ); + warn( "%s: notice: SSLVersions is deprecated. Use TLSVersions instead.\n", cfg->file ); } server->sconf.ssl_versions = 0; arg = cfg->val; @@ -3864,7 +3864,7 @@ imap_parse_store( conffile_t *cfg, store_conf_t **storep ) static int sslt_warned; if (!sslt_warned) { sslt_warned = 1; - warn( "Notice: SSLType is deprecated. Use TLSType instead.\n" ); + warn( "%s: notice: SSLType is deprecated. Use TLSType instead.\n", cfg->file ); } tlstype: if (!strcasecmp( "None", cfg->val )) { ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: expand NEWS
commit ea22b09ac77380c6f530c09a5dc52dc2810f83c3 Author: Oswald Buddenhagen Date: Tue Mar 11 19:16:59 2025 +0100 expand NEWS include bug fixes and other improvements, as otherwise they wouldn't be documented in a user-accessible way, given that ChangeLog wasn't all that usable, and is gone entirely now. this backfills from the release notes i have put next to each tar ball since 1.0.5. and then some edits, in particular release dates. NEWS | 690 +++ 1 file changed, 556 insertions(+), 134 deletions(-) diff --git a/NEWS b/NEWS index 0438992..08c3049 100644 --- a/NEWS +++ b/NEWS @@ -1,229 +1,651 @@ -[1.5.0] +1.5.0 (2024-08-02) +== + +Compatibility Concerns: + +- The reference point for relative local paths in the configuration file + is now the file's containing directory +- Maildir Path cannot be nested into Inbox anymore (this was never documented) +- Renamed the ReNew/--renew/-N options to Upgrade/--upgrade/-u and + Delete/--delete/-d to Gone/--gone/-g +- Superseded SSLVersions option with TLSVersions, and disabled TLS v1.0 + and v1.1 by default +- Renamed SSLType option to TLSType +- Placeholders will be now created for messages exceeding MaxSize even if they + are flagged on the source side +- Placeholder upgrades no longer pull flag updates along unless also requested +- New messages which we are about to expunge from the source side are not + propaged any more even if the target side would keep them +- Tunnel is now consistently assumed to be secure, so some warnings are gone + +New Features: + +- Changed default config & state locations to follow the XDG basedir spec; + the old locations remain supported +- Added support for IMAP mailbox names with non-ASCII characters +- Added support for Maildir Paths with suffixes (not ending with a slash) +- Made the Channel side to expire with MaxMessages configurable +- MaxMessages and MaxSize can be used together now +- The unfiltered list of mailboxes in each Store can be printed now +- A proper summary is now printed prior to exiting. + This includes expunges, which are now included in the progress as well. +- Added support for mirroring deletions more accurately; option ExpungeSolo +- Added new sync operation 'Old' to retry previously skipped messages +- Added --ext-exit option to indicate with the exit code whether Stores + were modified +- Added --dry-run option + +Improvements: + +- Added support for the LITERAL- IMAP extension, which improves upload + performance with f.ex. GMail somewhat +- Improved error handling when attempting to store too big messages on + f.ex. GMail +- Malformed messages with incomplete headers will be propagated now +- A notice is now emitted if the server does not support race-free Trash +- Improved checking for invalid command lines +- Options not supported due to the build configuration are still recognized + now, to make error messages more helpful +- The progress indicator is rate-limited now +- Various improvements to the debugging output +- Vastly extended the autotest suite + +Bug Fixes: -Changed default config & state locations to follow the XDG basedir spec. -The old locations remain supported. +- Worked around "unexpected EOF" error messages at end of TLS connections; + affects f.ex. GMail +- Worked around protocol corruption issue with iCloud (mail.me.com) +- Fixed missing CAPABILITY command after logging in if the server does not + report updated capabilities automatically (affects f.ex. MS Exchange) +- Fixed CopyArrivalDate failing on some date strings +- Fixed propagation of new messages to non-UIDPLUS servers +- Fixed Timeout being ignored by DNS host resolution +- Fixed broken Tunnel potentially causing SIGPIPE +- Fixed Tunnel leaving behind zombie processes +- Fixed expunges not being propagated at all if the first run after they + occurred did not include --delete +- Fixed MaxMessages being exceeded when only --new was used +- Fixed messages being instantly expired despite being important when only + --new was used +- Trash-ing failures now prevent expunging and cause a non-zero exit code +- Fixed placeholders being needlessly trashed +- Fixed TrashNewOnly and TrashRemoteNew omitting messages for which only + a placeholder was synced +- Fixed TrashRemoteNew omitting messages which exceed MaxSize +- Fixed TrashRemoteNew not using race-free expunge +- Optimized some places with unnecessarily high CPU usage +- Fixed unnecessary network usage by non-selective uni-directional syncs when + no placeholders are present +- Fixed crash when Patterns yields nothing when built with new compilers +- Fixed crash when all flag propagations to a mailbox failed +- Fixed handling of errors during opening mailboxes +- Removed useless "lost track of ... messages" warnings when resuming after + an interruption +- Fixed many minor bugs in corner cases, mostly when resuming after + interruptions + + +1
[commit] master: release preparation
commit ffc0884efe4b688901c17270c1c0acca2d5d490e Author: Oswald Buddenhagen Date: Tue Mar 11 19:47:48 2025 +0100 release preparation update NEWS and AUTHORS AUTHORS | 3 +++ NEWS| 23 +++ 2 files changed, 26 insertions(+) diff --git a/AUTHORS b/AUTHORS index 024f512..2323bc8 100644 --- a/AUTHORS +++ b/AUTHORS @@ -71,6 +71,7 @@ Honorary Contributors Alessandro Ghedini Andreas Grapentin Aurélien Francillon +Behnam Lal Ben Kibbey Caspar Schutijser Cedric Ware @@ -87,12 +88,14 @@ Jaroslav Suchanek Jeremie Courreges-Anglas Klemens Nanni Lorenzo Martignoni +Ludovico Gerardi Magnus Jonsson Marcin Niestroj Martin Stenberg Mike Delaney Nicolas Boullis Nihal Jere +Paymon MARANDI Reimar Döffinger Remko Tronçon sb...@users.sf.net diff --git a/NEWS b/NEWS index 08c3049..22f3ab1 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,26 @@ +1.5.1 (2025-03-11) +== + +Improvements: + +- mbsync-get-cert now supports STARTTLS; new option -s +- Zero-sized messages from IMAP Stores are now accepted +- UIDVALIDITY change recovery is now attempted even if both sides of + the Channel are affected +- The sync summary at the end is more concise again +- Cosmetic improvements to some console output + +Bug Fixes: + +- Fixed IMAP INBOX not being properly recognized with some servers +- Fixed Maildir INBOX nested into Path not being implicitly listed +- Fixed crash when resuming message propagation with MaxMessages +- Fixed --list-stores hanging after synchronous error +- Fixed --dry-run without --debug-driver not being really dry +- Fixed building from pristine git clones +- Fixed building from shallow git clones + + 1.5.0 (2024-08-02) == ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] master: stub out ChangeLog
commit 8f58baa153fc8bbed2e44f993e13a364a2ab4ac4 Author: Oswald Buddenhagen Date: Tue Mar 11 19:05:05 2025 +0100 stub out ChangeLog that file is a relic from the times before distributed VCS with atomic commits existed. ours was slightly filtered, but still way too noisy to be useful for end users. so basically, it had no target audience. the file itself is left in place, because automake complains otherwise (we don't want to use 'foreign' strictness, as otherwise INSTALL is not added by autoreconf --install). .gitignore | 1 - ChangeLog | 3 +++ Makefile.am | 55 - autogen.sh | 1 - 4 files changed, 3 insertions(+), 57 deletions(-) diff --git a/.gitignore b/.gitignore index 66a12ec..31ee130 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ /.autoconf_trace -/ChangeLog /INSTALL /VERSION /autom4te.cache/ diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 000..5fc59d9 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,3 @@ +This file is empty for a lack of a target audience. + +Have a look at the NEWS file for a summary of user-visible changes. diff --git a/Makefile.am b/Makefile.am index 79067cb..121ca3e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -6,61 +6,6 @@ SUBDIRS = src bin_SCRIPTS = mbsync-get-cert EXTRA_DIST = LICENSES VERSION debian isync.spec $(bin_SCRIPTS) -LOG_PL = \ -use POSIX qw(strftime); \ -use Date::Parse; \ -use Text::Wrap; \ -$$Text::Wrap::columns = 72; \ -while (defined($$_ = <>)) { \ -/^commit / or die "commit missing: $$_"; \ -<> =~ /^log size (\d+)$$/ or die "wrong size"; \ -$$len = $$1; \ -read(STDIN, $$log, $$len) == $$len or die "unexpected EOF"; \ -$$log =~ s/^Author: ([^>]+>)\nDate: (\d{4}-\d\d-\d\d \d\d:\d\d:\d\d [-+]\d{4})\n(.*)$$/$$3/s or die "unexpected log format"; \ -$$author = $$1; $$date = str2time($$2); \ -scalar(<>); \ -@files = (); \ -$$pfx = ""; \ -while (defined($$l = <>) and $$l ne "\n") { \ -chomp $$l; \ -next if ($$l =~ m,^(ChangeLog$$|NEWS$$|TODO$$|debian/),); \ -if (!@files) { \ -$$pfx = $$l; \ -$$pfx =~ s,/?[^/]+$$,,; \ -} else { \ -while (length($$pfx)) { \ -$$l =~ m,^\Q$$pfx/\E, and last; \ -$$pfx =~ s,/?[^/]+$$,,; \ -} \ -} \ -push @files, $$l; \ -} \ -next if (!@files); \ -print strftime("%F %H:%M", gmtime($$date))." ".$$author."\n\n"; \ -if (@files > 1 and ($$len = length($$pfx))) { \ -@efiles = (); \ -for $$f (@files) { push @efiles, substr($$f, $$len + 1); } \ -$$fstr = $$pfx."/: "; \ -} else { \ -@efiles = @files; \ -$$fstr = ""; \ -} \ -print wrap("\t* ", "\t ", $$fstr.join(", ", @efiles).":")."\n"; \ -$$log =~ s, +$$,,gm; \ -$$log =~ s,^,\t,gm; \ -print $$log."\n"; \ -} - -$(srcdir)/.git/index: -$(srcdir)/ChangeLog: $(srcdir)/.git/index - $(MAKE) log - -log: - @test -z "$(srcdir)" || cd $(srcdir) && \ -( ! test -d .git || \ - git log --pretty=medium --date=iso --log-size --name-only --no-merges | \ -perl -e '$(LOG_PL)' > ChangeLog ) - cov-scan: clean /opt/cov-analysis-*/bin/cov-build --dir cov-int $(MAKE) tar cavf isync-cov.tar.xz cov-int diff --git a/autogen.sh b/autogen.sh index bd877a4..86518ed 100755 --- a/autogen.sh +++ b/autogen.sh @@ -1,4 +1,3 @@ #! /bin/sh set -e -v -make -f Makefile.am log autoreconf -f -i ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] tag 'v1.5.1' created
The tag 'v1.5.1' has been created at ffc0884. ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] tag 'v0.9' created
The tag 'v0.9' has been created at d2b39d2. ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] tag 'v0.9.1' created
The tag 'v0.9.1' has been created at 4390613. ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] tag 'v0.9.2' created
The tag 'v0.9.2' has been created at 5a44a33. ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel
[commit] branch 'wip/includecmd' reset
The branch 'wip/includecmd', previously at 07a1225, has been rewound by 2 revision(s) and subsequently fast-forwarded by 5 revision(s) to aeac8e4. ___ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel