#! /bin/sh # $Id$ # # HylaFAX Facsimile Software # # Copyright (c) 1990-1996 Sam Leffler # Copyright (c) 1991-1996 Silicon Graphics, Inc. # HylaFAX is a trademark of Silicon Graphics # # Permission to use, copy, modify, distribute, and sell this software and # its documentation for any purpose is hereby granted without fee, provided # that (i) the above copyright notices and this permission notice appear in # all copies of the software and related documentation, and (ii) the names of # Sam Leffler and Silicon Graphics may not be used in any advertising or # publicity relating to the software without the specific, prior written # permission of Sam Leffler and Silicon Graphics. # # THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, # EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY # WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. # # IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR # ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, # OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF # LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE # OF THIS SOFTWARE. # # # faxrcvd file devID commID error-msg # #exec 2>/public/faxrcvd-trace$$.log #set -x if [ $# -lt 4 ]; then echo "Usage: $0 file devID commID error-msg [ callID-1 [ callID-2 [ ... [ callID-n ] ] ] ]" exit 1 fi test -f etc/setup.cache || { SPOOL=`pwd` cat</dev/null 2>&1; then ERRORSTO=`$TTYCMD` else ERRORSTO=/dev/null fi # # Permit various types of attachment types: ps, tif, pdf # Note that non-ASCII filetypes require an encoder. # pdf requires tiff2ps and tiff2pdf # FILETYPE=ps SENDTO= # hb beginn 2006-01-25 PNGWIDTH= PRINTTO= PRINTDRIVER= COPYTO= COPYFOR= COPYMOD= # hb end 2006-01-25 # # There is no good portable way to find out the fully qualified # domain name (FQDN) of the host or the TCP port for the hylafax # service so we fudge here. Folks may want to tailor this to # their needs; e.g. add a domain or use localhost so the loopback # interface is used. # HOSTNAME=`hostname` # XXX no good way to find FQDN PORT=4559 # XXX no good way to lookup service # hb beginn 2006-01-04 DESTINATION="$7" # hb end 2006-01-04 FILE="$1"; shift; DEVICE="$1"; shift; COMMID="$1"; shift; MSG="$1"; shift; COUNT=1 while [ $# -ge 1 ]; do # The eval has $1 set yet, and this forces a variable-to-variable # assignment, allowing us to not need to do escaping eval CALLID$COUNT='$1' shift COUNT=`expr $COUNT + 1` done CIDNUMBER="$CALLID1" CIDNAME="$CALLID2" # hb beginn 2005-05-17 #FILENAME=`echo $FILE | $SED -e 's/\.tif//' -e 's/recvq\///'` FILENAMEFIRST=`echo $FILE | $SED -e 's/\.tif//' -e 's/recvq\///'` DATUM=`/bin/date +%Y-%m-%d-%H-%M-%S` FILENAME="$DATUM-$FILENAMEFIRST" # hb end 2005-05-17 SENDER="`$INFO $FILE | $AWK -F: '/Sender/ { print $2 }' 2>$ERRORSTO | $SED 's/^.//'`" SUBADDR="`$INFO $FILE | $AWK -F: '/SubAddr/ { print $2 }' 2>$ERRORSTO | $SED 's/^.//'`" # hb beginn 2005-10-02 PAGES="`$INFO $FILE | $AWK -F: '/Pages/ { print $2 }' 2>$ERRORSTO | $SED 's/^.//'`" # hb end 2005-10-02 # # Apply customizations. All customizable variables should # be set to their non-customized defaults prior to this. # if [ -f etc/FaxDispatch ]; then . etc/FaxDispatch # NB: FaxDispatch sets SENDTO fi # # Fetch language settings (after FaxDispatch for customization of $LANG). # . bin/dictionary . bin/dictionary-local if [ -f etc/FaxDictionary ]; then . etc/FaxDictionary fi setInfoSize if [ -f $FILE ]; then # # Don't send FaxMaster duplicates, and FaxMaster may not even # want a message at all, depending on NOTIFY_FAXMASTER. # case $NOTIFY_FAXMASTER$MSG in never*) NOTIFY_FAXMASTER=no;; errors) NOTIFY_FAXMASTER=no;; *) NOTIFY_FAXMASTER=yes;; esac if [ "$TOADDR" != "$SENDTO" ] && [ "$NOTIFY_FAXMASTER" != "no" ]; then (echo "Mime-Version: 1.0" echo "Content-Type: text/plain; charset=$CHARSET" echo "Content-Transfer-Encoding: quoted-printable" echo "To: $TOADDR" echo "From: $DICTRECEIVEAGENT <$FROMADDR>" eval echo "Subject: $DICTRECEIVEDFROM"; echo "" echo "$FILE (ftp://$HOSTNAME:$PORT/$FILE):"; faxInfo $FILE printf "%`echo $INFOSIZE`s: $DEVICE\n" "$DICTRECEIVEDON" if [ "$MSG" ]; then echo "" echo "$DICTMSGINTRO" echo "" echo " $MSG" echo "" echo "$DICTLOGFOLLOWS" echo "" if [ -f log/c$COMMID ]; then $SED -e '/-- data/d' \ -e '/start.*timer/d' -e '/stop.*timer/d' \ log/c$COMMID elif [ -n "$COMMID" ]; then echo "$DICTNOLOGAVAIL ($DICTCOMMID c$COMMID)." else echo "$DICTNOLOGAVAIL." fi else printf "%`echo $INFOSIZE`s: c$COMMID (ftp://$HOSTNAME:$PORT/log/c$COMMID)\n" "$DICTCOMMID" fi if [ -n "$SENDTO" ]; then echo "" eval echo "$DICTDISPATCHEDTO" fi # hb beginn 2005-09-24 if [ -n "$PRINTTO" ]; then echo "" eval echo "${DICTPRINTTO}" fi # hb end 2005-09-24 # hb beginn 2006-01-25 if [ -n "${COPYTO}" ]; then echo "" eval echo "${DICTCOPYTO}" fi # hb end 2006-01-25 ) 2>$ERRORSTO | $SENDMAIL -f$FROMADDR -oi $TOADDR fi if [ -n "$SENDTO" ]; then (MIMEBOUNDARY="NextPart$$" echo "Mime-Version: 1.0" echo "Content-Type: Multipart/Mixed; Boundary=\"$MIMEBOUNDARY\"" echo "Content-Transfer-Encoding: 7bit" echo "To: $SENDTO" echo "From: $DICTRECEIVEAGENT <$FROMADDR>" eval echo "Subject: $DICTRECEIVEDFROM"; echo "" echo "--$MIMEBOUNDARY" echo "Content-Type: text/plain; charset=$CHARSET" echo "Content-Transfer-Encoding: quoted-printable" echo "" faxInfo $FILE printf "%`echo $INFOSIZE`s: $DEVICE\n" "$DICTRECEIVEDON" if [ "$MSG" ]; then echo "" echo "$DICTMSGINTRO" echo "" echo " $MSG" echo "" echo "$DICTLOGFOLLOWS" echo "" if [ -f log/c$COMMID ]; then $SED -e '/-- data/d' \ -e '/start.*timer/d' -e '/stop.*timer/d' \ log/c$COMMID elif [ -n "$COMMID" ]; then echo "$DICTNOLOGAVAIL ($DICTCOMMID c$COMMID)." else echo "$DICTNOLOGAVAIL." fi else printf "%`echo $INFOSIZE`s: c$COMMID\n" "$DICTCOMMID" fi echo "" echo "--$MIMEBOUNDARY" if [ "$FILETYPE" = "tif" ]; then echo "Content-Type: image/tiff; name=\"$FILENAME.tif\"" echo "Content-Description: FAX document" echo "Content-Transfer-Encoding: $ENCODING" echo "Content-Disposition: attachment; filename=\"$FILENAME.tif\"" echo "" encode $FILE; elif [ "$FILETYPE" = "tif-r" ]; then echo "Content-Type: image/tiff; name=\"$FILENAME.tif\"" echo "Content-Description: FAX document" echo "Content-Transfer-Encoding: $ENCODING" echo "Content-Disposition: attachment; filename=\"$FILENAME.tif\"" echo "" if (tiffinfo $FILE | grep "JPEG" > /dev/null) then tiffcp -c jpeg:R $FILE $FILE.r.tif encode $FILE.r.tif $RM -f $FILE.r.tif 2>$ERRORSTO else encode $FILE fi elif [ "$FILETYPE" = "tif-y" ]; then echo "Content-Type: image/tiff; name=\"$FILENAME.tif\"" echo "Content-Description: FAX document" echo "Content-Transfer-Encoding: $ENCODING" echo "Content-Disposition: attachment; filename=\"$FILENAME.tif\"" echo "" if (tiffinfo $FILE | grep "JPEG" > /dev/null) then tiffcp -c jpeg:Y $FILE $FILE.y.tif encode $FILE.y.tif $RM -f $FILE.y.tif 2>$ERRORSTO else encode $FILE fi elif [ "$FILETYPE" = "pdf" ]; then echo "Content-Type: application/pdf; name=\"$FILENAME.pdf\"" echo "Content-Description: FAX document" echo "Content-Transfer-Encoding: $ENCODING" echo "Content-Disposition: attachment; filename=\"$FILENAME.pdf\"" echo "" $TIFF2PDF -o $FILE.pdf $FILE encode $FILE.pdf $RM -f $FILE.pdf 2>$ERRORSTO # hb beginn 2005-10-02 elif [ "$FILETYPE" = "png" ] then case ${PAGES} in 1) echo "Content-Type: image/png; name=\"$FILENAME.png\"" echo "Content-Description: FAX document" echo "Content-Transfer-Encoding: $ENCODING" echo "Content-Disposition: attachment; filename=\"$FILENAME.png\"" echo "" $FAX2PNG $FILE $FILE.png -a -w ${PNGWIDTH} encode ${FILE}.png $RM -f ${FILE}.png 2>$ERRORSTO ;; *) # first split tiff to single page files... $TIFFSPLIT $FILE ${FILE%.tif}_ 2>/dev/null for i in `find ${FILE%.tif}_*.tif` do ${FAX2PNG} ${i} ${i%.tif}.png -a -w ${PNGWIDTH} # done ${RM} ${FILE%.tif}_*.tif 2>${ERRORSTO} idx=1 for i in `find ${FILE%.tif}_*.png` do echo "Content-Type: image/png; name=\"$DATUM-${i#recvq/}\"" echo "Content-Description: FAX document" echo "Content-Transfer-Encoding: $ENCODING" echo "Content-Disposition: attachment; filename=\"$DATUM-${i#recvq/}\"" echo "" encode ${i} if [ "${idx}" -lt "${PAGES}" ] then echo "" echo "--$MIMEBOUNDARY" fi idx=`/usr/bin/expr ${idx} + 1` done ${RM} ${FILE%.tif}_*.png 2>${ERRORSTO} ;; esac # hb end 2005-10-02 else # default as Postscript echo "Content-Type: application/postscript; name=\"$FILENAME.ps\"" echo "Content-Description: FAX document" echo "Content-Transfer-Encoding: 7bit" echo "Content-Disposition: attachment; filename=\"$FILENAME.ps\"" echo "" $FAX2PS $FILE 2>$ERRORSTO fi echo "" echo "--$MIMEBOUNDARY--" ) 2>$ERRORSTO | $SENDMAIL -f$FROMADDR -oi $SENDTO # end ${FILETYPE} fi # hb beginn 2005-09-25 # fuer postscript printing aufbereiten if [ -n "${PRINTTO}" ] then ( echo "${AUTOPRINT_TXT} ${FILE}" echo "${AUTOPRINT_TXT} printer ${PRINTTO}" ) >> ${AUTOPRINT_LOG} if [ "${PRINTDRIVER}" = "" ] then ( echo "${AUTOPRINT_TXT} ${PRINTTO} is a postscript printer" ) >> ${AUTOPRINT_LOG} # ab zum Drucker ${TIFFBIN}/tiff2ps -a \ -l \ -p \ -h 11.1082 \ -w 7.8543 \ ${FILE} \ | ${BIN}/lpr -P ${PRINTTO} >> ${AUTOPRINT_LOG} 2>&1 if [ ${?} -eq 0 ] then ( echo "${AUTOPRINT_TXT} printed ${FILE} on ${PRINTTO} ..." ) >>${AUTOPRINT_LOG} ${BIN}/logger -is FAX printed on ${PRINTTO} fi # fuer Ghostscript printing aufbereiten else ( echo "${AUTOPRINT_TXT} ${PRINTTO} is a ghostscript printer" echo "${AUTOPRINT_TXT} printer driver ${PRINTDRIVER}" ) >> ${AUTOPRINT_LOG} # ein Postscript file daraus machen ${TIFFBIN}/tiff2ps -a \ -l \ -p \ -h 11.1082 \ -w 7.8543 \ ${FILE} \ -O /tmp/$$newfax.ps if [ ${?} -eq 0 ] then ( echo "${AUTOPRINT_TXT} ps file /tmp/$$newfax.ps created" echo "${AUTOPRINT_TXT} converting /tmp/$$newfax.ps to ${PRINTDRIVER} format" ) >> ${AUTOPRINT_LOG} # fuer den Drucker aufbereiten und weg ${GSRIP} -q \ -sDEVICE=${PRINTDRIVER} \ -dNOPAUSE \ -sPAPERSIZE=a4 \ -sOutputFile=\|"${BIN}/lpr -P ${PRINTTO}" \ -- /tmp/$$newfax.ps \ -c quit \ >> ${AUTOPRINT_LOG} 2>&1 fi # und ab zum Drucker if [ ${?} -eq 0 ] then ( echo "${AUTOPRINT_TXT} printed /tmp/$$newfax.ps on ${PRINTTO} ..." ) >> ${AUTOPRINT_LOG} ${BIN}/logger -is FAX printed on ${PRINTTO} # Reste entsorgen ${RM} /tmp/$$newfax.ps else ( echo "${AUTOPRINT_TXT} cannot print /tmp/$$newfax.ps on ${PRINTTO} ..." ) >> ${AUTOPRINT_LOG} fi # end ${PRINTTO} fi # end ${FILE} fi # hb end 2005-09-25 # hb beginn 2006-01-29 if [ -n "${COPYTO}" ] then sudo /usr/bin/tiff2pdf -o ${COPYTO}/${FILENAME}.pdf ${FILE} sudo /bin/chown ${COPYFOR}:users ${COPYTO}/${FILENAME}.pdf sudo /bin/chmod ${COPYMOD} ${COPYTO}/${FILENAME}.pdf fi # hb end 2006-01-29 else # # Generate notification mail for a failed attempt. # (echo "Mime-Version: 1.0" echo "Content-Type: text/plain; charset=$CHARSET" echo "Content-Transfer-Encoding: quoted-printable" echo "To: $TOADDR" echo "From: $DICTRECEIVEAGENT <$FROMADDR>" echo "Subject: $DICTNOTRECEIVED" echo "" eval echo "$DICTATTEMPTEDFAXFAILED" echo "" echo " $MSG" echo "" echo "$DICTLOGFOLLOWS" echo "" if [ -f log/c$COMMID ]; then $SED -e '/-- data/d' \ -e '/start.*timer/d' -e '/stop.*timer/d' \ log/c$COMMID elif [ -n "$COMMID" ]; then echo "$DICTNOLOGAVAIL ($DICTCOMMID c$COMMID)." else echo "$DICTNOLOGAVAIL." fi ) 2>$ERRORSTO | $SENDMAIL -f$FROMADDR -oi $TOADDR fi