iopsys-feed/owsd/files/owsd.init
Alex Oprea 31d8c188df Revert "use procd reload scripts instead of hotplug"
This reverts commit c02d4886a213903ad890e09eadd9575ea569c68d.
2018-01-08 19:27:40 +01:00

159 lines
3.4 KiB
Bash

#!/bin/sh /etc/rc.common
. /lib/functions/network.sh
START=90
STOP=10
USE_PROCD=1
PROG=/usr/bin/owsd
CONFIGFILE="/etc/config/owsd"
DHCP_DOMAINS=""
load_dhcp_domains() {
append_domain() {
local domain=$1
DHCP_DOMAINS="$DHCP_DOMAINS $domain"
}
dhcp_domain_section() {
local section=$1
local ip
config_get ip "$section" ip
[ -z "$ip" ] && config_list_foreach "$section" "name" append_domain
}
config_load dhcp # note: do not overload a config while parsing it
config_foreach dhcp_domain_section "domain"
}
validate_owsd() {
uci_validate_section "owsd" "owsd" "global" \
'sock:string' \
'redirect:string' \
'www:string'
}
append_origin() {
procd_append_param command -o "$1"
}
append_origin_parts() {
local proto host port
proto="$1"
host="$2"
port="$3"
if [ "${proto}" = "https" ] && [ "${port}" -eq 443 ] || [ "${proto}" = "http" ] && [ "${port}" -eq 80 ]; then
append_origin "${proto}://${host}"
else
append_origin "${proto}://${host}:${port}"
fi
}
validate_owsd_iface() {
uci_validate_section "owsd" "owsd-listen" "$1" \
'port:port' \
'interface:string' \
'origin:list(string)' \
'whitelist_interface_as_origin:bool' \
'whitelist_dhcp_domains:bool' \
'ipv6:bool' \
'ipv6only:bool' \
'cert:file' \
'key:file'
}
parse_owsd_iface() {
local port interface whitelist_interface_as_origin whitelist_dhcp_domains ipv6 ipv6only cert key
validate_owsd_iface "$1" || {
echo "Validation failed"
return 1
}
local interfacedev
if [ -n "${interface}" ]; then
network_get_device interfacedev "${interface}" || return 1
fi
[ -n "${port}" ] && procd_append_param command -p "${port}"
[ -n "${cert}" ] && procd_append_param command -c "${cert}"
[ -n "${key}" ] && procd_append_param command -k "${key}"
[ -n "${ipv6}" ] && procd_append_param command -6
[ -n "${ipv6}" ] && [ -n "${ipv6only}" ] && procd_append_param command -6
procd_append_param command -i "${interfacedev}"
if [ -n "${interface}" ] && [ -n "$whitelist_interface_as_origin" ]; then
local ip4addrs ip6addrs addr
if [ -z "${ipv6}" ] || [ -z "${ipv6only}" ] && network_get_ipaddrs ip4addrs "${interface}"; then
for addr in $ip4addrs; do
append_origin_parts "http${cert:+s}" "${addr}" "${port}"
done
fi
if [ -n "$ipv6}" ] && network_get_ipaddrs6 ip6addrs "${interface}"; then
for addr in $ip6addrs; do
append_origin_parts "http${cert:+s}" "[${addr}]" "${port}"
done
fi
fi
config_list_foreach "$1" "origin" append_origin
if [ -n "$whitelist_dhcp_domains" ]; then
http="http${cert:+s}"
for domain in $DHCP_DOMAINS; do
append_origin_parts "$http" "$domain" "$port"
done
fi
}
start_service() {
# preload dhcp domains list, in case any interface config requires it
load_dhcp_domains
config_load owsd # note: do not overload a config while parsing it
procd_open_instance
procd_set_param command $PROG
local sock www
validate_owsd || {
echo "Global validation failed"
return 1
}
[ -n "${sock}" ] && procd_append_param command -s "${sock}"
[ -n "${www}" ] && procd_append_param command -w "${www}"
[ -n "${redirect}" ] && procd_append_param command -r "${redirect}"
config_foreach parse_owsd_iface "owsd-listen"
# procd_set_param stderr 1
procd_set_param respawn
procd_close_instance
}
stop_service()
{
service_stop ${PROG}
}
reload_service() {
stop
start
}
service_triggers() {
procd_add_reload_trigger owsd
}