#!/bin/bash
# 
# apre o chiude il firewall
#
CMD=$1
shift
iptables -$CMD FORWARD -p tcp -s $1 -d $2 --dport $3 -j ACCEPT
iptables -$CMD FORWARD -p udp -s $1 -d $2 --dport $3 -j ACCEPT
iptables -$CMD FORWARD -m state -p tcp -d $1 -s $2 --sport $3 --state ESTABLISHED -j ACCEPT
iptables -$CMD FORWARD -m state -p udp -d $1 -s $2 --sport $3 --state ESTABLISHED -j ACCEPT
iptables -t nat -$CMD POSTROUTING -p tcp -s $1 -d $2 --dport $3 -j SNAT --to-source 10.9.9.254
iptables -t nat -$CMD POSTROUTING -p udp -s $1 -d $2 --dport $3 -j SNAT --to-source 10.9.9.254

if test "$CMD" = "D" ; then
	if ldapsearch -h localhost -x -b "indirizzo=$1,dc=labammsis" -s base ; then
		# l'entry per il client esiste, verifico se esiste quella per il server al di sotto e nel caso leggo il numero di connessioni registrate finora
		COUNT=$(ldapsearch -LLL -h localhost -x -b "indirizzo=$2,indirizzo=$1,dc=labammsis" -s base contatore | grep ^contatore: | awk '{ print $2 }')
		if test "$COUNT" ; then
			echo "dn: indirizzo=$2,indirizzo=$1,dc=labammsis" > /tmp/ldif.$$
			echo "changetype: modify" >> /tmp/ldif.$$
			echo "replace: contatore" >> /tmp/ldif.$$
			echo "contatore: $[ $COUNT + 1]" >> /tmp/ldif.$$
			echo >> /tmp/ldif.$$
		else
			echo "dn: indirizzo=$2,indirizzo=$1,dc=labammsis" > /tmp/ldif.$$
			echo "objectClass: server" >> /tmp/ldif.$$
			echo "indirizzo: $2" >> /tmp/ldif.$$
			echo "contatore: 1" >> /tmp/ldif.$$
			echo >> /tmp/ldif.$$
		fi
	else
		# l'entry per il client non esiste (a maggior ragione non esisterĂ  quella per il server)
		echo "dn: indirizzo=$1,dc=labammsis" > /tmp/ldif.$$
		echo "objectClass: client" >> /tmp/ldif.$$
		echo "indirizzo: $1" >> /tmp/ldif.$$
		echo >> /tmp/ldif.$$
		echo "dn: indirizzo=$2,indirizzo=$1,dc=labammsis" >> /tmp/ldif.$$
		echo "objectClass: server" >> /tmp/ldif.$$
		echo "indirizzo: $2" >> /tmp/ldif.$$
		echo "contatore: 1" >> /tmp/ldif.$$
		echo >> /tmp/ldif.$$
	fi
	ldapadd -x -D "cn=admin,dc=labammsis" -w admin -f /tmp/ldif.$$
	rm -f /tmp/ldif.$$
fi