]>
git.g-eek.se Git - interimap.git/log
Guilhem Moulin [Fri, 5 Jul 2019 04:12:05 +0000 (06:12 +0200)]
typofix
Guilhem Moulin [Thu, 4 Jul 2019 23:03:36 +0000 (01:03 +0200)]
Refactor documentation.
In particular, move manpages to the 'doc' directory, and generate HTML
documentation with `make html`.
Guilhem Moulin [Fri, 5 Jul 2019 00:42:08 +0000 (02:42 +0200)]
Fix minor space damage.
Guilhem Moulin [Thu, 4 Jul 2019 19:02:29 +0000 (21:02 +0200)]
New file doc/development.md.
Explaining how to setup a test environment for interimap(1) and
pullimap(1).
Gustav Eek [Thu, 27 Jun 2019 19:03:23 +0000 (21:03 +0200)]
test suite: import+dump before comparing SQLite dumps.
The dumping quoting style differ between sqlite versions. Compensate
with re-dumping also the reference file
Guilhem Moulin [Thu, 27 Jun 2019 19:00:56 +0000 (21:00 +0200)]
tests/run: fix minor space damage
Guilhem Moulin [Thu, 27 Jun 2019 18:46:26 +0000 (20:46 +0200)]
test suite: make sqlite3 ignore ~/.sqliterc
Guilhem Moulin [Mon, 3 Jun 2019 02:04:36 +0000 (04:04 +0200)]
`make test`: Only consider tests/*/run.
Guilhem Moulin [Mon, 3 Jun 2019 01:50:12 +0000 (03:50 +0200)]
long-lived tests: sleep between 1ms and 999ms.
`shuf -n1 -i1-99` produces a number between 1 and 99, hence `sleep
"0.$(shuf -n1 -i1-99)"` pauses for some time between 100ms and 990ms.
Moreover it's not uniformly distributed as multiples of 100ms (0.100,
0.200, …, 0.900) have twice the probability of other numbers.
Guilhem Moulin [Thu, 30 May 2019 18:52:50 +0000 (20:52 +0200)]
Improve wording.
Guilhem Moulin [Tue, 28 May 2019 14:46:41 +0000 (16:46 +0200)]
tests/run: use the current date as Message-ID in `sample_message`.
A random 128-bit UUID obtained from /proc/sys/kernel/random/uuid works
too but is Linux-specific and requires the proc(5) pseudo-filesystem to
be mounted at /proc.
Guilhem Moulin [Tue, 28 May 2019 14:46:35 +0000 (16:46 +0200)]
typo fixes
Guilhem Moulin [Tue, 28 May 2019 13:47:10 +0000 (15:47 +0200)]
Net::IMAP::InterIMAP: call shutdown(2) on teardown also for type=tunnel.
Since we now use socketpair(2) for type=tunnel (instead of a pair of
unnamed pipes) we can unify communication endpoints creation and
teardown.
Guilhem Moulin [Mon, 27 May 2019 23:37:01 +0000 (01:37 +0200)]
.gitignore update.
Gustav Eek [Thu, 9 May 2019 10:34:04 +0000 (12:34 +0200)]
Add .gitignore.
Guilhem Moulin [Mon, 27 May 2019 22:35:16 +0000 (00:35 +0200)]
typofix
Guilhem Moulin [Mon, 27 May 2019 22:28:33 +0000 (00:28 +0200)]
tests/run: set 'mailbox_list_index = yes' in dovecot.conf.
LAYOUT=index requires mailbox_list_index = yes. It's the default since
dovecot 2.3, but we set it explicitly to support older versions.
Guilhem Moulin [Mon, 27 May 2019 22:21:43 +0000 (00:21 +0200)]
tests: don't fail when a pid can't be killed.
(Usually on ESRCH.)
Guilhem Moulin [Mon, 27 May 2019 22:19:17 +0000 (00:19 +0200)]
tests/run: Don't void the command's standard error.
Guilhem Moulin [Mon, 27 May 2019 22:18:26 +0000 (00:18 +0200)]
tests/run: Honor $TMPDIR if the variable is set.
Otherwise use /dev/shm.
Guilhem Moulin [Mon, 27 May 2019 16:50:21 +0000 (18:50 +0200)]
typofix
Guilhem Moulin [Mon, 27 May 2019 16:40:49 +0000 (18:40 +0200)]
Manpages: clarify that the tunnel command is run following Perl's `exec` semantics.
It is passed to `/bin/sh -c` when it contains shell metacharacters; and
split into words and passed to execvp(3) otherwise.
https://perldoc.perl.org/functions/exec.html
(Since
c8fb54897f046a5a3fb4c1d45dc21fd8bcd882e3 the value no longer
needs to stard with a forward slash.)
Guilhem Moulin [Sun, 26 May 2019 21:28:04 +0000 (23:28 +0200)]
Add test-suite (requires dovecot-imapd).
Guilhem Moulin [Tue, 21 May 2019 12:12:26 +0000 (14:12 +0200)]
New option 'list-reference' to specify a reference name.
This is useful for synchronizing multiple remote servers against
different namespaces belonging to the same local IMAP server (using a
different InterIMAP instance for each local namespace ↔ remote
synchronization, for instance with the newy provided systemd template
unit file).
Guilhem Moulin [Sat, 25 May 2019 13:27:59 +0000 (15:27 +0200)]
libinterimap: use socketpair(2) in tunnel mode.
Rather than two pipe(2). Also, use SOCK_CLOEXEC to save a fcntl() call
when setting the close-on-exec flag on the socket (even though Perl will
likely call fcntl() anyway).
Guilhem Moulin [Wed, 22 May 2019 19:36:21 +0000 (21:36 +0200)]
interimap: fix handling of mod-sequence values greater or equal than 2 << 63.
SQLite processes every INTEGER values as a 8-byte signed integer, so we
need to manually do the conversion from/to uint64_t client-side if we
don't want to overflow or receive floats.
https://www.sqlite.org/datatype3.html#storage_classes_and_datatypes
http://jakegoulding.com/blog/2011/02/06/sqlite-64-bit-integers/
We could also do the same trick for local/remote UIDs, UIDVALITY and
UIDNEXT values to slim the database down at the expense of pre/post-
processing. (Values of SQLite's INTEGER class are 1, 2, 3, 4, 6, or 8
bytes signed integers depending on the manitudes, so we could save some
space for values ≥2³¹.) But that seems a little overkill.
Guilhem Moulin [Sun, 19 May 2019 13:00:45 +0000 (15:00 +0200)]
interimap: Enforce SQLite foreign key constraints.
Setting the 'foreign_keys' PRAGMA during a multi-statement transaction
(when SQLite is not in autocommit mode) is a no-op.
https://www.sqlite.org/pragma.html#pragma_foreign_keys
https://www.sqlite.org/foreignkeys.html#fk_enable
Guilhem Moulin [Wed, 15 May 2019 03:06:07 +0000 (05:06 +0200)]
interimap: avoid caching hierarchy delimiters forever in the database.
Following recommendation from
https://www.imapwiki.org/ClientImplementation/MailboxList#Hierarchy_separators
Instead, use null characters internally, and substitute them with the
local and remote hierarchy delimiters (which thus no longer need to
match) for IMAP commands. This require a database schema upgrade to
alter the mailbox name column type from TEXT to BLOB. We're using
SQLite's user_version PRAGMA to keep track of schema version; beware
that `.dump` doesn't export its value!
In logging messages, local and remote mailbox names are shown as is
(with their respective delimiters) while database mailbox names are
shown by replacing null characters with the *local* hierarchy delimiter.
Moreover for mailbox names specified on the command line or the
configuration file (with the "list-mailbox" option) the *local*
hierarchy delimiter should be used.
Guilhem Moulin [Sun, 19 May 2019 12:53:08 +0000 (14:53 +0200)]
interimap: Refactor --target handling.
Also, accept comma-separated values for --target.
Guilhem Moulin [Wed, 15 May 2019 23:13:31 +0000 (01:13 +0200)]
interimap: fail when two non-INBOX LIST replies return different separators.
This never happens for a single LIST command, but may happen if
mailboxes from different namespaces are being listed. The workaround
here is to run a new interimap instance for each namespace.
Guilhem Moulin [Wed, 15 May 2019 23:05:25 +0000 (01:05 +0200)]
interimap: accept C-style escape sequences in 'list-mailbox'.
This is useful for defining names containing control characters (incl.
\0 for unspecified hierarchy delimiter).
Guilhem Moulin [Wed, 15 May 2019 15:08:07 +0000 (17:08 +0200)]
interimap: Factor out error throwing.
Also, write which --target to use in --delete command suggestions.
Guilhem Moulin [Fri, 24 May 2019 21:52:37 +0000 (23:52 +0200)]
libinterimap: astring is 1*ASTRING-CHAR / string.
Not 1*ATOM-CHAR / string. Also accept LIST responses mailbox names
containing '%', '*', or ']'.
From RFC 3501:
astring = 1*ASTRING-CHAR / string
ASTRING-CHAR = ATOM-CHAR / resp-specials
list = "LIST" SP mailbox SP list-mailbox
list-mailbox = 1*list-char / string
list-char = ATOM-CHAR / list-wildcards / resp-specials
list-wildcards = "%" / "*"
resp-specials = "]"
Guilhem Moulin [Wed, 15 May 2019 22:06:17 +0000 (00:06 +0200)]
libinterimap: quote() the empty string as "" instead of a 0-length literal.
Compression asside, this saves 3 bytes and one round-trip on servers not
supporting non-synchronizing literals, and 4 bytes otherwise.
Guilhem Moulin [Thu, 9 May 2019 23:03:50 +0000 (01:03 +0200)]
libinterimap: bugfix: fix escaped hierarchy delimiters in LIST reponses.
The were returned as escaped quoted specials, like "\\", not as a single
character (backslash in this case).
Guilhem Moulin [Thu, 9 May 2019 15:47:19 +0000 (17:47 +0200)]
wibble
Guilhem Moulin [Sun, 20 Jan 2019 19:31:14 +0000 (20:31 +0100)]
Prepare new release.
Guilhem Moulin [Sun, 20 Jan 2019 19:42:56 +0000 (20:42 +0100)]
Bump copyright years.
Guilhem Moulin [Sun, 20 Jan 2019 19:29:58 +0000 (20:29 +0100)]
Bump version number.
Guilhem Moulin [Sun, 20 Jan 2019 19:26:01 +0000 (20:26 +0100)]
Change e-mail address.
Guilhem Moulin [Mon, 21 Jan 2019 22:59:55 +0000 (23:59 +0100)]
Net::IMAP::InterIMAP: add support for TLSv1.3 (on recent enough Net::SSLeay).
Also, change "SSL_protocols" default value from "!SSLv2 !SSLv3" to
"!SSLv2 !SSLv3 !TLSv1 !TLSv1.1". I.e., only enable TLSv1.2 and later,
which is the default in Debian's OpenSSL as of 1.1.1-2, cf.
https://tracker.debian.org/news/998835/accepted-openssl-111-2-source-into-unstable/ .
Guilhem Moulin [Mon, 21 Jan 2019 16:54:53 +0000 (17:54 +0100)]
pullimap, interimap: don't autocreate statefile or database in long-lived mode.
Guilhem Moulin [Sun, 20 Jan 2019 19:23:20 +0000 (20:23 +0100)]
interimap.service: use --watch=60 rather than --notify.
Guilhem Moulin [Sun, 20 Jan 2019 19:16:53 +0000 (20:16 +0100)]
Note on migrations.
Guilhem Moulin [Sun, 20 Jan 2019 18:55:58 +0000 (19:55 +0100)]
Specify minimum Perl and Net::SSLeay versions.
Guilhem Moulin [Sun, 20 Jan 2019 18:55:33 +0000 (19:55 +0100)]
pullimap, interimap: Use $XDG_CONFIG_HOME/$NAME/config as config file.
Guilhem Moulin [Thu, 10 May 2018 21:54:01 +0000 (23:54 +0200)]
typofix
Guilhem Moulin [Thu, 10 May 2018 15:56:45 +0000 (17:56 +0200)]
pullimap: use extended SEARCH (RFC 4731) when available
Guilhem Moulin [Thu, 10 May 2018 01:35:13 +0000 (03:35 +0200)]
Improve ESEARCH response parsing for full RFC 4466 compatibility.
Guilhem Moulin [Wed, 9 May 2018 01:38:07 +0000 (03:38 +0200)]
Improve wording.
Guilhem Moulin [Tue, 8 May 2018 23:49:37 +0000 (01:49 +0200)]
typofix
Guilhem Moulin [Tue, 8 May 2018 23:22:32 +0000 (01:22 +0200)]
Fix uninitialized value $set in quotemeta
Guilhem Moulin [Tue, 8 May 2018 23:11:55 +0000 (01:11 +0200)]
Add support for untagged ESEARCH responses from RFC 4731.
Guilhem Moulin [Tue, 8 May 2018 23:03:28 +0000 (01:03 +0200)]
Library: new API idle_start() and idle_stop().
Guilhem Moulin [Thu, 26 Apr 2018 14:51:23 +0000 (16:51 +0200)]
Fix manpage generation with pandoc >=2.1
Guilhem Moulin [Sat, 29 Jul 2017 11:38:46 +0000 (13:38 +0200)]
Add missing changelog entry.
Guilhem Moulin [Sat, 29 Jul 2017 11:36:29 +0000 (13:36 +0200)]
Fix manpage generation with pandoc >=1.18.
Guilhem Moulin [Mon, 29 May 2017 16:04:19 +0000 (18:04 +0200)]
Ensure the lower bound of UID ranges is at least 1.
Guilhem Moulin [Tue, 6 Dec 2016 16:51:04 +0000 (17:51 +0100)]
Minor manpage fixes.
Guilhem Moulin [Tue, 6 Dec 2016 15:40:40 +0000 (16:40 +0100)]
pullimap: replace non RFC 5321-compliant envelope sender addresses by <>.
Guilhem Moulin [Thu, 1 Dec 2016 14:35:39 +0000 (15:35 +0100)]
interimap.service: s/--watch/--notify/.
Guilhem Moulin [Thu, 1 Dec 2016 13:39:29 +0000 (14:39 +0100)]
Update changelog.
Guilhem Moulin [Thu, 1 Dec 2016 13:28:29 +0000 (14:28 +0100)]
wibble
Guilhem Moulin [Thu, 1 Dec 2016 13:26:37 +0000 (14:26 +0100)]
"fingerprint" now only pins the cert's SPKI, not the cert itself.
Guilhem Moulin [Tue, 22 Nov 2016 18:41:46 +0000 (19:41 +0100)]
bugfix: when resuming a sync, only consider UIDs greater than a known UIDNEXT.
Guilhem Moulin [Tue, 22 Nov 2016 18:38:36 +0000 (19:38 +0100)]
wibble
Guilhem Moulin [Sat, 25 Jun 2016 19:28:32 +0000 (21:28 +0200)]
wibble
Guilhem Moulin [Sat, 25 Jun 2016 16:34:58 +0000 (18:34 +0200)]
pullimap: quote the local part if need be (cf. RFC 5321).
Guilhem Moulin [Mon, 13 Jun 2016 20:34:56 +0000 (22:34 +0200)]
wibble
Guilhem Moulin [Sun, 12 Jun 2016 20:18:43 +0000 (22:18 +0200)]
pullimap: enable locally unsetting the 'purge-after' option.
Guilhem Moulin [Sun, 12 Jun 2016 20:17:44 +0000 (22:17 +0200)]
pullimap: Clean up PATH.
Guilhem Moulin [Sun, 13 Mar 2016 17:44:24 +0000 (18:44 +0100)]
pullimap: precise that the mailbox needs to be UTF-7 encoded and unquoted.
Guilhem Moulin [Sun, 13 Mar 2016 15:23:26 +0000 (16:23 +0100)]
pullimap: fix struct flock packing
Guilhem Moulin [Sun, 13 Mar 2016 03:02:27 +0000 (04:02 +0100)]
interimap: reformulation in manpage
Guilhem Moulin [Sat, 12 Mar 2016 23:01:27 +0000 (00:01 +0100)]
interimap: Fix watch value when --watch is not set.
Guilhem Moulin [Sat, 12 Mar 2016 22:47:39 +0000 (23:47 +0100)]
typo
Guilhem Moulin [Sat, 12 Mar 2016 22:38:53 +0000 (23:38 +0100)]
pullimap: use fcntl(2) not flock(2) to lock the statefile.
Guilhem Moulin [Sat, 12 Mar 2016 22:35:59 +0000 (23:35 +0100)]
interimap: use SQLite's own locking mechanism to lock down the database.
(instead of rolling our own)
Guilhem Moulin [Sat, 12 Mar 2016 21:46:46 +0000 (22:46 +0100)]
punct
Guilhem Moulin [Sat, 12 Mar 2016 21:43:14 +0000 (22:43 +0100)]
Use a monotype font for IMAP extensions.
Guilhem Moulin [Sat, 12 Mar 2016 21:14:39 +0000 (22:14 +0100)]
Net::IMAP::InterIMAP, interimap: Add support for IMAP NOTIFY [RFC 5465].
Unsollicited LIST responses are currently ignored, hence interimap won't
detect mailbox creation/deletion/subcription/unsubscription.
Guilhem Moulin [Sat, 12 Mar 2016 02:32:27 +0000 (03:32 +0100)]
interimap: fix memory leak.
Guilhem Moulin [Sat, 12 Mar 2016 00:10:30 +0000 (01:10 +0100)]
Net::IMAP::InterIMAP: quit idling when a time jump of at least 30s is detected
This forces a write, so we can better detect detect dead peers after
hibernation for instance.
Guilhem Moulin [Fri, 11 Mar 2016 23:52:42 +0000 (00:52 +0100)]
Net::IMAP::InterIMAP: set SO_{RCV,SND}TIMEO on the socket so we can detect dead peers
Guilhem Moulin [Fri, 11 Mar 2016 23:52:04 +0000 (00:52 +0100)]
Net::IMAP::InterIMAP: set binmode on the socket (and our pipe ends)
Guilhem Moulin [Fri, 11 Mar 2016 23:50:26 +0000 (00:50 +0100)]
Net::IMAP::InterIMAP optimisation: ignore a new message that's immediately expunged
(before we had a chance to sync it)
Guilhem Moulin [Fri, 11 Mar 2016 21:04:17 +0000 (22:04 +0100)]
Net::IMAP::InterIMAP: Don't increase UIDNEXT when receiving EXISTS responses.
Indeed, if the server sends
* n EXISTS
* n EXPUNGE
meaning a new message is received, and is immediately removed
afterwards, the server might have allocated a new UID for the removed
message.
Guilhem Moulin [Fri, 11 Mar 2016 19:57:24 +0000 (20:57 +0100)]
wibble
Guilhem Moulin [Fri, 11 Mar 2016 18:41:13 +0000 (19:41 +0100)]
Explicitly specify inner links for older pandoc.
Guilhem Moulin [Fri, 11 Mar 2016 18:32:05 +0000 (19:32 +0100)]
interimap: convert manpage to markdown.
Guilhem Moulin [Fri, 11 Mar 2016 13:29:52 +0000 (14:29 +0100)]
pullimap: honor the the four-space rule in the markdown.
Guilhem Moulin [Fri, 11 Mar 2016 13:11:14 +0000 (14:11 +0100)]
pullimap: improve manpage.
Guilhem Moulin [Fri, 11 Mar 2016 03:09:53 +0000 (04:09 +0100)]
wibble
Guilhem Moulin [Fri, 11 Mar 2016 02:47:11 +0000 (03:47 +0100)]
pullimap.md: Fix pandoc syntax.
Guilhem Moulin [Fri, 11 Mar 2016 02:08:21 +0000 (03:08 +0100)]
Convert pullimap's manpage to pandoc.
Guilhem Moulin [Thu, 10 Mar 2016 22:46:50 +0000 (23:46 +0100)]
IDLE: fix race condition when an untagged response is received after the DONE
Guilhem Moulin [Thu, 10 Mar 2016 22:38:33 +0000 (23:38 +0100)]
Net::IMAP::InterIMAP: change argument order in slurp and _resp.
Guilhem Moulin [Thu, 10 Mar 2016 00:34:13 +0000 (01:34 +0100)]
pullimap: check all print statements to the SMTP socket.
Guilhem Moulin [Wed, 9 Mar 2016 20:14:40 +0000 (21:14 +0100)]
Net::IMAP::InterIMAP: don't print undefined cache values in debug messages.
Guilhem Moulin [Wed, 9 Mar 2016 19:59:14 +0000 (20:59 +0100)]
pullimap: keep trying to pull new messages after issuing any IMAP command.
Indeed we might get an untagged EXISTS response, meaning that a new
message has been received meanwhile.