]> git.g-eek.se Git - interimap.git/log
interimap.git
9 years agoUse TCP keepalive to detect dead peers.
Guilhem Moulin [Thu, 17 Sep 2015 20:05:09 +0000 (22:05 +0200)]
Use TCP keepalive to detect dead peers.

9 years agoMove SSL fingerprint verification to the the verify callback.
Guilhem Moulin [Wed, 16 Sep 2015 16:28:10 +0000 (18:28 +0200)]
Move SSL fingerprint verification to the the verify callback.

9 years agoDisplay the certificate chain, SSL protocol and cipher in debug mode.
Guilhem Moulin [Wed, 16 Sep 2015 16:05:29 +0000 (18:05 +0200)]
Display the certificate chain, SSL protocol and cipher in debug mode.

9 years agoSet X.509 certificate purpose to 'SSL Server' for SSL_verify=YES.
Guilhem Moulin [Wed, 16 Sep 2015 14:49:00 +0000 (16:49 +0200)]
Set X.509 certificate purpose to 'SSL Server' for SSL_verify=YES.

9 years agoDon't set SO_KEEPALIVE on the socket.
Guilhem Moulin [Tue, 15 Sep 2015 16:24:43 +0000 (18:24 +0200)]
Don't set SO_KEEPALIVE on the socket.

This is most likely useless in our case since the TCP keepalive time is
usually much higher than the IMAP timeout.

9 years agoRemove support for the Binary Content extension [RFC3516].
Guilhem Moulin [Tue, 15 Sep 2015 14:48:29 +0000 (16:48 +0200)]
Remove support for the Binary Content extension [RFC3516].

“If the server does not know how to decode the section's CTE, it MUST
fail the request and issue a "NO" response that contains the
"UNKNOWN-CTE" extended response code.” — [RFC3516 section 4.3]

Unfortunately the client doesn't know which message couldn't be decoded,
so it can't fallback and use BODY instead.

This made ‘use-binary=NO’ pretty much mandatory.  Hence we remove
support for BINARY [RFC3516].  Instead, we increase the thresold for
when to add Zlib full flush points from 4096 to the buffer size (32768).

9 years agoDon't catch SIGHUP as it only work during IDLE.
Guilhem Moulin [Tue, 15 Sep 2015 03:14:06 +0000 (05:14 +0200)]
Don't catch SIGHUP as it only work during IDLE.

Sending any signal while some mails are being copied interrupts the
syscall (eg, write) and attempting to resume crashes interimap.

9 years agowibble
Guilhem Moulin [Tue, 15 Sep 2015 00:25:24 +0000 (02:25 +0200)]
wibble

9 years agoAdd the ability to proxy TCP connections through a SOCKSv5 proxy.
Guilhem Moulin [Tue, 15 Sep 2015 00:10:55 +0000 (02:10 +0200)]
Add the ability to proxy TCP connections through a SOCKSv5 proxy.

9 years agoReplace IO::Socket::INET dependency by the lower lever Socket to enable IPv6.
Guilhem Moulin [Mon, 14 Sep 2015 19:11:56 +0000 (21:11 +0200)]
Replace IO::Socket::INET dependency by the lower lever Socket to enable IPv6.

9 years agoAdd a SIGNAL section to the manpage.
Guilhem Moulin [Mon, 14 Sep 2015 11:54:52 +0000 (13:54 +0200)]
Add a SIGNAL section to the manpage.

9 years agowibble
Guilhem Moulin [Mon, 14 Sep 2015 11:46:02 +0000 (13:46 +0200)]
wibble

9 years agoAccept non-fully qualified commands.
Guilhem Moulin [Mon, 14 Sep 2015 00:23:22 +0000 (02:23 +0200)]
Accept non-fully qualified commands.

9 years agoPass literals by reference to save memory.
Guilhem Moulin [Sun, 13 Sep 2015 23:20:53 +0000 (01:20 +0200)]
Pass literals by reference to save memory.

9 years agoReplace IO::Socket::SSL dependency by the lower level Net::SSLeay.
Guilhem Moulin [Sun, 13 Sep 2015 12:04:03 +0000 (14:04 +0200)]
Replace IO::Socket::SSL dependency by the lower level Net::SSLeay.

