venerdì 25 luglio 2008

Bind: Aggiungere nuove entry nel file di zona

Un piccolo script che aggiunge nuove entries nei files di zona.
Fa:
- aggiunge, rimuove e fa il reload
- incrementa il seriale in automatico
- chiede conferma se IP o nome sono già presenti

In realtà l'opzione -r ancora non funziona e l'opzione -u è banale. Per ora mi sono concentrato sull'aggiunta dei records, che è praticamente completa.

#!/bin/bash
#
# AddNameToBind 0.99b
# 2008 Alessandro Torchia

ZONE="my.local.zone";
LIST=`cat $ZONE|egrep 'IN|A|MX|CNAME|^pr|^pp'`
IPLIST=`cat $ZONE|egrep 'IN|A|MX|CNAME|^pr|^pp'|awk '{print $4}'|grep -vi "@"`
NAMELIST=`cat $ZONE|egrep 'IN|A|MX|CNAME|^pr|^pp'|awk '{print $1}'|grep -vi "@"`
NAME=$2;
IP=$3;
TYPE=$4;
ADD=0;
function conferma() {

read -n1 -p "onferma, gnora Vuoi inserire comunque il nome? "
echo
case $REPLY in
c | C)
echo "Continuo con l'update del file di zona ..."
ADD=0;
return $ADD
;;
i | I)
echo "Ignoro l'update ..."
ADD=1;
return $ADD
;;
* )
echo "You don't know what you want to do..."
;;
esac
}

while [ "${1:0:1}" = "-" ];do
case "$1" in
'-a')
for i in $IPLIST
do
if [ $i == $IP ]; then
echo "IP ADDRESS già presente";
conferma
else
ADD=0;
fi
done
for h in $NAMELIST
do
if [ $h == $NAME ];then
echo "NOME già presente";
conferma
else
ADD=0;
fi
done

if [ $ADD != 1 ];then
echo "$NAME IN $TYPE $IP" >> $ZONE;
SERIAL=`cat $ZONE|grep Serial|awk '{print $1}'`;
let NEWSERIAL=$SERIAL+1
cp $ZONE /tmp/$SERIAL
cat /tmp/$SERIAL|sed -e 's/'$SERIAL'/'$NEWSERIAL'/' > $ZONE;
fi
;;

'-r')
# echo "Not Implemented";
cat $ZONE | while read line;
do
REM=`echo $line|grep $NAME`
sed s/'$REM'/''/
done

;;

'-u')
# echo "Not Implemented";
rndc reload

;;
esac


shift
shift
done
if [ "x$1" = "x" ]; then
echo "Usage: $0 main_variable";
echo "Options:";
echo " -a ";
echo " -r ";
echo " -u #Updates bind configuration";
exit 1
fi


Aggiornamenti su questo post as soon as li implemento!

Nessun commento:

Visite