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 ""