In small organisations it can be desireable to replace a cumbersome fax machine with a computer and modem. In this fashion all faxes are recieved into this share and available for all to read in TIF or PDF formats. We plan to follow this with a document about a more complex FaxDispatch operation.

Configure Samba Share Point

Create a share that is only accessable to a single user and force all connections to that user. Create the directory and change ownership accordingly. Hylafax typically runs as the user uucp, this example has Samba use the same account.

Merge the following into /etc/samba/smb.conf, or use a fancy include file. Update as necessary for the target environment.

[fax]
  comment = Inbound Faxes
  force group = uucp
  force user = uucp
  path = /var/lib/samba/fax
	# say yes to prevent deletion (see below)
  read only = no

Then make the directory and change the ownership.

mkdir -p /var/lib/samba/fax
chmod 0755 /var/lib/samba/fax
chown uucp /var/lib/samba/fax

Update etc/FaxDispatch

After a fax is recieved Hylafax will drop it into recvd/ then execute bin/faxrcvd. faxrcvd will source FaxDispatch allowing almost complete control of the delivery operation. All paths given here are relative to the Hylafax root, on Gentoo this is /var/spool/fax/.

The FaxDispatch script is run as a shell script, so can use whatever features your default shell has. This includes interacting with external services, or executing commands like curl to make HTTP notifications.

cat etc/FaxDispatch
# Don't want emails
NOTIFY_FAXMASTER="never"

# New name
n=`date +%Y.%m.%d.%H.%M.%S`
# New destination
t=/var/lib/samba/fax/$n

# See interesting information, commands could `2>&1 >>` here too
# set > /tmp/FaxDispatch.log

# make pdf in target
$TIFF2PDF -o $t.pdf $FILE

# We only copy to the fax location, archive this just in case
/bin/cp $FILE $t.tif

# use this to move it instead, but then there is no archive and if
#  a user deletes it from the Samba Share it's gone forever
# /bin/mv $FILE /var/lib/samba/fax

# Make infos like faxrcvd
if [ -f log/c$COMMID ]; then
		$SED -e '/-- data/d' \
		 -e '/start.*timer/d' -e '/stop.*timer/d' \
		 -e 's/=/=3D/g' \
		 log/c$COMMID
elif [ -n "$COMMID" ]; then
		echo "$DICTNOLOGAVAIL ($DICTCOMMID c$COMMID)."
else
		echo "$DICTNOLOGAVAIL."
fi

Test Delivery

It is not necessary to send a new fax everytime to test Hylafax. Modify the user to allow su, fake the faxrcvd and cleanup. The file in recvq must already be present and with proper permissions, presumeably it's leftover from a previous fax. Increment the COMMID each run, in the example it is 000000037.

# could also be `cat /etc/passwd|cut` but what about LDAP then?
oh=`getent passwd uucp|cut -d: -f6`
os=`getent passwd uucp|cut -d: -f7`
usermod -d /var/spool/fax -s /bin/bash uucp
su - uucp

As the uucp user do the following as many times a necessary to get it right. If there are no pre-existing TIF files in the directory any will do, name doesn' matter either (only to Hylafax, no user mode testing).

bin/faxrcvd "recvq/fax000000008.tif" "ttySL0" "000000037" ""
bin/faxrcvd "recvq/fax000000008.tif" "ttySL0" "000000038" ""
bin/faxrcvd "recvq/fax000000008.tif" "ttySL0" "000000039" ""
exit

Now cleanup those user mods. It's not necessary or required to change the homedir back. Please be sure to change the shell back to /bin/false or whatever it was to prevent login.

usermod -d $oh -s $os uucp

Now clean the Hylafax spool and deploy.

See Also