slitaz-forge annotate ns/web/index.cgi @ rev 708

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