samba: add file/interface reload triggers & filter interfaces
authorConn O'Griofa <connogriofa@gmail.com>
Thu, 4 Aug 2016 00:31:50 +0000 (01:31 +0100)
committerJohn Crispin <john@phrozen.org>
Mon, 15 Aug 2016 13:18:35 +0000 (15:18 +0200)
* Only parse interfaces that are up during init_config (as the
  script depends on this to determine the proper IP/subnet range)
* Add reload interface triggers for samba-designated interfaces
* Force full service restart upon config change to ensure Samba
  binds to new interfaces (sending HUP signal doesn't work)
* Rename "interface" variable to "samba_iface" and move into
  global scope

Needed to fix Samba connectivity for clients connecting from a
different LAN subnet (e.g. pseudobridge configurations) due to the
'bind interfaces only' setting.

Signed-off-by: Conn O'Griofa <connogriofa@gmail.com>
package/network/services/samba36/files/samba.init

index bc1dbf8..c841324 100755 (executable)
@@ -5,16 +5,16 @@ START=60
 USE_PROCD=1
 
 smb_header() {
-       local interface
-       config_get interface $1 interface "loopback lan"
+       config_get samba_iface $1 interface "loopback lan"
 
        # resolve interfaces
        local interfaces=$(
                . /lib/functions/network.sh
 
                local net
-               for net in $interface; do
+               for net in $samba_iface; do
                        local device
+                       network_is_up $net || continue
                        network_get_device device "$net" && {
                                local subnet
                                network_get_subnet  subnet "$net" && echo -n "$subnet "
@@ -93,14 +93,13 @@ init_config() {
        config_foreach smb_add_share sambashare
 }
 
-reload_service() {
-       init_config
-
-       killall -HUP smbd
-}
-
 service_triggers() {
        procd_add_reload_trigger samba
+
+       local i
+       for i in $samba_iface; do
+               procd_add_reload_interface_trigger $i
+       done
 }
 
 start_service() {
@@ -109,10 +108,12 @@ start_service() {
        procd_open_instance
        procd_set_param command /usr/sbin/smbd -F
        procd_set_param respawn
+       procd_set_param file /var/etc/smb.conf
        procd_close_instance
 
        procd_open_instance
        procd_set_param command /usr/sbin/nmbd -F
        procd_set_param respawn
+       procd_set_param file /var/etc/smb.conf
        procd_close_instance
 }