#!/bin/sh 

if [ $# -ne 1 -o -z "$1" ]; then
	echo "USAGE: $0 <Username>"
	exit 1
fi
export LOGNAME="$1"

if [ -z "$SSH_ORIGINAL_COMMAND" ]; then
	echo "Keine Zone zum Editieren angegeben."
	exit 2
fi

incoming_dir=/etc/bind/zonen/incoming

# Aufruf entweder mit "ticket <TicketNr> Kommando …" oder "Kommando …"
unset ticket
read command zone kunde template headertemplate <<<"$SSH_ORIGINAL_COMMAND"
[ "$command" = ticket ] && read dummy ticket command zone kunde template headertemplate <<<"$SSH_ORIGINAL_COMMAND"

opt_args=''
[ -n "$kunde"    ] && opt_args="$opt_args -subdir $kunde"
[ -n "$template" ] && opt_args="$opt_args -default-data $template"
[ -n "$headertemplate" ] && opt_args="$opt_args -header-template $headertemplate"
a_ticket=()
[ -n "$ticket"   ] && a_ticket=(-log-message "Ticket $ticket")

# Aus Sicherheitsgründen Pfade wegschneiden,
# da dieser Parameter als Dateiname verwendet wird:
zone=${zone##*/}

case "$command" in
	add_incoming)
		if [ -e "$incoming_dir/$zone" ]; then
			cat <<_ >&2
"$incoming_dir/$zone" existiert bereits.
Bitte ggf. mit "-remove $zone" löschen und dann neu anlegen!
_
			exit 1
		fi
		cat >"$incoming_dir/$zone"
		/usr/sbin/named-checkzone -T ignore -k fail "$zone" "$incoming_dir/$zone"
		errcode="$?"
		if [ "$errcode" -ne 0 ]; then
			rm "$incoming_dir/$zone"
			cat <<_ >&2

Ich fürchte, mit $zone würdest Du so keine Freude haben.
Bitte korrigier die Zonen-Datei, und probier's dann nochmal!
_
			exit $errcode
		fi
		;;
	remove_incoming)
		rm -v "$incoming_dir/$zone"
		;;
	show_incoming)
		if [ "$zone" = "" ]; then
			ls -l "$incoming_dir"
		else
			cat "$incoming_dir/$zone"
		fi
                ;;
	add)
		exec /usr/bin/gen.zone -zone "$zone" \
			-output-file /var/lib/named/etc/bind/zonen/master/"$zone" \
			-rcs -reconfig$opt_args "${a_ticket[@]}" \
			'' $(</usr/lib/gen.zone/guesslist)
		;;
	blame)
		exec blame "/var/lib/named/etc/bind/zonen/master/$zone"
		;;
	10060751)
		exec /usr/bin/erzeuge_dns-master-zonen
		;;
	add_default)
		exec /usr/bin/gen.zone -zone "$zone" \
			-output-file /var/lib/named/etc/bind/zonen/master/"$zone" \
			-rcs -reconfig -no-axfr -no-guess -no-parent-axfr -no-keep-old-file$opt_args "${a_ticket[@]}"
		;;
	check_zones)
		exec /usr/bin/check_zones
		;;
	edit)
		exec /usr/bin/edit.zone "$zone" -rcs "${a_ticket[@]}"
		;;
	secedit)
		exec /usr/bin/edit.zone "$zone" -rcs -dnssec "${a_ticket[@]}"
		;;
	rlog)
		exec rlog -zLT "/var/lib/named/etc/bind/zonen/master/$zone"
		;;
	del)
		rm -f "/var/lib/named/etc/bind/zonen/master/$zone"
		;;
	*)
		echo "Unbekanntes Kommando \"$command\""
		exit 3
		;;
esac
