diff options
author | Rosy Song <rosysong@rosinson.com> | 2018-05-02 10:48:36 +0800 |
---|---|---|
committer | John Crispin <john@phrozen.org> | 2018-05-02 09:18:27 +0200 |
commit | fd569e5e9d0a46ea957cb253e97a4b3ea8c2c540 (patch) | |
tree | 9c2a6ec223a2318b4f829143d31875deaef7d82e /package/network | |
parent | 2c4294f78612d038a2b130171fe25ed8e6569bae (diff) | |
download | upstream-fd569e5e9d0a46ea957cb253e97a4b3ea8c2c540.tar.gz upstream-fd569e5e9d0a46ea957cb253e97a4b3ea8c2c540.tar.bz2 upstream-fd569e5e9d0a46ea957cb253e97a4b3ea8c2c540.zip |
samba36: add hotplug support
Add hotplug handle script for storage devices,
this will add corresponding option in the
/etc/config/samba file automatically.
Signed-off-by: Rosy Song <rosysong@rosinson.com>
Diffstat (limited to 'package/network')
-rw-r--r-- | package/network/services/samba36/Makefile | 14 | ||||
-rw-r--r-- | package/network/services/samba36/files/lib/samba.sh | 89 | ||||
-rw-r--r-- | package/network/services/samba36/files/samba.hotplug | 11 |
3 files changed, 114 insertions, 0 deletions
diff --git a/package/network/services/samba36/Makefile b/package/network/services/samba36/Makefile index 30e26195ff..39bfcc6c4f 100644 --- a/package/network/services/samba36/Makefile +++ b/package/network/services/samba36/Makefile @@ -43,6 +43,12 @@ define Package/samba36-server DEPENDS:=+USE_GLIBC:librt $(ICONV_DEPENDS) endef +define Package/samba36-hotplug + $(call Package/samba/Default) + TITLE+= hotplug + DEPENDS:=+block-mount +endef + define Package/samba36-client $(call Package/samba/Default) TITLE+= client @@ -159,6 +165,13 @@ define Package/samba36-server/install $(LN) samba_multicall $(1)/usr/sbin/smbpasswd endef +define Package/samba36-hotplug/install + $(INSTALL_DIR) $(1)/lib/samba + $(INSTALL_DATA) ./files/lib/samba.sh $(1)/lib/samba/samba.sh + $(INSTALL_DIR) $(1)/etc/hotplug.d/block + $(INSTALL_DATA) ./files/samba.hotplug $(1)/etc/hotplug.d/block/60-samba +endef + define Package/samba36-client/install $(INSTALL_DIR) $(1)/usr/sbin $(INSTALL_BIN) $(PKG_BUILD_BIN)/smbclient $(1)/usr/sbin @@ -172,5 +185,6 @@ endef $(eval $(call BuildPackage,samba36-client)) $(eval $(call BuildPackage,samba36-server)) +$(eval $(call BuildPackage,samba36-hotplug)) $(eval $(call BuildPackage,samba36-net)) diff --git a/package/network/services/samba36/files/lib/samba.sh b/package/network/services/samba36/files/lib/samba.sh new file mode 100644 index 0000000000..a72a2a1933 --- /dev/null +++ b/package/network/services/samba36/files/lib/samba.sh @@ -0,0 +1,89 @@ +#!/bin/sh +# +# Copyright (C) 2018 OpenWrt.org +# Copyright (C) 2018 rosysong@rosinson.com +# + +. /lib/functions.sh + +FLAG_DEV_TYPE= +FLAG_DEV_MOPT= +FLAG_HAS_SECT= + +samba_dev_filter() { # <devname> <[path,/dev/]> + case $1 in + ${2}mtdblock*|\ + ${2}ubi*) + FLAG_DEV_TYPE="mtd" + ;; + ${2}loop*|\ + ${2}mmcblk*|\ + ${2}sd*|\ + ${2}hd*|\ + ${2}md*|\ + ${2}nvme*|\ + ${2}vd*|\ + ${2}xvd*) + FLAG_DEV_TYPE="not-mtd" + ;; + *) + [ -b ${2}${1} ] && FLAG_DEV_TYPE="not-mtd" + [ -b /dev/mapper/$1 ] && FLAG_DEV_TYPE="not-mtd" + ;; + esac +} + +samba_cfg_lookup() { # <section> <name> + config_get name $1 name + [ "$name" = "$2" ] || return + FLAG_HAS_SECT=y +} + +samba_cfg_delete() { # <section> <name> + config_get name $1 name + [ "$name" = "$2" ] || return + uci -q delete samba.$1 +} + +samba_find_mount_point() { # <devname> + # search mount point in /proc/mounts + while read l; do + local d=$(echo $l | awk '/^\/dev/ {print $1}') + [ "$d" = "/dev/$1" ] || continue + + FLAG_DEV_MOPT=$(echo $l | awk '/^\/dev/ {print $2}') + break + done < /proc/mounts +} + +_samba_add_section() { # <devname> <mount point> + uci -q batch <<-EOF + add samba sambashare + set samba.@sambashare[-1].browseable='yes' + set samba.@sambashare[-1].name='$1' + set samba.@sambashare[-1].path='$2' + set samba.@sambashare[-1].users='root' + set samba.@sambashare[-1].read_only='no' + set samba.@sambashare[-1].guest_ok='yes' + set samba.@sambashare[-1].create_mask='0755' + set samba.@sambashare[-1].dir_mask='0755' + EOF +} + +samba_add_section() { # <devname> [<mount point>] + FLAG_HAS_SECT= + FLAG_DEV_MOPT= + + config_foreach samba_cfg_lookup sambashare $1 + [ -z "$FLAG_HAS_SECT" ] || return + + samba_find_mount_point $1 + [ -n "$FLAG_DEV_MOPT" ] || return + + [ -n "$2" -a "$2" = "$FLAG_DEV_MOPT" ] || \ + _samba_add_section $1 $FLAG_DEV_MOPT +} + +samba_delete_section() { # <devname> + config_foreach samba_cfg_delete sambashare $1 +} diff --git a/package/network/services/samba36/files/samba.hotplug b/package/network/services/samba36/files/samba.hotplug new file mode 100644 index 0000000000..9c6dbe5e41 --- /dev/null +++ b/package/network/services/samba36/files/samba.hotplug @@ -0,0 +1,11 @@ +. /lib/samba/samba.sh + +samba_dev_filter $DEVNAME +[ "$FLAG_DEV_TYPE" = "not-mtd" ] || exit + +config_load samba +case $ACTION in + add) samba_add_section $DEVNAME;; + remove) samba_delete_section $DEVNAME;; +esac +uci commit samba |