#!/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 | awk -F '[@.]' '$4 == "mail2uls"{print $3}'`
if [[ -n "$ULSHOST" ]]
 then
  ULSHOSTNAME="$ULSHOST"
  UH="-h $ULSHOST"
else
  UH=""
fi
ULSSECTION=`echo $3 | awk -F '[@.]' '{print $2}'`
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}'`
DT=`date -d "$MD" '+%F %T%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]'
  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` < 20000 ]]
   then
    echo -n 'V;;;;;Body;"'
    sed -e '1,/^$/ d' $TEMPDAT | sed 's/\(["\\]\)/\\\1/g'
    echo "\";$TXTUNIT"
  else
    sed -e '1,/^$/ d' $TEMPDAT | send_stdin_file $UH "$ULSSECTION" "$ULSTESTSTEP" "Body" $DT "body.txt"
  fi
  rm $TEMPDAT
) | send_test_tab
