Dovecot fts script with solr

André Rodier andre at rodier.me
Sun May 6 13:13:01 EEST 2018


Hello again,

I have created a parser script, a little bit more advanced than the one 
provided with Dovecot. The main feature is probably to index documents 
inside zip/rar/tgz archives...

I am using Ansible, swaks and doveadm to run automatic tests for each 
supported content. For specific reasons, I am not yet able to add Apache 
Tika to the distribution. However, I already made some tests with it. 
For now, I want to talk about the indexing script.

I also have noticed a few weird behaviours. I will mention them at the 
end, albeit I am not 100% sure where they are coming from. I realised 
last week that using QEMU snapshots was not working as expected, so I am 
now more careful with this feature.

For the developers or users who would be interested and the Dovecot team 
members to understand my questions, here how the tests are working:

To run my tests, I have a set of files in various formats, with a UUID 
inside. They are office files, text files, or even archives with a text 
file inside...

The first test I am running is the script alone. I check that the script 
can convert the file to text, and then I use grep to check the UUID is 
present. This works *perfectly* for all the content, except ppt, but 
it's minor.

The second test is full:
- I use swaks to send the email with an attachment and the appropriate 
mime type.
- I then refresh the index using doveadm rescan.
- I check that fts search returns a line, with doveadm fts search.
- I then expunge the mailbox to be sure that the next test is valid.

For the second test, it works almost all the time, except in the 
following situations:
- When the attachment is an email (mime type message/rfc822)
- RTF (could be a bug in my script)
- Text file in UTF16 (Even if this file is converted to UTF8)

*Questions:*
1 - Is there any limitation or special case for the mime message/rfc822
2 - Is the mime type received coming from the email headers?
3 - When the script is called without arguments, what is the purpose of 
the extension at the end of each supported mime types?
4 - Can I return a wildcard in the supported mime types, for instance 
"text/* *" ?
5 - I would like to handle attachments of types 
application/octet-stream. I have added "application/octet-stream *", but 
I am not sure if dovecot will pass the attachments with these mime type 
or not.

*Notes:*
1 - I used netcat to monitor the solr server. I realise that sometimes, 
the data sent to the solr server only contains the headers of the email, 
not the text returned by the parser. Especially with rfc822 messages. I 
will do more tests.
2 - I just finished to write the script, it's not yet refactored, but at 
list it is well documented. I will do a full security audit later. I am 
actually testing an associated AppArmor profile.
3 - I will do more intensive test on the script on bigger mail boxes 
with more attachments.
4 - I may rewrite the script in Python
5 - Suggestions welcome.

I initially attached the current version of the script, but the email is 
probably pending for review...In this case, the last development version 
is on Github: 
https://github.com/progmaticltd/homebox/blob/dev/install/playbooks/roles/dovecot/files/fts/decode2text
The configuration of supported mime types is a simple file, accessible 
on github as well: 
https://github.com/progmaticltd/homebox/blob/dev/install/playbooks/roles/dovecot/templates/fts/mime-supported.conf

Thanks for your advices or suggestions.


More information about the dovecot mailing list