source: branches/whiterussian/openwrt/package/webif/files/usr/lib/webif/webif.sh @ 1989

Last change on this file since 1989 was 1989, checked in by nbd, 11 years ago

allow access to router info and about page without authentication

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.1 KB
Line 
1libdir=/usr/lib/webif
2wwwdir=/www
3cgidir=/www/cgi-bin/webif
4indexpage=index.sh
5
6header() {
7  UPTIME=$(uptime)
8  UPTIME="up ${UPTIME##*up}"
9  HOSTNAME=$(cat /proc/sys/kernel/hostname)
10  CHANGES=$(($(cat /tmp/.webif/config-* 2>&- | wc -l)))
11  CHANGES=${CHANGES#0}
12  CHANGES=${CHANGES:+( ${CHANGES} )}
13  cat <<EOF
14Content-Type: text/html
15Pragma: no-cache
16
17<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
18<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en-US">
19  <head>
20        <meta http-equiv="content-type" content="application/xhtml+xml; charset=ISO-8859-15" />
21        <link rel="stylesheet" type="text/css" href="/webif.css" media="screen, tv, projection" title="Default" />
22        <title>OpenWrt Administrative Console</title>
23  </head>
24  <body $4>
25  <div id="container">
26        <div id="header">
27          <div class="topHeader">&nbsp;</div>
28          <div class="midHeader">
29                <h1 class="headerTitle">OpenWrt Admin Console</h1>
30                <div class="headerSubTitle">$UPTIME</div>
31                <br class="doNotDisplay doNotPrint" />
32                <div class="headerInfo">
33                  <span>Hostname: &nbsp;</span>
34                  $HOSTNAME
35                </div>
36                <div class="headerLinks">
37                  <a href="config.sh?mode=save&cat=$1">Apply settings &laquo;</a>
38                  <a href="config.sh?mode=clear&cat=$1">Clear changes &laquo;</a>
39                  <a href="config.sh?mode=review&cat=$1">Review changes $CHANGES &laquo;</a>
40                </div>
41          </div>
42          <div class="doNotDisplay doNotPrint">
43                  <br />
44                  <br />
45                  <br />
46          </div>
47EOF
48  grep '##WEBIF:category' $cgidir/.categories $cgidir/*.sh 2>/dev/null | awk -F: '
49        BEGIN {
50          print "<div class=\"categoryHeader\"><span>Categories: &nbsp;&nbsp;&nbsp; </span>"
51        }
52        categories !~ /:$4:/ {
53          categories = categories ":" $4 ":";
54          if ($4 ~ /^'"$1"'$/) print "<a class=\"active\">&raquo;" $4 "&laquo;</a> &nbsp;"
55          else print "<a href=\"'"$indexpage"'?cat=" $4 "\">&nbsp;" $4 "&nbsp;</a> &nbsp;";
56        }
57        END {
58          print "</div>"
59        }' -
60        [ \! -z "$2" ] && {
61          grep "##WEBIF:name:$1:" *.sh 2>/dev/null | sed -e 's,^\([a-zA-Z\.\-]*\):\(.*\)$,\2:\1,' | sort -n | awk -F: '
62                BEGIN {
63                  print "<div class=\"subHeader\"><span class=\"doNotDisplay doNotPrint\">Config pages: &nbsp;</span>";
64                }
65                {
66                  if ($5 ~ /^'"$2"'$/) print "<a class=\"active\">&raquo;" $5 "&laquo;</a>&nbsp;&nbsp;&nbsp;"
67                  else print "<a href=\"" $6 "\">" $5 "</a>&nbsp;&nbsp;&nbsp;";
68                }
69                END {
70                  print "</div>";
71                }
72          ' -
73        }
74        [ -z "$3" ] && HEAD="" || HEAD="<h1>$3</h1><br />" 
75        cat <<EOF
76        </div>
77        <div id="main-copy">
78          <div class="rowOfBoxes">
79                <div class="noBorderOnLeft">
80                $HEAD
81EOF
82        [ -z "$REMOTE_USER" \
83          -a "${SCRIPT_NAME#/cgi-bin/webif/}" != "info.sh"\
84          -a "${SCRIPT_NAME#/cgi-bin/webif/}" != "about.sh" ] && {
85                [ -z $FORM_passwd1 ] || {
86                        echo '<pre>'
87                        (
88                                echo "$FORM_passwd1"
89                                sleep 1
90                                echo "$FORM_passwd2"
91                        ) | passwd root
92                        apply_passwd
93                        echo '</pre>'
94                        footer
95                        exit
96                }
97                grep 'root:!' /etc/passwd >&- 2>&- && {
98                        cat <<EOF
99<br />
100<br />
101<br />
102<h3>Warning: you haven't set a password for the Web interface and SSH access<br />
103Please enter one now</h3>
104<br />
105<form enctype="multipart/form-data" action="$SCRIPT_NAME" method="POST">
106<table>
107        <tr>
108                <td>Enter Password:</td>
109                <td><input type="password" name="passwd1" /></td>
110        </tr>
111        <tr>
112                <td>Repeat Password: &nbsp; </td>
113                <td><input type="password" name="passwd2" /></td>
114        </tr>
115        <tr>
116                <td />
117                <td><input type="submit" name="action" value="Set" /></td>
118        </tr>
119</table>
120</form>
121EOF
122                        footer
123                        exit
124                } || {
125                        apply_passwd
126                }
127        }
128}
129
130footer() {
131  cat <<EOF
132        <br />
133        </div> </div> </div>
134        <div id="footer">
135OpenWrt Administrative Console
136        </div>
137        </div>
138  </body>
139</html>
140EOF
141}
142
143apply_passwd() {
144        case ${SERVER_SOFTWARE%% *} in
145                busybox)
146                        echo -n '/:' > /etc/httpd.conf
147                        cat /etc/passwd | grep root | cut -d: -f1,2 >> /etc/httpd.conf
148                        echo '/cgi-bin/webif/info.sh:*' >> /etc/httpd.conf
149                        echo '/cgi-bin/webif/about.sh:*' >> /etc/httpd.conf
150                        killall -HUP httpd
151                        ;;
152        esac
153}
154
155display_form() {
156        echo "$1" | awk -F: -f /usr/lib/webif/form.awk
157}
158
159mkdir -p /tmp/.webif
160
161load_settings() {
162        [ \! "$1" = "nvram" -a -f /etc/config/$1 ] && . /etc/config/$1
163        [ -f /tmp/.webif/config-$1 ] && . /tmp/.webif/config-$1 
164}
165
166validate_ip() {
167        [ \! -z "$1" ] && {
168                ipcalc "$1" >&- 2>&- && return 0 || {
169                        ERROR="$ERROR Invalid IP address: $2<br />"
170                        return 255
171                }
172        } || {
173                [ "$3" != "1" ] && return 0 || {
174                        ERROR="$ERROR No IP address entered: $2<br />"
175                        return 255
176                } 
177        }
178}
179
180validate_ips() {
181        [ \! -z "$1" ] && {
182                invalid_ip=0
183                for tmp_ip in $1; do
184                        ipcalc "$1" >&- 2>&- || invalid_ip=1
185                done
186                [ "$invalid_ip" != 1 ] && return 0 || {
187                        ERROR="$ERROR Invalid IP address list: $2<br />"
188                        return 255
189                }
190        } || {
191                [ "$3" != "1" ] && return 0 || {
192                        ERROR="$ERROR No IP address entered: $2<br />"
193                        return 255
194                } 
195        }
196}
197
198validate_netmask() {
199        [ \! -z "$1" ] && {
200                # FIXME
201                ipcalc "$1" >&- 2>&- && return 0 || {
202                        ERROR="$ERROR Invalid Netmask: $2<br />"
203                        return 255
204                }
205        } || {
206                [ "$3" != "1" ] && return 0 || {
207                        ERROR="$ERROR No Netmask entered: $2<br />"
208                        return 255
209                } 
210        }
211}
212
213save_setting() {
214        oldval=$(eval "echo \${$2}")
215        oldval=${oldval:-$(nvram get "$2")}
216        [ "$oldval" != "$3" ] && echo "$2=\"$3\"" >> /tmp/.webif/config-$1
217}
Note: See TracBrowser for help on using the repository browser.