From patchwork Wed May 2 02:48:36 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rosy Song X-Patchwork-Id: 907274 X-Patchwork-Delegate: blogic@openwrt.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=lede-dev-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=rosinson.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="fm7fMCI9"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40bN6N2fK0z9rx7 for ; Wed, 2 May 2018 12:49:46 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Subject:Message-Id: Date:To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=/SXZXDCPwIRtfWKOCBTcEghTH1kIeCmZpn3t9cGDu8g=; b=fm7fMCI9NBttk8 K2kuPTCWTuSCo7CGlU+1hogXtLBd0YRaUKuA21iAz2Uq+fBlk4yK5oCx9oS/pUrbe+db9xf5ObipD ogaAj6ZAn8cdHcT3o3tfIRQx5JB1r8gtH9FgLxzzn3ObqfVtE+ANvPG1rPeDxqMCWVPFgCTYQNpdx OBk6llrENfbrRQ4F8cPPxJ6HqrOHTpcjgz404CWBmiEWBS6PZCeCwKqSjkPFhNoBUquHmC8PhcJ0Z iRoDaj0uK2mA2aohb1hQ3/uVCJNcKtyTEvT2XFqP6vb084F3D8SuX0rSxKWncBV+Pa6Q5Noxl/XEy hTSKoLxtBzCyuSnN/eSw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1fDhpv-0007H2-Nv; Wed, 02 May 2018 02:49:43 +0000 Received: from out20-61.mail.aliyun.com ([115.124.20.61]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1fDhpn-0007FS-Vi for lede-dev@lists.infradead.org; Wed, 02 May 2018 02:49:41 +0000 X-Alimail-AntiSpam: AC=CONTINUE; BC=0.07443953|-1; CH=green; FP=10864578383310230193|1|1|1|0|-1|-1|-1; HT=e02c03306; MF=rosysong@rosinson.com; NM=1; PH=DS; RN=3; RT=3; SR=0; TI=SMTPD_---.Bu8gofs_1525229358; Received: from localhost.localdomain(mailfrom:rosysong@rosinson.com fp:SMTPD_---.Bu8gofs_1525229358) by smtp.aliyun-inc.com(10.147.42.198); Wed, 02 May 2018 10:49:18 +0800 From: Rosy Song To: lede-dev@lists.infradead.org Date: Wed, 2 May 2018 10:48:36 +0800 Message-Id: <20180502024836.9486-1-rosysong@rosinson.com> X-Mailer: git-send-email 2.13.3 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180501_194936_213176_F6B6E83B X-CRM114-Status: GOOD ( 10.17 ) X-Spam-Score: 0.0 (/) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [115.124.20.61 listed in list.dnswl.org] 0.0 T_SPF_TEMPERROR SPF: test of record failed (temperror) 0.0 UNPARSEABLE_RELAY Informational: message has unparseable relay lines Subject: [LEDE-DEV] [PATCH,v2] samba36: add hotplug support X-BeenThere: lede-dev@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Rosy Song , john@phrozen.org MIME-Version: 1.0 Sender: "Lede-dev" Errors-To: lede-dev-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Add hotplug handle script for storage devices, this will add corresponding option in the /etc/config/samba file automatically. Signed-off-by: Rosy Song --- package/network/services/samba36/Makefile | 14 ++++ .../network/services/samba36/files/lib/samba.sh | 89 ++++++++++++++++++++++ .../network/services/samba36/files/samba.hotplug | 11 +++ 3 files changed, 114 insertions(+) create mode 100644 package/network/services/samba36/files/lib/samba.sh create mode 100644 package/network/services/samba36/files/samba.hotplug 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() { # <[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() { #
+ config_get name $1 name + [ "$name" = "$2" ] || return + FLAG_HAS_SECT=y +} + +samba_cfg_delete() { #
+ config_get name $1 name + [ "$name" = "$2" ] || return + uci -q delete samba.$1 +} + +samba_find_mount_point() { # + # 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() { # + 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() { # [] + 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() { # + 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