#!/bin/sh
# CUPS-Anschluss der netPDF-Drucker („netPDF“, „netPDF-E-Rechnung“), Net-Base Software GmbH.
# Legt jeden Druck als PDF für den druckenden Benutzer in /var/spool/netpdf/<benutzer>/ ab; der
# Druckerwächter von netPDF (netpdf --druckerwache, Autostart beim Anmelden) öffnet ihn dort.
# Läuft als root (Rechte 0700), damit die Datei dem Benutzer gehören kann.
# Aufruf durch CUPS: netpdf <auftrag> <benutzer> <titel> <kopien> <optionen> [datei]

if [ $# -eq 0 ]; then
  echo 'direct netpdf "Unknown" "netPDF (virtueller Drucker)"'
  exit 0
fi
if [ $# -lt 5 ]; then
  echo "Aufruf: netpdf auftrag benutzer titel kopien optionen [datei]" >&2
  exit 1
fi

job=$1
user=$2
case "$user" in
  ''|*/*|.*|*[!A-Za-z0-9._@-]*) echo "ERROR: ungültiger Benutzername" >&2; exit 0 ;;
esac
if ! id "$user" >/dev/null 2>&1; then
  echo "ERROR: unbekannter Benutzer $user" >&2
  exit 0
fi
case "$job" in
  *[!0-9]*) job=0 ;;
esac
kind=druck
case "$DEVICE_URI" in
  *rechnung*) kind=rechnung ;;
esac

base=/var/spool/netpdf
umask 077
mkdir -p "$base/.eingang" || exit 1
chown root:root "$base" "$base/.eingang"
chmod 0711 "$base"
chmod 0700 "$base/.eingang"
dir="$base/$user"
# Ordner des Benutzers: echter Ordner, gehört ihm, nur für ihn lesbar
if [ -L "$dir" ] || { [ -e "$dir" ] && [ ! -d "$dir" ]; }; then
  rm -f "$dir"
fi
mkdir -p "$dir" || exit 1
chown "$user" "$dir"
chmod 0700 "$dir"

# erst im Ordner von root schreiben, dann dem Benutzer geben und in seinen Ordner verschieben
tmp=$(mktemp "$base/.eingang/auftrag-XXXXXX") || exit 1
if [ $# -ge 6 ]; then
  cat "$6" > "$tmp" || { rm -f "$tmp"; exit 1; }
else
  cat > "$tmp" || { rm -f "$tmp"; exit 1; }
fi
chown "$user" "$tmp"
chmod 0600 "$tmp"
mv -f -T "$tmp" "$dir/$kind-$(date +%Y%m%d-%H%M%S)-$job.pdf" || { rm -f "$tmp"; exit 1; }
exit 0
