#!/bin/sh
# $Id: rcvrenvfromlog.sh,v 1.1 2005/04/25 23:18:37 ca Exp $
# Copyright (c) 2005 Sendmail, Inc. and its suppliers.
#	All rights reserved.
#
# By using this file, you agree to the terms and conditions set
# forth in the LICENSE file which can be found at the top level of
# the sendmail distribution.
#
#
# This is a very simple script to recover the envelope data for CDB files.
# It must be executed in the CDB base directory.

umask 077
TMPDIR=/tmp/${USER}/recover.$$
O=${TMPDIR}/TAIDS.$$
LOG=/var/log/maillog

while getopts L:T: FLAG
do
  case "${FLAG}" in
    L)
       LOG="${OPTARG}"
       ;;
    T)
       TMPDIR="${OPTARG}"
       ;;
    ?)
       echo "$0: unknown option ${FLAG}"
       echo "$0: options:"
       echo "-T tmpdir  use tmpdir instead of ${TMPDIR}"
       echo "           NOTE: this directory will be removed and recreated!"
       echo "-L log     use log instead of ${LOG}"
       exit 64
       ;;
  esac
done
shift `expr ${OPTIND} - 1`

# remove existing directory
rmdir ${TMPDIR} 2>/dev/null
# create new directory, fail is present
mkdir -p ${TMPDIR} || exit 1
# this should not exist
rm -f $O

# cd to CDB?
if test ! -d 0
then
  echo "$0: cannot find CDB directory"
  exit 1
fi

ls -1 [0-9A-F]/S* | sed -e 's;[0-9A-F]/;;' > $O

if test ! -s $O
then
  echo "$0: no CDB files found"
  exit 0
fi

for taid in `cat $O`
do
  T=${TMPDIR}/${taid}
  rm -f $T
  echo mail: >> $T
  grep "ss_ta=${taid}, mail=" $LOG | sed -e 's;^.*mail=\(<.*>\), .*;\1;' >> $T
  echo rcpts: >> $T
  grep "ss_ta=${taid}, rcpt=" $LOG | sed -e 's;^.*rcpt=\(<.*>\), .*;\1;' >> $T
done

echo "$0: output in ${TMPDIR}/S*"

exit 0


syntax highlighted by Code2HTML, v. 0.9.1