slitaz-forge annotate ns/web/index.cgi @ 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
rev   line source
pascal@583 1 #!/bin/sh
pascal@583 2
pascal@583 3 # Get parameters with GET, POST and FILE functions
pascal@583 4 . /usr/bin/httpd_helper.sh
pascal@583 5
pascal@583 6 OWNERFILE=name.users
pascal@583 7 ip="$(GET ip)"
pascal@583 8 [ "$ip" ] || ip=$REMOTE_ADDR
pascal@583 9 name="$(GET name)"
pascal@583 10 name="${name%.by.slitaz.org}"
pascal@583 11 if [ "$name" -a "$REMOTE_USER" ]; then
pascal@584 12 header
pascal@585 13 addip=yes
pascal@585 14 case " $(GET) " in
pascal@585 15 *\ remove\ *|*\ delete\ *|*\ wipe\ *)
pascal@585 16 addip=
pascal@585 17 esac
pascal@585 18 case "$name" in
pascal@585 19 @*) echo "$name not allowed. Abort."
pascal@585 20 exit 1 ;;
pascal@585 21 *\**) base="${name//\*/}"
pascal@585 22 if grep -qs "^[^ ]*${base//./\\.} " $OWNERFILE ; then
pascal@585 23 owner="$(sed "/^[^ ]*${base//./\\.} /!d;s/.* //" $OWNERFILE | uniq | xargs echo)"
pascal@585 24 if [ "$addip" -o "$owner" != "$REMOTE_USER" ]; then
pascal@585 25 echo "$base is already used by $owner. Abort."
pascal@585 26 exit 1
pascal@585 27 fi
pascal@585 28 fi
pascal@585 29 esac
pascal@585 30 if grep -qs "^$name " $OWNERFILE || grep -qs "^\$name " $OWNERFILE ; then
pascal@583 31 owner="$(sed "/^$name /!d;s/.* //" $OWNERFILE)"
pascal@585 32 [ "$owner" ] || owner="$(sed "/^\$name /!d;s/.* //" $OWNERFILE)"
pascal@583 33 if [ "$owner" != "$REMOTE_USER" ]; then
pascal@583 34 echo "$name is already used by $owner. Abort."
pascal@583 35 exit 1
pascal@583 36 fi
pascal@583 37 else
pascal@584 38 echo "$name $(date -u) $REMOTE_USER" >> $OWNERFILE
pascal@583 39 fi
pascal@585 40 [ "$addip" ] || sed -i "/^$name /d;/^\$name /d" $OWNERFILE
pascal@585 41 ttl=900
pascal@585 42 [ "$(GET ttl)" ] && ttl="$(GET ttl)"
pascal@585 43 req="server 127.0.0.1"
pascal@585 44 if [ "$(GET mx)" ]; then
pascal@583 45 mx="$(GET mx)"
pascal@583 46 [ "$mx" ] || mx=$ip
pascal@583 47 req="$req
pascal@583 48 update delete $name.by.slitaz.org MX"
pascal@583 49 [ "$addip" ] && req="$req
pascal@585 50 update add $name.by.slitaz.org $ttl MX 10 $mx"
pascal@585 51 fi
pascal@585 52 type="A"
pascal@585 53 echo "$ip" | grep -q : && type="AAAA"
pascal@585 54 [ "$(GET ns)" ] && type="NS"
pascal@585 55 [ "$(GET txt)" ] && type="TXT" && ip="$(GET txt)"
pascal@585 56 [ "$(GET cname)" ] && type="CNAME" && ip="$(GET cname)"
pascal@585 57 req="$req
pascal@585 58 update delete $name.by.slitaz.org $type"
pascal@585 59 [ "$addip" ] && req="$req
pascal@585 60 update add $name.by.slitaz.org $ttl $type $ip"
pascal@583 61 echo "$req
pascal@584 62 send" | nsupdate 2>&1
pascal@583 63 else
pascal@583 64 #header "text/html; charset=utf-8"
pascal@583 65 cat <<EOT
pascal@583 66 <!DOCTYPE html>
pascal@583 67 <html xmlns="http://www.w3.org/1999/xhtml">
pascal@583 68 <head>
pascal@583 69 <title>SliTaz Name Server</title>
pascal@583 70 <meta charset="utf-8" />
pascal@583 71 <link rel="shortcut icon" href="favicon.ico" />
pascal@583 72 <link rel="stylesheet" type="text/css" href="style.css" />
pascal@583 73 <style type="text/css">
pascal@583 74 #header h1 {
pascal@583 75 margin: 0;
pascal@583 76 padding: 8px 0 0 42px;
pascal@583 77 width: 250px;
pascal@583 78 }
pascal@583 79 #logo {
pascal@583 80 background: url(/images/logo.png) no-repeat left;
pascal@583 81 position: absolute;
pascal@583 82 float: left;
pascal@583 83 left: 0px;
pascal@583 84 top: 0px;
pascal@583 85 width: 40px;
pascal@583 86 height: 40px;
pascal@583 87 }
pascal@583 88 pre { font-size: 100%; }
pascal@583 89 </style>
pascal@583 90 </head>
pascal@583 91 <body>
pascal@583 92
pascal@583 93 <div id="header">
pascal@583 94 <div id="logo"></div>
pascal@583 95 <div id="network">
pascal@583 96 <a href="http://www.slitaz.org/">Home</a>
pascal@583 97 <a href="http://bugs.slitaz.org/">Bugs</a>
pascal@584 98 <a href="http://hg.slitaz.org/?sort=lastchange">Hg</a>
pascal@583 99 <a href="http://forum.slitaz.org/">Forum</a>
pascal@583 100 <a href="http://roadmap.slitaz.org/">Roadmap</a>
pascal@583 101 <a href="http://pizza.slitaz.me/">Pizza</a>
pascal@583 102 <a href="http://tank.slitaz.org/">Tank</a>
pascal@583 103 </div>
pascal@583 104 <h1><a href="./">SliTaz Name Server</a></h1>
pascal@583 105 </div>
pascal@583 106
pascal@583 107 <!-- Content -->
pascal@583 108 <div id="content">
pascal@585 109 <h3>Status</h3>
pascal@585 110 <p>
pascal@585 111 There are $(wc -l < $OWNERFILE) records and
pascal@585 112 $(sed 's/.* //' $OWNERFILE | sort | uniq | wc -l) users
pascal@585 113 in the by.slitaz.org domain.</p>
pascal@583 114 EOT
pascal@583 115 if grep -qs " $REMOTE_USER$" $OWNERFILE; then
pascal@583 116 cat <<EOT
pascal@585 117 $REMOTE_USER has $(grep " $REMOTE_USER$" $OWNERFILE | wc -l) names:
pascal@583 118 <pre>
pascal@583 119 EOT
pascal@583 120 for i in $(grep " $REMOTE_USER$" $OWNERFILE | sed 's/ .*//'); do
pascal@584 121 dig @127.0.0.1 $i.by.slitaz.org ANY | grep ^$i
pascal@583 122 done
pascal@583 123 cat <<EOT
pascal@583 124 </pre>
pascal@583 125
pascal@583 126 Your current IP address is $REMOTE_ADDR
pascal@583 127 EOT
pascal@583 128 fi
pascal@583 129 cat <<EOT
pascal@583 130 <h3>Usage</h3>
pascal@583 131 <pre>
pascal@585 132 $ wget -O - "http://user:pass@ns.slitaz.org/?name=&lt;name&gt;[&ip=&lt;ip1&gt;][&mx[=&lt;ip2&gt;]]"
pascal@585 133 $ wget -O - "http://user:pass@ns.slitaz.org/?name=&lt;name&gt;&remove[&mx]"
pascal@585 134 </pre>
pascal@585 135 <pre>
pascal@585 136 $ wget -O - "http://user:pass@ns.slitaz.org/?name=&lt;name&gt;&ns=&lt;ip&gt;"
pascal@585 137 $ wget -O - "http://user:pass@ns.slitaz.org/?name=&lt;name&gt;&ns&remove"
pascal@585 138 </pre>
pascal@585 139 <pre>
pascal@585 140 $ wget -O - "http://user:pass@ns.slitaz.org/?name=&lt;name&gt;&{txt|cname}=&lt;text&gt;"
pascal@585 141 $ wget -O - "http://user:pass@ns.slitaz.org/?name=&lt;name&gt;&{txt|cname}&remove"
pascal@583 142 </pre>
pascal@583 143 <h3>Examples</h3>
pascal@583 144 <ul>
pascal@583 145 <li>
pascal@583 146 Update myblog.by.slitaz.org with my current IP address.
pascal@583 147 <pre>
pascal@585 148 $ wget -O - "http://user:pass@ns.slitaz.org/?name=myblog"
pascal@583 149 </pre>
pascal@583 150 </li>
pascal@583 151 <li>
pascal@583 152 Update myblog.by.slitaz.org with the IP address 1.2.3.4.
pascal@583 153 <pre>
pascal@585 154 $ wget -O - "http://user:pass@ns.slitaz.org/?name=myblog&ip=1.2.3.4"
pascal@585 155 </pre>
pascal@585 156 </li>
pascal@585 157 <li>
pascal@585 158 Update myblog.by.slitaz.org with the IPv6 address 1:2:3::4:5
pascal@585 159 <pre>
pascal@585 160 $ wget -O - "http://user:pass@ns.slitaz.org/?name=myblog&ip=1:2:3::4:5"
pascal@583 161 </pre>
pascal@583 162 </li>
pascal@583 163 <li>
pascal@583 164 Remove myblog.by.slitaz.org from the name server.
pascal@583 165 <pre>
pascal@585 166 $ wget -O - "http://user:pass@ns.slitaz.org/?name=myblog&remove"
pascal@583 167 </pre>
pascal@583 168 </li>
pascal@583 169 <li>
pascal@583 170 Update myserver.by.slitaz.org with my current IP address and declare the mail server btw.
pascal@583 171 <pre>
pascal@585 172 $ wget -O - "http://user:pass@ns.slitaz.org/?name=myserver&mx"
pascal@583 173 </pre>
pascal@583 174 </li>
pascal@583 175 <li>
pascal@583 176 Update myserver.by.slitaz.org with my current IP address and use the mail server at 1.2.3.4.
pascal@583 177 <pre>
pascal@585 178 $ wget -O - "http://user:pass@ns.slitaz.org/?name=myserver&mx=1.2.3.4"
pascal@585 179 </pre>
pascal@585 180 </pre>
pascal@585 181 </li>
pascal@585 182 <li>
pascal@585 183 The Addams family has got a name server at 1.2.3.4.
pascal@585 184 <pre>
pascal@585 185 $ wget -O - "http://user:pass@ns.slitaz.org/?name=*.addams&ns=1.2.3.4"
pascal@585 186 $ nslookup blog.gomez.addams.by.slitaz.org
pascal@585 187 Name: blog.gomez.addams.by.slitaz.org
pascal@585 188 Address 1: 5.6.7.8
pascal@583 189 </pre>
pascal@583 190 </li>
pascal@583 191 </ul>
pascal@583 192 </div>
pascal@583 193
pascal@583 194 <div id="footer">
pascal@583 195 <a href="http://www.slitaz.org/">SliTaz Website</a>
pascal@583 196 <a href="index.cgi">Name Server</a>
pascal@583 197 </div>
pascal@583 198
pascal@583 199 </body>
pascal@583 200 </html>
pascal@583 201 EOT
pascal@583 202 fi