Funny how you see code differently after not looking at it for a while. ;)

The attached version is a bit cleaner, and more efficient in silent mode.

--
-Eric 'shubes'
#!/bin/bash
#
# Copyright (C) 2010 Eric Shubert <[email protected]>
#
# This script removes old/expired entries in spamdyke's graylist tree.
#
# Original script written by David Stiller <>, posted on the spamdyke list.
# Enhanced by shubes to obtain parameters from spamdyke configuration,
# and do a more thorough job of pruning.
#
#########################################################################
# change log
# 02/06/10 shubes - optimized a tad
# 01/26/10 shubes - created from David Stiller's greylist-clean.sh script
#########################################################################

# This should be the only thing you might need to change
# Location of spamdyke configuration file
sdconf=/etc/spamdyke/spamdyke.conf

#########################################################################
# check/obtain parameter values
#########################################################################

a2_check_parameters(){

if [ ! -f "$sdconf" ]; then
  echo "$me - config file \"$sdconf\" does not exist"
  exit 1
fi

gldir=$(q21_get_spamdyke_parm graylist-dir)
glmax=$(q21_get_spamdyke_parm graylist-max-secs)

if [ ! "$silent" ]; then
  echo "$me processing graylist tree at $gldir ..."
  echo "$me pruning entries older than $glmax seconds ..."
fi
}

#########################################################################
# get a spamdyke configuration parameter
#########################################################################

q21_get_spamdyke_parm(){

sdparm=$(grep "$1=" $sdconf)
echo "${sdparm#$1=}"

}

#########################################################################
# process each domain in the graylist tree
#########################################################################

a5_process_domain(){

if [ ! "$silent" ]; then
  domname=${dompath##*/}
  echo "$me processing domain $domname ..."
  domtot=$(q51_count_graylist_entries)
  echo "$me $domname - $domtot entries found"
fi

# delete files that are expired
domdlf=$(find $dompath -type f -mmin +$[$glmax/60] -exec rm {} \; -print | wc 
-l)

# delete empty directories
domdld=$(find $dompath -depth -mindepth 2 -type d -empty -exec rmdir {} \; 
-print | wc -l)

if [ ! "$silent" ]; then
  domrem=$(q51_count_graylist_entries)
  echo "$me $domname - $domdlf entries removed"
  echo "$me $domname - $domdld empty directories removed"
  echo "$me $domname - $domrem graylisting entries remain"
  graydom=$[$graydom+1]
  graytot=$[$graytot+$domtot]
  graydlf=$[$graydlf+$domdlf]
  graydld=$[$graydld+$domdld]
  grayrem=$[$grayrem+$domrem]
fi
}

#########################################################################
# count the number of files (entries) in the graylist tree
#########################################################################

q51_count_graylist_entries(){

echo $(find $dompath -type f | wc -l)
}
#########################################################################
# main execution begins here
#########################################################################

me=${0##*/}
myver=v0.3.0
unset silent
if [ ! -z "$1" ]; then
  case $1 in
    -s )
      silent=$1
      ;;
    * )
      echo "$me usage: $me [-s]"
      exit 2
      ;;
  esac
else
  echo "$me $myver"
fi

a2_check_parameters

for dompath in $(find $gldir -mindepth 1 -maxdepth 1 -type d); do
  a5_process_domain
done

if [ ! "$silent" ]; then
  echo "$me total - $graydom domains processed"
  echo "$me total - $graytot entries found"
  echo "$me total - $graydlf entries removed"
  echo "$me total - $graydld empty directories removed"
  echo "$me total - $grayrem graylisting entries remain"
fi
exit 0
_______________________________________________
spamdyke-users mailing list
[email protected]
http://www.spamdyke.org/mailman/listinfo/spamdyke-users

Reply via email to