summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
6766653)
When encountering a message that has been mangled in the "mixed up"
way by an intermediate MTA, notmuch should instead repair it and index
the repaired form.
When it does this, it also associates the index.repaired=mixedup
property with the message. If a problem is found with this repair
process, or an improved repair process is proposed later, this should
make it easy for people to reindex the relevant message. The property
will also hopefully make it easier to diagnose this particular problem
in the future.
Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
found in that message, since it was able to index the built-in
protected headers directly.
found in that message, since it was able to index the built-in
protected headers directly.
+ ``index.repaired=mixedup`` indicates the repair of a "Mixed Up"
+ encrypted PGP/MIME message, a mangling typically produced by
+ Microsoft's Exchange MTA. See
+ https://tools.ietf.org/html/draft-dkg-openpgp-pgpmime-message-mangling
+ for more information.
+
GMimeContentType *content_type;
char *body;
const char *charset;
GMimeContentType *content_type;
char *body;
const char *charset;
+ GMimeObject *repaired_part = NULL;
if (! part) {
_notmuch_database_log (notmuch_message_get_database (message),
"Warning: Not indexing empty mime part.\n");
if (! part) {
_notmuch_database_log (notmuch_message_get_database (message),
"Warning: Not indexing empty mime part.\n");
+ goto DONE;
+ }
+
+ repaired_part = _notmuch_repair_mixed_up_mangled (part);
+ if (repaired_part) {
+ /* This was likely "Mixed Up" in transit! We will instead use
+ * the more likely-to-be-correct variant. */
+ notmuch_message_add_property (message, "index.repaired", "mixedup");
+ part = repaired_part;
}
_index_content_type (message, part);
}
_index_content_type (message, part);
}
_index_mime_part (message, indexopts, toindex, msg_crypto);
}
}
_index_mime_part (message, indexopts, toindex, msg_crypto);
}
}
if (GMIME_IS_MESSAGE_PART (part)) {
}
if (GMIME_IS_MESSAGE_PART (part)) {
_index_mime_part (message, indexopts, g_mime_message_get_mime_part (mime_message), msg_crypto);
_index_mime_part (message, indexopts, g_mime_message_get_mime_part (mime_message), msg_crypto);
}
if (! (GMIME_IS_PART (part))) {
_notmuch_database_log (notmuch_message_get_database (message),
"Warning: Not indexing unknown mime part: %s.\n",
g_type_name (G_OBJECT_TYPE (part)));
}
if (! (GMIME_IS_PART (part))) {
_notmuch_database_log (notmuch_message_get_database (message),
"Warning: Not indexing unknown mime part: %s.\n",
g_type_name (G_OBJECT_TYPE (part)));
}
disposition = g_mime_object_get_content_disposition (part);
}
disposition = g_mime_object_get_content_disposition (part);
/* XXX: Would be nice to call out to something here to parse
* the attachment into text and then index that. */
/* XXX: Would be nice to call out to something here to parse
* the attachment into text and then index that. */
}
byte_array = g_byte_array_new ();
}
byte_array = g_byte_array_new ();
+ DONE:
+ if (repaired_part)
+ g_object_unref (repaired_part);
}
/* descend (if desired) into the cleartext part of an encrypted MIME
}
/* descend (if desired) into the cleartext part of an encrypted MIME
'body:["original"]'"$bodytext"
test_begin_subtest "repaired 'Mixed-up' messages can be found with index.repaired=mixedup"
'body:["original"]'"$bodytext"
test_begin_subtest "repaired 'Mixed-up' messages can be found with index.repaired=mixedup"
-test_subtest_known_broken
output=$(notmuch search --output=messages property:index.repaired=mixedup)
test_expect_equal "$output" id:mixed-up@mangling.notmuchmail.org
output=$(notmuch search --output=messages property:index.repaired=mixedup)
test_expect_equal "$output" id:mixed-up@mangling.notmuchmail.org
test_expect_success 'notmuch reindex --decrypt=true id:mixed-up@mangling.notmuchmail.org'
test_begin_subtest "search cleartext of 'Mixed-Up' mangled PGP/MIME message"
test_expect_success 'notmuch reindex --decrypt=true id:mixed-up@mangling.notmuchmail.org'
test_begin_subtest "search cleartext of 'Mixed-Up' mangled PGP/MIME message"
-test_subtest_known_broken
output=$(notmuch search --output=messages body:password)
test_expect_equal "$output" id:mixed-up@mangling.notmuchmail.org
output=$(notmuch search --output=messages body:password)
test_expect_equal "$output" id:mixed-up@mangling.notmuchmail.org