Also,

  * Rename the 'SSL_verify_trusted_peer', 'SSL_ca_path', and
    'SSL_cipher_list' options to 'SSL_CApath', 'SSL_verify' and
    'SSL_cipherlist', respectively.
  * Add an option 'SSL_CAfile' to specify a file containing trusted
    certificates to use during server certificate authentication.
  * Replace Compress::Zlib dependency by the lower level
    Compress::Raw::Zlib.

9 years agoFix detection of boolean options.
Guilhem Moulin [Sun, 13 Sep 2015 11:37:50 +0000 (13:37 +0200)]
Fix detection of boolean options.

9 years agoUse 0/1 internally for 'NO'/'YES'.
Guilhem Moulin [Thu, 10 Sep 2015 22:30:23 +0000 (00:30 +0200)]
Use 0/1 internally for 'NO'/'YES'.

9 years agoFactor the SSL code (imaps and STARTTLS).
Guilhem Moulin [Thu, 10 Sep 2015 22:20:10 +0000 (00:20 +0200)]
Factor the SSL code (imaps and STARTTLS).

Also, add SSL options SINGLE_ECDH_USE, SINGLE_DH_USE, NO_SSLv2, NO_SSLv3
and NO_COMPRESSION to the compiled-in CTX options.

And use SSL_MODE_AUTO_RETRY to avoid SSL_read failures during a
handshake.

9 years agoPrint IMAP traffic stats when receiving a SIGHUP.
Guilhem Moulin [Thu, 10 Sep 2015 18:39:50 +0000 (20:39 +0200)]
Print IMAP traffic stats when receiving a SIGHUP.

9 years agoDon't warn that no compression is enabled if the server doesn't support it.
Guilhem Moulin [Thu, 10 Sep 2015 18:19:36 +0000 (20:19 +0200)]
Don't warn that no compression is enabled if the server doesn't support it.

9 years agowibble
Guilhem Moulin [Thu, 10 Sep 2015 01:38:40 +0000 (03:38 +0200)]
wibble

9 years agoExit with return value 0 when receiving a TERM signal.
Guilhem Moulin [Wed, 9 Sep 2015 21:32:41 +0000 (23:32 +0200)]
Exit with return value 0 when receiving a TERM signal.

9 years agoBump version.
Guilhem Moulin [Wed, 9 Sep 2015 20:44:00 +0000 (22:44 +0200)]
Bump version.

9 years agoAdd a list of supported extensions.
Guilhem Moulin [Wed, 9 Sep 2015 20:30:00 +0000 (22:30 +0200)]
Add a list of supported extensions.

9 years agoRefactoring.
Guilhem Moulin [Wed, 9 Sep 2015 19:37:35 +0000 (21:37 +0200)]
Refactoring.

9 years agoAdd support for the Binary Content extension [RFC3516].
Guilhem Moulin [Wed, 9 Sep 2015 14:05:36 +0000 (16:05 +0200)]
Add support for the Binary Content extension [RFC3516].

Unfortunately as of Debian Wheezy it doesn't work for Dovecot with
COMPRESS=DEFLATE [RFC4978] and non-synchronizing literals.

    perl -e 'use Compress::Raw::Zlib;
             print "a COMPRESS DEFLATE\r\n";
             sleep 1;
             my $d = new Compress::Raw::Zlib::Deflate( -WindowBits => -15 );
             $d->deflate("b APPEND TRASH ~{1+}\r\nx\r\n", my $buf);
             print $buf;
             $d->flush($buf, Z_SYNC_FLUSH);
             print $buf;
             sleep 1;
    ' | /usr/lib/dovecot/imap
    imap(guilhem): Panic: stream doesn't support seeking backwards

Interestingly, it works just fine for non-binary literals:

    perl -e 'use Compress::Raw::Zlib;
             print "a COMPRESS DEFLATE\r\n";
             sleep 1;
             my $d = new Compress::Raw::Zlib::Deflate( -WindowBits => -15 );
             $d->deflate("b APPEND TRASH {1+}\r\nx\r\n", my $buf);
             print $buf;
             $d->flush($buf, Z_SYNC_FLUSH);
             print $buf;
             sleep 1;
    ' | /usr/lib/dovecot/imap

However I can't reproduce the problem Dovecot 2.2.18 and Debian Sid (but
it doesn't help to install Dovecot from testing to my Wheezy box.)

