On Fri, May 12, 2017 at 10:02:01PM +0200, Gilles Chehade wrote: > On Thu, May 11, 2017 at 09:01:08PM -0500, Edgar Pettijohn wrote: > > > > > > On 05/11/17 10:04, Philippe Meunier wrote: > > > Hello, > > > > > > I'm running a default OpenSMTPD on OpenBSD 6.1 (and several previous > > > versions of it before). I've noticed that OpenSMTPD creates two > > > directories in /var/spool/smtpd/purge every time it is started but never > > > deletes these directories when shutting down. This might be fine on an > > > email server that's always up and running but this is on a laptop computer > > > that's turned on and off several times a day... The result is that I have > > > now hundreds of these empty directories in /var/sppol/smtpd/purge and just > > > doing an "ls" in that directory is very noticeably slow as a result. I > > > obviously can easily delete all these directories but it's kind of > > > annoying > > > to have to do that by hand every few months, so: > > > - is there any special reason why OpenSMTPD doesn't clean up after itself > > > when it shuts down? > > > - out of curiosity, what are these folders for anyway? I've look at all > > > the man pages related to OpenSMTPD and there's no explanation I could find > > > for the purge directory anywhere... > > > > > > Thanks, > > > > > > Philippe > > > > > > > > > > > I think its because the directory is owned by _smtpq and it looks like the > > intent was to clean up these files in purge_task(). However, it is running > > as _smtpd and can't rmtree() because of this. Of course that is if I have > > interpreted this correctly. > > You are right. > > Messages and envelopes are purged asynchronously by a background process > triggered by purge_task() and since we want to make sure things don't go > wrong we drop privileges for that process. > > A long time ago, we decided to give the queue a different ownership so a > compromise of the lookup process would not allow read/write to the queue > but it seems that I forgot to switch the purge_task() user which means a > transaction that's aborted will leave leftovers that purge_task() cannot > delete. > > Your fix makes sense but I haven't looked in this code for a while, I'll > read it again and commit your diff this week-end. >
Actually, code path is trivial, I could reproduce and it does not impact anything outside purge_task() so I'll commit in a few minutes. Thanks for the diff -- Gilles Chehade https://www.poolp.org @poolpOrg -- You received this mail because you are subscribed to [email protected] To unsubscribe, send a mail to: [email protected]
