diff --git a/nsupdate.cgi b/nsupdate.cgi new file mode 100755 index 0000000..f406d7c --- /dev/null +++ b/nsupdate.cgi @@ -0,0 +1,73 @@ +#!/bin/sh + +KEY=/etc/bind/eoddns_key.key +ZONE=ddns.entrouvert.org +HOSTNAME=$REMOTE_USER.$ZONE + +echo "Content-type: text/html" +echo "" +echo "Whitelist des travailleurs" +echo "" +echo "

Whitelist des travailleurs

" + +if echo "$QUERY_STRING" | grep -q '^bye' +then + BYE=/bin/true + echo "

retrait de $HOSTNAME

" +else + BYE=/bin/false + echo "

$HOSTNAME = $REMOTE_ADDR

" + ADD="update add ${HOSTNAME}. 60 A $REMOTE_ADDR" + ADD_WILD="update add *.${HOSTNAME}. 60 CNAME ${HOSTNAME}." +fi + +echo "
"
+nsupdate -k $KEY << EONSUPDATE
+server ${ZONE}
+zone ${ZONE}
+update delete ${HOSTNAME}. A
+update delete *.${HOSTNAME}. CNAME
+${ADD}
+${ADD_WILD}
+show
+send
+answer
+EONSUPDATE
+echo "
" + +if ! $BYE; then + echo "

... et sera présente dans les divers pare-feux d'ici 5 minutes (au plus).

" +fi + +if [ ! -z "$QUERY_STRING" ]; then + NAME=`echo "$QUERY_STRING" | sed -n 's/^.*name=\([A-Za-z0-9_-]*\).*$/\1/p'` + IP=`echo "$QUERY_STRING" | sed -n 's/^.*ip=\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*$/\1/p'` + if [ ! -z "$NAME" ]; then + NAME=${NAME}-${REMOTE_USER}.${ZONE} + echo "

Zone *.$NAME

" + + if [ ! -z "$IP" ]; then + echo "

*.$NAME = $IP

" + ADD_ZONE="update add ${NAME}. 60 A $IP" + ADD_WILD_ZONE="update add *.${NAME}. 60 CNAME ${NAME}." + else + echo "

retrait de *.$NAME

" + fi + + echo "
"
+    nsupdate -k $KEY << EONSUPDATE
+server ${ZONE}
+zone ${ZONE}
+update delete ${NAME}. A
+update delete *.${NAME}. CNAME
+${ADD_ZONE}
+${ADD_WILD_ZONE}
+show
+send
+answer
+EONSUPDATE
+    echo "
" + fi +fi + +echo ""