about summary refs log tree commit homepage
DateCommit message (Collapse)
2022-06-21search: do not index base-85 binary patches
Base-85 binary patches generated by git lead to many false positives, so skip over gibberish words which may occur in them. To avoid regressions in search results, continue to allow searching for exact size matches (via "literal $SIZE") and the phrase "GIT binary patch" for the mere presence of a binary patch.
2022-06-21search: support "patchid:" prefix (git patch-id --stable)
This allows easy searching via patch-id from a git commit. Currently, abbreviations are not supported, and it seems needless to support them since AFAIK (git) doesn't generate nor resolve abbreviated patch-ids anywhere.
2022-06-21searchidx: use regexp as first arg for `split' op
Current implementations of Perl5 don't have optimizations for single-character field separators (unlike another non-Perl5 VM I'm familiar with).
2022-06-11t/spawn: Find invalid PID to try to join its process group
In the container used to build packages of the GNU Guix distribution, PID 1 runs as the same user as the test so this spawn that should fail actually succeeds. Fix the problem by going through different PIDs and picking one that either doesn't exist or we aren't allowed to signal.
2022-06-11Add EditorConfig file
This allows several editors to automatically use the correct settings when editing public-inbox files. [ew: add to MANIFEST, too]
2022-06-09view: do not escape first `@' in mailto: URLs
It's probably not a perfect match for RFC 6068 atm, but perfect is the enemy of good. Reported-by: Moritz Poldrack <moritz@poldrack.dev> Link: https://public-inbox.org/meta/CKJSWGSZFKMX.3VUSIYE955Z9X@Archetype/
2022-05-16imapd: update comment for PublicInbox::ConfigIter
config enumeration was split out to a separate class a long time ago.
2022-05-16imap: remove unused args_ok sub
Noticed while reviewing pieces for POP3.
2022-05-08daemon: fix uninitialized variable
And also replace an unnecessary substitution (s///) op with a match (m//). Fixes: 93a7b219d58aad86 ("public-inbox-netd: a multi-protocol superserver")
2022-05-07doc: add missing "be" for --key description
Link: https://public-inbox.org/meta/87levfv7hs.fsf@kyleam.com/ Noticed-by: Kyle Meyer <kyle@kyleam.com>
2022-05-05public-inbox-netd: a multi-protocol superserver
Since we'll be adding POP3 support as our 4th network protocol; asking admins to run yet another daemon on top of existing -httpd, -nntpd, -imapd is a maintenance burden and a waste of memory. The goal of public-inbox-netd is to be able to replace all existing read-only daemons with a single process to save memory and reduce administrative overhead; hopefully encouraging more users to self-host their own mirrors. It's barely-tested at the moment. Eventually, multiple PI_CONFIG and HOME directories will be supported, as are per-listener .psgi config files.
2022-05-02lei import: add label completions (+L:$LABEL)
This can probably be added for "lei q", too, but we typically import first. Labels can probably be made persistent on a per-folder basis in the future.
2022-05-02lei_view_text: remove all CR before LF
This deals with CR-CR-LF messages, matching the HTML change in 7ee3643af9b72cad (view: remove all CR before LF, 2022-02-11)
2022-05-02lei refresh-mail-sync: filter NNTP(S) from --all
We currently do not support refresh from NNTP since deletes are rare with public-inbox NNTP servers; but traditional Usenet servers do delete/expire messages and we should probably support that at some point.
2022-05-02lei: improve diagnosis of errors from children
Not 100% sure what's going on, but maybe this helps.
2022-04-26lei: move to v5.12 to avoid "use strict"
Socket.pm still loads strict.pm, unfortunately, which hurts startup time; but we'll save some LoC this way.
2022-04-26Makefile.PL: various updates for new versions
We'll still stick to v5.10.1, mainly, but use v5.12 in a few places...
2022-04-23public-inbox 1.8.0 v1.8.0
2022-04-22doc: update 1.8 WIP release notes
2022-04-22lei: commit store on interrupted partial imports
This change prevents lingering shard and git-fast-import processes from remaining after interrupted "lei import" (and similar). It also reduces the likelyhood of data-loss in case of subsequent abnormal termination of the daemon. I think this is the least surprising way to handle users prematurely aborting imports or other similar operations which write to lei/store and will result in reduced bandwidth waste for users with intermittent connections. This is because the lei/store processes may be shared by parallel "lei import" callers, and commits done by any "lei import" caller will inevitably trigger writes for all of them.
2022-04-18syscall: golf + more idiomatic buffer initialization
While `vec' is useful for user-supplied buffers to avoid excess memory traffic, but provides no benefit when we need to allocate our own buffers as we do in nodatacow_fh, since Perl can't elide memset(ptr, 0, len). So just use the idiomatic `"\0" x $LEN' here.
2022-04-18lei: wire up pure Perl sendmsg/recvmsg for Linux users
This enables lei-daemon to work without Inline::C nor Socket::MsgHdr installed. Prior to this, only the `lei' client was using the pure Perl implementation. Either C implementation is still marginally faster, however.
2022-04-18syscall: more idiomatic cmsghdr space allocation
Since we know the space required under Linux, we can use the same initialization as the Inline::C version instead of hard-coding 256 as we do for Socket::MsgHdr.
2022-04-18lei: clobber recvmsg buffer on errors
It will be necessary when we drop the Inline::C requirement since the pure Perl Linux syscall recvmsg implementation. This likely would've caused errors for Socket::MsgHdr users without Inline::C, but I haven't tested it since it's a rare configuration.
2022-04-18lei_mail_sync: explicit bind for old SQL_VARCHAR compat
This avoids repeated work for incremental "lei import" runs when users upgrade from 1.7 to current public-inbox.git (and eventually 1.8). We need the explicit bind_param for fallback calls because previous bind_param calls are "sticky" for a given statement handle. The DBI(3pm) manpage states: The data type is 'sticky' in that bind values passed to execute() are bound with the data type specified by earlier bind_param() calls, if any. Portable applications should not rely on being able to change the data type after the first "bind_param" call.
2022-04-05lei: always open mail_sync.sqlite3 R/W
This will make transparently upgrading from 1.7.0 -> 1.8.x easier. Only a single user has access to mail_sync.sqlite3, and R/W at the kernel-level is required for WAL, anyways.
2022-04-02view: remove unused $end variable
Noticed while looking at something else completely unrelated...
2022-04-02examples/unsubscribe.milter: RFC 8058 (List-Unsubscribe=One-Click)
This allows unambiguous signaling to some MUAs and webmail clients that th List-Unsubscribe header contains an instantaneous unsubscribe option.
2022-04-02examples/unsubscribe.milter: use IO::Socket, again
Sendmail::PMilter requires an IO::Socket object, not a GLOB. Fixes: e901a56b3b30b22f (treewide: favor open(..., '+<&=', $fd), 2021-05-21)
2022-04-02lei_mail_sync: store OIDs and Maildir filenames as blobs
DBD::SQLite doesn't seem to use SQL_BLOB automatically, which can lead to ambiguity in some cases (especially interoperating with other tools). Downgrading to lei 1.7.0 will cause problems, but upgrading appears transparent after weeks of tests.
2022-04-02lei_mail_sync: ensure URLs and folder names are stored as binary
Apparently leaving {sqlite_unicode} unset isn't enough, and there's subtle differences where BLOBs are stored differently than TEXT when dealing with binary data. We also want to avoid odd cases where SQLite will attempt to treat a number-like value as an integer. This should avoid problems in case non-UTF-8 URLs and pathnames are used. They'll automatically be upgraded if not, but downgrades to older lei would cause duplicates to appear.
2022-04-01TODO: add item for auto-detecting TLS files in daemons
I forgot to restart my -imapd and -nntpd instances on public-inbox.org after the cert expired :x
2022-04-01doc: add WIP release notes for 1.8
1.8 will be a minor release, soon (I initially expected to release it in December, but was side-tracked). Major features will be for 1.9.
2022-04-01viewdiff: use defined checks in more places
It's less cognitive overhead for future readers since I just looked at it again and thought it was possible for "0" to be returned (it isn't).
2022-03-24syscall: add sendmsg+recvmsg for remaining arches
aarch64, ppc64le, sparc64, loongarch64, and mips (32-bit userspace) are all tested via machines from the GCC Farm Project <https://cfarm.tetaneutral.net/> Remaining syscall numbers are from musl <https://musl.libc.org/>
2022-03-23syscall: implement sendmsg+recvmsg in pure Perl
Socket::MsgHdr is only packaged for Debian and derivatives at the moment, and Inline::C pulling in gcc/clang is a huge amount of disk space and bandwidth for some users. This enables disk space and/or bandwidth-limited users to use lei. Only Linux guarantees a stable ABI and syscall numbers, but that's the majority of our userbase. FreeBSD users will still have to use Inline::C (or get Socket::MsgHdr packaged). x86, x32, and x86-64 are all currently supported, more to be added.
2022-03-23recv_cmd: do not undef recvmsg buffer arg on errors
It's a waste of ops and cycles, and inconsistent with perl sysread() behavior which doesn't touch the supplied buffer on errors.
2022-03-23syscall: drop unused EEXIST import
We've never used it, actually.
2022-03-22www: loosen deep-linking prevention
Apparently some browsers can set a Referer: header which fails to match. I'm not certain why, but making "$schema://$HOST_PORT" matches case-insensitive seems more correct regardless. In case that doesn't work, we'll also allow bypassing deep-link prevention via a POST form button. Reported-by: Vlastimil Babka <vbabka@suse.cz> Link: https://public-inbox.org/meta/93ebfbd1-9924-481c-4edc-9b232d1e995c@suse.cz/
2022-03-14t/lei-sigpipe.t: ensure SIGPIPE is not ignored instead of not blocked
Ignoring a signal is different than blocking a signal, and the "IgnoreSIGPIPE" option of systemd ignores. [ew: note systemd behavior] Acked-by: Eric Wong <e@80x24.org>
2022-03-08index|extindex: support --dangerous flag
This enables Xapian::DB_DANGEROUS to support in-place updates. This can speed up the initial index and reduce I/O at the cost of preventing concurrent readers and being unsafe in the face of any abnormal terminations. This is more dangerous than --no-fsync. --no-fsync is only unsafe in the event of a power loss or kernel crash; --dangerous is unsafe even on SIGKILL.
2022-03-01t/lei-sigpipe: ensure SIGPIPE is unblocked for this test
Tests run under systemd (and similar) have SIGPIPE blocked by default. This was causing this SIGPIPE test to get stuck when run by automated builders used by Nix. Thanks to Julien Moutinho and Dominique Martinet for tracking down this failure. Reported-by: Julien Moutinho <julm+public-inbox@sourcephile.fr> Reported-by: Dominique Martinet <asmadeus@codewreck.org> Link: https://public-inbox.org/meta/20220227080422.gyqowrxomzu6gyin@sourcephile.fr/
2022-02-18t/lei-sigpipe: attempt to improve diagnostics for stuck test
This may help diagnose a difficult-to-reproduce test failure on NixOS. Link: https://public-inbox/meta/20211209013743.okzgim7bbrpahks7@sourcephile.fr/
2022-02-17git: do not dereference undef as ARRAY ref
When aborting git processes, we must account for the lack of inflight requests.
2022-02-14sharedkv: avoid ambiguity for numeric-like string keys
While we only store URLs and binary SHA-1/SHA-256 values in skv at the moment, we may store potentially ambiguous keys/values in the future. It's possible to store "02" and have it treated as `2' unless explicitly binding parameters as SQL_BLOB. This behavior was independent of the sqlite_unicode parameter as evidenced by the new tests. I only noticed this bug while hacking on another project using DBD::SQLite, and not while hacking on public-inbox itself.
2022-02-14sharedkv: remove unused subs
Some features didn't get used, and they're just getting in the way of upcoming bugfixes.
2022-02-14t/lei-*watch: disable flaky tests by default for now
Properly fixing these tests is too difficult for me at the moment, so just disable these tests for now. A proper fix and fleshing out support for inotify will hopefully happen at some point.
2022-02-11view: remove all CR before LF
While we've rendered CR-LF as LF-only in HTML for many years, some messages end up as CR-CR-LF. So strip ALL all CR bytes preceding LF bytes, while preserving odd CR in the middle of lines. Reported-by: Thomas Weißschuh <thomas@t-8ch.de> Link: https://public-inbox.org/meta/8d13668f-cac7-4984-bb4e-ad90502dc46d@t-8ch.de/
2022-02-03test_lei: use consistent locale for error messages
git-config(1) error messages are locale-dependent, so follow the lead taken by git's own test suite and set LC_ALL=C and LANG=C to ensure error messages we check against are not localized. Reported-by: Julien Moutinho <julm+public-inbox@sourcephile.fr>
2022-02-01syscall: FS_IOC_*FLAGS: define on per-architecture basis
It turns out these Linux ioctls are unfortunately architecture-dependent, and not endian-dependent. Fixup some warning messages while we're at it, too. Fixes: 14fa0abdcc7b6513 ("rewrite Linux nodatacow use in pure Perl w/o system") Link: https://public-inbox.org/meta/YfdYqLhDVQRQ9NGT@codewreck.org/ Noticed-by: Dominique Martinet <asmadeus@codewreck.org>