#!/bin/bash ##################################### # Version: 3 Thu Mar 10 19:10:23 CET 2005 # modifydns.sh # Created and copyrighted by Ole Michaelsen (OLMIC) Telia Mobile A/S, Denmark # Feel free to use and modify, but keep my name mentioned as the original author # 02-MAR-2005 # # Write changes below: # # when, who: what changed # 10 MAR 2005, Ole Michaelsen: Typos # 01 MAR 2005, Ole Michaelsen: Initial script, rewritten from perl # 07 JAN 2005, Ole Michaelsen: Minor updates #################################### # Declare variables NSUPDATE=/usr/bin/nsupdate KEYFILE="Kdns1.intra.telia.dk.+157+44903.private" TMPFILE=/tmp/nsupdate.$$ AWK=/bin/awk LOGFILE="/var/named/log/nsupdate.`date +%Y%m`" TAIL=/usr/bin/tail A=None PTR=None IP=None CNAME=None NS=None MX=None cost=None if [ $# -ne 0 ]; then echo "Invalid number of arguments! Exiting..." exit fi # You must run this as yourself, with sudo. Otherwise the logging mechanism doesn't work. if [ -z $SUDO_USER ]; then echo "This script should be run with sudo! Exiting..." exit fi if [ $SUDO_USER = "root" ]; then echo "You should run this script as yourself, with sudo. Not as root, with sudo. Exiting..." exit fi # Get the in-addr.arpa version of the IP address reverseip() { IPREV=`echo $IP |$AWK 'split($1,ip,".") {print ip[4] "." ip[3] "." ip[2] "." ip[1]}'` IPREV=$IPREV.in-addr.arpa } runnsupdate() { cd /var/named $NSUPDATE -d -k $KEYFILE $TMPFILE } logging() { echo "`date`. User: $SUDO_USER. Action: $ACTION. A: $A. PTR: $IP. CNAME: $CNAME. NS: $NS. MX: $MX. Cost: $cost." >> $LOGFILE } confirm() { echo "You want to do the following action: $ACTION. A: $A. PTR: $IP. CNAME: $CNAME. NS: $NS. MX: $MX. Cost: $cost." echo "Confirm (y/n)" read ANSWER if [ "X$ANSWER" != "Xy" ]; then exit fi echo "Ok. Processing job...." sleep 2 } log() { $TAIL $LOGFILE exit } menu() { echo "Choose what action to do" echo "------------------------" echo "Add A and PTR RR: (0)" echo "Delete A and PTR RR: (1)" echo "Add only A RR: (2)" echo "Delete only A RR: (3)" echo "Add only PTR RR: (4)" echo "Delete only PTR RR: (5)" echo "Add CNAME RR: (6)" echo "Delete CNAME RR: (7)" echo "Add MX RR: (8)" echo "Delete MX RR: (9)" echo "Add NS RR: (10)" echo "Delete NS RR: (11)" echo "Help: (h)" echo "Quit: (q)" echo "See log of recent jobs: (l)" echo "-----------------------" echo "Press 0-11, h, q (or just CTRL+C), l" read ANSWER case $ANSWER in 0) addaandptr ;; 1) deleteaandptr ;; 2) addonlya ;; 3) deleteonlya ;; 4) addonlyptr ;; 5) deleteonlyptr ;; 6) addcname ;; 7) deletecname ;; 8) addmx ;; 9) deletemx ;; 10) addns ;; 11) deletens ;; h) menu ;; q) exit ;; l) log ;; *) menu ;; esac } addaandptr() { ACTION="Add A and PTR RR" echo $ACTION echo "----------------" echo "Enter fully qualified hostname, fx mymachine.intra.telia.dk:" read A echo "Enter IP address to use for $A:" read IP confirm logging reverseip echo "update add ${A}. 3600 IN A ${IP}" > $TMPFILE echo "" >> $TMPFILE runnsupdate echo "update add ${IPREV}. 3600 IN PTR ${A}." > $TMPFILE echo "" >> $TMPFILE runnsupdate } deleteaandptr() { ACTION="Delete A and PTR RR" echo $ACTION echo "-------------------" echo "Enter fully qualified hostname, fx mymachine.intra.telia.dk:" read A echo "Enter IP address used for $A:" read IP confirm logging reverseip echo "update delete ${A}. A ${IP}" > $TMPFILE echo "" >> $TMPFILE runnsupdate echo "update delete ${IPREV}. PTR ${A}." > $TMPFILE echo "" >> $TMPFILE runnsupdate } addonlya() { ACTION="Add A RR" echo $ACTION echo "--------" echo "Enter fully qualified hostname, fx mymachine.intra.telia.dk:" read A echo "Enter IP address to be used for $A:" read IP confirm logging echo "update add ${A}. 3600 IN A ${IP}" > $TMPFILE echo "" >> $TMPFILE runnsupdate } deleteonlya() { ACTION="Delete A RR" echo $ACTION echo "-----------" echo "Enter fully qualified hostname, fx mymachine.intra.telia.dk:" read A echo "Enter IP address used for $A:" read IP confirm logging echo "update delete ${A}. A ${IP}" > $TMPFILE echo "" >> $TMPFILE runnsupdate } addonlyptr() { ACTION="Add PTR RR" echo $ACTION echo "----------" echo "Enter fully qualified hostname, fx mymachine.intra.telia.dk:" read A echo "Enter IP address to be used for $A:" read IP confirm logging reverseip echo "update add ${IPREV}. 3600 IN PTR ${A}." > $TMPFILE echo "" >> $TMPFILE runnsupdate } deleteonlyptr() { ACTION="Delete PTR RR" echo $ACTION echo "-------------" echo "Enter fully qualified hostname, fx mymachine.intra.telia.dk:" read A echo "Enter IP address used for $A:" read IP confirm logging reverseip echo "update delete ${IPREV}. PTR ${A}." > $TMPFILE echo "" >> $TMPFILE runnsupdate } addcname() { ACTION="Add CNAME RR" echo $ACTION echo "------------" echo "Enter fully qualified alias, fx www.intra.telia.dk:" read CNAME echo "Enter fully qualified hostname which $CNAME should point to:" read A confirm logging echo "update add $CNAME. 3600 IN CNAME $A." > $TMPFILE echo "" >> $TMPFILE runnsupdate } deletecname() { ACTION="Delete CNAME RR" echo $ACTION echo "---------------" echo "Enter fully qualified alias, fx www.intra.telia.dk:" read CNAME echo "Enter fully qualified hostname, which $CNAME points to:" read A confirm logging echo "update delete $CNAME. 3600 IN CNAME $A." > $TMPFILE echo "" >> $TMPFILE runnsupdate } addmx() { ACTION="Add MX RR" echo $ACTION echo "---------" echo "Enter domain/host which should have an MX RR added (fully qualified, fx mail-igw.intra.telia.dk):" read MX echo "Enter existing A RR (must not be a CNAME!) which should be MX for $MX:" read A echo "Enter cost for MX RR $MX pointing to A RR $A (number, between 0 and 50):" read cost confirm logging echo "update add $MX. 3600 IN MX $cost $A." > $TMPFILE echo "" >> $TMPFILE runnsupdate } deletemx() { ACTION="Delete MX RR" echo $ACTION echo "------------" echo "Enter domain/host which should have an MX RR deleted (fully qualified, fx mail-igw.intra.telia.dk):" read MX echo "Enter existing A RR (must not be a CNAME!) which is MX for $MX:" read A echo "Enter cost for MX RR $MX pointing to A RR $A (number, between 0 and 50):" read cost confirm logging echo "update delete $MX. 3600 IN MX $cost $A." > $TMPFILE echo "" >> $TMPFILE runnsupdate } addns() { ACTION="Add NS RR" echo $ACTION echo "---------" echo "Enter zone which should have an NS RR added (fully qualified, fx intra.telia.dk):" read NS echo "Enter existing A RR that the NS RR $NS should point to:" read A confirm logging echo "update add $NS. 86400 IN NS $A." > $TMPFILE echo "" >> $TMPFILE runnsupdate } deletens() { ACTION="Delete NS RR" echo $ACTION echo "------------" echo "Enter zone which should have an NS RR removed (fully qualified, fx intra.telia.dk):" read NS echo "Enter A RR which NS RR $NS points to:" read A confirm logging echo "update delete $NS. 86400 IN NS $A." > $TMPFILE echo "" >> $TMPFILE runnsupdate } ########################### Main script starts here ##################### menu rm $TMPFILE