aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRosy Song <rosysong@rosinson.com>2018-05-02 10:48:36 +0800
committerJohn Crispin <john@phrozen.org>2018-05-02 09:18:27 +0200
commitfd569e5e9d0a46ea957cb253e97a4b3ea8c2c540 (patch)
tree9c2a6ec223a2318b4f829143d31875deaef7d82e
parent2c4294f78612d038a2b130171fe25ed8e6569bae (diff)
downloadupstream-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>
-rw-r--r--package/network/services/samba36/Makefile14
-rw-r--r--package/network/services/samba36/files/lib/samba.sh89
-rw-r--r--package/network/services/samba36/files/samba.hotplug11
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