Feature/patch request

Bucher, Dr. Damian bucher at uni-muenster.de
Wed Jun 30 12:29:08 EEST 2021


Hi,

we tested a wrapper around the open() function, which rewrites the error code to EACCES in case the mailbox is from a snapshot and which we load with LD_PRELOAD. (See https://www.samanbarghi.com/blog/2014/09/05/how-to-wrap-a-system-call-libc-function-in-linux/) 
Unfortunately that was not successful, so we added a wrapper around access(), which does the job (you could even skip the open()-wrapper).

So the below mentioned code snippet is not the only one to be modified ;)

Best regards
Damian

> Am 29.06.2021 um 12:29 schrieb Aki Tuomi <aki.tuomi at open-xchange.com>:
> 
> Hi!
> 
> This is on our backlog already as DOP-2294, lets see if we get it forward at some point.
> 
> Aki
> 
>> On 29/06/2021 12:48 Bucher, Dr. Damian <bucher at uni-muenster.de> wrote:
>> 
>> 
>> Hi,
>> 
>> we ran into a problem, while using filesystem snapshots on a GPFS-filesystem. With this we want to give the users the opportunity to restore Mailboxes from this snapshots in case they deleted mail by accident.
>> 
>> For each snapshot we create a namespace via a postlogin skript (with INDEX=MEMORY to avoid writing index files to a ro filesystem). The snapshot are of course read only.
>> When accessing the mailboxes in the namespaces, dovecot generates an error (ro filesystem):
>> Error: Mailbox #backup20/Mail/deleted-messages: open() failed with mbox: Read-only file system
>> 
>> 
>> We tracked that down to a problem in src/lib-storage/index/mbox/mbox-file.c (yes, we are still using mbox ;) )
>> 
>> fd = open(mailbox_get_path(&mbox->box),
>>                  mbox_is_backend_readonly(mbox) ? O_RDONLY : O_RDWR);
>>        if (fd == -1 && errno == EACCES && !mbox->backend_readonly) {
>>                mbox->backend_readonly = TRUE;
>>                fd = open(mailbox_get_path(&mbox->box), O_RDONLY);
>>        }
>> 
>> Here the mailbox is opened and it is checked wether the file is ro or rw.
>> Since the snapshot contains the original file permissions, the file is of course rw, but the filesystem is ro.
>> Unfortunately the code only checks for file permissions (errno == EACCES), which doesn’t catch our error condition (FS ro).
>> 
>> We think that exchanging this to (errno == EACCESS || errno == EROFS) would catch the file system ro error correctly and set the readonly flag correctly and open the mailbox ro.
>> (this probably hast to be done for other mailbox formats in the corresponding files too)
>> 
>> What do you think? Is there a chance to implement that in an upcoming release?
>> 
>> Best regards
>> Damian
>> 
>>>> Postmaster at WWU
>> WWU IT
>> Westfälische Wilhelms-Universität (WWU) Münster
>> Röntgenstr. 7-13, 48149 Münster
>> 
>> mailto:postmaster at uni-muenster.de

—  
Westfälische Wilhelms-Universität (WWU) Münster
WWU IT
Dr. Damian Bucher
Abt. 6.2 Systemdienste
Röntgenstr. 7-13, 48149 Münster

Tel.: +49 251 83-31658 Fax: +49 251 8393331658
mailto:bucher at uni-muenster.de
Website: www.uni-muenster.de/it






-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 5641 bytes
Desc: not available
URL: <https://dovecot.org/pipermail/dovecot/attachments/20210630/87fb0e6e/attachment.p7s>


More information about the dovecot mailing list