#!/bin/bash
#
# mail2uls
#
# E-Mail Eingang an ULS weiterleiten
#
# E-Mails werden lokal an die Adresse:
# <ulsteststep>@<ulssection>[.<ulshost>].mail2uls gesendet
#
# Voraussetzung ist, dass in der "/etc/postfix/master.cf"
# folgende Zeile enthalten ist und der User nobody existiert. Andernfalls
# muss nobody auf einen existierenden User geaendert werden.
# #############################################################################
# # mail2uls
# mail2uls  unix  -       n       n       -      10       pipe
#   flags=Rq user=nobody argv=/usr/share/ulsclient/mail2uls ${sender} ${user} ${recipient}
# #############################################################################
#
# und in der "/etc/postfix/transport":
# #############################################################################
# .mail2uls mail2uls:dummy
# #############################################################################
#
# postmap /etc/postfix/transport
# nicht vergessen und
# /etc/init.d/postfix restart
#
#########################################
#
TEMPDAT=/tmp/mail2uls.tmp.$$
#
MYDIR=`dirname $0`
#
TXTUNIT=""
while getopts ts op; do
  case "$op" in
   t) TXTUNIT="_T";;
   s) TXTUNIT="[T]";
  esac
done
shift $(( $OPTIND - 1 ))
#
LANG=us_US.UTF-8
#
. `dirname $0`/uls_header "$@"
#
ULSHOST=$(echo $3 | sed -n 's/.*@[^.]*\.\([^.]*\)\.mail2uls$/\1/p')
if [[ -n "$ULSHOST" && "$ULSHOST" != "localhost" ]]; then
  ULSHOSTNAME="$ULSHOST"
  UH="-h $ULSHOST"
else
  UH=""
fi
ULSSECTION=$(echo $3 | sed -n 's/.*@\([^.]*\)\..*$/\1/p')
ULSTESTSTEP="$2"
SENDER="$1"
#
cat >$TEMPDAT
#
MD=`sed -e '/^$/ q;s/ $//g' $TEMPDAT | awk -F ': ' '$1 == "Date"{print $2}'`
CT=`sed -e '/^$/ q;s/ $//g' $TEMPDAT | awk -F ': ' '$1 == "Content-Type"{print $2}'`
ENC=`sed -e '/^$/ q;s/ $//g' $TEMPDAT | awk -F ': ' '$1 == "Content-Transfer-Encoding"{print $2}'`
MAILDT=`date -d "$MD" '+%F %T%z'`
DT=`date '+%F %T.%N%z'`
#
#
( echo "V;$DT;$ULSHOSTNAME;$ULSSECTION;$ULSTESTSTEP;Sender;$SENDER;[T]"
  echo 'V;;;;;Subject;"'`sed -e '/^$/ q' $TEMPDAT | LANG=C awk -f $MYDIR/mail2ulssubject.awk`'";[T]'
  echo "V;;;;;Date;$MAILDT;{DT}"
  if [[ "$CT" = "application/octet-stream" && "$ENC" = "base64" ]]; then
    sed -e '1,/^$/ d' $TEMPDAT | mmencode -u | send_stdin_file $UH "$ULSSECTION" "$ULSTESTSTEP" "Body" $DT "body.dat"
  elif [[ "$CT" = "multipart/mixed;" ]]; then
    awk -F ': *' -f $MYDIR/mail2ulsmultipart.awk -v TXTUNIT="$TXTUNIT" -v DT="$DT" -v UH="$UH" -v ULSSECTION="$ULSSECTION" -v ULSTESTSTEP="$ULSTESTSTEP" $TEMPDAT
  elif [[ -n "$TXTUNIT" && `stat -c '%s' $TEMPDAT` < 3000 ]]; then
    echo -n 'V;;;;;Body;"'
    sed -e '1,/^$/ d' $TEMPDAT | sed 's/\(["\\]\)/\\\1/g'
    echo "\";$TXTUNIT"
  elif [[ "$ENC" = "quoted-printable" ]]; then
    printf "$(sed -e '1,/^$/ d' $TEMPDAT | sed -z 's/%/%%/g;s/=\n//g;s/=/\\x/g;s/\n/\\n/g')" | send_stdin_file -G $UH "$ULSSECTION" "$ULSTESTSTEP" "Body" $DT "body.txt"
  else
    sed -e '1,/^$/ d' $TEMPDAT | send_stdin_file -G $UH "$ULSSECTION" "$ULSTESTSTEP" "Body" $DT "body.txt"
  fi
  rm $TEMPDAT
) | send_test_tab
