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=<name>[&remove][&ip=<ip1>][&mx[=<ip2>]]" 1.99 +$ wget -O - "http://user:pass@ns.slitaz.org/?name=<name>[&ip=<ip1>][&mx[=<ip2>]]" 1.100 +$ wget -O - "http://user:pass@ns.slitaz.org/?name=<name>&remove[&mx]" 1.101 +</pre> 1.102 +<pre> 1.103 +$ wget -O - "http://user:pass@ns.slitaz.org/?name=<name>&ns=<ip>" 1.104 +$ wget -O - "http://user:pass@ns.slitaz.org/?name=<name>&ns&remove" 1.105 +</pre> 1.106 +<pre> 1.107 +$ wget -O - "http://user:pass@ns.slitaz.org/?name=<name>&{txt|cname}=<text>" 1.108 +$ wget -O - "http://user:pass@ns.slitaz.org/?name=<name>&{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>