Arnt Gulbrandsen [Tue, 7 Apr 2015 17:28:59 +0000 (19:28 +0200)]
SASL LOGIN supports an initial response.
Arnt Gulbrandsen [Wed, 18 Mar 2015 09:42:35 +0000 (10:42 +0100)]
be syntactically compatible with dovecot's inthread
dovecot implements an older draft and does not advertise the extension.
this change accepts the syntax dovecot accepts, and does the right thing
(ie. what I think is the right thing, which is perhaps not what the client
author thinks).
Arnt Gulbrandsen [Sat, 14 Feb 2015 17:00:46 +0000 (18:00 +0100)]
Cope properly uidvalidity changes
When e.g. a BDR script recovers from a database conflict, at least one
mailbox needs to have reassigned UIDs. If anyone has that mailbox open
meanwhile, aox should get rid of those connections.
Arnt Gulbrandsen [Wed, 21 Jan 2015 10:49:59 +0000 (11:49 +0100)]
help debug why the server quits sometimes
Arnt Gulbrandsen [Wed, 21 Jan 2015 10:49:12 +0000 (11:49 +0100)]
send highestmodseq when appropriate
not just at session start, but always
Arnt Gulbrandsen [Wed, 21 Jan 2015 10:32:00 +0000 (11:32 +0100)]
FETCH CHANGEDSINCE x is >x, not >=x
>=x is also legal, since the server may always send an unsolicited
response, but...
Arnt Gulbrandsen [Wed, 21 Jan 2015 10:30:00 +0000 (11:30 +0100)]
fix and reenable COMPRESS=DEFLATE
the problem was that zlib's allocated and then used it in ways our
allocator does not allow: mixing pointers and random binary data. if
that's done often enough, sooner or later the allocator will misinterpret
a random number as a pointer and then not free the object "pointed to".
this change leverages the existing fd/thread cleanup.
Arnt Gulbrandsen [Tue, 16 Dec 2014 13:58:22 +0000 (14:58 +0100)]
comply with the THRID draft instead of using arnt's gmail hack
Arnt Gulbrandsen [Tue, 16 Dec 2014 13:13:44 +0000 (14:13 +0100)]
jkt knows his Latin
Arnt Gulbrandsen [Tue, 28 Oct 2014 08:54:52 +0000 (09:54 +0100)]
handle UTF8 APPEND correctly
from Michael Slusarz.
Arnt Gulbrandsen [Thu, 16 Oct 2014 07:29:36 +0000 (09:29 +0200)]
Accept some overlong SASL reponses
Base64 ignores random characters, so inserting extra spaces or quote
characters is harmless in the base64 stage. This change permits broken
clients that send "aaaa" instead of aaaa to work with digest-md5. This
concerns old versions of mailkit and possibly another client.
Arnt Gulbrandsen [Thu, 16 Oct 2014 07:28:46 +0000 (09:28 +0200)]
Accept an empty list of return options
The empty list doesn't do anything, but is legal. Reported by Michael
Slusarz.
Arnt Gulbrandsen [Thu, 16 Oct 2014 07:25:13 +0000 (09:25 +0200)]
Handle unicode append properly
This is a noop; it just accepts syntax and ignores it. the syntax modifier
is one I asked to have removed from the draft that became 6855 because its
job is indistinguishable from 'enable utf8=accept', and obviously I
thought it was removed.
Reported by Michael Slusarz.
Arnt Gulbrandsen [Wed, 15 Oct 2014 11:32:08 +0000 (13:32 +0200)]
Remove SSLv3 support.
As far as I can see, SMTP, IMAP and POP clients are essentially
invulnerable to the attack du jour, since the server (or an impostor)
can't really make clients open new connections. It would be a strange
client that lets a server tell it to open thousands connections and
control the preauth commands.
But I see no real reason to support SSLv3 any more anyway, so this change
disable SSLv3 support.
Arnt Gulbrandsen [Wed, 10 Sep 2014 12:41:04 +0000 (14:41 +0200)]
We need at least one nonwhitespace character in the human-readble text
pointed out by jkt
Arnt Gulbrandsen [Wed, 20 Aug 2014 16:01:56 +0000 (18:01 +0200)]
prevent thread leakage.
without this, archiveopteryx would leak one pthread id for some/every
network-level close, and eventually pthreads would run out.
Arnt Gulbrandsen [Wed, 20 Aug 2014 16:01:21 +0000 (18:01 +0200)]
make 'aox list users' a little more human-readable
Arnt Gulbrandsen [Wed, 23 Jul 2014 10:18:51 +0000 (12:18 +0200)]
lock a little less at select time
this probably permits select and inject to proceed concurrently
Arnt Gulbrandsen [Wed, 23 Jul 2014 10:18:16 +0000 (12:18 +0200)]
words fail me.
Arnt Gulbrandsen [Sat, 19 Jul 2014 10:06:10 +0000 (12:06 +0200)]
Markus Dahms didn't have that index.
adding "if exists" is harmless; that index should have existed but this
command is run precisely at the first instant where that no longer
matters.
Arnt Gulbrandsen [Fri, 18 Jul 2014 12:11:04 +0000 (14:11 +0200)]
finish implementing qresync
Arnt Gulbrandsen [Fri, 18 Jul 2014 12:09:21 +0000 (14:09 +0200)]
downgrade return-path as well as other address fields
Arnt Gulbrandsen [Thu, 17 Jul 2014 08:32:27 +0000 (10:32 +0200)]
send mailboxes using utf8 if the client supports that
suboptioml: the server prefers using literals for almost all mailboxes
that contain utf8
Arnt Gulbrandsen [Wed, 16 Jul 2014 13:48:31 +0000 (15:48 +0200)]
new root zone from internic
Arnt Gulbrandsen [Tue, 15 Jul 2014 18:37:52 +0000 (20:37 +0200)]
:days 0 in sieve vacation now means three minutes
this makes vacation more or less usable for classic autoresponses,
which may need to be issued much more often than every day
Arnt Gulbrandsen [Tue, 15 Jul 2014 14:34:02 +0000 (16:34 +0200)]
more 8-bit fetching, begone
Arnt Gulbrandsen [Mon, 14 Jul 2014 19:30:22 +0000 (21:30 +0200)]
get rid of the remaining 8-bit Address API
update all callers to use the UString API, and do their own
conversion from 8-bit, if and as appropriate
Arnt Gulbrandsen [Mon, 14 Jul 2014 17:27:18 +0000 (19:27 +0200)]
improve aox' ability to sent out unicode mail
Arnt Gulbrandsen [Mon, 14 Jul 2014 17:26:35 +0000 (19:26 +0200)]
bodyparts like jøran don't need quoting
they're either illegal or legal without quoting, so quoting is never a
good idea.
Arnt Gulbrandsen [Mon, 14 Jul 2014 14:27:22 +0000 (16:27 +0200)]
EAI was _very_ improperly supported. fix.
Arnt Gulbrandsen [Mon, 14 Jul 2014 13:22:58 +0000 (15:22 +0200)]
some valid unicode addresses couldn't be inserted. fix.
Arnt Gulbrandsen [Mon, 14 Jul 2014 12:04:20 +0000 (14:04 +0200)]
allow unicode in usernames
undefined codepoints are allowed, but whitespace is not.
Abhijit Menon-Sen [Thu, 3 Jul 2014 16:46:55 +0000 (22:16 +0530)]
Fix reused table name; thanks to Jim from NSS
Arnt Gulbrandsen [Tue, 3 Jun 2014 13:15:21 +0000 (15:15 +0200)]
disable -Werror
Old and new version of g++ disagree about core/md5.cpp. The easiest way
out of that is to turn off -Werror. (Personally I resolve it by mostly
using Clang instead.)
Arnt Gulbrandsen [Tue, 3 Jun 2014 11:16:03 +0000 (13:16 +0200)]
teach AddressParser about unicode addresses.
this should've been in 3.2.0, but I put it aside by mistake when some
tests didn't pass. fixed now.
Arnt Gulbrandsen [Mon, 12 May 2014 12:46:31 +0000 (14:46 +0200)]
be compatible with older versions of g++
Arnt Gulbrandsen [Mon, 12 May 2014 12:40:47 +0000 (14:40 +0200)]
fix incomprehensible typo
Arnt Gulbrandsen [Mon, 12 May 2014 12:40:20 +0000 (14:40 +0200)]
procpid was renamed in pg 9.2, not 9.3
Arnt Gulbrandsen [Thu, 8 May 2014 08:19:59 +0000 (10:19 +0200)]
update to latest root zone
Arnt Gulbrandsen [Wed, 30 Apr 2014 12:58:31 +0000 (14:58 +0200)]
set Message::threadId() correctly when caching at injection
Message::threadId() isn't used much, only for the gmail compatibility
blah, so it's safe to say that noone will run into this bug. but I fix it
all the same.
Arnt Gulbrandsen [Mon, 28 Apr 2014 12:17:56 +0000 (14:17 +0200)]
add the first part of RFC5162 support (quick resync)
sogo needs this and I want sogo to work.
there's more to come... in Dave Cridland's words, 5162 has many moving
parts:
the parts where Select executes a Fetch are not done. it's actually
optional, so the client has to issue Fetch anyway. a splendid example of
pointless complexity.
Select retrieves the deleted messages, but does not yet issue vanished
(earlier).
fetch (vanished) is not done.
Arnt Gulbrandsen [Fri, 25 Apr 2014 15:55:41 +0000 (17:55 +0200)]
thread more outlook messages
we already had code that handled outlook replies to long threads, but
accidentally nothing to handle outlook replies to the thread root, which
is quite a common case. this should fix that.
Arnt Gulbrandsen [Sat, 29 Mar 2014 16:11:45 +0000 (17:11 +0100)]
base 'younger' on delete time if searching deleted mail.
this takes care of to the presumably rather common use case "undelete
whatever has been deleted in the past day", which I just now assumed to
be what "aox undelete /users/arnt/inbox younger 1" does. it wasn't. noe
it is, as a matter of DWIM.
the previous behaviour used the original insertion time.
I've also updated the documentation on the web, but not pushed that
change.
Arnt Gulbrandsen [Sat, 29 Mar 2014 15:46:47 +0000 (16:46 +0100)]
speling
Arnt Gulbrandsen [Sat, 29 Mar 2014 15:46:05 +0000 (16:46 +0100)]
aox ... younger 2 accidentally used the wrong time unit
this makes the code match the documentation
Arnt Gulbrandsen [Wed, 5 Mar 2014 07:22:51 +0000 (08:22 +0100)]
recycle thread identifiers
it's not enough to release threads properly, we also have to release
thread identifiers. if we ever run out of identifiers, the server has to
stop.
Arnt Gulbrandsen [Sun, 2 Mar 2014 07:51:00 +0000 (08:51 +0100)]
there's no need to =?...?= when the client speaks eai
Arnt Gulbrandsen [Sun, 2 Mar 2014 07:50:27 +0000 (08:50 +0100)]
avoid sending bare linefeeds along with overlong message-ids
Arnt Gulbrandsen [Wed, 12 Feb 2014 21:49:08 +0000 (22:49 +0100)]
make the imap thread extension work
Abhijit Menon-Sen [Mon, 10 Mar 2014 13:44:59 +0000 (19:14 +0530)]
Don't check lockSanity at startup
We composed the query before the server_version was discovered, so the
test to decide whether to generate procpid or pid was always generating
procpid.
The point of the failing query was to warn users about locks at startup,
but the utility of the nice log message is outweighed by the price of
having to generate version-dependent queries.
(LockSpotter stays, because it runs much later.)
Abhijit Menon-Sen [Mon, 10 Mar 2014 10:24:34 +0000 (15:54 +0530)]
Generate 'pid' for Postgres >= 9.3 and 'procpid' otherwise
Abhijit Menon-Sen [Mon, 10 Mar 2014 04:20:02 +0000 (09:50 +0530)]
Merge pull request #2 from felderado/patch-1
fix schema.pg for new installs
felderado [Mon, 10 Mar 2014 00:01:22 +0000 (19:01 -0500)]
Update schema.pg
schema.pg was upgraded to match what "aox upgrade schema" produces, but doesn't work on a clean install as aox will still believe it is at version 95 and it will bail if the citext extension already exists
Arnt Gulbrandsen [Fri, 21 Feb 2014 09:49:16 +0000 (10:49 +0100)]
don't just-send-8 when the smarthost doesn't support EAI
this would cause some display-names to be incorrectly squashed by the
smarthost
Arnt Gulbrandsen [Wed, 12 Feb 2014 13:59:55 +0000 (14:59 +0100)]
use the new tsearch2 index on the subject field
Arnt Gulbrandsen [Wed, 12 Feb 2014 11:38:02 +0000 (12:38 +0100)]
spel correctly, even
Arnt Gulbrandsen [Wed, 12 Feb 2014 11:22:00 +0000 (12:22 +0100)]
speed up searches on subject
subject searches are fairly common, so this adds an index if the database
mode is mostly-reading or advanced-reading
Arnt Gulbrandsen [Mon, 10 Feb 2014 10:36:41 +0000 (11:36 +0100)]
log out idle clients faster.
broken NAT (even at ISPs) is growing increasingly common, and aox can have
problems with very large numbers of idle/gone connections from mobile
clients. the client gets a new IP address from the network and reconnects,
but when aox sends a few bytes to the old connection(s), the broken NAT
gateway doesn't tell aox that the connection is gone. and so the number of
connections increases, and increases, and increases. eventually aox runs
into resource problems.
this will clean up the idle connections after 30/60 minutes. imap clients
are required to be active at least every 29 minutes, so this is tolerably
conservative.
Arnt Gulbrandsen [Mon, 10 Feb 2014 10:34:40 +0000 (11:34 +0100)]
thread better/correctly
Arnt Gulbrandsen [Thu, 6 Feb 2014 09:01:20 +0000 (10:01 +0100)]
stop fetching messages if a connection dies.
previously, a client could initiate a big, big fetch and then go away,
and aox would do all of the work. not any more.
Arnt Gulbrandsen [Thu, 6 Feb 2014 09:00:05 +0000 (10:00 +0100)]
simpler, more robust injection-time threading
this makes fewer threads than the old code, which didn't gather
all threads correctly. I hope this gathers all threads. we'll see.
Abhijit Menon-Sen [Thu, 6 Feb 2014 08:40:35 +0000 (14:10 +0530)]
Have to use SELECT to call a function
Arnt Gulbrandsen [Wed, 15 Jan 2014 19:06:18 +0000 (20:06 +0100)]
send the citext lookup with fewer indirections.
Arnt Gulbrandsen [Wed, 15 Jan 2014 12:07:56 +0000 (13:07 +0100)]
reject unknown addresses much faster
Arnt Gulbrandsen [Wed, 15 Jan 2014 11:20:07 +0000 (12:20 +0100)]
avoid infinite loop. how evil.
Arnt Gulbrandsen [Wed, 15 Jan 2014 11:18:31 +0000 (12:18 +0100)]
avoid pointing to Connection from Session
instead, remove the need. the only reason for that pointer was to
be able to close connections, so do that directly instead.
Arnt Gulbrandsen [Wed, 15 Jan 2014 11:11:39 +0000 (12:11 +0100)]
C=D is buggy. leads to memory blowup. disable for now.
Arnt Gulbrandsen [Wed, 15 Jan 2014 10:57:42 +0000 (11:57 +0100)]
let some short-lived objects be collected
Arnt Gulbrandsen [Tue, 14 Jan 2014 15:36:32 +0000 (16:36 +0100)]
avoid pointing from Mailbox/Flag to Session
instead, start at the Connection and look for relevant Session objects
whenever the Sessions need to be informed of changes.
Arnt Gulbrandsen [Tue, 14 Jan 2014 12:03:53 +0000 (13:03 +0100)]
close the most resource-hungry connection if we use too much memory
Arnt Gulbrandsen [Sat, 11 Jan 2014 14:26:07 +0000 (15:26 +0100)]
old message-id-less messages aren't in any db thread.
that shouldn't happen to new messages, but the old ones have to stay as
is. the thread_roots table is not friendly to id-less messages. so as of
this change, fetch x-gm-thrid reports 0 for such messages and no warning
is logged.
0 is a legal value according to google's spec (such as it is), and will
not conflict with any actual IDs. that all id-less messages are in the
same "thread" is... well... it could almost be seen as a feature.
Arnt Gulbrandsen [Thu, 9 Jan 2014 21:43:23 +0000 (22:43 +0100)]
add message-id even for inbound messages, so threading sucks less.
in that case, the right-hand-side is one that clearly communicates what
I think about id-less messages (instead of Configuration::hostname()).
Arnt Gulbrandsen [Thu, 9 Jan 2014 21:42:29 +0000 (22:42 +0100)]
avoid adding eternal objects for TlsThreads
instead, add a pointer from a Connection. cleaner, really.
Arnt Gulbrandsen [Thu, 9 Jan 2014 21:41:18 +0000 (22:41 +0100)]
try harder to issue the citext lookup FIRST.
there were cases in which it might be the second query, and srb found
one in which the first query used citext. oops.
Arnt Gulbrandsen [Wed, 8 Jan 2014 22:23:48 +0000 (23:23 +0100)]
thread correctly even when a message-id exists several times in the db
Arnt Gulbrandsen [Wed, 8 Jan 2014 12:56:13 +0000 (13:56 +0100)]
add support for gmail-like message and thread IDs.
this uses a custom x-aox capability, and I may change it. the fetch/search
items are named as on gmail. the parser is a bit hacky... hm...
Abhijit Menon-Sen [Tue, 10 Dec 2013 08:22:57 +0000 (13:52 +0530)]
A few syntax fixes
Arnt Gulbrandsen [Mon, 9 Dec 2013 13:49:07 +0000 (14:49 +0100)]
remove a few tabs and add braces around an else.
in aox either both parts of an if/else have braces, or neither.
Arnt Gulbrandsen [Mon, 9 Dec 2013 13:46:25 +0000 (14:46 +0100)]
be compatible with what 'aox upgrade schema' makes.
We can change ldn to dln, but it has to be done as a new schema,
so upgraded and newly installed databases agree.
Arnt Gulbrandsen [Mon, 9 Dec 2013 13:45:40 +0000 (14:45 +0100)]
Merge srb's various patches
Conflicts:
aox/queue.cpp
Stephen R. van den Berg [Fri, 6 Dec 2013 11:06:18 +0000 (12:06 +0100)]
Superfluous utf8 conversion omitted.
Arnt Gulbrandsen [Mon, 9 Dec 2013 11:37:49 +0000 (12:37 +0100)]
Cast citext to test in 'select ... from'
Detecting the OID of citext "at startup" wasn't always quite early enough,
so the second option is to make sure no citexts are returned.
This reverts commit
a0ddbe03a28868fdbe3f4f447af60c94e383896a.
Stephen R. van den Berg [Sun, 1 Dec 2013 14:31:36 +0000 (15:31 +0100)]
Revert md5 anti-warning change, shut up gcc instead.
Stephen R. van den Berg [Thu, 30 Jun 2011 10:51:48 +0000 (12:51 +0200)]
Fix multiple sieve responses.
Stephen R. van den Berg [Thu, 23 Jun 2011 19:11:06 +0000 (21:11 +0200)]
Delivery to multiple mailboxes now actually works.
Stephen R. van den Berg [Tue, 7 Jun 2011 07:24:51 +0000 (09:24 +0200)]
Fix endless parsing loop
Stephen R. van den Berg [Sun, 22 May 2011 19:58:16 +0000 (21:58 +0200)]
Abort misbehaving overlapping POP3 sessions, detected by apparently empty messages.
Stephen R. van den Berg [Sun, 22 May 2011 19:56:47 +0000 (21:56 +0200)]
Early delete of deleted messages in POP3 session. Bugfix for duplicate and empty POP3 message retrieval.
Stephen R. van den Berg [Sun, 22 May 2011 19:55:03 +0000 (21:55 +0200)]
Improved POP3 logging.
Stephen R. van den Berg [Sun, 1 May 2011 23:04:24 +0000 (01:04 +0200)]
Use the DNS cache as a backup, in case DNS lookup (temporarily) fails.
Stephen R. van den Berg [Sun, 1 May 2011 22:26:09 +0000 (00:26 +0200)]
Simplify code and make sure it works with resolving Endpoint.
Stephen R. van den Berg [Sun, 1 May 2011 22:23:50 +0000 (00:23 +0200)]
Make Endpoint use the Resolver when evaluating configuration items.
Stephen R. van den Berg [Sun, 20 Mar 2011 17:21:20 +0000 (18:21 +0100)]
Eliminate superfluous lower() calls.
Arnt Gulbrandsen [Fri, 29 Nov 2013 09:09:15 +0000 (10:09 +0100)]
let us we ignore the result of setreuid() if we want.
in some places we check it, in some places we wouldn't do don't, because
we wouldn't anything differently based on the result.
Arnt Gulbrandsen [Wed, 27 Nov 2013 12:53:37 +0000 (13:53 +0100)]
better phrasing for the sql trigger to make aox act like gmail
Arnt Gulbrandsen [Wed, 27 Nov 2013 09:31:12 +0000 (10:31 +0100)]
Update man page with correct version and date
Arnt Gulbrandsen [Wed, 27 Nov 2013 09:11:15 +0000 (10:11 +0100)]
learn the OID of citext at startup.
until now, we used to assume the often-allocated value of 96087.
Arnt Gulbrandsen [Tue, 26 Nov 2013 14:42:10 +0000 (15:42 +0100)]
Work around text/citext prepare limitation
Axel Rau had a message which 3.2.0 could not inject. I was able to
reproduce it, and together with Abhijit traced it down to a select which
succeeds on its own but not via prepare/execute.
For some reason, issuing "select * from addresses where domain='foo'"
is case-insensitive directly, but case-sensitive via prepare/execute.
This change forces insenstivity.
Arnt Gulbrandsen [Tue, 26 Nov 2013 10:03:33 +0000 (11:03 +0100)]
it's 3.2.0. wow.
Arnt Gulbrandsen [Fri, 29 Nov 2013 09:09:15 +0000 (10:09 +0100)]
let us we ignore the result of setreuid() if we want.
in some places we check it, in some places we wouldn't do don't, because
we wouldn't anything differently based on the result.