OpenWrt – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | #!/bin/sh /etc/rc.common |
2 | # Copyright (C) 2010 Jo-Philipp Wich |
||
3 | |||
4 | START=50 |
||
5 | |||
6 | USE_PROCD=1 |
||
7 | |||
8 | UHTTPD_BIN="/usr/sbin/uhttpd" |
||
9 | PX5G_BIN="/usr/sbin/px5g" |
||
10 | OPENSSL_BIN="/usr/bin/openssl" |
||
11 | |||
12 | append_arg() { |
||
13 | local cfg="$1" |
||
14 | local var="$2" |
||
15 | local opt="$3" |
||
16 | local def="$4" |
||
17 | local val |
||
18 | |||
19 | config_get val "$cfg" "$var" |
||
20 | [ -n "$val" -o -n "$def" ] && procd_append_param command "$opt" "${val:-$def}" |
||
21 | } |
||
22 | |||
23 | append_bool() { |
||
24 | local cfg="$1" |
||
25 | local var="$2" |
||
26 | local opt="$3" |
||
27 | local def="$4" |
||
28 | local val |
||
29 | |||
30 | config_get_bool val "$cfg" "$var" "$def" |
||
31 | [ "$val" = 1 ] && procd_append_param command "$opt" |
||
32 | } |
||
33 | |||
34 | generate_keys() { |
||
35 | local cfg="$1" |
||
36 | local key="$2" |
||
37 | local crt="$3" |
||
38 | local days bits country state location commonname |
||
39 | |||
40 | config_get days "$cfg" days |
||
41 | config_get bits "$cfg" bits |
||
42 | config_get country "$cfg" country |
||
43 | config_get state "$cfg" state |
||
44 | config_get location "$cfg" location |
||
45 | config_get commonname "$cfg" commonname |
||
46 | |||
47 | # Prefer px5g for certificate generation (existence evaluated last) |
||
48 | local GENKEY_CMD="" |
||
49 | local UNIQUEID=$(dd if=/dev/urandom bs=1 count=4 | hexdump -e '1/1 "%02x"') |
||
50 | [ -x "$OPENSSL_BIN" ] && GENKEY_CMD="$OPENSSL_BIN req -x509 -sha256 -outform der -nodes" |
||
51 | [ -x "$PX5G_BIN" ] && GENKEY_CMD="$PX5G_BIN selfsigned -der" |
||
52 | [ -n "$GENKEY_CMD" ] && { |
||
53 | $GENKEY_CMD \ |
||
54 | -days ${days:-730} -newkey rsa:${bits:-2048} -keyout "${UHTTPD_KEY}.new" -out "${UHTTPD_CERT}.new" \ |
||
55 | -subj /C="${country:-ZZ}"/ST="${state:-Somewhere}"/L="${location:-Unknown}"/O="${commonname:-OpenWrt}$UNIQUEID"/CN="${commonname:-OpenWrt}" |
||
56 | sync |
||
57 | mv "${UHTTPD_KEY}.new" "${UHTTPD_KEY}" |
||
58 | mv "${UHTTPD_CERT}.new" "${UHTTPD_CERT}" |
||
59 | } |
||
60 | } |
||
61 | |||
62 | create_httpauth() { |
||
63 | local cfg="$1" |
||
64 | local prefix username password |
||
65 | |||
66 | config_get prefix "$cfg" prefix |
||
67 | config_get username "$cfg" username |
||
68 | config_get password "$cfg" password |
||
69 | |||
70 | if [ -z "$prefix" ] || [ -z "$username" ] || [ -z "$password" ]; then |
||
71 | return |
||
72 | fi |
||
73 | echo "${prefix}:${username}:${password}" >>$httpdconf |
||
74 | haveauth=1 |
||
75 | } |
||
76 | |||
77 | append_lua_prefix() { |
||
78 | local v="$1" |
||
79 | local prefix="${v%%=*}" |
||
80 | local handler="${v#*=}" |
||
81 | |||
82 | if [ "$prefix" != "$handler" ] && [ -n "$prefix" ] && [ -f "$handler" ]; then |
||
83 | procd_append_param command -l "$prefix" -L "$handler" |
||
84 | else |
||
85 | echo "Skipping invalid Lua prefix \"$v\"" >&2 |
||
86 | fi |
||
87 | } |
||
88 | |||
89 | start_instance() |
||
90 | { |
||
91 | UHTTPD_CERT="" |
||
92 | UHTTPD_KEY="" |
||
93 | |||
94 | local cfg="$1" |
||
95 | local realm="$(uci_get system.@system[0].hostname)" |
||
96 | local listen http https interpreter indexes path handler httpdconf haveauth |
||
97 | |||
98 | procd_open_instance |
||
99 | procd_set_param respawn |
||
100 | procd_set_param stderr 1 |
||
101 | procd_set_param command "$UHTTPD_BIN" -f |
||
102 | |||
103 | config_get config "$cfg" config |
||
104 | if [ -z "$config" ]; then |
||
105 | mkdir -p /var/etc/uhttpd |
||
106 | httpdconf="/var/etc/uhttpd/httpd.${cfg}.conf" |
||
107 | rm -f ${httpdconf} |
||
108 | config_list_foreach "$cfg" httpauth create_httpauth |
||
109 | if [ "$haveauth" = "1" ]; then |
||
110 | procd_append_param command -c ${httpdconf} |
||
111 | [ -r /etc/httpd.conf ] && cat /etc/httpd.conf >>/var/etc/uhttpd/httpd.${cfg}.conf |
||
112 | fi |
||
113 | fi |
||
114 | |||
115 | append_arg "$cfg" home "-h" |
||
116 | append_arg "$cfg" realm "-r" "${realm:-OpenWrt}" |
||
117 | append_arg "$cfg" config "-c" |
||
118 | append_arg "$cfg" cgi_prefix "-x" |
||
119 | [ -f /usr/lib/uhttpd_lua.so ] && { |
||
120 | local len |
||
121 | config_get len "$cfg" lua_prefix_LENGTH |
||
122 | |||
123 | if [ -n "$len" ]; then |
||
124 | config_list_foreach "$cfg" lua_prefix append_lua_prefix |
||
125 | else |
||
126 | config_get prefix "$cfg" lua_prefix |
||
127 | config_get handler "$cfg" lua_handler |
||
128 | append_lua_prefix "$prefix=$handler" |
||
129 | fi |
||
130 | } |
||
131 | [ -f /usr/lib/uhttpd_ubus.so ] && { |
||
132 | append_arg "$cfg" ubus_prefix "-u" |
||
133 | append_arg "$cfg" ubus_socket "-U" |
||
134 | append_bool "$cfg" ubus_cors "-X" 0 |
||
135 | } |
||
136 | append_arg "$cfg" script_timeout "-t" |
||
137 | append_arg "$cfg" network_timeout "-T" |
||
138 | append_arg "$cfg" http_keepalive "-k" |
||
139 | append_arg "$cfg" tcp_keepalive "-A" |
||
140 | append_arg "$cfg" error_page "-E" |
||
141 | append_arg "$cfg" max_requests "-n" 3 |
||
142 | append_arg "$cfg" max_connections "-N" |
||
143 | |||
144 | append_bool "$cfg" no_ubusauth "-a" 0 |
||
145 | append_bool "$cfg" no_symlinks "-S" 0 |
||
146 | append_bool "$cfg" no_dirlists "-D" 0 |
||
147 | append_bool "$cfg" rfc1918_filter "-R" 0 |
||
148 | |||
149 | config_get alias_list "$cfg" alias |
||
150 | for alias in $alias_list; do |
||
151 | procd_append_param command -y "$alias" |
||
152 | done |
||
153 | |||
154 | config_get http "$cfg" listen_http |
||
155 | for listen in $http; do |
||
156 | procd_append_param command -p "$listen" |
||
157 | done |
||
158 | |||
159 | config_get interpreter "$cfg" interpreter |
||
160 | for path in $interpreter; do |
||
161 | procd_append_param command -i "$path" |
||
162 | done |
||
163 | |||
164 | config_get indexes "$cfg" index_page |
||
165 | for path in $indexes; do |
||
166 | procd_append_param command -I "$path" |
||
167 | done |
||
168 | |||
169 | config_get https "$cfg" listen_https |
||
170 | config_get UHTTPD_KEY "$cfg" key /etc/uhttpd.key |
||
171 | config_get UHTTPD_CERT "$cfg" cert /etc/uhttpd.crt |
||
172 | |||
173 | [ -f /lib/libustream-ssl.so ] && [ -n "$https" ] && { |
||
174 | [ -s "$UHTTPD_CERT" -a -s "$UHTTPD_KEY" ] || { |
||
175 | config_foreach generate_keys cert |
||
176 | } |
||
177 | |||
178 | [ -f "$UHTTPD_CERT" -a -f "$UHTTPD_KEY" ] && { |
||
179 | append_arg "$cfg" cert "-C" |
||
180 | append_arg "$cfg" key "-K" |
||
181 | |||
182 | for listen in $https; do |
||
183 | procd_append_param command -s "$listen" |
||
184 | done |
||
185 | } |
||
186 | |||
187 | append_bool "$cfg" redirect_https "-q" 0 |
||
188 | } |
||
189 | |||
190 | for file in /etc/uhttpd/*.json; do |
||
191 | [ -s "$file" ] && procd_append_param command -H "$file" |
||
192 | done |
||
193 | |||
194 | procd_close_instance |
||
195 | } |
||
196 | |||
197 | service_triggers() |
||
198 | { |
||
199 | procd_add_reload_trigger "uhttpd" |
||
200 | } |
||
201 | |||
202 | start_service() { |
||
203 | config_load uhttpd |
||
204 | config_foreach start_instance uhttpd |
||
205 | } |