#!/bin/sh

# generates a global whitelist of all mailaddresses
# that were sent mail from hoc.net (regardless by whom)

GWLIST=/etc/postfix/uce_spam/global_whitelist
ADRLIST=${GWLIST}.adr
TMPLIST=${GWLIST}.tmp

# copy old whitelist to temp if exists
if test -f $ADRLIST
then
  cp $ADRLIST $TMPLIST
else
  # initial run
  # add mailadresses from peoples sent mails
  find /home -name sent-mail -exec egrep '^To:|^CC:' {} \; | sed 's,.*[ <,;"]\([-0-9a-zA-Z%&*+/=?\^{}|~._]*\@[^ >,;]*\).*,\1,' | egrep -v '^To:|^CC:'| tr [:upper:] [:lower:] | sort -u >> $TMPLIST
  # add mailadresses from older logs
  gunzip -c /var/log/mail-*.gz | grep 'postfix\/smtp.*status\=sent' | sed 's,.*to=<\([^>]*\)>.*,\1,' | tr [:upper:] [:lower:] | sort -u >> $TMPLIST
fi

# add mailadresses from current log
grep 'postfix\/smtp.*status\=sent' /var/log/mail | sed 's,.*to=<\([^>]*\)>.*,\1,' | tr [:upper:] [:lower:] | sort -u >> $TMPLIST

# add mailadresses from squirrelmail address books
find /var/lib/squirrelmail/data -name '*.abook' -exec  cat {} \; | sed 's,.*|\(.*@.*\)|.*,\1,' | tr [:upper:] [:lower:] | sort -u >> $TMPLIST

# add mailadresses from pine address books
find /home -name '.addressbook' -exec  grep -v '^#' {} \; | tr '\t' ' ' | sed 's,[^@]* \([^ ]*@[^ ]*\).*,\1,' | tr [:upper:] [:lower:] | sort -u >> $TMPLIST

# make sure only mail adresses are in tmp file
# filter out our own domains, sort and copy back
egrep '^[-0-9a-zA-Z%&*+/=?\^{}|~._]+\@[-0-9a-z.]+\.[a-z]+$' $TMPLIST | egrep -v 'hoc\.net|klausbleyer\.de|klausbleyer\.com|schreibt\.de' | sort -u > $ADRLIST

# make hash db map and move if successful
if test -f $ADRLIST
then
  cat $ADRLIST | sed 's,\(.*\),\1\tOK,' > ${GWLIST}.in
  /usr/sbin/postmap ${GWLIST}.in && mv ${GWLIST}.in.db ${GWLIST}.db
fi

# cleanup
if test -f $TMPLIST
then
  rm $TMPLIST
fi
if test -f ${GWLIST}.in
then
  rm ${GWLIST}.in
fi

# no need for postfix to reload with hash dbs!

