mirror of
https://github.com/openwrt/packages.git
synced 2025-02-12 03:28:07 +00:00
On systems using seccomp, the hostapd socket files will be owned by the
'network' user/group ([source][0]). In this case, if wifi-presence is
run as root/root, then it does not have permissions to open the
hostapd socket files. This was discussed in awilliams/wifi-presence#3.
This change allows the process user/group to be specified in
/etc/config/wifi-presence. If no explicit user/group is set, then the
init script will use the owner of the socket files in /var/run/hostapd/
to determine the appropriate process user/group.
[0]: ec6293febc/package/network/services/hostapd/files/wpad.init (L35-L36)
Signed-off-by: Adam Williams <pwnfactory@gmail.com>
89 lines
3.3 KiB
Bash
89 lines
3.3 KiB
Bash
#!/bin/sh /etc/rc.common
|
|
|
|
USE_PROCD=1
|
|
|
|
START=95
|
|
# stops before networking stops
|
|
STOP=89
|
|
|
|
PROG=/usr/bin/wifi-presence
|
|
CONF=wifi-presence
|
|
|
|
start_service() {
|
|
# Load config.
|
|
config_load "${CONF}"
|
|
|
|
local apName
|
|
local debounce
|
|
local hassAutodiscovery
|
|
local hassPrefix
|
|
local hostapdSocks
|
|
local mqttAddr
|
|
local mqttID
|
|
local mqttUsername
|
|
local mqttPassword
|
|
local mqttPrefix
|
|
local sockDir
|
|
local verbose
|
|
|
|
local runAsUser
|
|
local runAsGroup
|
|
|
|
config_get apName main apName
|
|
config_get debounce main debounce
|
|
config_get hassAutodiscovery main hassAutodiscovery
|
|
config_get hassPrefix main hassPrefix
|
|
config_get hostapdSocks main hostapdSocks
|
|
config_get mqttAddr main mqttAddr
|
|
config_get mqttID main mqttId
|
|
config_get mqttUsername main mqttUsername
|
|
config_get mqttPassword main mqttPassword
|
|
config_get mqttPrefix main mqttPrefix
|
|
config_get sockDir main sockDir
|
|
config_get_bool verbose main verbose
|
|
|
|
config_get runAsUser main runAsUser
|
|
config_get runAsGroup main runAsGroup
|
|
|
|
procd_open_instance
|
|
|
|
procd_set_param command ${PROG}
|
|
[ -n "${apName}" ] && procd_append_param command "-apName=${apName}"
|
|
[ -n "${debounce}" ] && procd_append_param command "-debounce=${debounce}"
|
|
[ -n "${hassAutodiscovery}" ] && procd_append_param command "-hass.autodiscovery=${hassAutodiscovery}"
|
|
[ -n "${hassPrefix}" ] && procd_append_param command "-hass.prefix=${hassPrefix}"
|
|
[ -n "${hostapdSocks}" ] && procd_append_param command "-hostapd.socks=${hostapdSocks}"
|
|
[ -n "${mqttAddr}" ] && procd_append_param command "-mqtt.addr=${mqttAddr}"
|
|
[ -n "${mqttID}" ] && procd_append_param command "-mqtt.id=${mqttID}"
|
|
[ -n "${mqttUsername}" ] && procd_append_param command "-mqtt.username=${mqttUsername}"
|
|
[ -n "${mqttPassword}" ] && procd_append_param command "-mqtt.password=${mqttPassword}"
|
|
[ -n "${mqttPrefix}" ] && procd_append_param command "-mqtt.prefix=${mqttPrefix}"
|
|
[ -n "${sockDir}" ] && procd_append_param command "-sockDir=${sockDir}"
|
|
[ -n "${verbose}" ] && procd_append_param command "-verbose=${verbose}"
|
|
|
|
if [ -z "${runAsUser}" ] && [ -z "${runAsGroup}" ]; then
|
|
# If both runAsUser and runAsGroup are unspecified, then
|
|
# determine their values by looking at the owner of the hostapd sockets.
|
|
#
|
|
# It would be preferable to use 'stat' to determine the owner of the socket,
|
|
# but it may not be present on all systems, so instead we revert to parsing ls output.
|
|
local sockOwner=$(find /var/run/hostapd/ -type s -maxdepth 1 -exec ls -ld {} \; | head -n 1 | awk '{ print $3 }')
|
|
if [ -n "${sockOwner}" ]; then
|
|
runAsUser="${sockOwner}"
|
|
runAsGroup="${sockOwner}"
|
|
fi
|
|
fi
|
|
|
|
[ -n "${runAsUser}" ] && procd_set_param user "${runAsUser}"
|
|
[ -n "${runAsGroup}" ] && procd_set_param group "${runAsGroup}"
|
|
|
|
procd_set_param file "/etc/config/${CONF}"
|
|
procd_set_param stdout 1
|
|
procd_set_param stderr 1
|
|
|
|
# Restart every 5 seconds, indefinitely.
|
|
procd_set_param respawn 0 5 0
|
|
|
|
procd_close_instance
|
|
}
|