1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311
|
- dovecot.index breaks: first_recent_uid_lowwater 1413 -> 1381,
Duplicate header extension keywords (13 of them in the file!)
- mmap_disable=yes: somtimes hdr.next_uid <= last_rec.uid
- auth_cache doesn't automatically take into account allow_nets
- still problems with CRLF mboxes..
- mbox_min_index_size != 0 causes Invalid new transaction log sequence (4 >= 4)
- Allow %variables in mail_chroot setting
- something should be done to umask setting. we should be creating files with
0666 or 0777 and rely on umask, but we shouldn't do that unless we're sure
that the umask is the wanted one (ie. imap/pop3 process wasn't started
directly)
- filesystem group quota patch
- HFS+ avoid-hardlinks patch?
- ssl_verify_client_cert isn't working if the SSL cert doesn't have CRL
- keywords:
- add some limits to how many there can be
- don't return \* in PERMANENTFLAGS when we're full
- remove unused keywords?
- caching
- force bits should be used only for nonregistered fields
- change envelope parsing not to use get_headers() so imap.envelope can
actually be cached without all the headers..
- compression should drop fields with last_used <
(latest_mail_index_date - month)
- we could try compressing same field values into a single
location in cache file.
- support caching all message headers. this could be useful when
indexes are in local disk but actual mails are accessed through NFS.
- mbox
- dirty state should be stored to index (with mbox_very_dirty_syncs)
- after some locking timeouts: mbox-lock.c: line 518 (mbox_lock):
assertion failed: (lock_type == F_RDLCK || mbox->mbox_lock_type != F_RDLCK)
- controldir for mboxes too and place subscriptions file there?
- size.physical isn't cached, but should it even be? ..
- syncing existing indexes takes 4x longer than creating new one, why?
- how well does dirty sync + status work? it reads the last mail every
time? not very good..
- always add empty line. make the parser require it too? syncing should
make sure there always exists two LFs at end of file. raw-mbox-stream
should make sure the last message ends with LF even if it doesn't exist
in the file
- Quote "From ", unquote ">From "
- COPY doesn't work to itself (lock assert crash, for now just disallowed)
- keep mbox lock for two extra seconds after sync (do we really need to?)
- move /var/mail/user to ~/mbox if ~/mbox exists.. supposedly this
could be useful if /var/mail doesn't have quota, but ~/mail does.
now, what do we then do if we can move only some of the mails?..
- if we can't create dotlock file for mbox, make sure it still can be
selected in read-only state
- maildir
- if indexes exist but dovecot-uidlist doesn't, it's not tried to be
recreated
- with pop3 don't move messages from new/ to cur/ before RETR
- when sorting maildir files, sort based on Mxxxx first so the files are
sorted always in ascending order. required for proper out-of-quota
uidlist handling
- physical separator could be configurable
- dbox
- keyword list header locking isn't correct now. saving uses file's
dotlock, sync uses sync lock. and what about reading?... (I think this
is fixed?)
- append_offset in header shouldn't be trusted
- show in index if there are expunge-flagged mails in the mailbox
- pop3_lock_session doesn't work
- index
- dd if=/dev/zero of=dovecot.index bs=1024 count=1 -> NOOP -> crash!
- delete >30min old dovecot.index.log.2 files when opening index?
- Panic: file mail-index.c: line 844 (mail_index_sync_from_transactions):
assertion failed: (hdr.messages_count == (*map)->hdr.messages_count)
- Corrupted transaction log file dovecot.index.log: record size wrong (type 0x4, 20 % 12 != 0)
-> mail-index.c: line 841 (mail_index_sync_from_transactions): assertion failed: (hdr.messages_count == (*map)->hdr.messages_count)
- optimize initial left_idx in _view_lookup_uid_range()
- if log file is lost, generate it from old and new index
- transaction log: when replacing log with a same sequence, we remove it
from log's file list, but we don't do anything to existing log views.
this can crash later in mail_transaction_log_view_set() because 'first'
is from log list, while we're comparing it into view->tail which it never
is. also overwriting it leaks memory..
- read-only support for mailboxes where we don't have write-access
- namespaces
- namespaces: add new "auto_disable" flag so if the mailbox can't be opened
(eg. file doesn't exist), just ignore the problem and disable the
namespace
- subscribe <namespace prefix> doesn't work.
- namespaces don't work in plugins: acl, trash, convert
- subscriptions file should contain namespace prefixes. at least optionally.
there's the subscriptions = yes setting now for namespaces.. do it so that
if prefix = "" has subscriptions, it contains prefixes. otherwise not.
- for shared/public namespaces default to "no"
- lib-storage
- calls fsync()s etc. less often (when copying). optionally disable them.
- x search charset asdf all -> should fail
- subscribe: IMAP(anonymous): open(anonymous/mail/.temp...) failed: Permission denied
- should we allow following symlinks in mbox/maildirs? they are now.
- if we implement shared mailboxes with shared indexes, never do that or
others could symlink your personal mailboxes and see the indexes
created for it which may contain envelope etc. data
- this allows circular mailbox hierarchies which should be prevented by
eg. allowing max. 20 hierarchies.
- login
- when pipelining login command + post-login commands, login process should
pass the command to imap/pop3 process (at least one pop3 client does this)
- imap-login: Master sent reply with unknown tag 1. client closed
connection at the exact same time master was logging it in?
see master_request_abort()
- Digest-MD5: support integrity protection, and maybe crypting. Do it
through login process like SSL is done?
- x login foo bar
x NO Authentication failed.
x login cras pass
* BYE Disconnected for inactivity.
^ but it's not disconnecting! (buggy dovecot-auth not replying)
probably because userdb lookup didn't reply, and fd was already sent
for master.. should imap-login be handling it anymore?..
- imap-login: Authenticate PLAIN failed: Authentication failed:
Authentication server isn't connected, try again later.. [127.0.0.1]
^ NO Authentication failed. (should be Temporary login failure!)
- if auth process dies, login process should retry authentication if
possible. or if not, disconnect the client so it doesn't think the auth
failed.
- send client IP immediately after accept() to master process. make sure
master shows the IP if login dies unexpectedly. master should probably
also kill the login process if it doesn't kill itself soon enough.. or
maybe just log the IP immediately.
- auth
- ability to specify default password scheme with passwd-file
- with blocking passdb we're not caching lookups if the password was wrong
- non-plaintext authentication doesn't support all features:
- multiple passdbs don't work, only the first one is used
- auth cache's last_success password change check doesn't exist
- if PAM child process doesn't finish within a minute, kill it
- PAM / checkpassword should use passdb-blocking
- support specifying hex/base64 encoding in password scheme. for example
{plain-md5.base64}
- auth cache: cache userdb data too.
- remove system_user and allow returning multiple gids instead.
- SIGHUP restarts auth processes .. but does it wait until they've finished
with all requests? no.
- does dovecot-auth really break when it runs out of fds?
- dovecot-auth should limit how fast authentication requests are allowed
from login processes. especially if there's one login/connection the speed
should be something like once/sec. also limit how fast to accept new
connections.
- support read-only logins. user could with alternative password get only
read-access to mails so mails could be read relatively safely with
untrusted computers. Maybe always send [ALERT] about the previous
read-only login time with IP?
- dovecot-auth workers: create a separate dovecot-pam worker which shares
pretty much all code with dovecot-auth worker but isn't linked against
any libraries. or..? this might be difficult to do, especially because the
workers currently can handle any kind of passdb/userb requests. perhaps
there should be a completely separate simple PAM authenticator binary.
- master
- Support listening in multiple sockets
- per-user/ip limits..
- configurable syslog prefix
- SIGHUP rather shouldn't restart listening sockets if they didn't change..
- if there are duplicate settings, complain about it
- quota
- if dovecot-uidlist can't be written, assume the new mails have UIDs
beginning from uidlist.next_uid. Whenever mails are expunged, overwrite
the next_uid field with the current highest next_uid. Whenever we have
assumed UIDs and uidlist gets updated, throw the client out with
"inconsist mailbox".
- make sure all syscalls check for ENOSPACE (and ENOACCESS while at it)
- quota code should probably be always doing some quota_set_critical()
instead of using mail_storage_set_critical(), so that quota_last_error()
would work properly
- if storage=0 is given, use unlimited quota but track it anyway
- ssl
- add setting: ssl_options = bitmask. by default we enable all openssl
workarounds, this could be used to disable some of them
- gnutls support isn't working
- search
- message header search: we should ignore LWSP between two MIME blocks
- message_body_search() could accept multiple search keywords so we
wouldn't need to call it separately for each one (so we wouldn't need
to parse the message multiple times).
- message_body_search() could support NULL MessagePart and the searching
could be done while parsing the message. this would need changes to
message_parse() as well.
- could optionally support scanning inside file attachments and use
plugins to extract text out of them (word, excel, pdf, etc. etc.)
- use a trie index for fast text searching, like cyrus squat?
- Create our own extension: When searching with TEXT/BODY, return
the message text surrounding the keywords just like web search engines
do. like: SEARCH X-PRINT-MATCHES TEXT "hello" -> * SEARCH 1 "He said:
Hello world!" 2 "Hello, I'm ...". This would be especially useful with
the above attachment scanning.
- lib-charset
- utf8_toupper() is a must. and a bit difficult if we want to do it right.
- add support for other things than iconv() as well? we could reuse
the code from cyrus or courier
- cache iconvs? they'd probably be faster if we just reset the
conversion instead of opening new one every time. and there will likely
be only one or two charsets which are used for nearly all conversions.
- deliver
- We should always return EX_* failures and never our own 89 etc.
- recipient_delimiter setting so user+mailbox@domain works directly
- general
- add imap_logout_format
- stop using atol(), atoi(), strtoul() etc. in places where we actually
care about what they return, and rather create our own function which
checks if the input overflows the integer, and if so call i_fatal()
- solaris sendfile is broken?
- rfc2231 continuation support (useless?)
- rfc2557 support for BODYSTRUCTURE, as specified by RFC3501
- LMTP server
- ability to build plugins statically into the binaries
- ~/.dovecotrc to override system wide settings. namespace settings should
override all the previous namespace settings instead of adding new.
- option to disable SORT, SEARCH and other memory/cpu-intensive features.
defaults and per-user by dovecot-auth.
- dotlock overriding is racy, but it's pretty difficult to fix it. Also
overriding someone else's dotlock in shared folder isn't possible. These
could be fixed by having separate lock process running as root, which
would chown() the file for another uid and then unlink() it as that user.
One problem with that is that if malicious user sets setuid+execute bits
on for the file, he could run the file and get changed to the new uid.
That hopefully shouldn't matter much since the new uid should be user
with minimum possible privileges. Anyway, optional..
- things break if next_uid gets to 2^32
capabilities:
- preferrably all should be implemented as plugins
- possibility to disable them from config file
- THREAD=ORDEREDSUBJECT - although pretty useless I'd think.
- acl (rfc2086, draft-ietf-imapext-acl), namespace (rfc2342)
- probably do it like cyrus. "user.<username>" to access other
users, with "" defaulting to "user.<myself>". these should be
configurable however.
- shared namespaces? maybe configurable in config file
- easiest way to do ACL would be to use unix modes, but is that
useful at all? Well, ACL2 has a bit better support for that, so
maybe we could support it.
- otherwise gets a bit trickly, we could keep all mail in "imapmail"
group and 0600/0700 mode by default, but when mail is shared to others,
the group read/write access bits would be set. or alternatively we
could launch another imap process to handle it, which we should support
anyway. ACLs could be stored into ".acl" ascii file in each folder.
- support for private and shared flags, configurable by mailbox admin.
this isn't in any draft yet, but ACL2 author was going to create one.
[SHAREDFLAGS (...)] would specify which ones are shared, don't know yet
how they would be configured.
- id (rfc2971)
- must be configurable what gets sent, default to only name=Dovecot
- separate pre/post-login settings
- optionally log configured parts of the client information, but only
once, probably at the same time as logging "Logged in",
"Disconnected", etc.
- remember to force truncating values longer than 30 chars,
especially before logging
- mailbox-referrals (rfc2193)
- this is useful whenever we would otherwise need to make the
connection ourself. for example load balancing and shared mailboxes
requiring another UID to run.
- this rfc defines no exact way for server to detect if client
supports referrals or not. I don't think there's much point in
supporting only referrals, as most clients don't support them.
Instead we should return referrals when we know that client
supports them, otherwise do the connecting ourself. If client
issues RLIST or RLSUB command, it's safe to assume it supports
referrals.
- for load balancing this works just fine, but what about shared
mailboxes which require different UID? If we login with our own
username, we end up with our own UID instead of what we wanted.
IMAP URLs don't support separated authorization id which would
have made this very easy.. We could give the "userid@group" as
userid, but clients probably treat it as different userid and
ask the password again.
- problems, problems, .. maybe not worth the trouble.
- drafts:
- http://www.imc.org/ids.html
- annotate (draft-ietf-imapext-annotate)
- per-message annotations. this will be major change. especially
because currently there's no suitable storage for them, and
they'll probably change all the time.. maybe if we moved into
berkeley db to store the .data file and these annotations.
- this is separate problem from index files. indexes are treated as
temporary files, annotations are permanent data. we'd have to
support non-db way to do this too, which would probably be just a
simple (slow) text file.
- annotatemore (draft-daboo-imap-annotatemore)
- server and per-mailbox annotations. much easier than
per-message annotations, but they'd be easier to place into
db as well.
- binary (draft-nerenberg-imap-binary)
- perhaps not too useful. I'd like to make Dovecot fully
binary-safe though.
- view (draft-ietf-imapext-view)
- slow, complex, luckily draft expired almost two years ago.
i hope i don't have to implement this :)
- can be done client-side just fine (evolution's virtual folders)
|