Twice, this problem has forced me to reboot my server into single-user mode
to clean out these messages from my log file.  Each time, Debian has done a
large set of updates, which has had 'dpkg/apt' putting lots of .deb files 
into '/var/cache/apt', which shouldn't be a problem by itself.  But if the
disk is a bit low on space and one then suffers a deny-of-service attack, 
Linux can end up filling the partition containing '/var/log' with error
messages.

Ordinarily, disk full from a denial of service attack is something one can
recover from fairly easily as a super-user, as Linux assigns extra space
that ordinary users cannot use.  Alas, it appears that 'greylistd' quickly
fills all of that space with enumerable copies of the same error message:

   greylistd: Cannot write to /var/lib/greylistd/states.4009: No space left on 
device

I can think of a few ways to fix this problem.  First, duplicate error
messages could be suppressed.  One might do this by remembering the time
of the last disk full message at 'program/greylistd:286' and supressing 
messages that have occurred too recently.  Or perhaps these errors could
be counted  and the number observed printed at a later time, say after 
N seconds (or N minutes) or when another error message is generated.  

Or, if the disk is full and the daemon cannot function anyway, it may as
well go to sleep and try again later.  If the sleep time is long enough, 
it won't put enough messages in the log as to make a bad problem worse.

Another possible fix would be also record the time of the last disk-full
error, as above, and to check it at 'do_save()' [program/greylistd:286].  
It would then not bother trying to save anything until enough time has
elapsed to make it worthwhile to try again.

While i know well at least a half-dozen programming languages, 'python'
is not one of them and i regret that i am not submitting a patch at this
time.
                             -- Tovar

Reply via email to