Merge branch '1.3'
This commit is contained in:
commit
cab14608ca
10 changed files with 194 additions and 118 deletions
|
@ -47,7 +47,10 @@ LOG_PL = \
|
||||||
print $$log."\n"; \
|
print $$log."\n"; \
|
||||||
}
|
}
|
||||||
|
|
||||||
$(srcdir)/ChangeLog: log
|
$(srcdir)/.git/index:
|
||||||
|
$(srcdir)/ChangeLog: $(srcdir)/.git/index
|
||||||
|
$(MAKE) log
|
||||||
|
|
||||||
log:
|
log:
|
||||||
@test -z "$(srcdir)" || cd $(srcdir) && \
|
@test -z "$(srcdir)" || cd $(srcdir) && \
|
||||||
( ! test -d .git || \
|
( ! test -d .git || \
|
||||||
|
|
7
README
7
README
|
@ -54,11 +54,18 @@ change was necessary because of massive changes in the user interface.
|
||||||
|
|
||||||
* Requirements
|
* Requirements
|
||||||
|
|
||||||
|
perl v5.14+
|
||||||
Berkeley DB 4.1+ (optional)
|
Berkeley DB 4.1+ (optional)
|
||||||
OpenSSL for TLS/SSL support (optional)
|
OpenSSL for TLS/SSL support (optional)
|
||||||
Cyrus SASL (optional)
|
Cyrus SASL (optional)
|
||||||
zlib (optional)
|
zlib (optional)
|
||||||
|
|
||||||
|
The build from git also requires:
|
||||||
|
|
||||||
|
GNU autotools (autoconf & automake)
|
||||||
|
perl module Date::Parse (libtimedate-perl on Debian, perl-TimeDate on
|
||||||
|
Fedora and Suse)
|
||||||
|
|
||||||
* Installation
|
* Installation
|
||||||
|
|
||||||
./autogen.sh (only when building from git)
|
./autogen.sh (only when building from git)
|
||||||
|
|
2
TODO
2
TODO
|
@ -37,8 +37,6 @@ Patterns.
|
||||||
function being missing so far
|
function being missing so far
|
||||||
- this is needed for move detection, which would work only within one Channel
|
- this is needed for move detection, which would work only within one Channel
|
||||||
|
|
||||||
normalize INBOX capitalization received from IMAP, to avoid anomalies.
|
|
||||||
|
|
||||||
kill the concept of an INBOX, it is a relic from single-channel operation.
|
kill the concept of an INBOX, it is a relic from single-channel operation.
|
||||||
if somebody needs it, he can have two stores with different Paths. the path
|
if somebody needs it, he can have two stores with different Paths. the path
|
||||||
can name a single (in-)box (curr. broken with maildir). an empty box name
|
can name a single (in-)box (curr. broken with maildir). an empty box name
|
||||||
|
|
|
@ -1180,7 +1180,7 @@ parse_response_code( imap_store_t *ctx, imap_cmd_t *cmd, char *s )
|
||||||
if (!(arg = next_arg( &s )) ||
|
if (!(arg = next_arg( &s )) ||
|
||||||
(ctx->uidnext = strtoul( arg, &earg, 10 ), *earg))
|
(ctx->uidnext = strtoul( arg, &earg, 10 ), *earg))
|
||||||
{
|
{
|
||||||
error( "IMAP error: malformed NEXTUID status\n" );
|
error( "IMAP error: malformed UIDNEXT status\n" );
|
||||||
return RESP_CANCEL;
|
return RESP_CANCEL;
|
||||||
}
|
}
|
||||||
} else if (!strcmp( "CAPABILITY", arg )) {
|
} else if (!strcmp( "CAPABILITY", arg )) {
|
||||||
|
@ -1260,8 +1260,20 @@ parse_list_rsp_p1( imap_store_t *ctx, list_t *list, char *cmd ATTR_UNUSED )
|
||||||
return parse_list( ctx, cmd, parse_list_rsp_p2 );
|
return parse_list( ctx, cmd, parse_list_rsp_p2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Use this to check whether a full path refers to the actual IMAP INBOX.
|
||||||
static int
|
static int
|
||||||
is_inbox( imap_store_t *ctx, const char *arg, int argl )
|
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])
|
||||||
|
return 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use this to check whether a path fragment collides with the canonical INBOX.
|
||||||
|
static int
|
||||||
|
is_INBOX( imap_store_t *ctx, const char *arg, int argl )
|
||||||
{
|
{
|
||||||
if (!starts_with( arg, argl, "INBOX", 5 ))
|
if (!starts_with( arg, argl, "INBOX", 5 ))
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1284,16 +1296,22 @@ parse_list_rsp_p2( imap_store_t *ctx, list_t *list, char *cmd ATTR_UNUSED )
|
||||||
}
|
}
|
||||||
arg = list->val;
|
arg = list->val;
|
||||||
argl = list->len;
|
argl = list->len;
|
||||||
if ((l = strlen( ctx->prefix ))) {
|
if (is_inbox( ctx, arg, argl )) {
|
||||||
if (starts_with( arg, argl, ctx->prefix, l )) {
|
// The server might be weird and have a non-uppercase INBOX. It
|
||||||
arg += l;
|
// may legitimately do so, but we need the canonical spelling.
|
||||||
argl -= l;
|
memcpy( arg, "INBOX", 5 );
|
||||||
if (is_inbox( ctx, arg, argl )) {
|
} else if ((l = strlen( ctx->prefix ))) {
|
||||||
if (!arg[5])
|
if (!starts_with( arg, argl, ctx->prefix, l ))
|
||||||
warn( "IMAP warning: ignoring INBOX in %s\n", ctx->prefix );
|
goto skip;
|
||||||
goto skip;
|
arg += l;
|
||||||
}
|
argl -= l;
|
||||||
} else if (!is_inbox( ctx, arg, argl )) {
|
// A folder named "INBOX" would be indistinguishable from the
|
||||||
|
// actual INBOX after prefix stripping, so drop it. This applies
|
||||||
|
// only to the fully uppercased spelling, as our canonical box
|
||||||
|
// names are case-sensitive (unlike IMAP's INBOX).
|
||||||
|
if (is_INBOX( ctx, arg, argl )) {
|
||||||
|
if (!arg[5]) // No need to complain about subfolders as well.
|
||||||
|
warn( "IMAP warning: ignoring INBOX in %s\n", ctx->prefix );
|
||||||
goto skip;
|
goto skip;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2432,9 +2450,15 @@ imap_open_box_p3( imap_store_t *ctx, imap_cmd_t *gcmd, int response )
|
||||||
{
|
{
|
||||||
imap_cmd_open_box_t *cmdp = (imap_cmd_open_box_t *)gcmd;
|
imap_cmd_open_box_t *cmdp = (imap_cmd_open_box_t *)gcmd;
|
||||||
|
|
||||||
// This will happen if the box is empty.
|
if (!ctx->uidnext) {
|
||||||
if (!ctx->uidnext)
|
if (ctx->total_msgs) {
|
||||||
|
error( "IMAP error: querying server for highest UID failed\n" );
|
||||||
|
imap_open_box_p4( ctx, cmdp, RESP_NO );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// This is ok, the box is simply empty.
|
||||||
ctx->uidnext = 1;
|
ctx->uidnext = 1;
|
||||||
|
}
|
||||||
|
|
||||||
imap_open_box_p4( ctx, cmdp, response );
|
imap_open_box_p4( ctx, cmdp, response );
|
||||||
}
|
}
|
||||||
|
@ -3018,10 +3042,16 @@ imap_find_new_msgs_p3( imap_store_t *ctx, imap_cmd_t *gcmd, int response )
|
||||||
imap_cmd_find_new_t *cmdp = (imap_cmd_find_new_t *)gcmd;
|
imap_cmd_find_new_t *cmdp = (imap_cmd_find_new_t *)gcmd;
|
||||||
imap_cmd_find_new_t *cmd;
|
imap_cmd_find_new_t *cmd;
|
||||||
|
|
||||||
if (response != RESP_OK || ctx->uidnext <= cmdp->uid) {
|
if (response != RESP_OK) {
|
||||||
imap_find_new_msgs_p4( ctx, gcmd, response );
|
imap_find_new_msgs_p4( ctx, gcmd, response );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (!ctx->uidnext) {
|
||||||
|
// We are assuming that the new messages were not in fact instantly deleted.
|
||||||
|
error( "IMAP error: re-querying server for highest UID failed\n" );
|
||||||
|
imap_find_new_msgs_p4( ctx, gcmd, RESP_NO );
|
||||||
|
return;
|
||||||
|
}
|
||||||
INIT_IMAP_CMD(imap_cmd_find_new_t, cmd, cmdp->callback, cmdp->callback_aux)
|
INIT_IMAP_CMD(imap_cmd_find_new_t, cmd, cmdp->callback, cmdp->callback_aux)
|
||||||
cmd->out_msgs = cmdp->out_msgs;
|
cmd->out_msgs = cmdp->out_msgs;
|
||||||
imap_exec( (imap_store_t *)ctx, &cmd->gen, imap_find_new_msgs_p4,
|
imap_exec( (imap_store_t *)ctx, &cmd->gen, imap_find_new_msgs_p4,
|
||||||
|
|
|
@ -355,6 +355,7 @@ maildir_list_maildirpp( maildir_store_t *ctx, int flags, const char *inbox )
|
||||||
} else {
|
} else {
|
||||||
if (!(flags & (LIST_PATH | LIST_PATH_MAYBE)))
|
if (!(flags & (LIST_PATH | LIST_PATH_MAYBE)))
|
||||||
continue;
|
continue;
|
||||||
|
// Explained in maildir_list_recurse().
|
||||||
if (starts_with( ent, -1, "INBOX", 5 ) && (!ent[5] || ent[5] == '.')) {
|
if (starts_with( ent, -1, "INBOX", 5 ) && (!ent[5] || ent[5] == '.')) {
|
||||||
if (!warned) {
|
if (!warned) {
|
||||||
warned = 1;
|
warned = 1;
|
||||||
|
@ -440,6 +441,10 @@ maildir_list_recurse( maildir_store_t *ctx, int isBox, int flags,
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// A folder named "INBOX" would be indistinguishable from the
|
||||||
|
// actual INBOX after prefix stripping, so drop it. This applies
|
||||||
|
// only to the fully uppercased spelling, as our canonical box
|
||||||
|
// names are case-sensitive (unlike IMAP's INBOX).
|
||||||
if (!nameLen && equals( ent, -1, "INBOX", 5 )) {
|
if (!nameLen && equals( ent, -1, "INBOX", 5 )) {
|
||||||
path[pathLen] = 0;
|
path[pathLen] = 0;
|
||||||
warn( "Maildir warning: ignoring INBOX in %s\n", path );
|
warn( "Maildir warning: ignoring INBOX in %s\n", path );
|
||||||
|
@ -843,8 +848,8 @@ maildir_compare( const void *l, const void *r )
|
||||||
char *ldot, *rdot, *ldot2, *rdot2, *lseq, *rseq;
|
char *ldot, *rdot, *ldot2, *rdot2, *lseq, *rseq;
|
||||||
int ret, llen, rlen;
|
int ret, llen, rlen;
|
||||||
|
|
||||||
if ((ret = lm->uid - rm->uid))
|
if (lm->uid != rm->uid) // Can't subtract, the result might not fit into signed int.
|
||||||
return ret;
|
return lm->uid > rm->uid ? 1 : -1;
|
||||||
|
|
||||||
/* No UID, so sort by arrival date. We should not do this, but we rely
|
/* No UID, so sort by arrival date. We should not do this, but we rely
|
||||||
on the suggested unique file name scheme - we have no choice. */
|
on the suggested unique file name scheme - we have no choice. */
|
||||||
|
|
26
src/main.c
26
src/main.c
|
@ -30,6 +30,9 @@
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
|
#ifdef __linux__
|
||||||
|
# include <sys/prctl.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
int DFlags;
|
int DFlags;
|
||||||
int JLimit;
|
int JLimit;
|
||||||
|
@ -77,7 +80,8 @@ PACKAGE " " VERSION " - mailbox synchronizer\n"
|
||||||
" -N, --renew propagate previously not propagated new messages\n"
|
" -N, --renew propagate previously not propagated new messages\n"
|
||||||
" -L, --pull propagate from master to slave\n"
|
" -L, --pull propagate from master to slave\n"
|
||||||
" -H, --push propagate from slave to master\n"
|
" -H, --push propagate from slave to master\n"
|
||||||
" -C, --create create mailboxes if nonexistent\n"
|
" -C, --create propagate creations of mailboxes\n"
|
||||||
|
" -R, --remove propagate deletions of mailboxes\n"
|
||||||
" -X, --expunge expunge deleted messages\n"
|
" -X, --expunge expunge deleted messages\n"
|
||||||
" -c, --config CONFIG read an alternate config file (default: ~/." EXE "rc)\n"
|
" -c, --config CONFIG read an alternate config file (default: ~/." EXE "rc)\n"
|
||||||
" -D, --debug debugging modes (see manual)\n"
|
" -D, --debug debugging modes (see manual)\n"
|
||||||
|
@ -88,7 +92,8 @@ PACKAGE " " VERSION " - mailbox synchronizer\n"
|
||||||
"\nIf neither --pull nor --push are specified, both are active.\n"
|
"\nIf neither --pull nor --push are specified, both are active.\n"
|
||||||
"If neither --new, --delete, --flags nor --renew are specified, all are active.\n"
|
"If neither --new, --delete, --flags nor --renew are specified, all are active.\n"
|
||||||
"Direction and operation can be concatenated like --pull-new, etc.\n"
|
"Direction and operation can be concatenated like --pull-new, etc.\n"
|
||||||
"--create and --expunge can be suffixed with -master/-slave. Read the man page.\n"
|
"--create, --remove, and --expunge can be suffixed with -master/-slave.\n"
|
||||||
|
"See the man page for details.\n"
|
||||||
"\nSupported mailbox formats are: IMAP4rev1, Maildir\n"
|
"\nSupported mailbox formats are: IMAP4rev1, Maildir\n"
|
||||||
"\nCompile time options:\n"
|
"\nCompile time options:\n"
|
||||||
#ifdef HAVE_LIBSSL
|
#ifdef HAVE_LIBSSL
|
||||||
|
@ -142,17 +147,34 @@ crashHandler( int n )
|
||||||
dup2( 0, 1 );
|
dup2( 0, 1 );
|
||||||
dup2( 0, 2 );
|
dup2( 0, 2 );
|
||||||
error( "*** " EXE " caught signal %d. Starting debugger ...\n", n );
|
error( "*** " EXE " caught signal %d. Starting debugger ...\n", n );
|
||||||
|
#ifdef PR_SET_PTRACER
|
||||||
|
int pip[2];
|
||||||
|
if (pipe( pip ) < 0) {
|
||||||
|
perror( "pipe()" );
|
||||||
|
exit( 3 );
|
||||||
|
}
|
||||||
|
#endif
|
||||||
switch ((dpid = fork())) {
|
switch ((dpid = fork())) {
|
||||||
case -1:
|
case -1:
|
||||||
perror( "fork()" );
|
perror( "fork()" );
|
||||||
break;
|
break;
|
||||||
case 0:
|
case 0:
|
||||||
|
#ifdef PR_SET_PTRACER
|
||||||
|
close( pip[1] );
|
||||||
|
read( pip[0], pbuf, 1 );
|
||||||
|
close( pip[0] );
|
||||||
|
#endif
|
||||||
sprintf( pbuf, "%d", Pid );
|
sprintf( pbuf, "%d", Pid );
|
||||||
sprintf( pabuf, "/proc/%d/exe", Pid );
|
sprintf( pabuf, "/proc/%d/exe", Pid );
|
||||||
execlp( "gdb", "gdb", pabuf, pbuf, (char *)0 );
|
execlp( "gdb", "gdb", pabuf, pbuf, (char *)0 );
|
||||||
perror( "execlp()" );
|
perror( "execlp()" );
|
||||||
_exit( 1 );
|
_exit( 1 );
|
||||||
default:
|
default:
|
||||||
|
#ifdef PR_SET_PTRACER
|
||||||
|
prctl( PR_SET_PTRACER, (ulong)dpid );
|
||||||
|
close( pip[1] );
|
||||||
|
close( pip[0] );
|
||||||
|
#endif
|
||||||
waitpid( dpid, 0, 0 );
|
waitpid( dpid, 0, 0 );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
191
src/mbsync.1
191
src/mbsync.1
|
@ -1,33 +1,32 @@
|
||||||
.ig
|
.\" mbsync - mailbox synchronizer
|
||||||
\" mbsync - mailbox synchronizer
|
.\" Copyright (C) 2000-2002 Michael R. Elkins <me@mutt.org>
|
||||||
\" Copyright (C) 2000-2002 Michael R. Elkins <me@mutt.org>
|
.\" Copyright (C) 2002-2004,2011-2015 Oswald Buddenhagen <ossi@users.sf.net>
|
||||||
\" Copyright (C) 2002-2004,2011-2015 Oswald Buddenhagen <ossi@users.sf.net>
|
.\" Copyright (C) 2004 Theodore Y. Ts'o <tytso@mit.edu>
|
||||||
\" Copyright (C) 2004 Theodore Y. Ts'o <tytso@mit.edu>
|
.\"
|
||||||
\"
|
.\" This program is free software; you can redistribute it and/or modify
|
||||||
\" This program is free software; you can redistribute it and/or modify
|
.\" it under the terms of the GNU General Public License as published by
|
||||||
\" it under the terms of the GNU General Public License as published by
|
.\" the Free Software Foundation; either version 2 of the License, or
|
||||||
\" the Free Software Foundation; either version 2 of the License, or
|
.\" (at your option) any later version.
|
||||||
\" (at your option) any later version.
|
.\"
|
||||||
\"
|
.\" This program is distributed in the hope that it will be useful,
|
||||||
\" This program is distributed in the hope that it will be useful,
|
.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
\" but WITHOUT ANY WARRANTY; without even the implied warranty of
|
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
.\" GNU General Public License for more details.
|
||||||
\" GNU General Public License for more details.
|
.\"
|
||||||
\"
|
.\" You should have received a copy of the GNU General Public License
|
||||||
\" You should have received a copy of the GNU General Public License
|
.\" along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
\" along with this program. If not, see <http://www.gnu.org/licenses/>.
|
.\"
|
||||||
\"
|
.\" As a special exception, mbsync may be linked with the OpenSSL library,
|
||||||
\" As a special exception, mbsync may be linked with the OpenSSL library,
|
.\" despite that library's more restrictive license.
|
||||||
\" despite that library's more restrictive license.
|
.
|
||||||
..
|
|
||||||
.TH mbsync 1 "2015 Mar 22"
|
.TH mbsync 1 "2015 Mar 22"
|
||||||
..
|
.
|
||||||
.SH NAME
|
.SH NAME
|
||||||
mbsync - synchronize IMAP4 and Maildir mailboxes
|
mbsync - synchronize IMAP4 and Maildir mailboxes
|
||||||
..
|
.
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
\fBmbsync\fR [\fIoptions\fR ...] {{\fIchannel\fR[\fB:\fIbox\fR[{\fB,\fR|\fB\\n\fR}...]]|\fIgroup\fR} ...|\fB-a\fR}
|
\fBmbsync\fR [\fIoptions\fR ...] {{\fIchannel\fR[\fB:\fIbox\fR[{\fB,\fR|\fB\\n\fR}...]]|\fIgroup\fR} ...|\fB-a\fR}
|
||||||
..
|
.
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
\fBmbsync\fR is a command line application which synchronizes mailboxes;
|
\fBmbsync\fR is a command line application which synchronizes mailboxes;
|
||||||
currently Maildir and IMAP4 mailboxes are supported.
|
currently Maildir and IMAP4 mailboxes are supported.
|
||||||
|
@ -43,7 +42,7 @@ these files are protected against concurrent \fBmbsync\fR processes.
|
||||||
Mailboxes can be safely modified while \fBmbsync\fR operates
|
Mailboxes can be safely modified while \fBmbsync\fR operates
|
||||||
(see \fBINHERENT PROBLEMS\fR below for a minor exception).
|
(see \fBINHERENT PROBLEMS\fR below for a minor exception).
|
||||||
Multiple replicas of each mailbox can be maintained.
|
Multiple replicas of each mailbox can be maintained.
|
||||||
..
|
.
|
||||||
.SH OPTIONS
|
.SH OPTIONS
|
||||||
.TP
|
.TP
|
||||||
\fB-c\fR, \fB--config\fR \fIfile\fR
|
\fB-c\fR, \fB--config\fR \fIfile\fR
|
||||||
|
@ -110,7 +109,7 @@ Without category specification, all categories except net-all are enabled.
|
||||||
Suppress progress counters (this is implicit if stdout is no TTY,
|
Suppress progress counters (this is implicit if stdout is no TTY,
|
||||||
or any debugging categories are enabled) and notices.
|
or any debugging categories are enabled) and notices.
|
||||||
If specified twice, suppress warning messages as well.
|
If specified twice, suppress warning messages as well.
|
||||||
..
|
.
|
||||||
.SH CONFIGURATION
|
.SH CONFIGURATION
|
||||||
The configuration file is mandatory; \fBmbsync\fR will not run without it.
|
The configuration file is mandatory; \fBmbsync\fR will not run without it.
|
||||||
Lines starting with a hash mark (\fB#\fR) are comments and are ignored entirely.
|
Lines starting with a hash mark (\fB#\fR) are comments and are ignored entirely.
|
||||||
|
@ -141,7 +140,7 @@ even combinations thereof.
|
||||||
.br
|
.br
|
||||||
Mailbox names, OTOH, always use canonical path separators, which are
|
Mailbox names, OTOH, always use canonical path separators, which are
|
||||||
Unix-like forward slashes.
|
Unix-like forward slashes.
|
||||||
..
|
.
|
||||||
.SS All Stores
|
.SS All Stores
|
||||||
These options can be used in all supported Store types.
|
These options can be used in all supported Store types.
|
||||||
.br
|
.br
|
||||||
|
@ -150,7 +149,7 @@ and not necessarily a remote server.
|
||||||
.br
|
.br
|
||||||
The special mailbox \fBINBOX\fR exists in every Store; its physical location
|
The special mailbox \fBINBOX\fR exists in every Store; its physical location
|
||||||
in the file system is Store type specific.
|
in the file system is Store type specific.
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBPath\fR \fIpath\fR
|
\fBPath\fR \fIpath\fR
|
||||||
The location of the Store in the (server's) file system.
|
The location of the Store in the (server's) file system.
|
||||||
|
@ -161,7 +160,7 @@ in the Channels section.
|
||||||
Note that you \fBmust\fR append a slash if you want to specify an entire
|
Note that you \fBmust\fR append a slash if you want to specify an entire
|
||||||
directory.
|
directory.
|
||||||
(Default: none)
|
(Default: none)
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBMaxSize\fR \fIsize\fR[\fBk\fR|\fBm\fR][\fBb\fR]
|
\fBMaxSize\fR \fIsize\fR[\fBk\fR|\fBm\fR][\fBb\fR]
|
||||||
Messages larger than that will not be propagated into this Store.
|
Messages larger than that will not be propagated into this Store.
|
||||||
|
@ -170,7 +169,7 @@ This is useful for weeding out messages with large attachments.
|
||||||
MeBytes instead of bytes. \fBB\fR is accepted but superfluous.
|
MeBytes instead of bytes. \fBB\fR is accepted but superfluous.
|
||||||
If \fIsize\fR is 0, the maximum message size is \fBunlimited\fR.
|
If \fIsize\fR is 0, the maximum message size is \fBunlimited\fR.
|
||||||
(Default: \fI0\fR)
|
(Default: \fI0\fR)
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBMapInbox\fR \fImailbox\fR
|
\fBMapInbox\fR \fImailbox\fR
|
||||||
Create a virtual mailbox (relative to \fBPath\fR) which aliases
|
Create a virtual mailbox (relative to \fBPath\fR) which aliases
|
||||||
|
@ -178,7 +177,7 @@ the \fBINBOX\fR. Makes sense in conjunction with \fBPatterns\fR in the
|
||||||
Channels section, though with a Maildir slave, you probably want to
|
Channels section, though with a Maildir slave, you probably want to
|
||||||
place \fBInbox\fR under \fBPath\fR instead.
|
place \fBInbox\fR under \fBPath\fR instead.
|
||||||
This virtual mailbox does not support subfolders.
|
This virtual mailbox does not support subfolders.
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBFlatten\fR \fIdelim\fR
|
\fBFlatten\fR \fIdelim\fR
|
||||||
Flatten the hierarchy within this Store by substituting the canonical
|
Flatten the hierarchy within this Store by substituting the canonical
|
||||||
|
@ -190,27 +189,27 @@ A common choice for the delimiter is \fB.\fR.
|
||||||
.br
|
.br
|
||||||
Note that flattened sub-folders of the \fBINBOX\fR always end up
|
Note that flattened sub-folders of the \fBINBOX\fR always end up
|
||||||
under \fBPath\fR, including the "INBOX\fIdelim\fR" prefix.
|
under \fBPath\fR, including the "INBOX\fIdelim\fR" prefix.
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBTrash\fR \fImailbox\fR
|
\fBTrash\fR \fImailbox\fR
|
||||||
Specifies a mailbox (relative to \fBPath\fR) to copy deleted messages to
|
Specifies a mailbox (relative to \fBPath\fR) to copy deleted messages to
|
||||||
prior to expunging.
|
prior to expunging.
|
||||||
See \fBRECOMMENDATIONS\fR and \fBINHERENT PROBLEMS\fR below.
|
See \fBRECOMMENDATIONS\fR and \fBINHERENT PROBLEMS\fR below.
|
||||||
(Default: none)
|
(Default: none)
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBTrashNewOnly\fR \fByes\fR|\fBno\fR
|
\fBTrashNewOnly\fR \fByes\fR|\fBno\fR
|
||||||
When trashing, copy only not yet propagated messages. This makes sense if the
|
When trashing, copy only not yet propagated messages. This makes sense if the
|
||||||
remote Store has a \fBTrash\fR as well (with \fBTrashNewOnly\fR \fBno\fR).
|
remote Store has a \fBTrash\fR as well (with \fBTrashNewOnly\fR \fBno\fR).
|
||||||
(Default: \fBno\fR)
|
(Default: \fBno\fR)
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBTrashRemoteNew\fR \fByes\fR|\fBno\fR
|
\fBTrashRemoteNew\fR \fByes\fR|\fBno\fR
|
||||||
When expunging the remote Store, copy not yet propagated messages to this
|
When expunging the remote Store, copy not yet propagated messages to this
|
||||||
Store's \fBTrash\fR. When using this, the remote Store does not need an own
|
Store's \fBTrash\fR. When using this, the remote Store does not need an own
|
||||||
\fBTrash\fR at all, yet all messages are archived.
|
\fBTrash\fR at all, yet all messages are archived.
|
||||||
(Default: \fBno\fR)
|
(Default: \fBno\fR)
|
||||||
..
|
.
|
||||||
.SS Maildir Stores
|
.SS Maildir Stores
|
||||||
The reference point for relative \fBPath\fRs is the current working directory.
|
The reference point for relative \fBPath\fRs is the current working directory.
|
||||||
.P
|
.P
|
||||||
|
@ -238,11 +237,11 @@ message deletion and a new message, resulting in unnecessary traffic.
|
||||||
\fBMutt\fR is known to work fine with both schemes.
|
\fBMutt\fR is known to work fine with both schemes.
|
||||||
.br
|
.br
|
||||||
Use \fBmdconvert\fR to convert mailboxes from one scheme to the other.
|
Use \fBmdconvert\fR to convert mailboxes from one scheme to the other.
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBMaildirStore\fR \fIname\fR
|
\fBMaildirStore\fR \fIname\fR
|
||||||
Define the Maildir Store \fIname\fR, opening a section for its parameters.
|
Define the Maildir Store \fIname\fR, opening a section for its parameters.
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBAltMap\fR \fByes\fR|\fBno\fR
|
\fBAltMap\fR \fByes\fR|\fBno\fR
|
||||||
Use the \fBalternative\fR UID storage scheme for mailboxes in this Store.
|
Use the \fBalternative\fR UID storage scheme for mailboxes in this Store.
|
||||||
|
@ -250,20 +249,20 @@ This does not affect mailboxes that do already have a UID storage scheme;
|
||||||
use \fBmdconvert\fR to change it.
|
use \fBmdconvert\fR to change it.
|
||||||
See \fBRECOMMENDATIONS\fR below.
|
See \fBRECOMMENDATIONS\fR below.
|
||||||
(Default: \fBno\fR)
|
(Default: \fBno\fR)
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBInbox\fR \fIpath\fR
|
\fBInbox\fR \fIpath\fR
|
||||||
The location of the \fBINBOX\fR. This is \fInot\fR relative to \fBPath\fR,
|
The location of the \fBINBOX\fR. This is \fInot\fR relative to \fBPath\fR,
|
||||||
but it is allowed to place the \fBINBOX\fR inside the \fBPath\fR.
|
but it is allowed to place the \fBINBOX\fR inside the \fBPath\fR.
|
||||||
(Default: \fI~/Maildir\fR)
|
(Default: \fI~/Maildir\fR)
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBInfoDelimiter\fR \fIdelim\fR
|
\fBInfoDelimiter\fR \fIdelim\fR
|
||||||
The character used to delimit the info field from a message's basename.
|
The character used to delimit the info field from a message's basename.
|
||||||
The Maildir standard defines this to be the colon, but this is incompatible
|
The Maildir standard defines this to be the colon, but this is incompatible
|
||||||
with DOS/Windows file systems.
|
with DOS/Windows file systems.
|
||||||
(Default: the value of \fBFieldDelimiter\fR)
|
(Default: the value of \fBFieldDelimiter\fR)
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBSubFolders\fR \fBVerbatim\fR|\fBMaildir++\fR|\fBLegacy\fR
|
\fBSubFolders\fR \fBVerbatim\fR|\fBMaildir++\fR|\fBLegacy\fR
|
||||||
The on-disk folder naming style used for hierarchical mailboxes.
|
The on-disk folder naming style used for hierarchical mailboxes.
|
||||||
|
@ -284,12 +283,12 @@ Note that attempts to set \fBPath\fR are rejected in this mode.
|
||||||
(this is \fBmbsync\fR's historical style)
|
(this is \fBmbsync\fR's historical style)
|
||||||
.br
|
.br
|
||||||
(Default: unset; will error out when sub-folders are encountered)
|
(Default: unset; will error out when sub-folders are encountered)
|
||||||
..
|
.
|
||||||
.SS IMAP4 Accounts
|
.SS IMAP4 Accounts
|
||||||
.TP
|
.TP
|
||||||
\fBIMAPAccount\fR \fIname\fR
|
\fBIMAPAccount\fR \fIname\fR
|
||||||
Define the IMAP4 Account \fIname\fR, opening a section for its parameters.
|
Define the IMAP4 Account \fIname\fR, opening a section for its parameters.
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBHost\fR \fIhost\fR
|
\fBHost\fR \fIhost\fR
|
||||||
Specify the DNS name or IP address of the IMAP server.
|
Specify the DNS name or IP address of the IMAP server.
|
||||||
|
@ -297,31 +296,31 @@ Specify the DNS name or IP address of the IMAP server.
|
||||||
If \fBTunnel\fR is used, this setting is needed only if \fBSSLType\fR is
|
If \fBTunnel\fR is used, this setting is needed only if \fBSSLType\fR is
|
||||||
not \fBNone\fR and \fBCertificateFile\fR is not used,
|
not \fBNone\fR and \fBCertificateFile\fR is not used,
|
||||||
in which case the host name is used for certificate subject verification.
|
in which case the host name is used for certificate subject verification.
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBPort\fR \fIport\fR
|
\fBPort\fR \fIport\fR
|
||||||
Specify the TCP port number of the IMAP server. (Default: 143 for IMAP,
|
Specify the TCP port number of the IMAP server. (Default: 143 for IMAP,
|
||||||
993 for IMAPS)
|
993 for IMAPS)
|
||||||
.br
|
.br
|
||||||
If \fBTunnel\fR is used, this setting is ignored.
|
If \fBTunnel\fR is used, this setting is ignored.
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBTimeout\fR \fItimeout\fR
|
\fBTimeout\fR \fItimeout\fR
|
||||||
Specify the connect and data timeout for the IMAP server in seconds.
|
Specify the connect and data timeout for the IMAP server in seconds.
|
||||||
Zero means unlimited.
|
Zero means unlimited.
|
||||||
(Default: \fI20\fR)
|
(Default: \fI20\fR)
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBUser\fR \fIusername\fR
|
\fBUser\fR \fIusername\fR
|
||||||
Specify the login name on the IMAP server.
|
Specify the login name on the IMAP server.
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBPass\fR \fIpassword\fR
|
\fBPass\fR \fIpassword\fR
|
||||||
Specify the password for \fIusername\fR on the IMAP server.
|
Specify the password for \fIusername\fR on the IMAP server.
|
||||||
Note that this option is \fInot\fR required.
|
Note that this option is \fInot\fR required.
|
||||||
If neither a password nor a password command is specified in the
|
If neither a password nor a password command is specified in the
|
||||||
configuration file, \fBmbsync\fR will prompt you for a password.
|
configuration file, \fBmbsync\fR will prompt you for a password.
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBPassCmd\fR [\fB+\fR]\fIcommand\fR
|
\fBPassCmd\fR [\fB+\fR]\fIcommand\fR
|
||||||
Specify a shell command to obtain a password rather than specifying a
|
Specify a shell command to obtain a password rather than specifying a
|
||||||
|
@ -331,13 +330,13 @@ optional.
|
||||||
Prepend \fB+\fR to the command to indicate that it produces TTY output
|
Prepend \fB+\fR to the command to indicate that it produces TTY output
|
||||||
(e.g., a decryption password prompt); failure to do so will merely produce
|
(e.g., a decryption password prompt); failure to do so will merely produce
|
||||||
messier output.
|
messier output.
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBTunnel\fR \fIcommand\fR
|
\fBTunnel\fR \fIcommand\fR
|
||||||
Specify a command to run to establish a connection rather than opening a TCP
|
Specify a command to run to establish a connection rather than opening a TCP
|
||||||
socket. This allows you to run an IMAP session over an SSH tunnel, for
|
socket. This allows you to run an IMAP session over an SSH tunnel, for
|
||||||
example.
|
example.
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBAuthMechs\fR \fItype\fR ...
|
\fBAuthMechs\fR \fItype\fR ...
|
||||||
The list of acceptable authentication mechanisms.
|
The list of acceptable authentication mechanisms.
|
||||||
|
@ -348,7 +347,7 @@ enough for the current \fBSSLType\fR setting.
|
||||||
The actually used mechanism is the most secure choice from the intersection
|
The actually used mechanism is the most secure choice from the intersection
|
||||||
of this list, the list supplied by the server, and the installed SASL modules.
|
of this list, the list supplied by the server, and the installed SASL modules.
|
||||||
(Default: \fB*\fR)
|
(Default: \fB*\fR)
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBSSLType\fR {\fBNone\fR|\fBSTARTTLS\fR|\fBIMAPS\fR}
|
\fBSSLType\fR {\fBNone\fR|\fBSTARTTLS\fR|\fBIMAPS\fR}
|
||||||
Select the connection security/encryption method:
|
Select the connection security/encryption method:
|
||||||
|
@ -362,28 +361,36 @@ so it is the default (unless a tunnel is used).
|
||||||
.br
|
.br
|
||||||
\fBIMAPS\fR - security is established by starting SSL/TLS negotiation
|
\fBIMAPS\fR - security is established by starting SSL/TLS negotiation
|
||||||
right after connecting the secure IMAP port 993.
|
right after connecting the secure IMAP port 993.
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBSSLVersions\fR [\fBSSLv3\fR] [\fBTLSv1\fR] [\fBTLSv1.1\fR] [\fBTLSv1.2\fR]
|
\fBSSLVersions\fR [\fBSSLv3\fR] [\fBTLSv1\fR] [\fBTLSv1.1\fR] [\fBTLSv1.2\fR]
|
||||||
Select the acceptable SSL/TLS versions.
|
Select the acceptable SSL/TLS versions.
|
||||||
Use old versions only when the server has problems with newer ones.
|
Use old versions only when the server has problems with newer ones.
|
||||||
(Default: [\fBTLSv1\fR] [\fBTLSv1.1\fR] [\fBTLSv1.2\fR]).
|
(Default: [\fBTLSv1\fR] [\fBTLSv1.1\fR] [\fBTLSv1.2\fR]).
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBSystemCertificates\fR \fByes\fR|\fBno\fR
|
\fBSystemCertificates\fR \fByes\fR|\fBno\fR
|
||||||
Whether the system's default root cerificate store should be loaded.
|
Whether the system's default CA (certificate authority) certificate
|
||||||
|
store should be used to verify certificate trust chains. Disable this
|
||||||
|
if you want to trust only hand-picked certificates.
|
||||||
(Default: \fByes\fR)
|
(Default: \fByes\fR)
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBCertificateFile\fR \fIpath\fR
|
\fBCertificateFile\fR \fIpath\fR
|
||||||
File containing additional X.509 certificates used to verify server
|
File containing additional X.509 certificates used to verify server
|
||||||
identities. Directly matched peer certificates are always trusted,
|
identities.
|
||||||
regardless of validity.
|
These certificates are always trusted, regardless of validity.
|
||||||
.br
|
.br
|
||||||
Note that the system's default certificate store is always used
|
The certificates from this file are matched only against the received
|
||||||
(unless \fBSystemCertificates\fR is disabled)
|
server certificate itself; CA certificates are \fBnot\fR supported here.
|
||||||
and should not be specified here.
|
Do \fBnot\fR specify the system's CA certificate store here; see
|
||||||
..
|
\fBSystemCertificates\fR instead.
|
||||||
|
.br
|
||||||
|
The contents for this file may be obtained using the
|
||||||
|
\fBmbsync-get-cert\fR tool; make sure to verify the fingerprints of the
|
||||||
|
certificates before trusting them, or transfer them securely from the
|
||||||
|
server's network (if it is trusted).
|
||||||
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBClientCertificate\fR \fIpath\fR
|
\fBClientCertificate\fR \fIpath\fR
|
||||||
File containing a client certificate to send to the server.
|
File containing a client certificate to send to the server.
|
||||||
|
@ -391,11 +398,11 @@ File containing a client certificate to send to the server.
|
||||||
.br
|
.br
|
||||||
Note that client certificate verification is usually not required,
|
Note that client certificate verification is usually not required,
|
||||||
so it is unlikely that you need this option.
|
so it is unlikely that you need this option.
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBClientKey\fR \fIpath\fR
|
\fBClientKey\fR \fIpath\fR
|
||||||
File containing the private key corresponding to \fBClientCertificate\fR.
|
File containing the private key corresponding to \fBClientCertificate\fR.
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBPipelineDepth\fR \fIdepth\fR
|
\fBPipelineDepth\fR \fIdepth\fR
|
||||||
Maximum number of IMAP commands which can be simultaneously in flight.
|
Maximum number of IMAP commands which can be simultaneously in flight.
|
||||||
|
@ -404,14 +411,14 @@ This is mostly a debugging option, but may also be used to limit average
|
||||||
bandwidth consumption (GMail may require this if you have a very fast
|
bandwidth consumption (GMail may require this if you have a very fast
|
||||||
connection), or to spare flaky servers like M$ Exchange.
|
connection), or to spare flaky servers like M$ Exchange.
|
||||||
(Default: \fIunlimited\fR)
|
(Default: \fIunlimited\fR)
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBDisableExtension\fR[\fBs\fR] \fIextension\fR ...
|
\fBDisableExtension\fR[\fBs\fR] \fIextension\fR ...
|
||||||
Disable the use of specific IMAP extensions.
|
Disable the use of specific IMAP extensions.
|
||||||
This can be used to work around bugs in servers
|
This can be used to work around bugs in servers
|
||||||
(and possibly \fBmbsync\fR itself).
|
(and possibly \fBmbsync\fR itself).
|
||||||
(Default: empty)
|
(Default: empty)
|
||||||
..
|
.
|
||||||
.SS IMAP Stores
|
.SS IMAP Stores
|
||||||
The reference point for relative \fBPath\fRs is whatever the server likes it
|
The reference point for relative \fBPath\fRs is whatever the server likes it
|
||||||
to be; probably the user's $HOME or $HOME/Mail on that server. The location
|
to be; probably the user's $HOME or $HOME/Mail on that server. The location
|
||||||
|
@ -419,21 +426,21 @@ of \fBINBOX\fR is up to the server as well and is usually irrelevant.
|
||||||
.TP
|
.TP
|
||||||
\fBIMAPStore\fR \fIname\fR
|
\fBIMAPStore\fR \fIname\fR
|
||||||
Define the IMAP4 Store \fIname\fR, opening a section for its parameters.
|
Define the IMAP4 Store \fIname\fR, opening a section for its parameters.
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBAccount\fR \fIaccount\fR
|
\fBAccount\fR \fIaccount\fR
|
||||||
Specify which IMAP4 Account to use. Instead of defining an Account and
|
Specify which IMAP4 Account to use. Instead of defining an Account and
|
||||||
referencing it here, it is also possible to specify all the Account options
|
referencing it here, it is also possible to specify all the Account options
|
||||||
directly in the Store's section - this makes sense if an Account is used for
|
directly in the Store's section - this makes sense if an Account is used for
|
||||||
one Store only anyway.
|
one Store only anyway.
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBUseNamespace\fR \fByes\fR|\fBno\fR
|
\fBUseNamespace\fR \fByes\fR|\fBno\fR
|
||||||
Selects whether the server's first "personal" NAMESPACE should be prefixed to
|
Selects whether the server's first "personal" NAMESPACE should be prefixed to
|
||||||
mailbox names. Disabling this makes sense for some broken IMAP servers.
|
mailbox names. Disabling this makes sense for some broken IMAP servers.
|
||||||
This option is meaningless if a \fBPath\fR was specified.
|
This option is meaningless if a \fBPath\fR was specified.
|
||||||
(Default: \fByes\fR)
|
(Default: \fByes\fR)
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBPathDelimiter\fR \fIdelim\fR
|
\fBPathDelimiter\fR \fIdelim\fR
|
||||||
Specify the server's hierarchy delimiter.
|
Specify the server's hierarchy delimiter.
|
||||||
|
@ -441,12 +448,12 @@ Specify the server's hierarchy delimiter.
|
||||||
.br
|
.br
|
||||||
Do \fInot\fR abuse this to re-interpret the hierarchy.
|
Do \fInot\fR abuse this to re-interpret the hierarchy.
|
||||||
Use \fBFlatten\fR instead.
|
Use \fBFlatten\fR instead.
|
||||||
..
|
.
|
||||||
.SS Channels
|
.SS Channels
|
||||||
.TP
|
.TP
|
||||||
\fBChannel\fR \fIname\fR
|
\fBChannel\fR \fIname\fR
|
||||||
Define the Channel \fIname\fR, opening a section for its parameters.
|
Define the Channel \fIname\fR, opening a section for its parameters.
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
{\fBMaster\fR|\fBSlave\fR} \fB:\fIstore\fB:\fR[\fImailbox\fR]
|
{\fBMaster\fR|\fBSlave\fR} \fB:\fIstore\fB:\fR[\fImailbox\fR]
|
||||||
Specify the Master resp. Slave Store to be connected by this Channel.
|
Specify the Master resp. Slave Store to be connected by this Channel.
|
||||||
|
@ -454,7 +461,7 @@ If \fBPatterns\fR are specified, \fImailbox\fR is interpreted as a
|
||||||
prefix which is not matched against the patterns, and which is not
|
prefix which is not matched against the patterns, and which is not
|
||||||
affected by mailbox list overrides.
|
affected by mailbox list overrides.
|
||||||
Otherwise, if \fImailbox\fR is omitted, \fBINBOX\fR is assumed.
|
Otherwise, if \fImailbox\fR is omitted, \fBINBOX\fR is assumed.
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBPattern\fR[\fBs\fR] [\fB!\fR]\fIpattern\fR ...
|
\fBPattern\fR[\fBs\fR] [\fB!\fR]\fIpattern\fR ...
|
||||||
Instead of synchronizing only one mailbox pair, synchronize all mailboxes
|
Instead of synchronizing only one mailbox pair, synchronize all mailboxes
|
||||||
|
@ -472,13 +479,13 @@ The mailbox list selected by \fBPatterns\fR can be overridden by a mailbox
|
||||||
list in a channel reference (a \fBGroup\fR specification or the command line).
|
list in a channel reference (a \fBGroup\fR specification or the command line).
|
||||||
.br
|
.br
|
||||||
Example: "\fBPatterns\fR\ \fI%\ !Trash\fR"
|
Example: "\fBPatterns\fR\ \fI%\ !Trash\fR"
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBMaxSize\fR \fIsize\fR[\fBk\fR|\fBm\fR][\fBb\fR]
|
\fBMaxSize\fR \fIsize\fR[\fBk\fR|\fBm\fR][\fBb\fR]
|
||||||
Analogous to the homonymous option in the Stores section, but applies equally
|
Analogous to the homonymous option in the Stores section, but applies equally
|
||||||
to Master and Slave. Note that this actually modifies the Stores, so take care
|
to Master and Slave. Note that this actually modifies the Stores, so take care
|
||||||
not to provide conflicting settings if you use the Stores in multiple Channels.
|
not to provide conflicting settings if you use the Stores in multiple Channels.
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBMaxMessages\fR \fIcount\fR
|
\fBMaxMessages\fR \fIcount\fR
|
||||||
Sets the maximum number of messages to keep in each Slave mailbox.
|
Sets the maximum number of messages to keep in each Slave mailbox.
|
||||||
|
@ -490,7 +497,7 @@ Messages that are flagged (marked as important) and (by default) unread
|
||||||
messages will not be automatically deleted.
|
messages will not be automatically deleted.
|
||||||
If \fIcount\fR is 0, the maximum number of messages is \fBunlimited\fR
|
If \fIcount\fR is 0, the maximum number of messages is \fBunlimited\fR
|
||||||
(Default: \fI0\fR).
|
(Default: \fI0\fR).
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBExpireUnread\fR \fByes\fR|\fBno\fR
|
\fBExpireUnread\fR \fByes\fR|\fBno\fR
|
||||||
Selects whether unread messages should be affected by \fBMaxMessages\fR.
|
Selects whether unread messages should be affected by \fBMaxMessages\fR.
|
||||||
|
@ -500,7 +507,7 @@ However, if your archive contains large amounts of unread messages by design,
|
||||||
treating them as important would practically defeat \fBMaxMessages\fR. In this
|
treating them as important would practically defeat \fBMaxMessages\fR. In this
|
||||||
case you need to enable this option.
|
case you need to enable this option.
|
||||||
(Default: \fBno\fR).
|
(Default: \fBno\fR).
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBSync\fR {\fBNone\fR|[\fBPull\fR] [\fBPush\fR] [\fBNew\fR] [\fBReNew\fR] [\fBDelete\fR] [\fBFlags\fR]|\fBAll\fR}
|
\fBSync\fR {\fBNone\fR|[\fBPull\fR] [\fBPush\fR] [\fBNew\fR] [\fBReNew\fR] [\fBDelete\fR] [\fBFlags\fR]|\fBAll\fR}
|
||||||
Select the synchronization operation(s) to perform:
|
Select the synchronization operation(s) to perform:
|
||||||
|
@ -555,14 +562,14 @@ from the Slave to the Master.
|
||||||
Note that it is not allowed to assert a cell in two ways, e.g.
|
Note that it is not allowed to assert a cell in two ways, e.g.
|
||||||
"\fBSync\fR\ \fBPullNew\fR\ \fBPull\fR" and
|
"\fBSync\fR\ \fBPullNew\fR\ \fBPull\fR" and
|
||||||
"\fBSync\fR\ \fBPullNew\fR\ \fBDelete\fR\ \fBPush\fR" induce error messages.
|
"\fBSync\fR\ \fBPullNew\fR\ \fBDelete\fR\ \fBPush\fR" induce error messages.
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBCreate\fR {\fBNone\fR|\fBMaster\fR|\fBSlave\fR|\fBBoth\fR}
|
\fBCreate\fR {\fBNone\fR|\fBMaster\fR|\fBSlave\fR|\fBBoth\fR}
|
||||||
Automatically create missing mailboxes [on the Master/Slave].
|
Automatically create missing mailboxes [on the Master/Slave].
|
||||||
Otherwise print an error message and skip that mailbox pair if a mailbox
|
Otherwise print an error message and skip that mailbox pair if a mailbox
|
||||||
and the corresponding sync state does not exist.
|
and the corresponding sync state does not exist.
|
||||||
(Global default: \fBNone\fR)
|
(Global default: \fBNone\fR)
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBRemove\fR {\fBNone\fR|\fBMaster\fR|\fBSlave\fR|\fBBoth\fR}
|
\fBRemove\fR {\fBNone\fR|\fBMaster\fR|\fBSlave\fR|\fBBoth\fR}
|
||||||
Propagate mailbox deletions [to the Master/Slave].
|
Propagate mailbox deletions [to the Master/Slave].
|
||||||
|
@ -575,13 +582,13 @@ mark them as deleted. This ensures compatibility with \fBSyncState *\fR.
|
||||||
Note that for safety, non-empty mailboxes are never deleted.
|
Note that for safety, non-empty mailboxes are never deleted.
|
||||||
.br
|
.br
|
||||||
(Global default: \fBNone\fR)
|
(Global default: \fBNone\fR)
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBExpunge\fR {\fBNone\fR|\fBMaster\fR|\fBSlave\fR|\fBBoth\fR}
|
\fBExpunge\fR {\fBNone\fR|\fBMaster\fR|\fBSlave\fR|\fBBoth\fR}
|
||||||
Permanently remove all messages [on the Master/Slave] marked for deletion.
|
Permanently remove all messages [on the Master/Slave] marked for deletion.
|
||||||
See \fBRECOMMENDATIONS\fR below.
|
See \fBRECOMMENDATIONS\fR below.
|
||||||
(Global default: \fBNone\fR)
|
(Global default: \fBNone\fR)
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBCopyArrivalDate\fR {\fByes\fR|\fBno\fR}
|
\fBCopyArrivalDate\fR {\fByes\fR|\fBno\fR}
|
||||||
Selects whether their arrival time should be propagated together with
|
Selects whether their arrival time should be propagated together with
|
||||||
|
@ -591,14 +598,14 @@ sorting intact.
|
||||||
Note that IMAP does not guarantee that the time stamp (termed \fBinternal
|
Note that IMAP does not guarantee that the time stamp (termed \fBinternal
|
||||||
date\fR) is actually the arrival time, but it is usually close enough.
|
date\fR) is actually the arrival time, but it is usually close enough.
|
||||||
(Default: \fBno\fR)
|
(Default: \fBno\fR)
|
||||||
..
|
.
|
||||||
.P
|
.P
|
||||||
\fBSync\fR, \fBCreate\fR, \fBRemove\fR, \fBExpunge\fR,
|
\fBSync\fR, \fBCreate\fR, \fBRemove\fR, \fBExpunge\fR,
|
||||||
\fBMaxMessages\fR, and \fBCopyArrivalDate\fR
|
\fBMaxMessages\fR, and \fBCopyArrivalDate\fR
|
||||||
can be used before any section for a global effect.
|
can be used before any section for a global effect.
|
||||||
The global settings are overridden by Channel-specific options,
|
The global settings are overridden by Channel-specific options,
|
||||||
which in turn are overridden by command line switches.
|
which in turn are overridden by command line switches.
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBSyncState\fR {\fB*\fR|\fIpath\fR}
|
\fBSyncState\fR {\fB*\fR|\fIpath\fR}
|
||||||
Set the location of this Channel's synchronization state files.
|
Set the location of this Channel's synchronization state files.
|
||||||
|
@ -615,7 +622,7 @@ the appended string is made up according to the pattern
|
||||||
(see also \fBFieldDelimiter\fR below).
|
(see also \fBFieldDelimiter\fR below).
|
||||||
.br
|
.br
|
||||||
(Global default: \fI~/.mbsync/\fR).
|
(Global default: \fI~/.mbsync/\fR).
|
||||||
..
|
.
|
||||||
.SS Groups
|
.SS Groups
|
||||||
.TP
|
.TP
|
||||||
\fBGroup\fR \fIname\fR [\fIchannel\fR[\fB:\fIbox\fR[\fB,\fR...]]] ...
|
\fBGroup\fR \fIname\fR [\fIchannel\fR[\fB:\fIbox\fR[\fB,\fR...]]] ...
|
||||||
|
@ -629,12 +636,12 @@ If you supply one or more \fIbox\fRes to a \fIchannel\fR, they will be used
|
||||||
instead of what is specified in the Channel's Patterns.
|
instead of what is specified in the Channel's Patterns.
|
||||||
The same can be done on the command line, except that there newlines can be
|
The same can be done on the command line, except that there newlines can be
|
||||||
used as mailbox name separators as well.
|
used as mailbox name separators as well.
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBChannel\fR[\fBs\fR] \fIchannel\fR[\fB:\fIbox\fR[\fB,\fR...]] ...
|
\fBChannel\fR[\fBs\fR] \fIchannel\fR[\fB:\fIbox\fR[\fB,\fR...]] ...
|
||||||
Add the specified channels to the group. This option can be specified multiple
|
Add the specified channels to the group. This option can be specified multiple
|
||||||
times within a Group.
|
times within a Group.
|
||||||
..
|
.
|
||||||
.SS Global Options
|
.SS Global Options
|
||||||
.TP
|
.TP
|
||||||
\fBFSync\fR \fByes\fR|\fBno\fR
|
\fBFSync\fR \fByes\fR|\fBno\fR
|
||||||
|
@ -647,7 +654,7 @@ Enabling it is a wise choice for file systems mounted with data=writeback,
|
||||||
in particular modern systems like ext4, btrfs and xfs. The performance impact
|
in particular modern systems like ext4, btrfs and xfs. The performance impact
|
||||||
on older file systems may be disproportionate.
|
on older file systems may be disproportionate.
|
||||||
(Default: \fByes\fR)
|
(Default: \fByes\fR)
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBFieldDelimiter\fR \fIdelim\fR
|
\fBFieldDelimiter\fR \fIdelim\fR
|
||||||
The character to use to delimit fields in the string appended to a global
|
The character to use to delimit fields in the string appended to a global
|
||||||
|
@ -657,7 +664,7 @@ DOS/Windows file systems.
|
||||||
This option is meaningless for \fBSyncState\fR if the latter is \fB*\fR,
|
This option is meaningless for \fBSyncState\fR if the latter is \fB*\fR,
|
||||||
obviously. However, it also determines the default of \fBInfoDelimiter\fR.
|
obviously. However, it also determines the default of \fBInfoDelimiter\fR.
|
||||||
(Global default: \fI;\fR on Windows, \fI:\fR everywhere else)
|
(Global default: \fI;\fR on Windows, \fI:\fR everywhere else)
|
||||||
..
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBBufferLimit\fR \fIsize\fR[\fBk\fR|\fBm\fR][\fBb\fR]
|
\fBBufferLimit\fR \fIsize\fR[\fBk\fR|\fBm\fR][\fBb\fR]
|
||||||
The per-Channel, per-direction instantaneous memory usage above which
|
The per-Channel, per-direction instantaneous memory usage above which
|
||||||
|
@ -665,7 +672,7 @@ The per-Channel, per-direction instantaneous memory usage above which
|
||||||
absolute limit, as even a single message can consume more memory than
|
absolute limit, as even a single message can consume more memory than
|
||||||
this.
|
this.
|
||||||
(Default: \fI10M\fR)
|
(Default: \fI10M\fR)
|
||||||
..
|
.
|
||||||
.SH CONSOLE OUTPUT
|
.SH CONSOLE OUTPUT
|
||||||
If \fBmbsync\fR's output is connected to a console, it will print progress
|
If \fBmbsync\fR's output is connected to a console, it will print progress
|
||||||
counters by default. The output will look like this:
|
counters by default. The output will look like this:
|
||||||
|
@ -680,7 +687,7 @@ The message counts represent added messages, messages with updated flags,
|
||||||
and trashed messages, respectively.
|
and trashed messages, respectively.
|
||||||
No attempt is made to calculate the totals in advance, so they grow over
|
No attempt is made to calculate the totals in advance, so they grow over
|
||||||
time as more information is gathered.
|
time as more information is gathered.
|
||||||
..
|
.
|
||||||
.SH RECOMMENDATIONS
|
.SH RECOMMENDATIONS
|
||||||
Make sure your IMAP server does not auto-expunge deleted messages - it is
|
Make sure your IMAP server does not auto-expunge deleted messages - it is
|
||||||
slow, and semantically somewhat questionable. Specifically, Gmail needs to
|
slow, and semantically somewhat questionable. Specifically, Gmail needs to
|
||||||
|
@ -719,7 +726,7 @@ Mutt always does that, while mu4e needs to be configured to do it:
|
||||||
.in +4
|
.in +4
|
||||||
(setq mu4e-change-filenames-when-moving t)
|
(setq mu4e-change-filenames-when-moving t)
|
||||||
.in -4
|
.in -4
|
||||||
..
|
.
|
||||||
.SH INHERENT PROBLEMS
|
.SH INHERENT PROBLEMS
|
||||||
Changes done after \fBmbsync\fR has retrieved the message list will not be
|
Changes done after \fBmbsync\fR has retrieved the message list will not be
|
||||||
synchronised until the next time \fBmbsync\fR is invoked.
|
synchronised until the next time \fBmbsync\fR is invoked.
|
||||||
|
@ -730,7 +737,7 @@ lost if they are marked as deleted after the message list was retrieved but
|
||||||
before the mailbox is expunged.
|
before the mailbox is expunged.
|
||||||
There is no risk as long as the IMAP mailbox is accessed by only one client
|
There is no risk as long as the IMAP mailbox is accessed by only one client
|
||||||
(including \fBmbsync\fR) at a time.
|
(including \fBmbsync\fR) at a time.
|
||||||
..
|
.
|
||||||
.SH FILES
|
.SH FILES
|
||||||
.TP
|
.TP
|
||||||
.B ~/.mbsyncrc
|
.B ~/.mbsyncrc
|
||||||
|
@ -738,7 +745,7 @@ Default configuration file
|
||||||
.TP
|
.TP
|
||||||
.B ~/.mbsync/
|
.B ~/.mbsync/
|
||||||
Directory containing synchronization state files
|
Directory containing synchronization state files
|
||||||
..
|
.
|
||||||
.SH SEE ALSO
|
.SH SEE ALSO
|
||||||
mdconvert(1), mutt(1), maildir(5)
|
mdconvert(1), mutt(1), maildir(5)
|
||||||
.P
|
.P
|
||||||
|
@ -746,7 +753,7 @@ Up to date information on \fBmbsync\fR can be found at http://isync.sf.net/
|
||||||
.P
|
.P
|
||||||
SASL mechanisms are listed at
|
SASL mechanisms are listed at
|
||||||
http://www.iana.org/assignments/sasl-mechanisms/sasl-mechanisms.xhtml
|
http://www.iana.org/assignments/sasl-mechanisms/sasl-mechanisms.xhtml
|
||||||
..
|
.
|
||||||
.SH AUTHORS
|
.SH AUTHORS
|
||||||
Originally written by Michael R. Elkins,
|
Originally written by Michael R. Elkins,
|
||||||
rewritten and currently maintained by Oswald Buddenhagen,
|
rewritten and currently maintained by Oswald Buddenhagen,
|
||||||
|
|
|
@ -680,8 +680,6 @@ do_read( conn_t *sock, char *buf, int len )
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
assert( sock->fd >= 0 );
|
assert( sock->fd >= 0 );
|
||||||
if (pending_wakeup( &sock->fd_timeout ))
|
|
||||||
conf_wakeup( &sock->fd_timeout, sock->conf->timeout );
|
|
||||||
#ifdef HAVE_LIBSSL
|
#ifdef HAVE_LIBSSL
|
||||||
if (sock->ssl) {
|
if (sock->ssl) {
|
||||||
if ((n = ssl_return( "read from", sock, SSL_read( sock->ssl, buf, len ) )) <= 0)
|
if ((n = ssl_return( "read from", sock, SSL_read( sock->ssl, buf, len ) )) <= 0)
|
||||||
|
@ -1055,6 +1053,9 @@ socket_fd_cb( int events, void *aux )
|
||||||
if (events & POLLOUT)
|
if (events & POLLOUT)
|
||||||
conf_notifier( &conn->notify, POLLIN, 0 );
|
conf_notifier( &conn->notify, POLLIN, 0 );
|
||||||
|
|
||||||
|
if (pending_wakeup( &conn->fd_timeout ))
|
||||||
|
conf_wakeup( &conn->fd_timeout, conn->conf->timeout );
|
||||||
|
|
||||||
#ifdef HAVE_LIBSSL
|
#ifdef HAVE_LIBSSL
|
||||||
if (conn->state == SCK_STARTTLS) {
|
if (conn->state == SCK_STARTTLS) {
|
||||||
start_tls_p2( conn );
|
start_tls_p2( conn );
|
||||||
|
|
|
@ -1274,9 +1274,9 @@ box_opened2( sync_vars_t *svars, int t )
|
||||||
opts[1-t] |= OPEN_FLAGS;
|
opts[1-t] |= OPEN_FLAGS;
|
||||||
if (chan->stores[t]->max_size != INT_MAX) {
|
if (chan->stores[t]->max_size != INT_MAX) {
|
||||||
if (chan->ops[t] & OP_RENEW)
|
if (chan->ops[t] & OP_RENEW)
|
||||||
opts[1-t] |= OPEN_OLD_SIZE;
|
opts[1-t] |= OPEN_FLAGS|OPEN_OLD_SIZE;
|
||||||
if (chan->ops[t] & OP_NEW)
|
if (chan->ops[t] & OP_NEW)
|
||||||
opts[1-t] |= OPEN_NEW_SIZE;
|
opts[1-t] |= OPEN_FLAGS|OPEN_NEW_SIZE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (chan->ops[t] & OP_EXPUNGE) {
|
if (chan->ops[t] & OP_EXPUNGE) {
|
||||||
|
|
|
@ -534,7 +534,10 @@ map_name( const char *arg, char **result, int reserve, const char *in, const cha
|
||||||
static int
|
static int
|
||||||
compare_uints( const void *l, const void *r )
|
compare_uints( const void *l, const void *r )
|
||||||
{
|
{
|
||||||
return *(uint *)l - *(uint *)r;
|
uint li = *(uint *)l, ri = *(uint *)r;
|
||||||
|
if (li != ri) // Can't subtract, the result might not fit into signed int.
|
||||||
|
return li > ri ? 1 : -1;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
Loading…
Add table
Reference in a new issue