about summary refs log tree commit homepage
DateCommit message (Collapse)
2015-11-18TODO: updates for done stuff, and add item for message threading
Of course, we need to figure out if RFC 4685 is supported anywhere, first.
2015-11-18view: remove "created" and "updated" noise words
They increase HTML size and add to visual noise without telling enough useful information.
2015-10-15filter: fix handling of bad attachments
Improve error messages and use a better regexp for detecting printable characters in attachments.
2015-10-08view: fixup bad comparison
Oops, there is no longer a 3rd element. Fixes: 759efc037728a766ee80f1b0d3c1fd7b8c76a05f ("view: remove attribution for topics in top-level view")
2015-10-08view: remove attribution for topics in top-level view
It clutters up the page unnecessarily, as identity of the topic starter/updater probably doesn't matter if there's no exact message to attribute the message to.
2015-10-05README: add OpenSSL exception
Network connections may use OpenSSL for TLS (as other libraries, such as GNUTLS do not appear well-supported under Perl). So give this exception in case somebody needs TLS support for NNTP.
2015-10-04mbox: generate Archived-At, List-Post, List-Archive headers
Downloaded mboxen can be archived/stored indefinitely, try to make it easy for future archaelogists to find the online archive location.
2015-10-04mbox: kill Bytes meta-header, too
It may be present in messages imported from NNTP.
2015-10-04view: add links for mbox and atom feeds in homepage
Having per-thread Atom feeds and downloadable mboxen is powerful and should be more easily visible/accessible to casual readers.
2015-10-03mda: support a 'filter=scrub' option for external lists
For list where we are not the primary archival entry point, defaulting to filter=scrub makes sense since their list conventions may be more tolerant of HTML and other crap than we are.
2015-10-03drop Message-IDs longer than 244 bytes
Xapian has this limit for terms, and there are likely no legitimate Message-IDs (or single header lines) this long; so there's no need to workaround this limit.
2015-10-02rename mid_compress to id_compress
We use it as a general compressor for identifiers such as subject paths, so using the "mid_" prefix probably is not appropriate.
2015-10-02nntpd: executable permission
Ensure we are executable for consistency and documentation. MakeMaker already makes this executable, but we might as well do the same...
2015-10-02Msgmap: pass ReadOnly DBI flag for non-writable opens
This doesn't seem to do anything on my older system, but maybe it will in newer or future versions of DBD::SQLite. Anyways it can be helpful for documentation purposes, too.
2015-10-01searchidx: subject is not a term
Sometimes subjects are excessively long and hit Xapian's 245-byte term limit. We can still perform subject-only searches with a probabilistic prefix.
2015-10-01nntp: better delimit error message
It may be hard to tell what command triggered an error, otherwise.
2015-10-01nntp: remove reference to non-existent function
Oops
2015-10-01nntp: implement idle time expiration
We don't want to waste precious server memory on clients which have been idle for longer than 3 minutes.
2015-10-01filter: more consistent labeling of rejections
While we're at it, reject non-plain-text top-level messages, too. They probably do not exist in practice, but we cannot afford to scrub given policies implemented by overzealous mail providers. While we're at it, update the comment for strip_multipart.
2015-10-01searchview: fix syntax error
Oops, I forgot to run the syntax check for this.
2015-10-01filter: do not strip Reply-To
It's often part of idiotic policies to prevent mailing lists from working at all.
2015-10-01mda: keep DKIM crap
This is probably unsafe
2015-10-01view: correctly pick latest in index anchor links
The last message in a thread _display_ is not necessarily the latest message in the thread. We must go by the Date: header on the messages themselves as a best-guess. Of course Date: headers may lie, but most mail clients trust them by default, so we will, too.
2015-09-30README: document NNTP access
That's right, we now have our NNTP server running and are self-hosting a read-only news gateway at: nntp://news.public-inbox.org/inbox.comp.mail.public-inbox.meta
2015-09-30view: use '+' instead of '%20' to escape spaces in mailto:
'+' is more shoter and more readable in query parameters than '%20'
2015-09-30t/nntpd.t: additional tests for XHDR/HDR
More testing is good, especially since clients I use don't implement all the commands.
2015-09-30t/nntpd.t: simplify condition for response termination
Multiline responses must end with "\r\n.\r\n", so we won't break out early in case the OS doesn't support MSG_MORE.
2015-09-30nntp: implement OVER/XOVER summary in search document
The document data of a search message already contains a good chunk of the information needed to respond to OVER/XOVER commands quickly. Expand on that and use the document data to implement OVER/XOVER quickly. This adds a dependency on Xapian being available for nntpd usage, but is probably alright since nntpd is esoteric enough that anybody willing to run nntpd will also want search functionality offered by Xapian. This also speeds up XHDR/HDR with the To: and Cc: headers and :bytes/:lines article metadata used by some clients for header displays and marking messages as read/unread.
2015-09-30nntp: implement LIST HEADERS
We shall remove slow, unoptimized headers in XHDR/HDR to avoid becoming an easy DoS target.
2015-09-30nntp: MODE READER denies posting
Redundantly confirm to clients we do not accept posting with the MODE READER command. ref: RFC 3977 5.3.1
2015-09-30INSTALL: document Danga::Socket dependency for nntpd
We don't have something like CGI or Plack to build an NNTP server on top on, so we implemented one using Danga::Socket for epoll/kqueue abstraction.
2015-09-30nntpd: avoid lazy require
We cannot avoid requiring ::Config, so do not hide it.
2015-09-30daemon: always autoflush stdout/stderr
Users may log output to a pipe, so ensure these outputs are unbuffered in userspace and go to the operating system ASAP for other processes to pick up.
2015-09-30remove unnecessary fields usage
It doesn't actually give performance improvements unless we use types with "my", but we don't do that. We'll only continue using fields with Danga::Socket-derived classes where they're required.
2015-09-30nntp: reduce syscalls for LIST OVERVIEW.FMT
No point in sending such a short, bounded response with multiple syscalls.
2015-09-30nntp: HDR returns 225, not 224
This is stipulated by RFC 3977 8.5.1, but apparently I misread it.
2015-09-30search: remove get_subject_path
We probably won't be supporting this in the public API
2015-09-25daemon: fix various permissions + daemon issues
When using user-switching in a single process, we must be careful to not inadvertantly create new Msgmap sqlite3 files. We must also ensure we set proper permissions on any files we create. Additionally, our refactoring was broken as we failed to actually daemonize or preserve the parent FD in a worker process. Finally, default to one worker process since our code may be fatally broken and it's nice to be able to scale to multiple cores via SIGTTIN if needed.
2015-09-25nntp: avoid signals for long responses
Using a signal-based timer can hurt throughput on a machine that's overloaded. Ensure there's always forward progress and reduce the number of syscalls we make, too.
2015-09-25git: use fields for GitCatFile
Micro-optimization, but it make using Danga::Socket for watching pipe readability easier at some point.
2015-09-25git: signal-safety for pipe writes
I've yet to hit it, but syswrite has chance of returning EINTR on a blocking pipe.
2015-09-25nntp: prefix FD on every log line
This can help us track down what request patterns clients will perform when we have multiple clients.
2015-09-25nntp: do not repeat result on blocked write
Oops, we must increment our range even if we yield or get blocked on output buffering.
2015-09-25searchidx: remove unused sub: next_doc_id
It seems like it was never used
2015-09-25nntp: consistently use 501 for unsupported LIST
This is required by RFC 3977, section 3.2.1
2015-09-25nntp: HDR allows metadata prefixed with ':'
RFC 3977, section 8.5.2 states metadata lookups can be done with HDR.
2015-09-24nntpd: hoist out daemon management code
We'll probably be supporting read-only IMAP, or maybe we'll just implement a custom HTTP server so users can manage/upgrade the same way as the nntpd while being immune to slow clients.
2015-09-24nntpd: support SIGUSR2 in single-process mode, too
We may support SIGUSR2 in single-process mode as long as permissions aren't wonky.
2015-09-24nntpd: better encapsulation for shutdown
We can use the UNIVERSAL::can to better encapsulate the shutdown process, in case we need to implement a gopher or HTTP daemon.
2015-09-24nntp: avoid infinite loop on partial read
Oops :x