9 years agoAdd a configuration option 'null-stderr=YES'.
Guilhem Moulin [Tue, 8 Sep 2015 23:18:14 +0000 (01:18 +0200)]
Add a configuration option 'null-stderr=YES'.

To send STDERR to /dev/null for type=tunnel.

9 years agoAdd support for the IMAP COMPRESS extension [RFC4978].
Guilhem Moulin [Tue, 8 Sep 2015 22:44:05 +0000 (00:44 +0200)]
Add support for the IMAP COMPRESS extension [RFC4978].

Also, add traffic statistics after closing the connection to the IMAP
server.

9 years agowibble
Guilhem Moulin [Mon, 7 Sep 2015 23:02:23 +0000 (01:02 +0200)]
wibble

9 years agoAdd an option --watch to keep the connections open and wait for changes.
Guilhem Moulin [Mon, 7 Sep 2015 22:59:39 +0000 (00:59 +0200)]
Add an option --watch to keep the connections open and wait for changes.

9 years agowibble
Guilhem Moulin [Mon, 7 Sep 2015 22:20:57 +0000 (00:20 +0200)]
wibble

9 years agoBlock SIGINT signals to the children for type=tunnel.
Guilhem Moulin [Mon, 7 Sep 2015 22:17:24 +0000 (00:17 +0200)]
Block SIGINT signals to the children for type=tunnel.

So we can clean after us (and for instance remove the lockfile).

9 years agoRename ‘imapsync’ to ‘interimap’.
Guilhem Moulin [Mon, 7 Sep 2015 15:36:00 +0000 (17:36 +0200)]
Rename ‘imapsync’ to ‘interimap’.

To avoid confusion with http://imapsync.lamiral.info .

9 years agoAdd a note imapsync vs. offlineimap.
Guilhem Moulin [Mon, 7 Sep 2015 13:49:21 +0000 (15:49 +0200)]
Add a note imapsync vs. offlineimap.

9 years agoAdd instruction for how to build a Debian package from the last release.
Guilhem Moulin [Mon, 7 Sep 2015 13:16:33 +0000 (15:16 +0200)]
Add instruction for how to build a Debian package from the last release.

9 years agoAdd instructions for how to build the Debian package.
Guilhem Moulin [Sun, 6 Sep 2015 20:31:49 +0000 (22:31 +0200)]
Add instructions for how to build the Debian package.

9 years agoPromote SSH connections to the remote IMAP server.
Guilhem Moulin [Sun, 6 Sep 2015 20:28:49 +0000 (22:28 +0200)]
Promote SSH connections to the remote IMAP server.

9 years agowibble
Guilhem Moulin [Sun, 6 Sep 2015 19:44:43 +0000 (21:44 +0200)]
wibble

9 years agoGetopt::Long is a core module.
Guilhem Moulin [Sun, 6 Sep 2015 19:26:00 +0000 (21:26 +0200)]
Getopt::Long is a core module.

9 years agoFix typo: lUID ↔ rUID.
Guilhem Moulin [Sun, 6 Sep 2015 18:58:52 +0000 (20:58 +0200)]
Fix typo: lUID ↔ rUID.

9 years agoMessage Sequence Match Data: sequence set come before UIDs.
Guilhem Moulin [Sun, 6 Sep 2015 18:51:37 +0000 (20:51 +0200)]
Message Sequence Match Data: sequence set come before UIDs.

Cf. RFC 7162:

  seq-match-data = "(" known-sequence-set SP known-uid-set ")"

9 years agoAdd README file.
Guilhem Moulin [Sat, 5 Sep 2015 15:30:07 +0000 (17:30 +0200)]
Add README file.

9 years agoAdd INSTALL file.
Guilhem Moulin [Sat, 5 Sep 2015 15:20:21 +0000 (17:20 +0200)]
Add INSTALL file.

9 years agotypo
Guilhem Moulin [Sat, 5 Sep 2015 15:04:14 +0000 (17:04 +0200)]
typo

9 years agoSample UIDs in SELECT $mailbox (QRESYNC ...) commands.
Guilhem Moulin [Sat, 5 Sep 2015 14:44:51 +0000 (16:44 +0200)]
Sample UIDs in SELECT $mailbox (QRESYNC ...) commands.

