mirror of
https://git.openwrt.org/feed/packages.git
synced 2024-06-17 12:53:54 +02:00
6020ca52bf
Function start_service() is called whenever service may need reloading. If SMB server is not running it could be simply because it has been stopped. Reloading service in such case is not an error so: 1. Don't log error as it isn't one 2. Don't exit with error code as it was confusing procd This change fixes scenario like: /etc/init.d/ksmbd stop /etc/init.d/wsdd2 reload (previously above wasn't stopping wsdd2) Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
93 lines
2.7 KiB
Bash
93 lines
2.7 KiB
Bash
#!/bin/sh /etc/rc.common
|
|
|
|
START=99
|
|
USE_PROCD=1
|
|
|
|
SMB_CONF=""
|
|
BIND_IF_PARM=""
|
|
NB_PARM="$(sed 's/\..*//' /proc/sys/kernel/hostname)"
|
|
WG_PARM="WORKGROUP"
|
|
BI_PARM=""
|
|
|
|
start_service() {
|
|
|
|
. /lib/functions/network.sh
|
|
|
|
# needs long delay, otherwise service may not register correctly on stratup/reboot (not sure what the issues is?)
|
|
sleep 5
|
|
|
|
if [ -e /etc/ksmbd/ksmbd.conf ] && [ -e /etc/init.d/ksmbd ] && /etc/init.d/ksmbd running; then
|
|
SMB_CONF="/etc/ksmbd/ksmbd.conf"
|
|
fi
|
|
|
|
[ -e /etc/samba/smb.conf ] && {
|
|
if [ -e /etc/init.d/samba4 ] && /etc/init.d/samba4 running; then
|
|
SMB_CONF="/etc/samba/smb.conf"
|
|
elif [ -e /etc/init.d/samba ] && /etc/init.d/samba running; then
|
|
SMB_CONF="/etc/samba/smb.conf"
|
|
fi
|
|
}
|
|
|
|
[ -z "$SMB_CONF" ] && {
|
|
logger -p daemon.info -t 'wsdd2' "samba36/4 or ksmbd is not running"
|
|
return
|
|
}
|
|
|
|
# cleanup comments
|
|
local smb_conf
|
|
smb_conf="$(grep '^[[:blank:]]*[^[:blank:]#;]' $SMB_CONF)"
|
|
|
|
local nb_name
|
|
nb_name="$(echo "$smb_conf" | grep -i 'netbios name' | awk -F'=' '{print $2}' | tr -d ' \n')"
|
|
[ -n "$nb_name" ] && NB_PARM="$nb_name"
|
|
|
|
# use uppercase for none mdns option
|
|
local nb_option
|
|
nb_option="$(echo "$smb_conf" | grep -i 'mdns name' | awk -F'=' '{print $2}' | tr -d ' \n')"
|
|
[ "$nb_option" != "mdns" ] && NB_PARM="$(echo "$nb_name" | awk '{print toupper($0)}')"
|
|
|
|
local wg_name
|
|
wg_name="$(echo "$smb_conf" | grep -i 'workgroup' | awk -F'=' '{print $2}' | tr -d ' \n')"
|
|
[ -n "$wg_name" ] && WG_PARM="$wg_name"
|
|
|
|
# resolve lan interface (BUG: No multi-interface binds atm)
|
|
local ifname
|
|
network_get_device ifname lan
|
|
|
|
local board_vendor
|
|
local board_model
|
|
local board_sku
|
|
|
|
[ -e /tmp/sysinfo/board_name ] && {
|
|
board_vendor="$(awk -F',' '{print $1}' /tmp/sysinfo/board_name | tr ' ' '_' | tr ',' '-' | tr -d ' \n')"
|
|
board_sku="$(awk -F',' '{print $2}' /tmp/sysinfo/board_name | tr ' ' '_' | tr ',' '-' | tr -d ' \n')"
|
|
}
|
|
|
|
[ -e /tmp/sysinfo/model ] && {
|
|
board_model="$(awk -F':' '{print $1}' /tmp/sysinfo/model | tr ' ' '_' | tr ',' '-' | tr -d ' \n')"
|
|
}
|
|
|
|
[ -n "$board_vendor" ] && [ -n "$board_model" ] && {
|
|
if [ -n "$board_sku" ]; then
|
|
BI_PARM="vendor:$board_vendor,model:$board_model,sku:$board_sku"
|
|
else
|
|
BI_PARM="vendor:$board_vendor,model:$board_model"
|
|
fi
|
|
}
|
|
|
|
procd_open_instance
|
|
procd_set_param command /usr/bin/wsdd2
|
|
[ -n "$ifname" ] && procd_append_param command -i "$ifname"
|
|
procd_append_param command -N "$NB_PARM"
|
|
procd_append_param command -G "$WG_PARM"
|
|
[ "x${BI_PARM}" = "x" ] || procd_append_param command -b "$BI_PARM"
|
|
procd_set_param respawn
|
|
procd_set_param file "$SMB_CONF"
|
|
procd_close_instance
|
|
}
|
|
|
|
service_triggers() {
|
|
# PROCD_RELOAD_DELAY=1000
|
|
procd_add_reload_trigger "dhcp" "system" "samba" "samba4" "ksmbd"
|
|
}
|