Initial commit
Some checks failed
Build Kernel / Build all affected Kernels (push) Has been cancelled
Build all core packages / Build all core packages for selected target (push) Has been cancelled
Build and Push prebuilt tools container / Build and Push all prebuilt containers (push) Has been cancelled
Build Toolchains / Build Toolchains for each target (push) Has been cancelled
Build host tools / Build host tools for linux and macos based systems (push) Has been cancelled
Coverity scan build / Coverity x86/64 build (push) Has been cancelled
Some checks failed
Build Kernel / Build all affected Kernels (push) Has been cancelled
Build all core packages / Build all core packages for selected target (push) Has been cancelled
Build and Push prebuilt tools container / Build and Push all prebuilt containers (push) Has been cancelled
Build Toolchains / Build Toolchains for each target (push) Has been cancelled
Build host tools / Build host tools for linux and macos based systems (push) Has been cancelled
Coverity scan build / Coverity x86/64 build (push) Has been cancelled
This commit is contained in:
126
package/network/services/uhttpd/Makefile
Normal file
126
package/network/services/uhttpd/Makefile
Normal file
@@ -0,0 +1,126 @@
|
||||
#
|
||||
# Copyright (C) 2010-2015 Jo-Philipp Wich <jo@mein.io>
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=uhttpd
|
||||
PKG_RELEASE:=4
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL=$(PROJECT_GIT)/project/uhttpd.git
|
||||
PKG_SOURCE_DATE:=2023-06-25
|
||||
PKG_SOURCE_VERSION:=34a8a74dbdec3c0de38abc1b08f6a73c51263792
|
||||
PKG_MIRROR_HASH:=0603019dabb89b1b207d0f7916616c95ce8194a7ff9fd71f0ddd845dd2de944e
|
||||
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
||||
PKG_LICENSE:=ISC
|
||||
|
||||
PKG_ASLR_PIE_REGULAR:=1
|
||||
PKG_BUILD_DEPENDS = ustream-ssl
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
include $(INCLUDE_DIR)/cmake.mk
|
||||
include $(INCLUDE_DIR)/version.mk
|
||||
|
||||
define Package/uhttpd/default
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
SUBMENU:=Web Servers/Proxies
|
||||
TITLE:=uHTTPd - tiny, single threaded HTTP server
|
||||
endef
|
||||
|
||||
define Package/uhttpd
|
||||
$(Package/uhttpd/default)
|
||||
DEPENDS:=+libubox +libblobmsg-json +libjson-script +libjson-c
|
||||
endef
|
||||
|
||||
define Package/uhttpd/description
|
||||
uHTTPd is a tiny single threaded HTTP server with TLS, CGI and Lua
|
||||
support. It is intended as a drop-in replacement for the Busybox
|
||||
HTTP daemon.
|
||||
endef
|
||||
|
||||
define Package/uhttpd/conffiles
|
||||
/etc/config/uhttpd
|
||||
/etc/uhttpd.crt
|
||||
/etc/uhttpd.key
|
||||
endef
|
||||
|
||||
|
||||
define Package/uhttpd-mod-lua
|
||||
$(Package/uhttpd/default)
|
||||
TITLE+= (Lua plugin)
|
||||
DEPENDS:=uhttpd +liblua
|
||||
endef
|
||||
|
||||
define Package/uhttpd-mod-lua/description
|
||||
The Lua plugin adds a CGI-like Lua runtime interface to uHTTPd.
|
||||
endef
|
||||
|
||||
|
||||
define Package/uhttpd-mod-ubus
|
||||
$(Package/uhttpd/default)
|
||||
TITLE+= (ubus plugin)
|
||||
DEPENDS:=uhttpd +libubus +libblobmsg-json
|
||||
endef
|
||||
|
||||
define Package/uhttpd-mod-ubus/description
|
||||
The ubus plugin adds a HTTP/JSON RPC proxy for ubus and publishes the
|
||||
session.* namespace and procedures.
|
||||
endef
|
||||
|
||||
|
||||
define Package/uhttpd-mod-ucode
|
||||
$(Package/uhttpd/default)
|
||||
TITLE+= (ucode plugin)
|
||||
DEPENDS:=uhttpd +libucode
|
||||
endef
|
||||
|
||||
define Package/uhttpd-mod-ucode/description
|
||||
The ucode plugin adds a CGI-like ucode runtime interface to uHTTPd.
|
||||
endef
|
||||
|
||||
|
||||
ifneq ($(CONFIG_USE_GLIBC),)
|
||||
TARGET_CFLAGS += -D_DEFAULT_SOURCE
|
||||
endif
|
||||
|
||||
define Package/uhttpd/install
|
||||
$(INSTALL_DIR) $(1)/etc/init.d $(1)/etc/config $(1)/usr/sbin
|
||||
$(INSTALL_BIN) ./files/uhttpd.init $(1)/etc/init.d/uhttpd
|
||||
$(INSTALL_CONF) ./files/uhttpd.config $(1)/etc/config/uhttpd
|
||||
$(VERSION_SED_SCRIPT) $(1)/etc/config/uhttpd
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/uhttpd $(1)/usr/sbin/uhttpd
|
||||
endef
|
||||
|
||||
define Package/uhttpd-mod-lua/install
|
||||
$(INSTALL_DIR) $(1)/usr/lib
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/uhttpd_lua.so $(1)/usr/lib/
|
||||
endef
|
||||
|
||||
define Package/uhttpd-mod-ubus/install
|
||||
$(INSTALL_DIR) $(1)/usr/lib $(1)/etc/uci-defaults
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/uhttpd_ubus.so $(1)/usr/lib/
|
||||
$(INSTALL_DATA) ./files/ubus.default $(1)/etc/uci-defaults/00_uhttpd_ubus
|
||||
endef
|
||||
|
||||
define Package/uhttpd-mod-ubus/postinst
|
||||
#!/bin/sh
|
||||
if [ -z "$${IPKG_INSTROOT}" ]; then
|
||||
/etc/init.d/uhttpd reload
|
||||
fi
|
||||
endef
|
||||
|
||||
define Package/uhttpd-mod-ucode/install
|
||||
$(INSTALL_DIR) $(1)/usr/lib
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/uhttpd_ucode.so $(1)/usr/lib/
|
||||
endef
|
||||
|
||||
|
||||
$(eval $(call BuildPackage,uhttpd))
|
||||
$(eval $(call BuildPackage,uhttpd-mod-lua))
|
||||
$(eval $(call BuildPackage,uhttpd-mod-ubus))
|
||||
$(eval $(call BuildPackage,uhttpd-mod-ucode))
|
||||
11
package/network/services/uhttpd/files/ubus.default
Normal file
11
package/network/services/uhttpd/files/ubus.default
Normal file
@@ -0,0 +1,11 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ -z "$(uci -q get uhttpd.main.ubus_prefix)" ]; then
|
||||
uci set uhttpd.main.ubus_prefix=/ubus
|
||||
fi
|
||||
|
||||
[ "$(uci -q get uhttpd.main.ubus_socket)" = "/var/run/ubus.sock" ] && {
|
||||
uci set uhttpd.main.ubus_socket='/var/run/ubus/ubus.sock'
|
||||
}
|
||||
|
||||
exit 0
|
||||
151
package/network/services/uhttpd/files/uhttpd.config
Normal file
151
package/network/services/uhttpd/files/uhttpd.config
Normal file
@@ -0,0 +1,151 @@
|
||||
# Server configuration
|
||||
config uhttpd main
|
||||
|
||||
# HTTP listen addresses, multiple allowed
|
||||
list listen_http 0.0.0.0:80
|
||||
list listen_http [::]:80
|
||||
|
||||
# HTTPS listen addresses, multiple allowed
|
||||
list listen_https 0.0.0.0:443
|
||||
list listen_https [::]:443
|
||||
|
||||
# Redirect HTTP requests to HTTPS if possible
|
||||
option redirect_https 0
|
||||
|
||||
# Server document root
|
||||
option home /www
|
||||
|
||||
# Reject requests from RFC1918 IP addresses
|
||||
# directed to the servers public IP(s).
|
||||
# This is a DNS rebinding countermeasure.
|
||||
option rfc1918_filter 1
|
||||
|
||||
# Maximum number of concurrent requests.
|
||||
# If this number is exceeded, further requests are
|
||||
# queued until the number of running requests drops
|
||||
# below the limit again.
|
||||
option max_requests 3
|
||||
|
||||
# Maximum number of concurrent connections.
|
||||
# If this number is exceeded, further TCP connection
|
||||
# attempts are queued until the number of active
|
||||
# connections drops below the limit again.
|
||||
option max_connections 100
|
||||
|
||||
# Certificate and private key for HTTPS.
|
||||
# If no listen_https addresses are given,
|
||||
# the key options are ignored.
|
||||
option cert /etc/uhttpd.crt
|
||||
option key /etc/uhttpd.key
|
||||
|
||||
# CGI url prefix, will be searched in docroot.
|
||||
# Default is /cgi-bin
|
||||
option cgi_prefix /cgi-bin
|
||||
|
||||
# List of extension->interpreter mappings.
|
||||
# Files with an associated interpreter can
|
||||
# be called outside of the CGI prefix and do
|
||||
# not need to be executable.
|
||||
# list interpreter ".php=/usr/bin/php-cgi"
|
||||
# list interpreter ".cgi=/usr/bin/perl"
|
||||
|
||||
# List of prefix->Lua handler mappings.
|
||||
# Any request to an URL beneath the prefix
|
||||
# will be dispatched to the associated Lua
|
||||
# handler script. Lua support is disabled when
|
||||
# no handler mappings are specified. Lua prefix
|
||||
# matches have precedence over the CGI prefix.
|
||||
list lua_prefix "/cgi-bin/luci=/usr/lib/lua/luci/sgi/uhttpd.lua"
|
||||
|
||||
# List of prefix->ucode handler mappings.
|
||||
# Any request to an URL beneath the prefix
|
||||
# will be dispatched to the associated ucode
|
||||
# handler script. Ucode support is disabled when
|
||||
# no handler mappings are specified. Ucode prefix
|
||||
# matches have precedence over the CGI prefix.
|
||||
# list ucode_prefix "/ucode/example=/usr/share/example.uc"
|
||||
|
||||
# Specify the ubus-rpc prefix and socket path.
|
||||
# option ubus_prefix /ubus
|
||||
# option ubus_socket /var/run/ubus/ubus.sock
|
||||
|
||||
# CGI/Lua timeout, if the called script does not
|
||||
# write data within the given amount of seconds,
|
||||
# the server will terminate the request with
|
||||
# 504 Gateway Timeout response.
|
||||
option script_timeout 60
|
||||
|
||||
# Network timeout, if the current connection is
|
||||
# blocked for the specified amount of seconds,
|
||||
# the server will terminate the associated
|
||||
# request process.
|
||||
option network_timeout 30
|
||||
|
||||
# HTTP Keep-Alive, specifies the timeout for persistent
|
||||
# HTTP/1.1 connections. Setting this to 0 will disable
|
||||
# persistent HTTP connections.
|
||||
option http_keepalive 20
|
||||
|
||||
# TCP Keep-Alive, send periodic keep-alive probes
|
||||
# over established connections to detect dead peers.
|
||||
# The value is given in seconds to specify the
|
||||
# interval between subsequent probes.
|
||||
# Setting this to 0 will disable TCP keep-alive.
|
||||
option tcp_keepalive 1
|
||||
|
||||
# Basic auth realm, defaults to local hostname
|
||||
# option realm OpenWrt
|
||||
|
||||
# Configuration file in busybox httpd format
|
||||
# option config /etc/httpd.conf
|
||||
|
||||
# Do not follow symlinks that point outside of the
|
||||
# home directory.
|
||||
# option no_symlinks 0
|
||||
|
||||
# Do not produce directory listings but send 403
|
||||
# instead if a client requests an url pointing to
|
||||
# a directory without any index file.
|
||||
# option no_dirlists 0
|
||||
|
||||
# Do not authenticate any ubus-rpc requests against
|
||||
# the ubus session/access procedure.
|
||||
# This is dangerous and should be always left off
|
||||
# except for development and debug purposes!
|
||||
# option no_ubusauth 0
|
||||
|
||||
# For this instance of uhttpd use the listed httpauth
|
||||
# sections to require Basic auth to the specified
|
||||
# resources.
|
||||
# list httpauth prefix_user
|
||||
|
||||
|
||||
# Defaults for automatic certificate and key generation
|
||||
config cert defaults
|
||||
|
||||
# Validity time, 397 days is maximum allowed by CA/Browser forum
|
||||
option days 397
|
||||
|
||||
# key type: rsa or ec
|
||||
option key_type ec
|
||||
|
||||
# RSA key size
|
||||
option bits 2048
|
||||
|
||||
# EC curve name
|
||||
# Curve names vary between px5g-{wolfssl,mbedtls} and openssl
|
||||
# P-256 or P-384 are guaranteed to work
|
||||
option ec_curve P-256
|
||||
|
||||
# Location
|
||||
option country ZZ
|
||||
option state Somewhere
|
||||
option location Unknown
|
||||
|
||||
# Common name
|
||||
option commonname '%D'
|
||||
|
||||
# config httpauth prefix_user
|
||||
# option prefix /protected/url/path
|
||||
# option username user
|
||||
# option password 'plaintext_or_md5_or_$p$user_for_system_user'
|
||||
301
package/network/services/uhttpd/files/uhttpd.init
Executable file
301
package/network/services/uhttpd/files/uhttpd.init
Executable file
@@ -0,0 +1,301 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (C) 2010 Jo-Philipp Wich
|
||||
|
||||
START=50
|
||||
|
||||
USE_PROCD=1
|
||||
|
||||
UHTTPD_BIN="/usr/sbin/uhttpd"
|
||||
PX5G_BIN="/usr/sbin/px5g"
|
||||
OPENSSL_BIN="/usr/bin/openssl"
|
||||
|
||||
append_arg() {
|
||||
local cfg="$1"
|
||||
local var="$2"
|
||||
local opt="$3"
|
||||
local def="$4"
|
||||
local val
|
||||
|
||||
config_get val "$cfg" "$var"
|
||||
[ -n "$val" -o -n "$def" ] && procd_append_param command "$opt" "${val:-$def}"
|
||||
}
|
||||
|
||||
append_bool() {
|
||||
local cfg="$1"
|
||||
local var="$2"
|
||||
local opt="$3"
|
||||
local def="$4"
|
||||
local val
|
||||
|
||||
config_get_bool val "$cfg" "$var" "$def"
|
||||
[ "$val" = 1 ] && procd_append_param command "$opt"
|
||||
}
|
||||
|
||||
generate_keys() {
|
||||
local cfg="$1"
|
||||
local key="$2"
|
||||
local crt="$3"
|
||||
local days bits country state location organization commonname
|
||||
|
||||
config_get days "$cfg" days
|
||||
config_get bits "$cfg" bits
|
||||
config_get country "$cfg" country
|
||||
config_get state "$cfg" state
|
||||
config_get location "$cfg" location
|
||||
config_get organization "$cfg" organization
|
||||
config_get commonname "$cfg" commonname
|
||||
config_get key_type "$cfg" key_type
|
||||
config_get ec_curve "$cfg" ec_curve
|
||||
|
||||
# Prefer px5g for certificate generation (existence evaluated last)
|
||||
local GENKEY_CMD=""
|
||||
local KEY_OPTS="rsa:${bits:-2048}"
|
||||
local UNIQUEID=$(dd if=/dev/urandom bs=1 count=4 | hexdump -e '1/1 "%02x"')
|
||||
[ "$key_type" = "ec" ] && KEY_OPTS="ec -pkeyopt ec_paramgen_curve:${ec_curve:-P-256}"
|
||||
[ -x "$OPENSSL_BIN" ] && GENKEY_CMD="$OPENSSL_BIN req -x509 -sha256 -outform der -nodes"
|
||||
[ -x "$PX5G_BIN" ] && GENKEY_CMD="$PX5G_BIN selfsigned -der"
|
||||
[ -n "$GENKEY_CMD" ] && {
|
||||
$GENKEY_CMD \
|
||||
-days ${days:-397} -newkey ${KEY_OPTS} -keyout "${UHTTPD_KEY}.new" -out "${UHTTPD_CERT}.new" \
|
||||
-subj /C="${country:-ZZ}"/ST="${state:-Somewhere}"/L="${location:-Unknown}"/O="${organization:-OpenWrt$UNIQUEID}"/CN="${commonname:-OpenWrt}" \
|
||||
-addext extendedKeyUsage=serverAuth -addext subjectAltName=DNS:"${commonname:-OpenWrt}"
|
||||
sync
|
||||
mv "${UHTTPD_KEY}.new" "${UHTTPD_KEY}"
|
||||
mv "${UHTTPD_CERT}.new" "${UHTTPD_CERT}"
|
||||
}
|
||||
}
|
||||
|
||||
create_httpauth() {
|
||||
local cfg="$1"
|
||||
local prefix username password
|
||||
|
||||
config_get prefix "$cfg" prefix
|
||||
config_get username "$cfg" username
|
||||
config_get password "$cfg" password
|
||||
|
||||
if [ -z "$prefix" ] || [ -z "$username" ] || [ -z "$password" ]; then
|
||||
return
|
||||
fi
|
||||
echo "${prefix}:${username}:${password}" >>$httpdconf
|
||||
haveauth=1
|
||||
}
|
||||
|
||||
append_lua_prefix() {
|
||||
local v="$1"
|
||||
local prefix="${v%%=*}"
|
||||
local handler="${v#*=}"
|
||||
|
||||
if [ "$prefix" != "$handler" ] && [ -n "$prefix" ] && [ -f "$handler" ]; then
|
||||
procd_append_param command -l "$prefix" -L "$handler"
|
||||
else
|
||||
echo "Skipping invalid Lua prefix \"$v\"" >&2
|
||||
fi
|
||||
}
|
||||
|
||||
append_ucode_prefix() {
|
||||
local v="$1"
|
||||
local prefix="${v%%=*}"
|
||||
local handler="${v#*=}"
|
||||
|
||||
if [ "$prefix" != "$handler" ] && [ -n "$prefix" ] && [ -f "$handler" ]; then
|
||||
procd_append_param command -o "$prefix" -O "$handler"
|
||||
else
|
||||
echo "Skipping invalid ucode prefix \"$v\"" >&2
|
||||
fi
|
||||
}
|
||||
|
||||
start_instance()
|
||||
{
|
||||
UHTTPD_CERT=""
|
||||
UHTTPD_KEY=""
|
||||
|
||||
local cfg="$1"
|
||||
local realm="$(uci_get system.@system[0].hostname)"
|
||||
local listen http https interpreter indexes path handler httpdconf haveauth
|
||||
local enabled
|
||||
|
||||
config_get_bool enabled "$cfg" 'enabled' 1
|
||||
[ $enabled -gt 0 ] || return
|
||||
|
||||
procd_open_instance
|
||||
procd_set_param respawn
|
||||
procd_set_param stderr 1
|
||||
procd_set_param command "$UHTTPD_BIN" -f
|
||||
|
||||
config_get config "$cfg" config
|
||||
if [ -z "$config" ]; then
|
||||
mkdir -p /var/etc/uhttpd
|
||||
httpdconf="/var/etc/uhttpd/httpd.${cfg}.conf"
|
||||
rm -f ${httpdconf}
|
||||
config_list_foreach "$cfg" httpauth create_httpauth
|
||||
if [ "$haveauth" = "1" ]; then
|
||||
procd_append_param command -c ${httpdconf}
|
||||
[ -r /etc/httpd.conf ] && cat /etc/httpd.conf >>/var/etc/uhttpd/httpd.${cfg}.conf
|
||||
fi
|
||||
fi
|
||||
|
||||
append_arg "$cfg" home "-h"
|
||||
append_arg "$cfg" realm "-r" "${realm:-OpenWrt}"
|
||||
append_arg "$cfg" config "-c"
|
||||
append_arg "$cfg" cgi_prefix "-x"
|
||||
[ -f /usr/lib/uhttpd_lua.so ] && {
|
||||
local len
|
||||
config_get len "$cfg" lua_prefix_LENGTH
|
||||
|
||||
if [ -n "$len" ]; then
|
||||
config_list_foreach "$cfg" lua_prefix append_lua_prefix
|
||||
else
|
||||
config_get prefix "$cfg" lua_prefix
|
||||
config_get handler "$cfg" lua_handler
|
||||
append_lua_prefix "$prefix=$handler"
|
||||
fi
|
||||
}
|
||||
[ -f /usr/lib/uhttpd_ubus.so ] && {
|
||||
append_arg "$cfg" ubus_prefix "-u"
|
||||
append_arg "$cfg" ubus_socket "-U"
|
||||
append_bool "$cfg" ubus_cors "-X" 0
|
||||
}
|
||||
[ -f /usr/lib/uhttpd_ucode.so ] && {
|
||||
config_list_foreach "$cfg" ucode_prefix append_ucode_prefix
|
||||
}
|
||||
append_arg "$cfg" script_timeout "-t"
|
||||
append_arg "$cfg" network_timeout "-T"
|
||||
append_arg "$cfg" http_keepalive "-k"
|
||||
append_arg "$cfg" tcp_keepalive "-A"
|
||||
append_arg "$cfg" error_page "-E"
|
||||
append_arg "$cfg" max_requests "-n" 3
|
||||
append_arg "$cfg" max_connections "-N"
|
||||
|
||||
append_bool "$cfg" no_ubusauth "-a" 0
|
||||
append_bool "$cfg" no_symlinks "-S" 0
|
||||
append_bool "$cfg" no_dirlists "-D" 0
|
||||
append_bool "$cfg" rfc1918_filter "-R" 0
|
||||
|
||||
config_get alias_list "$cfg" alias
|
||||
for alias in $alias_list; do
|
||||
procd_append_param command -y "$alias"
|
||||
done
|
||||
|
||||
config_get http "$cfg" listen_http
|
||||
for listen in $http; do
|
||||
procd_append_param command -p "$listen"
|
||||
done
|
||||
|
||||
config_get interpreter "$cfg" interpreter
|
||||
for path in $interpreter; do
|
||||
procd_append_param command -i "$path"
|
||||
done
|
||||
|
||||
config_get indexes "$cfg" index_page
|
||||
for path in $indexes; do
|
||||
procd_append_param command -I "$path"
|
||||
done
|
||||
|
||||
config_get https "$cfg" listen_https
|
||||
config_get UHTTPD_KEY "$cfg" key /etc/uhttpd.key
|
||||
config_get UHTTPD_CERT "$cfg" cert /etc/uhttpd.crt
|
||||
|
||||
[ -f /lib/libustream-ssl.so ] && [ -n "$https" ] && {
|
||||
[ -s "$UHTTPD_CERT" -a -s "$UHTTPD_KEY" ] || {
|
||||
config_foreach generate_keys cert
|
||||
}
|
||||
|
||||
[ -f "$UHTTPD_CERT" -a -f "$UHTTPD_KEY" ] && {
|
||||
append_arg "$cfg" cert "-C"
|
||||
append_arg "$cfg" key "-K"
|
||||
|
||||
procd_append_param file "$UHTTPD_CERT"
|
||||
procd_append_param file "$UHTTPD_KEY"
|
||||
|
||||
for listen in $https; do
|
||||
procd_append_param command -s "$listen"
|
||||
done
|
||||
}
|
||||
|
||||
append_bool "$cfg" redirect_https "-q" 0
|
||||
}
|
||||
|
||||
config_get json_script "$cfg" json_script
|
||||
for file in $json_script; do
|
||||
[ -s "$file" ] && procd_append_param command -H "$file"
|
||||
done
|
||||
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
uhttpd_interfaces()
|
||||
{
|
||||
local cfg="$1"
|
||||
local http https listen ips
|
||||
|
||||
config_get http "$cfg" listen_http
|
||||
config_get https "$cfg" listen_https
|
||||
for listen in $http $https; do
|
||||
case "$listen" in
|
||||
"" |\
|
||||
"0.0.0.0:"* |\
|
||||
"[::]:"* )
|
||||
continue
|
||||
;;
|
||||
*.*.*.*:*)
|
||||
ips="$ips ${listen%%:*}
|
||||
"
|
||||
;;
|
||||
\[*\]:* )
|
||||
listen="${listen:1}"
|
||||
ips="$ips ${listen%%]:*}
|
||||
"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
ips="$( echo "$ips" | sort -u )"
|
||||
echo "$ips"
|
||||
}
|
||||
|
||||
resolve_iface()
|
||||
{
|
||||
local cfg="$1"
|
||||
local ipaddr ipaddrs testip="$2"
|
||||
|
||||
config_get ipaddrs "$cfg" ipaddr
|
||||
for ipaddr in $ipaddrs; do
|
||||
[ "$ipaddr" = "$testip" ] && echo "$cfg"
|
||||
done
|
||||
}
|
||||
|
||||
get_interface_by_ip()
|
||||
{
|
||||
config_load network
|
||||
config_foreach resolve_iface interface "$@"
|
||||
}
|
||||
|
||||
service_triggers()
|
||||
{
|
||||
local iface ifaces all=0
|
||||
|
||||
procd_add_reload_trigger "uhttpd"
|
||||
procd_add_raw_trigger acme.renew 5000 /etc/init.d/uhttpd reload
|
||||
|
||||
config_load uhttpd
|
||||
ips="$(config_foreach uhttpd_interfaces uhttpd)"
|
||||
[ -z "$ips" ] && return 0
|
||||
|
||||
for ip in $ips; do
|
||||
iface="$(get_interface_by_ip $ip)"
|
||||
[ -z "$iface" ] && all=1
|
||||
ifaces="$ifaces $iface"
|
||||
done
|
||||
|
||||
if [ "$all" = "1" ]; then
|
||||
procd_add_raw_trigger "interface.*.up" 1000 /etc/init.d/uhttpd start
|
||||
else
|
||||
for iface in $ifaces; do
|
||||
procd_add_raw_trigger "interface.$iface.up" 1000 /etc/init.d/uhttpd start
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
start_service() {
|
||||
config_load uhttpd
|
||||
config_foreach start_instance uhttpd
|
||||
}
|
||||
Reference in New Issue
Block a user