This should avoids most false-positive among messages reported as
VANISHED by the server but unknown from the database.  The reason for
this server behavior is that QRESYNC [RFC7162] doesn't force the server
to remember the MODSEQs of EXPUNGEd messages.  By passing a sample of
known UIDs/sequence numbers we let the server know that the messages
have been EXPUNGEd [RFC7162, section 3.2.5.2].

9 years agotypo
Guilhem Moulin [Tue, 1 Sep 2015 12:59:00 +0000 (14:59 +0200)]
typo

9 years agotypo
Guilhem Moulin [Tue, 1 Sep 2015 01:14:58 +0000 (03:14 +0200)]
typo

9 years agoUse groff's mailto markup.
Guilhem Moulin [Tue, 1 Sep 2015 00:16:03 +0000 (02:16 +0200)]
Use groff's mailto markup.

9 years agotypo
Guilhem Moulin [Mon, 31 Aug 2015 23:52:40 +0000 (01:52 +0200)]
typo

9 years agoCompress "No match for vanished local/remote UID ..." warnings.
Guilhem Moulin [Mon, 31 Aug 2015 22:46:12 +0000 (00:46 +0200)]
Compress "No match for vanished local/remote UID ..." warnings.

9 years agoUnconditionally restart the systemd service.
Guilhem Moulin [Thu, 20 Aug 2015 17:11:36 +0000 (19:11 +0200)]
Unconditionally restart the systemd service.

It's unfortunate in that the service keep restarting every n secs in
case the remote server is down.

Ideally systemd would offer a way to restart services with a
non-constant (e.g., exponential) progression in case of failure.

9 years agoAdd support for SASL-IR (RFC 4959) to save a round-trip in AUTHENTICATE commands.
Guilhem Moulin [Sun, 9 Aug 2015 18:38:30 +0000 (20:38 +0200)]
Add support for SASL-IR (RFC 4959) to save a round-trip in AUTHENTICATE commands.

9 years agoLog high precision timestamps in the logfile.
Guilhem Moulin [Fri, 31 Jul 2015 20:41:24 +0000 (22:41 +0200)]
Log high precision timestamps in the logfile.

Also, don't try to import POSIX or Time::HiRes unless the logfile is
configured.

9 years agoLog debug messages to STDERR unless 'logfile' is set.
Guilhem Moulin [Fri, 31 Jul 2015 20:40:28 +0000 (22:40 +0200)]
Log debug messages to STDERR unless 'logfile' is set.

However don't include timestamps to STDERR, that's the job of the
syslog.

9 years agoAdd a note regrading the default database with type=tunnel.
Guilhem Moulin [Fri, 31 Jul 2015 15:20:44 +0000 (17:20 +0200)]
Add a note regrading the default database with type=tunnel.

9 years agotypo
Guilhem Moulin [Fri, 31 Jul 2015 15:17:29 +0000 (17:17 +0200)]
typo

9 years agoLog out before exiting.
Guilhem Moulin [Wed, 29 Jul 2015 23:39:30 +0000 (01:39 +0200)]
Log out before exiting.

9 years agoDon't try to rename children of mailboxes with \NoInferiors or \HasNoChildren attribute.
Guilhem Moulin [Wed, 29 Jul 2015 23:26:16 +0000 (01:26 +0200)]
Don't try to rename children of mailboxes with \NoInferiors or \HasNoChildren attribute.

9 years agoAdd a $try parameter to create, delete, rename, etc.
Guilhem Moulin [Wed, 29 Jul 2015 23:16:51 +0000 (01:16 +0200)]
Add a $try parameter to create, delete, rename, etc.

And no longer crash when trying to create a mailbox that already exists.
This could happen for instance if list-select-opts contains 'SUBSCRIBE'
and the mailbox is not subscribed on one side.

9 years agoIgnore mailboxes with '\NoSelect' attribute.
Guilhem Moulin [Wed, 29 Jul 2015 22:57:14 +0000 (00:57 +0200)]
Ignore mailboxes with '\NoSelect' attribute.

9 years agoDon't initialize cache for ignore mailboxes.
Guilhem Moulin [Wed, 29 Jul 2015 22:39:58 +0000 (00:39 +0200)]
Don't initialize cache for ignore mailboxes.

9 years agotypo
Guilhem Moulin [Wed, 29 Jul 2015 22:39:33 +0000 (00:39 +0200)]
typo

