aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2019-05-29util/crypto: add information about the payload partDaniel Kahn Gillmor
When walking the MIME tree, if we discover that we are at the cryptographic payload, then we would like to record at least the Subject header of the current MIME part. In the future, we might want to record many other headers as well, but for now we will stick with just the Subject. See https://dkg.fifthhorseman.net/blog/e-mail-cryptography.html#cryptographic-envelope for more description of the Cryptographic Payload vs. the Cryptographic Envelope. Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
2019-05-29cli/show: emit headers after emitting bodyDaniel Kahn Gillmor
This paves the way for emitting protected headers after verification and decryption, because it means that the headers will only be emitted after the body has been parsed. Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
2019-05-28NEWS: note parallel test suiteDaniel Kahn Gillmor
2019-05-28NEWS: include information about per-message cryptographic statusDaniel Kahn Gillmor
2019-05-28NEWS: News for my changes for 0.29David Bremner
These could be expanded in future commits.
2019-05-26test: report summary even when abortingDaniel Kahn Gillmor
In certain cases of test suite failure, the summary report was not being printed. In particular, any failure on the parallel test suite, and any aborted test in the serialized test suite would end up hiding the summary. It's better to always show the summary where we can (while preserving the return code). If we do abort due to this high-level failure, though, we should also announce to the user that we're doing so as close to the end of the process as possible, to make it easier to find the problem. Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
2019-05-26NEWS: The minimum supported major version of Emacs is now 24.Tomi Ollila
2019-05-26cli/show: emit new whole-message crypto status outputDaniel Kahn Gillmor
This allows MUAs that don't want to think about per-mime-part cryptographic status to have a simple high-level overview of the message's cryptographic state. Sensibly structured encrypted and/or signed messages will work fine with this. The only requirement for the simplest encryption + signing is that the message have all of its encryption and signing protection (the "cryptographic envelope") in a contiguous set of MIME layers at the very outside of the message itself. This is because messages with some subparts signed or encrypted, but with other subparts with no cryptographic protection is very difficult to reason about, and even harder for the user to make sense of or work with. For further characterization of the Cryptographic Envelope and some of the usability tradeoffs, see here: https://dkg.fifthhorseman.net/blog/e-mail-cryptography.html#cryptographic-envelope
2019-05-26mime-node: track whole-message crypto state while walking the treeDaniel Kahn Gillmor
Deliberately populate the message's cryptographic status while walking the MIME tree from the CLI. Note that the additional numchild argument added to _mime_node_create is a passthrough needed to be able to adequately populate the crypto state object.
2019-05-26cli: expose message-wide crypto status from mime-nodeDaniel Kahn Gillmor
The mime node context (a per-message context) gains a cryptographic status object, and the mime_node_t object itself can return a view on that status to an interested party. The status is not yet populated, and for now we can keep that view read-only, so that it can only be populated/modified during MIME tree traversal.
2019-05-26util/crypto: _notmuch_message_crypto: tracks message-wide crypto stateDaniel Kahn Gillmor
E-mail encryption and signatures reported by notmuch are at the MIME part level. This makes sense in the dirty details, but for users we need to have a per-message conception of the cryptographic state of the e-mail. (see https://dkg.fifthhorseman.net/blog/e-mail-cryptography.html for more discussion of why this is important). The object created in this patch is a useful for tracking the cryptographic state of the underlying message as a whole, based on a depth-first search of the message's MIME structure. This object stores a signature list of the message, but we don't handle it yet. Further patches in this series will make use of the signature list.
2019-05-25emacs: Drop content-free "Unknown signature status" buttonDaniel Kahn Gillmor
When we have not been able to evaluate the signature status of a given MIME part, showing a content-free (and interaction-free) "[ Unknown signature status ]" button doesn't really help the user at all, and takes up valuable screen real-estate. A visual reminder that a given message is *not* signed isn't helpful unless it is always present, in which case we'd want to see "[ Unknown signature status ]" buttons on all messages, even ones that don't have a signing structure, but i don't think we want that. Amended by db to drop the unused initialization of 'label'
2019-05-25test: allow disabling timeout with NOTMUCH_TEST_TIMEOUT=0Daniel Kahn Gillmor
To aid in diagnosing test suite tooling that interacts poorly with coreutils' timeout, it's handy to be able to bypass it entirely. Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
2019-05-25doc: document user header indexing.David Bremner
It's a bit odd that the primary documentation is in notmuch-config, but it is consistent with the "query:" prefix.
2019-05-25lib/database: index user headers.David Bremner
This essentially involves calling _notmuch_message_gen_terms once for each user defined header.
2019-05-25lib: support user prefix names in term generationDavid Bremner
This should not change the indexing process yet as nothing calls _notmuch_message_gen_terms with a user prefix name. On the other hand, it should not break anything either. _notmuch_database_prefix does a linear walk of the list of (built-in) prefixes, followed by a logarithmic time search of the list of user prefixes. The latter is probably not really noticable.
2019-05-25lib: cache user prefixes in database objectDavid Bremner
This will be used to avoid needing a database access to resolve a db prefix from the corresponding UI prefix (e.g. when indexing). Arguably the setup of the separate header map does not belong here, since it is about indexing rather than querying, but we currently don't have any other indexing setup to do.
2019-05-25lib: setup user headers in query parserDavid Bremner
These tests will need to be updated if the Xapian query print/debug format changes.
2019-05-25cli/config: check syntax of user configured field namesDavid Bremner
These restrictions are meant to prevent incompatibilities with the Xapian query parser (which will split at non-word characters) and clashes with future notmuch builtin fields.
2019-05-25cli/config: support user header index configDavid Bremner
We don't do anything with this configuration information information yet, but nonetheless add a couple of regression tests to make sure we don't break standard functionality when we do use the configuration information.
2019-05-25cli/config: refactor _stored_in_dbDavid Bremner
This will make it easier to add other prefixes that are stored in the database, compared to special casing each one as "query." was. This commit also adds the ability to validate keys with a given prefix. This ability will be used in a future commit.
2019-05-25util: add unicode_word_utf8David Bremner
This originally use Xapian::Unicode::is_wordchar, but that forces clients to link directly to libxapian, which seems like it might be busywork if nothing else.
2019-05-23emacs: make notmuch-search-interactive-region obsoleteLeo Vivier
`notmuch-search-interactive-region' was moved to notmuch-lib.el in f3cba19f882471a396a6b6175a709ccd1f6f34a0 and renamed to `notmuch-interactive-region' without making the old function obsolete, thereby breaking user-commands which made use of it. This commit marks the function as obsolete and makes it an alias for the new function.
2019-05-23n_m_remove_indexed_terms: reduce number of Xapian API calls.David Bremner
Previously this functioned scanned every term attached to a given Xapian document. It turns out we know how to read only the terms we need to preserve (and we might have already done so). This commit replaces many calls to Xapian::Document::remove_term with one call to ::clear_terms, and a (typically much smaller) number of calls to ::add_term. Roughly speaking this is based on the assumption that most messages have more text than they have tags. According to the performance test suite, this yields a roughly 40% speedup on "notmuch reindex '*'"
2019-05-23test-lib.sh: colors to test output when parallel(1) is run on ttyTomi Ollila
Done via $COLORS_WITHOUT_TTY environment variable as passing options to commands through parallel(1) does not look trivial. Reorganized color checking in test-lib.sh a bit for this (perhaps were not fully necessary but rest still an improvement): - color checking commands in subshell are not run before arg parsing (args may disable colors with --no-color) - [ -t 1 ] is checked before forking subshell
2019-05-23test-lib.sh: "tidied" emacs_deliver_message ()Tomi Ollila
Added initialization and checking of smtp_dummy_port like it was done with smtp_dummy_pid. Made those function-local variables. One 8 spaces to tab consistency conversion. And last, but definitely not least; while doing above noticed that there were quite a few double-quoted strings where $@ was in the middle of it -- replaced those with $* for robustness ("...$@..." expands params to separate words, "...$*..." params expands to single word).
2019-05-22test: redirect STDIN from /dev/nullTomi Ollila
Without this stdin may be anything that parent process provided for it. Test processes might have tried to read something from it, which would have caused undeterministic behavior. E.g. gdb(1) tries to do tty related ioctls on fd 0 (and fd 1 and fd 2, but those are redirected to 'test.output' before test runs).
2019-05-20configure: make _check_session_keys work with an as-needed linkerDaniel Kahn Gillmor
When using a promiscuous linker, _check_session_keys was working fine. But some OSes (including some versions of Ubuntu) have set their linker to always link in "--as-needed" mode, which means that the order of the objects linked is relevant. If a library is loaded before it is needed, that library will no longer be linked in the final outcome. _check_session_keys.c was failing on those systems. Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
2019-05-20configure: handle TEMP_GPG more robustlyDaniel Kahn Gillmor
We never want ./configure to try to do something with an unassigned variable. So, make the directory $TEMP_GPG at the start of the testing of session-key handling, and clean it up afterwards as long as the directory exists. Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
2019-05-20configure: better error handling on session key check.Daniel Kahn Gillmor
There are a few changes bundled here: * say "No." explicitly if there's a failure. * try to avoid implying that gpgme-config is necessary to build notmuch itself (it's not, though it may be useful if you need to rebuild gmime). * leave _check_session_keys and _check_session_keys.c around if ./configure fails, so that the user can play with it more easily for debugging. * let error messages show when _check_session_keys.c is built. Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net> Amended by DB: use command -v instead of which.
2019-05-20test/emacs: revert invalid-from test to pre-86f89385 behaviourDavid Bremner
To the best of my understanding, this original behaviour was what Carl's homebrew parser produced. With commit 86f89385 Austin switched to using GMime (2.6). This produced arguably worse results, but since the input was bad, we could live with it. Now with GMime 3.0 we are getting the original results again, and there is no reason to consider this test broken.
2019-05-20configure: Ensure that GMime can extract session keysDaniel Kahn Gillmor
GMime 3.0 and higher can extract session keys, but it will *not* extract session keys if it was built with --disable-crypto, or if it was built against GPGME version < 1.8.0. Notmuch currently expects to be able to extract session keys, and tests will fail if it is not possible, so we ensure that this is the case during ./configure time. Part of this feels awkward because notmuch doesn't directly depend on gpg at all. Rather, it depends on GMime, and the current implementation of GMime depends on GPGME for its crypto, and GPGME in turn depends on gpg. So the use of gpg in ./configure isn't actually introducing a new dependency, though if a future version of GMime were ever to move away from GnuPG, we might need to reconsider. Note that this changeset depends on id:20190506174327.13457-1-dkg@fifthhorseman.net , which supplies the rfc822 message test/corpora/crypto/basic-encrypted.eml used in it. Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
2019-05-20tests: fail and report when a parallel build fails (or times out)Daniel Kahn Gillmor
When a parallel build fails (or when it times out, if timeout is present), the test suite should not blithely succeed. Catch these failures and at least report them. Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
2019-05-20tests: make timeout configurable with NOTMUCH_TEST_TIMEOUT (default: 2m)Daniel Kahn Gillmor
The current 2 minute timeout is reasonable, but to exercise the test suite or induce timeout failures, we might want to make it shorter. This makes it configurable so you can run (for example): make check NOTMUCH_TEST_TIMEOUT=10s We stick with the default of 2m. Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
2019-05-10test: show what emacs sees of an encrypted message when crypto is disabledDaniel Kahn Gillmor
Some users may set notmuch-crypto-process-mime to nil, disabling all crypto use. We should have a baseline for what that looks like.
2019-05-10lib/message-file: close stream in destructorDavid Bremner
Without this, $ make time-test OPTIONS=--small leads to fatal errors from too many open files. Thanks to st-gourichon-fid for bringing this problem to my attention in IRC.
2019-05-10test: avoid unnecessary extraction of the test fingerprintDaniel Kahn Gillmor
FINGERPRINT is already exported by add_gnupg_home, so this is unnecessary. This change also happens to get rid of the superfluous check-trustdb spew from the test suite that looked like this: gpg: checking the trustdb gpg: marginals needed: 3 completes needed: 1 trust model: pgp gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
2019-05-10test: let the OS choose a port for smtp-dummyDavid Bremner
This should avoid potential collisions if we start running multiple smtp-dummy processes in parallel.
2019-05-10emacs: test notmuch-show during message decryptionDaniel Kahn Gillmor
We did not have a test showing what message decryption looks like within notmuch-emacs. This change gives us a baseline for future work on the notmuch-emacs interface. This differs from previous revisions of this patch in that it should be insensitive to the order in which the local filesystem readdir()s the underlying maildir. Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
2019-05-07tests: environment variable to specify that tests should be serializedJameson Graef Rollins
If NOTMUCH_TEST_SERIALIZE is non-null all tests will be run in series, rather than in parallel.
2019-05-07tests: run all tests in parallel, if availableJameson Graef Rollins
If either the moreutils or GNU parallel utility are available, run all tests in parallel. On my eight core machine this makes for a ~x7 speed-up in the full test suite (1m24s -> 12s). The design of the test suite makes this parallelization trivial.
2019-05-07tests: remove entangling corpus index optimizationJameson Graef Rollins
The add_email_corpus test utility includes logic that tries to re-use an index of the corpus if available. This was seemingly done as an optimization, so that every test that uses the corpus didn't have to create it's own index of the corpus. However, this has the perverse side effect of entangling tests together, and breaks parallelization. Forcing each test to do it's own index does increase the overall time of the test slightly (~6%), but this will be more than made up for in the next patch that introduces paraellization.
2019-05-07tests: remove some redundant pre-cleanup of the corpus MAIL_DIRJameson Graef Rollins
add_email_corpus itself does an rm -rf $MAIL_DIR, so these are not necessary.
2019-05-07test/crypto: add_gnupg_home should have ultimate trust on "its own" keyDaniel Kahn Gillmor
The typical use case for gpg is that if you control a secret key, you mark it with "ultimate" ownertrust. The opaque --import-ownertrust mechanism is GnuPG's standard mechanism to set up ultimate ownertrust (the ":6:" means "ultimate", for whatever reason). We adjust the test suite to match this change, inverting the sense of one test: since the default is now that the user ID of the suite's own key is valid, we change the test to make sure that the user ID is not emitted when it is *not* valid. Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
2019-05-07test: simplify user ID handlingDaniel Kahn Gillmor
The user ID on the self-test is a little bit clunky-looking. It also may end up showing up elsewhere in the test suite. Centralizing the user ID in one place should make it easier to handle if it ever changes, and should make tests easier to read. Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
2019-05-07test/crypto: clarify the difference between ownertrust and validityDaniel Kahn Gillmor
This is a subtle difference, but the output of notmuch shouldn't ever change based on ownertrust itself -- notmuch is intended to show valid User IDs, and to avoid showing invalid User IDs. It so happens that setting ownertrust of a key to ultimate sets all associated user IDs to "full" validity, so the test is correct, but just misnamed. Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
2019-05-07util/crypto: improve commentDaniel Kahn Gillmor
The comment line here lingers from when we were using some fancy version checking about session keys. Correct it to match the current state. Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
2019-05-07emacs: drop use of message-default-charsetDaniel Kahn Gillmor
Apparently, message-default-charset is deprecated, which causes the following warning messages during the build: In notmuch-maildir-setup-message-for-saving: emacs/notmuch-maildir-fcc.el:172:31:Warning: ‘message-default-charset’ is an obsolete variable (as of 26.1); The default charset comes from the language environment In discussion with emacs upstream over on https://debbugs.gnu.org/35370, it appears that we can just drop this entirely and things should still work with emacs 25.
2019-05-07emacs: Move notmuch-search-interactive-region to notmuch-lib as notmuch-interactive-regionPierre Neidhardt
2019-05-06travis: use ppa:notmuch/notmuchDaniel Kahn Gillmor
https://launchpad.net/~notmuch/+archive/ubuntu/notmuch/+packages contains backports of gmime and gpgme and related cryptographic tools to ubuntu xenial. I tried to do a simple backport of gmime alone, and it failed due to the older gpgme in xenial, so this setup resolves those problems. This should allow us to continue to use the Travis continuous integration build. Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net>