slitaz-forge rev 585

ns.slitaz.org: add ns, txt, cname & wildcard support
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sun Dec 07 11:43:02 2014 +0100 (2014-12-07)
parents 55d3d10d8b93
children 77e1cdfb9c9d
files ns/web/index.cgi
line diff
     1.1 --- a/ns/web/index.cgi	Sat Dec 06 21:55:31 2014 +0100
     1.2 +++ b/ns/web/index.cgi	Sun Dec 07 11:43:02 2014 +0100
     1.3 @@ -10,8 +10,26 @@
     1.4  name="${name%.by.slitaz.org}"
     1.5  if [ "$name" -a "$REMOTE_USER" ]; then
     1.6  	header
     1.7 -	if grep -qs "^$name " $OWNERFILE ; then
     1.8 +	addip=yes
     1.9 +	case " $(GET) " in
    1.10 +	*\ remove\ *|*\ delete\ *|*\ wipe\ *)
    1.11 +		addip=
    1.12 +	esac
    1.13 +	case "$name" in
    1.14 +	@*)	echo "$name not allowed. Abort."
    1.15 +		exit 1 ;;
    1.16 +	*\**)	base="${name//\*/}"
    1.17 +		if grep -qs "^[^ ]*${base//./\\.} " $OWNERFILE ; then
    1.18 +			owner="$(sed "/^[^ ]*${base//./\\.} /!d;s/.* //" $OWNERFILE | uniq | xargs echo)"
    1.19 +			if [ "$addip" -o "$owner" != "$REMOTE_USER" ]; then
    1.20 +				echo "$base is already used by $owner. Abort."
    1.21 +				exit 1
    1.22 +			fi
    1.23 +		fi
    1.24 +	esac
    1.25 +	if grep -qs "^$name " $OWNERFILE || grep -qs "^\$name " $OWNERFILE ; then
    1.26  		owner="$(sed "/^$name /!d;s/.* //" $OWNERFILE)"
    1.27 +		[ "$owner" ] || owner="$(sed "/^\$name /!d;s/.* //" $OWNERFILE)"
    1.28  		if [ "$owner" != "$REMOTE_USER" ]; then
    1.29  			echo "$name is already used by $owner. Abort."
    1.30  			exit 1
    1.31 @@ -19,27 +37,27 @@
    1.32  	else
    1.33  		echo "$name $(date -u) $REMOTE_USER" >> $OWNERFILE
    1.34  	fi
    1.35 -	addip=yes
    1.36 -	case " $(GET) " in
    1.37 -	*\ remove\ *|*\ delete\ *|*\ wipe\ *)
    1.38 -		addip=
    1.39 -		sed -i "/^$name /d" $OWNERFILE
    1.40 -	esac
    1.41 -	type="A"
    1.42 -	echo "$ip" | grep -q : && type="AAAA"
    1.43 -	req="server 127.0.0.1
    1.44 -update delete $name.by.slitaz.org $type"
    1.45 -	[ "$addip" ] && req="$req
    1.46 -update add $name.by.slitaz.org 900 $type $ip"
    1.47 -	case " $(GET) " in
    1.48 -	*\ mx\ *)
    1.49 +	[ "$addip" ] || sed -i "/^$name /d;/^\$name /d" $OWNERFILE
    1.50 +	ttl=900
    1.51 +	[ "$(GET ttl)" ] && ttl="$(GET ttl)"
    1.52 +	req="server 127.0.0.1"
    1.53 +	if [ "$(GET mx)" ]; then
    1.54  		mx="$(GET mx)"
    1.55  		[ "$mx" ] || mx=$ip
    1.56  		req="$req
    1.57  update delete $name.by.slitaz.org MX"
    1.58  	[ "$addip" ] && req="$req
    1.59 -update add $name.by.slitaz.org 900 MX 10 $mx"		
    1.60 -	esac
    1.61 +update add $name.by.slitaz.org $ttl MX 10 $mx"		
    1.62 +	fi
    1.63 +	type="A"
    1.64 +	echo "$ip" | grep -q : && type="AAAA"
    1.65 +	[ "$(GET ns)" ] && type="NS"
    1.66 +	[ "$(GET txt)" ] && type="TXT" && ip="$(GET txt)"
    1.67 +	[ "$(GET cname)" ] && type="CNAME" && ip="$(GET cname)"
    1.68 +	req="$req
    1.69 +update delete $name.by.slitaz.org $type"
    1.70 +	[ "$addip" ] && req="$req
    1.71 +update add $name.by.slitaz.org $ttl $type $ip"
    1.72  	echo "$req
    1.73  send" | nsupdate 2>&1
    1.74  else
    1.75 @@ -88,12 +106,15 @@
    1.76  
    1.77  <!-- Content -->
    1.78  <div id="content">
    1.79 +<h3>Status</h3>
    1.80 +<p>
    1.81 +There are $(wc -l < $OWNERFILE) records and 
    1.82 +$(sed 's/.* //' $OWNERFILE | sort | uniq | wc -l) users
    1.83 +in the by.slitaz.org domain.</p>
    1.84  EOT
    1.85  	if grep -qs " $REMOTE_USER$" $OWNERFILE; then
    1.86  		cat <<EOT
    1.87 -<h3>Status</h3>
    1.88 -$REMOTE_USER has $(grep " $REMOTE_USER$" $OWNERFILE | wc -l) names
    1.89 -in the by.slitaz.org domain.
    1.90 +$REMOTE_USER has $(grep " $REMOTE_USER$" $OWNERFILE | wc -l) names:
    1.91  <pre>
    1.92  EOT
    1.93  		for i in $(grep " $REMOTE_USER$" $OWNERFILE | sed 's/ .*//'); do
    1.94 @@ -108,38 +129,63 @@
    1.95  	cat <<EOT
    1.96  <h3>Usage</h3>
    1.97  <pre>
    1.98 -wget -O - "http://user:pass@ns.slitaz.org/?name=&lt;name&gt;[&remove][&ip=&lt;ip1&gt;][&mx[=&lt;ip2&gt;]]"
    1.99 +$ wget -O - "http://user:pass@ns.slitaz.org/?name=&lt;name&gt;[&ip=&lt;ip1&gt;][&mx[=&lt;ip2&gt;]]"
   1.100 +$ wget -O - "http://user:pass@ns.slitaz.org/?name=&lt;name&gt;&remove[&mx]"
   1.101 +</pre>
   1.102 +<pre>
   1.103 +$ wget -O - "http://user:pass@ns.slitaz.org/?name=&lt;name&gt;&ns=&lt;ip&gt;"
   1.104 +$ wget -O - "http://user:pass@ns.slitaz.org/?name=&lt;name&gt;&ns&remove"
   1.105 +</pre>
   1.106 +<pre>
   1.107 +$ wget -O - "http://user:pass@ns.slitaz.org/?name=&lt;name&gt;&{txt|cname}=&lt;text&gt;"
   1.108 +$ wget -O - "http://user:pass@ns.slitaz.org/?name=&lt;name&gt;&{txt|cname}&remove"
   1.109  </pre>
   1.110  <h3>Examples</h3>
   1.111  <ul>
   1.112  <li>
   1.113  Update myblog.by.slitaz.org with my current IP address.
   1.114  <pre>
   1.115 -wget -O - "http://user:pass@ns.slitaz.org/?name=myblog"
   1.116 +$ wget -O - "http://user:pass@ns.slitaz.org/?name=myblog"
   1.117  </pre>
   1.118  </li>
   1.119  <li>
   1.120  Update myblog.by.slitaz.org with the IP address 1.2.3.4.
   1.121  <pre>
   1.122 -wget -O - "http://user:pass@ns.slitaz.org/?name=myblog&ip=1.2.3.4"
   1.123 +$ wget -O - "http://user:pass@ns.slitaz.org/?name=myblog&ip=1.2.3.4"
   1.124 +</pre>
   1.125 +</li>
   1.126 +<li>
   1.127 +Update myblog.by.slitaz.org with the IPv6 address 1:2:3::4:5
   1.128 +<pre>
   1.129 +$ wget -O - "http://user:pass@ns.slitaz.org/?name=myblog&ip=1:2:3::4:5"
   1.130  </pre>
   1.131  </li>
   1.132  <li>
   1.133  Remove myblog.by.slitaz.org from the name server.
   1.134  <pre>
   1.135 -wget -O - "http://user:pass@ns.slitaz.org/?name=myblog&remove"
   1.136 +$ wget -O - "http://user:pass@ns.slitaz.org/?name=myblog&remove"
   1.137  </pre>
   1.138  </li>
   1.139  <li>
   1.140  Update myserver.by.slitaz.org with my current IP address and declare the mail server btw.
   1.141  <pre>
   1.142 -wget -O - "http://user:pass@ns.slitaz.org/?name=myserver&mx"
   1.143 +$ wget -O - "http://user:pass@ns.slitaz.org/?name=myserver&mx"
   1.144  </pre>
   1.145  </li>
   1.146  <li>
   1.147  Update myserver.by.slitaz.org with my current IP address and use the mail server at 1.2.3.4.
   1.148  <pre>
   1.149 -wget -O - "http://user:pass@ns.slitaz.org/?name=myserver&mx=1.2.3.4"
   1.150 +$ wget -O - "http://user:pass@ns.slitaz.org/?name=myserver&mx=1.2.3.4"
   1.151 +</pre>
   1.152 +</pre>
   1.153 +</li>
   1.154 +<li>
   1.155 +The Addams family has got a name server at 1.2.3.4.
   1.156 +<pre>
   1.157 +$ wget -O - "http://user:pass@ns.slitaz.org/?name=*.addams&ns=1.2.3.4"
   1.158 +$ nslookup blog.gomez.addams.by.slitaz.org
   1.159 +Name:      blog.gomez.addams.by.slitaz.org
   1.160 +Address 1: 5.6.7.8
   1.161  </pre>
   1.162  </li>
   1.163  </ul>