9 years agoReformulation.
Guilhem Moulin [Wed, 29 Jul 2015 22:07:07 +0000 (00:07 +0200)]
Reformulation.

9 years agowibble
Guilhem Moulin [Wed, 29 Jul 2015 22:01:35 +0000 (00:01 +0200)]
wibble

9 years agoDon't push non-existing mailboxes to @MAILBOXES.
Guilhem Moulin [Wed, 29 Jul 2015 22:10:28 +0000 (00:10 +0200)]
Don't push non-existing mailboxes to @MAILBOXES.

9 years agoDon't set to a ignored mailbox.
Guilhem Moulin [Tue, 28 Jul 2015 10:31:49 +0000 (12:31 +0200)]
Don't set  to a ignored mailbox.

9 years agotypo
Guilhem Moulin [Mon, 27 Jul 2015 22:47:32 +0000 (00:47 +0200)]
typo

9 years agoUpdate systemd service file.
Guilhem Moulin [Mon, 27 Jul 2015 22:12:44 +0000 (00:12 +0200)]
Update systemd service file.

9 years agoUpdate default config file.
Guilhem Moulin [Mon, 27 Jul 2015 22:12:14 +0000 (00:12 +0200)]
Update default config file.

9 years agoEnable fine-grained control on the mailboxes to consider.
Guilhem Moulin [Mon, 27 Jul 2015 21:45:09 +0000 (23:45 +0200)]
Enable fine-grained control on the mailboxes to consider.

Add 3 options:
  - list-mailbox
  - list-select-opts
  - ignore-mailbox

The first two control the initial LIST command, while the last one is a
regular expression to filter out mailboxes to exclude from the LIST
response.

9 years agoDrop the 'read-only' option.
Guilhem Moulin [Mon, 27 Jul 2015 20:52:21 +0000 (22:52 +0200)]
Drop the 'read-only' option.

It didn't really work since STORE commands are answered with a tagged OK
response for instance.

9 years agobugfix: Don't exist with the children's exist status upon error.
Guilhem Moulin [Mon, 27 Jul 2015 20:49:07 +0000 (22:49 +0200)]
bugfix: Don't exist with the children's exist status upon error.

9 years agoNo longer try to guess whether a mailbox was deleted or renamed.
Guilhem Moulin [Mon, 27 Jul 2015 20:02:17 +0000 (22:02 +0200)]
No longer try to guess whether a mailbox was deleted or renamed.

This was too error-prone.  Instead, abort if a naming conflict occurs,
and provide explicit commands --delete and --rename to delete or rename
a mailbox.

9 years agoReformulate introduction in the manpage.
Guilhem Moulin [Sun, 26 Jul 2015 18:02:01 +0000 (20:02 +0200)]
Reformulate introduction in the manpage.

9 years agoMake --oneshot the default mode and disable watch mode.
Guilhem Moulin [Sun, 26 Jul 2015 17:52:52 +0000 (19:52 +0200)]
Make --oneshot the default mode and disable watch mode.

Due to multiple bugs in dovecot 2.13 and 2.18's implementation of the
NOTIFY extension [RFC5465]:

    http://dovecot.org/pipermail/dovecot/2015-July/101473.html
    http://dovecot.org/pipermail/dovecot/2015-July/101474.html
    http://dovecot.org/pipermail/dovecot/2015-July/101514.html

9 years agotypo
Guilhem Moulin [Sun, 26 Jul 2015 17:42:35 +0000 (19:42 +0200)]
typo

9 years agobugfix: Fetching new messages from local and adding them to remote modifies its UIDNEXT.
Guilhem Moulin [Sun, 26 Jul 2015 13:53:13 +0000 (15:53 +0200)]
bugfix: Fetching new messages from local and adding them to remote modifies its UIDNEXT.

So we need to check again the first $source (remote) whenever the last
one (local) added new messages to it.

9 years agowibble
Guilhem Moulin [Sun, 26 Jul 2015 13:50:44 +0000 (15:50 +0200)]
wibble

9 years agotypo
Guilhem Moulin [Sun, 26 Jul 2015 04:59:52 +0000 (06:59 +0200)]
typo

9 years agoFix typo in systemd service file.
Guilhem Moulin [Sun, 26 Jul 2015 04:59:00 +0000 (06:59 +0200)]
Fix typo in systemd service file.

9 years agoFix bug in synchronizing the subscription list.
Guilhem Moulin [Sun, 26 Jul 2015 04:58:27 +0000 (06:58 +0200)]
Fix bug in synchronizing the subscription list.

9 years agowibble
Guilhem Moulin [Sun, 26 Jul 2015 04:57:22 +0000 (06:57 +0200)]
wibble

9 years agoCheck return value after a SQL UPDATE.
Guilhem Moulin [Sun, 26 Jul 2015 04:56:04 +0000 (06:56 +0200)]
Check return value after a SQL UPDATE.

9 years agoAdd a brief help.
Guilhem Moulin [Sun, 26 Jul 2015 01:00:33 +0000 (03:00 +0200)]
Add a brief help.

9 years agoAdd an option 'logfile' to log debug messages.
Guilhem Moulin [Sun, 26 Jul 2015 00:42:32 +0000 (02:42 +0200)]
Add an option 'logfile' to log debug messages.

9 years agoDon't use readline with non-blocking IO.
Guilhem Moulin [Sat, 25 Jul 2015 23:36:48 +0000 (01:36 +0200)]
Don't use readline with non-blocking IO.

Instead use the select(2) syscall to see if there data available while
we're waiting for notifications.
Except for SSL/TLS connections, where we have to check if there is
unprocessed cached data in the current SSL frame.

9 years agoClean how we're sending commands to the server.
Guilhem Moulin [Sat, 25 Jul 2015 23:14:39 +0000 (01:14 +0200)]
Clean how we're sending commands to the server.

9 years agoLOGINDISABLED only disables plain-text mechanisms.
Guilhem Moulin [Sat, 25 Jul 2015 22:58:12 +0000 (00:58 +0200)]
LOGINDISABLED only disables plain-text mechanisms.

Also, LOGIN is always supported.

9 years agoFix documentation.
Guilhem Moulin [Sat, 25 Jul 2015 22:57:30 +0000 (00:57 +0200)]
Fix documentation.

9 years agoAdd a manpage and improve documentation.
Guilhem Moulin [Sat, 25 Jul 2015 14:23:45 +0000 (16:23 +0200)]
Add a manpage and improve documentation.

9 years agoRename '--check' to '--repair' and improve repairing algorithm.
Guilhem Moulin [Sat, 25 Jul 2015 01:29:48 +0000 (03:29 +0200)]
Rename '--check' to '--repair' and improve repairing algorithm.

9 years agoBugfix: allow the absence of default section in the config file.
Guilhem Moulin [Fri, 24 Jul 2015 23:07:53 +0000 (01:07 +0200)]
Bugfix: allow the absence of default section in the config file.

9 years agowibble
Guilhem Moulin [Fri, 24 Jul 2015 23:07:10 +0000 (01:07 +0200)]
wibble

9 years agoDetect and handle interrupted syncs to avoid message duplicates.
Guilhem Moulin [Fri, 24 Jul 2015 23:03:25 +0000 (01:03 +0200)]
Detect and handle interrupted syncs to avoid message duplicates.

9 years agoPass messages by reference.
Guilhem Moulin [Fri, 24 Jul 2015 16:02:21 +0000 (18:02 +0200)]
Pass messages by reference.

9 years agobugfix: new messages can be received while FETCHing new messages.
Guilhem Moulin [Fri, 24 Jul 2015 15:29:52 +0000 (17:29 +0200)]
bugfix: new messages can be received while FETCHing new messages.

9 years agowibble
Guilhem Moulin [Fri, 24 Jul 2015 15:00:26 +0000 (17:00 +0200)]
wibble

9 years agoExit gracefully when catching a SIGHUP.
Guilhem Moulin [Fri, 24 Jul 2015 14:55:21 +0000 (16:55 +0200)]
Exit gracefully when catching a SIGHUP.

9 years agoDon't prefix logs by a timestamp, that's a syslog thing.
Guilhem Moulin [Thu, 23 Jul 2015 23:27:43 +0000 (01:27 +0200)]
Don't prefix logs by a timestamp, that's a syslog thing.

9 years agowibble
Guilhem Moulin [Thu, 23 Jul 2015 23:21:49 +0000 (01:21 +0200)]
wibble