From 6c9973a9d9392489aa033c243842fdb29041f578 Mon Sep 17 00:00:00 2001 From: Andy Walsh Date: Tue, 31 Dec 2019 14:59:11 +0100 Subject: [PATCH] smbd: rename from cifsd, update to 3.0.1 * follow upstream rename to 'smbd' and 'smbd-tools' * config is '/config/smbd' and '/etc/smbd/smb.conf' * smbd: update to 3.0.1 * smbd: fixes delete access on readonly shares * smbd: add patch to keep version metadata in kmod * smbd: add synchrous kill_server patches * smbd-tools: update to 3.0.1 * smbd-tools: userspace service is now 'usmbd' * smbd-tools: userspace tools are: 'smbuseradd', 'smbshareadd' with /etc/smbd/smbdpwd.db * smbd-tools: split package into server/utils (reduce size) * smbd-tools: fix init (luci save&apply) * smbd-tools: remove kill_server related timeouts Signed-off-by: Andy Walsh --- kernel/cifsd/Makefile | 53 ------ kernel/smbd/Makefile | 52 ++++++ .../smbd/patches/01-keep_kmod_metadata.patch | 10 + net/cifsd-tools/Makefile | 59 ------ net/cifsd-tools/files/cifsd.config | 2 - net/cifsd-tools/files/smb.conf.help | 173 ------------------ net/smbd-tools/Makefile | 113 ++++++++++++ .../files/smb.conf.template | 5 + net/smbd-tools/files/smbd.config | 3 + .../files/smbd.config.example} | 2 +- .../cifsd.init => smbd-tools/files/smbd.init} | 102 +++++------ 11 files changed, 231 insertions(+), 343 deletions(-) delete mode 100644 kernel/cifsd/Makefile create mode 100644 kernel/smbd/Makefile create mode 100644 kernel/smbd/patches/01-keep_kmod_metadata.patch delete mode 100644 net/cifsd-tools/Makefile delete mode 100644 net/cifsd-tools/files/cifsd.config delete mode 100644 net/cifsd-tools/files/smb.conf.help create mode 100644 net/smbd-tools/Makefile rename net/{cifsd-tools => smbd-tools}/files/smb.conf.template (63%) create mode 100644 net/smbd-tools/files/smbd.config rename net/{cifsd-tools/files/cifsd.config.example => smbd-tools/files/smbd.config.example} (82%) rename net/{cifsd-tools/files/cifsd.init => smbd-tools/files/smbd.init} (59%) diff --git a/kernel/cifsd/Makefile b/kernel/cifsd/Makefile deleted file mode 100644 index 890a5eb4c..000000000 --- a/kernel/cifsd/Makefile +++ /dev/null @@ -1,53 +0,0 @@ -include $(TOPDIR)/rules.mk - -PKG_NAME:=cifsd -PKG_RELEASE:=1 - -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://github.com/cifsd-team/cifsd.git -PKG_SOURCE_DATE:=2019-11-27 -PKG_SOURCE_VERSION:=b8675c8ac144ece00f3e6bcc5436c8ace99e23e9 -PKG_MIRROR_HASH:=3d67af87f30d837f95510663efc42f1451651dc235987408924b56cb277fc8e8 - -PKG_MAINTAINER:=Andy Walsh -PKG_LICENSE:=GPL-2.0-or-later -PKG_LICENSE_FILES:=COPYING - -include $(INCLUDE_DIR)/kernel.mk -include $(INCLUDE_DIR)/package.mk - -define KernelPackage/fs-cifsd - SUBMENU:=Filesystems - TITLE:=CIFS/SMB kernel server support - URL:=https://github.com/cifsd-team/cifsd - FILES:=$(PKG_BUILD_DIR)/cifsd.ko - DEPENDS:= \ - +kmod-nls-base \ - +kmod-nls-utf8 \ - +kmod-crypto-md4 \ - +kmod-crypto-md5 \ - +kmod-crypto-hmac \ - +kmod-crypto-ecb \ - +kmod-crypto-des \ - +kmod-crypto-sha256 \ - +kmod-crypto-cmac \ - +kmod-crypto-sha512 \ - +kmod-crypto-aead \ - +kmod-crypto-ccm -endef - -define KernelPackage/fs-cifsd/description - Kernel module for a CIFS/SMBv2,3 fileserver. -endef - -# broken atm (needs CONFIG_KEYS=y) -#EXTRA_CFLAGS+=-DCONFIG_CIFSD_ACL - -define Build/Compile - $(KERNEL_MAKE) SUBDIRS="$(PKG_BUILD_DIR)" \ - EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \ - CONFIG_CIFS_SERVER=m \ - modules -endef - -$(eval $(call KernelPackage,fs-cifsd)) diff --git a/kernel/smbd/Makefile b/kernel/smbd/Makefile new file mode 100644 index 000000000..cb6da11af --- /dev/null +++ b/kernel/smbd/Makefile @@ -0,0 +1,52 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=smbd +PKG_VERSION:=3.0.1 +PKG_RELEASE:=1 + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:=https://github.com/cifsd-team/$(PKG_NAME)/archive/$(PKG_VERSION)/ +PKG_HASH:=6d1bf695aacd5a009eb30c10b31ff7c8942c8f201f7eb436b3cfa66f49d1f9f5 + +PKG_MAINTAINER:=Andy Walsh +PKG_LICENSE:=GPL-2.0-or-later +PKG_LICENSE_FILES:=COPYING + +include $(INCLUDE_DIR)/kernel.mk +include $(INCLUDE_DIR)/package.mk + +define KernelPackage/fs-smbd + SUBMENU:=Filesystems + TITLE:=SMB kernel server support + URL:=https://github.com/cifsd-team/smbd + FILES:=$(PKG_BUILD_DIR)/smbd.ko + DEPENDS:= \ + +kmod-nls-base \ + +kmod-nls-utf8 \ + +kmod-crypto-md4 \ + +kmod-crypto-md5 \ + +kmod-crypto-hmac \ + +kmod-crypto-arc4 \ + +kmod-crypto-ecb \ + +kmod-crypto-des \ + +kmod-crypto-sha256 \ + +kmod-crypto-cmac \ + +kmod-crypto-sha512 \ + +kmod-crypto-aead \ + +kmod-crypto-ccm \ + +kmod-crypto-gcm +endef + +define KernelPackage/fs-smbd/description + Smbd is an In-kernel SMB2/3 fileserver. + It's an implementation of the SMB protocol in kernel space for sharing files and IPC services over network. +endef + +define Build/Compile + $(KERNEL_MAKE) SUBDIRS="$(PKG_BUILD_DIR)" \ + EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \ + CONFIG_SMB_SERVER=m \ + modules +endef + +$(eval $(call KernelPackage,fs-smbd)) diff --git a/kernel/smbd/patches/01-keep_kmod_metadata.patch b/kernel/smbd/patches/01-keep_kmod_metadata.patch new file mode 100644 index 000000000..9240852c8 --- /dev/null +++ b/kernel/smbd/patches/01-keep_kmod_metadata.patch @@ -0,0 +1,10 @@ +--- a/glob.h 2019-12-08 ++++ b/glob.h 2019-12-08 +@@ -7,6 +7,8 @@ + #ifndef __SMBD_GLOB_H + #define __SMBD_GLOB_H + ++#undef CONFIG_MODULE_STRIPPED ++ + #include + #include diff --git a/net/cifsd-tools/Makefile b/net/cifsd-tools/Makefile deleted file mode 100644 index 656cc10d2..000000000 --- a/net/cifsd-tools/Makefile +++ /dev/null @@ -1,59 +0,0 @@ -include $(TOPDIR)/rules.mk - -PKG_NAME:=cifsd-tools -PKG_RELEASE:=1 - -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://github.com/cifsd-team/cifsd-tools.git -PKG_SOURCE_DATE:=2019-11-27 -PKG_SOURCE_VERSION:=06fd4153a5d5af1f96a20234f397bd149a8e4832 -PKG_MIRROR_HASH:=2849d2af471e327abc8d67afc91ca767c410e2b307d6554531a0b387d9ad909a - -PKG_MAINTAINER:=Andy Walsh -PKG_LICENSE:=GPL-2.0-or-later -PKG_LICENSE_FILES:=COPYING - -PKG_FIXUP:=autoreconf -PKG_INSTALL:=1 -PKG_BUILD_PARALLEL:=1 -PKG_REMOVE_FILES:=autogen.sh - -include $(INCLUDE_DIR)/package.mk -include $(INCLUDE_DIR)/nls.mk - -define Package/cifsd-tools - SECTION:=net - CATEGORY:=Network - SUBMENU:=Filesystem - TITLE:=Kernel CIFS/SMB server support and userspace tools - URL:=https://github.com/cifsd-team/cifsd-tools - DEPENDS:=+kmod-fs-cifsd +glib2 +libnl-core +libnl-genl -endef - -define Package/cifsd-tools/description - Userspace tools (cifsd, cifsuseradd, cifsshareadd) for the CIFS/SMB kernel fileserver. - The config file location is /etc/cifs/smb.conf -endef - -define Package/cifsd-tools/install - $(INSTALL_DIR) $(1)/usr/lib - $(CP) $(PKG_INSTALL_DIR)/usr/lib/libcifsdtools.so* $(1)/usr/lib/ - $(INSTALL_DIR) $(1)/usr/sbin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/{cifsuseradd,cifsshareadd,cifsd} $(1)/usr/sbin/ - $(INSTALL_DIR) $(1)/etc/config $(1)/etc/cifs $(1)/etc/init.d - $(INSTALL_CONF) ./files/cifsd.config $(1)/etc/config/cifsd - $(INSTALL_DATA) ./files/smb.conf.template $(1)/etc/cifs/ - $(INSTALL_BIN) ./files/cifsd.init $(1)/etc/init.d/cifsd - # copy examples until we have a wiki page - $(INSTALL_DATA) ./files/cifsd.config.example $(1)/etc/cifs/ - $(INSTALL_DATA) $(PKG_BUILD_DIR)/Documentation/configuration.txt $(1)/etc/cifs/ -endef - -define Package/cifsd-tools/conffiles -/etc/config/cifsd -/etc/cifs/smb.conf.template -/etc/cifs/smb.conf -/etc/cifs/cifsdpwd.db -endef - -$(eval $(call BuildPackage,cifsd-tools)) diff --git a/net/cifsd-tools/files/cifsd.config b/net/cifsd-tools/files/cifsd.config deleted file mode 100644 index f0c7921ec..000000000 --- a/net/cifsd-tools/files/cifsd.config +++ /dev/null @@ -1,2 +0,0 @@ -config globals - option 'description' 'Cifsd on OpenWrt' diff --git a/net/cifsd-tools/files/smb.conf.help b/net/cifsd-tools/files/smb.conf.help deleted file mode 100644 index 23d0c8d37..000000000 --- a/net/cifsd-tools/files/smb.conf.help +++ /dev/null @@ -1,173 +0,0 @@ -;****************************************************************************** -; File to define cifsd configuration parameters which are comparable with -; samba's ones -; -; Supported [global] level parameters list: -; - server string -; This controls what string will show up in browse lists next -; to the machine name -; - workgroup -; This controls what workgroup your server will appear to be -; in when queried by clients -; - netbios name -; This sets the NetBIOS name by which a SMB server is known. -; By default it is the same as the first component of the host's -; DNS name. If a machine is a browse server or logon server this -; name (or the first component of the hosts DNS name) will be -; the name that these services are advertised under. -; - server min protocol -; This setting controls the minimum protocol version that the -; server will allow the client to use. -; - server max protocol -; The value of the parameter (a string) is the highest protocol -; level that will be supported by the server. -; - server signing -; This controls whether the client is allowed or required to use -; SMB1 and SMB2 signing. Possible values are default, auto, -; mandatory and disabled. -; - guest account -; This is a username which will be used for access to services -; which are specified as guest ok. -; - max active sessions -; This option allows the number of simultaneous connections to -; a service to be limited. -; - ipc timeout -; This option specifies the number of seconds server will wait -; for the userspace to reply to heartbeat frames. If user space -; is down for more than `ipc timeout` seconds the server will -; reset itself - close all sessions and all TCP connections. -; - restrict anonymous -; The setting of this parameter determines whether user and -; group list information is returned for an anonymous connection. -; - map to guest -; This parameter can take four different values, which tell cifsd -; what to do with user login requests.(bad user -; - bind interfaces only -; This global parameter allows the cifsd admin to limit what -; interfaces on a machine will serve SMB requests. -; - interfaces -; This option allows you to override the default network -; interfaces list that cifsd will use for browsing. The option -; takes only list of interface name. -; - deadtime -; The value of the parameter (a decimal integer) represents -; the number of minutes of inactivity before a connection is -; considered dead, and it is disconnected. The deadtime only -; takes effect if the number of open files is zero. -; - root directory -; Sets up a root (base) directory for all shares. In some -; sense it's equal to chroot(). When this option set all shares' -; paths become relative to root directory, IOW the file name -; lookup resolves '/root directory/share path/file path' path. -; -; Supported [share] level parameters list: -; - comment -; comment string to associate with the new share -; - path -; This parameter specifies a directory to which the user of the -; service is to be given access. -; - guest ok -; If this parameter is yes for a service, then no password is -; required to connect to the service. -; - read only -; If this parameter is yes, then users of a service may not -; create or modify files in the service's directory. -; - browseable -; This controls whether this share is seen in the list of -; available shares in a net view and in the browse list. -; - write ok -; - writeable -; Inverted synonym for read only. -; - store dos attributes -; If this parameter is set cifsd attempts to first read DOS -; attributes (SYSTEM, HIDDEN, ARCHIVE or READ-ONLY) from a -; filesystem extended attribute, before mapping DOS attributes -; to UNIX permission bits (such as occurs with map hidden and -; map readonly). -; - oplocks -; This boolean option tells cifsd whether to issue oplocks -; (opportunistic locks) to file open requests on this share. -; - create mask -; When a file is created, the necessary permissions are calculated -; according to the mapping from DOS modes to UNIX permissions, and -; the resulting UNIX mode is then bit-wise 'AND'ed with this -; parameter. -; - directory mask -; This parameter is the octal modes which are used when converting -; DOS modes to UNIX modes when creating UNIX directories. -; - force group -; This specifies a UNIX group name that will be assigned as -; the default primary group for all users connecting to this -; service. -; - force user -; This specifies a UNIX user name that will be assigned as -; the default user for all users connecting to this service. -; - hide dot files -; This is a boolean parameter that controls whether files starting -; with a dot appear as hidden files. -; - hosts allow -; This parameter is a comma, space, or tab delimited set of hosts -; which are permitted to access a service -; - hosts deny -; The opposite of allow hosts - hosts listed here are NOT -; permitted access to services unless the specific services have -; their own lists to override this one. Where the lists conflict, -; the allow list takes precedence. -; - valid users -; This is a list of users that should be allowed to login to this -; service -; - invalid users -; This is a list of users that should not be allowed to login to -; this service. -; - read list -; This is a list of users that are given read-only access to -; a service. -; - write list -; This is a list of users that are given read-write access to -; a service. -; - max connections -; This option allows the number of simultaneous connections to -; a service to be limited. -; - veto files -; This is a list of files and directories that are neither visible -; nor accessible. -; -; Veto any files containing the word Security, -; any ending in .tmp, and any directory containing the -; word root. -; veto files = /*Security*/*.tmp/*root*/ -; -; Veto the Apple specific files that a NetAtalk server -; creates. -; veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ -; - inherit owner -; The ownership for new files and directories should be controlled -; by the ownership of the parent directory. -; Valid options are yes or no. -; - inherit smack -; This parameter can be used to ensure that if smack label exist -; on parent directories. -; Valid options are yes or no. -; - force create mode -; This parameter specifies a set of UNIX mode bit permissions -; that will always be set on a file created by cifsd. -; - force directory mode -; This parameter specifies a set of UNIX mode bit permissions -; that will always be set on a directory created by cifsd. -; -; Rules to update this file: -; - Every [share] definition should start on new line -; - Every parameter should be indented with single tab -; - There should be single spaces around equal (eg: " = ") -; - Multiple parameters should be separated with comma -; eg: "invalid users = usr1,usr2,usr3" -; -; Make sure to configure the server after making changes to this file. -;****************************************************************************** - -[global] - netbios name = CIFSD - -[homes] - comment = content server share - path = /tmp diff --git a/net/smbd-tools/Makefile b/net/smbd-tools/Makefile new file mode 100644 index 000000000..b8e4a0ad9 --- /dev/null +++ b/net/smbd-tools/Makefile @@ -0,0 +1,113 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=smbd-tools +PKG_VERSION:=3.0.1 +PKG_RELEASE:=1 + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:=https://github.com/cifsd-team/$(PKG_NAME)/archive/$(PKG_VERSION)/ +PKG_HASH:=29f85de8b39608d28ec406c8b557264e004f5dce9b307a37f8324508cdea6217 + +PKG_MAINTAINER:=Andy Walsh +PKG_LICENSE:=GPL-2.0-or-later +PKG_LICENSE_FILES:=COPYING + +PKG_FIXUP:=autoreconf +PKG_INSTALL:=1 +PKG_BUILD_PARALLEL:=1 +PKG_REMOVE_FILES:=autogen.sh + +PKG_BUILD_DEPENDS:=glib2 + +include $(INCLUDE_DIR)/package.mk +include $(INCLUDE_DIR)/nls.mk + +define Package/smbd-tools/Default + SECTION:=net + CATEGORY:=Network + SUBMENU:=Filesystem + TITLE:=Kernel SMB + URL:=https://github.com/cifsd-team/smbd-tools + DEPENDS:= +glib2 $(ICONV_DEPENDS) $(INTL_DEPENDS) +endef + +define Package/smbd-tools/Default/description + Userspace tools for the SMB kernel fileserver (smbd.ko). + The config file location is /etc/smbd/smb.conf +endef + +define Package/smbd-server + $(call Package/smbd-tools/Default) + TITLE+= server + DEPENDS+= +kmod-fs-smbd +libnl-core +libnl-genl +endef + +define Package/smbd-server/description + installs: usmbd + + This provides the basic fileserver service and is the minimum needed to serve 'guest only' file shares or use a existing smbdpwd.db. +endef + +define Package/smbd-server/config + select PACKAGE_wsdd2 +endef + +define Package/smbd-utils + $(call Package/smbd-tools/Default) + TITLE+= user management-util +endef + +define Package/smbd-utils/description + installs: smbuseradd (smbshareadd) + + Tool needed to create the smbdpwd.db, to manage per user share passwords. + NOTE: Not needed for 'guest only' shares. +endef + +define Package/smbd-utils/config + config SMBD_UTILS_SHAREADD + bool "Add smbshareadd util" + depends on PACKAGE_smbd-utils + help + Add the smbshareadd tool, to directly manipulate the /etc/smbd/smb.conf. + default n +endef + +CONFIGURE_ARGS += \ + --disable-shared \ + --enable-static + +# CONFIGURE_VARS += GLIB_LIBS="$(STAGING_DIR)/usr/lib/libglib-2.0.a" + +TARGET_CFLAGS += -ffunction-sections -fdata-sections -flto +TARGET_LDFLAGS += -Wl,--gc-sections,--as-needed -liconv $(if $(INTL_FULL),-lintl) + +define Package/smbd-server/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/usmbd $(1)/usr/sbin/ + $(INSTALL_DIR) $(1)/etc/config $(1)/etc/smbd $(1)/etc/init.d + $(INSTALL_CONF) ./files/smbd.config $(1)/etc/config/smbd + $(INSTALL_DATA) ./files/smb.conf.template $(1)/etc/smbd/ + $(INSTALL_BIN) ./files/smbd.init $(1)/etc/init.d/smbd + # copy examples until we have a wiki page + $(INSTALL_DATA) ./files/smbd.config.example $(1)/etc/smbd/ + $(INSTALL_DATA) $(PKG_BUILD_DIR)/Documentation/configuration.txt $(1)/etc/smbd/ +endef + +define Package/smbd-utils/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/smbuseradd $(1)/usr/sbin/ +ifeq ($(CONFIG_SMBD_UTILS_SHAREADD),y) + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/smbshareadd $(1)/usr/sbin/ +endif +endef + +define Package/smbd-server/conffiles +/etc/config/smbd +/etc/smbd/smb.conf.template +/etc/smbd/smb.conf +/etc/smbd/smbdpwd.db +endef + +$(eval $(call BuildPackage,smbd-server)) +$(eval $(call BuildPackage,smbd-utils)) diff --git a/net/cifsd-tools/files/smb.conf.template b/net/smbd-tools/files/smb.conf.template similarity index 63% rename from net/cifsd-tools/files/smb.conf.template rename to net/smbd-tools/files/smb.conf.template index 2da98b16e..4cb7be3c0 100644 --- a/net/cifsd-tools/files/smb.conf.template +++ b/net/smbd-tools/files/smb.conf.template @@ -7,3 +7,8 @@ ipc timeout = 20 deadtime = 15 map to guest = Bad User + smb2 max read = 64K + smb2 max write = 64K + smb2 max trans = 64K + cache read buffers = no + cache trans buffers = no diff --git a/net/smbd-tools/files/smbd.config b/net/smbd-tools/files/smbd.config new file mode 100644 index 000000000..0393ea7ba --- /dev/null +++ b/net/smbd-tools/files/smbd.config @@ -0,0 +1,3 @@ +config globals + option 'workgroup' 'WORKGROUP' + option 'description' 'SMBD on OpenWrt' diff --git a/net/cifsd-tools/files/cifsd.config.example b/net/smbd-tools/files/smbd.config.example similarity index 82% rename from net/cifsd-tools/files/cifsd.config.example rename to net/smbd-tools/files/smbd.config.example index dfe08adc6..2c515d9c7 100644 --- a/net/cifsd-tools/files/cifsd.config.example +++ b/net/smbd-tools/files/smbd.config.example @@ -1,5 +1,5 @@ config globals - option 'description' 'Cifsd on OpenWrt' + option 'description' 'SMBD on OpenWrt' config share option name 'testshare' diff --git a/net/cifsd-tools/files/cifsd.init b/net/smbd-tools/files/smbd.init similarity index 59% rename from net/cifsd-tools/files/cifsd.init rename to net/smbd-tools/files/smbd.init index 048491842..00f1cf71a 100644 --- a/net/cifsd-tools/files/cifsd.init +++ b/net/smbd-tools/files/smbd.init @@ -3,11 +3,11 @@ START=98 USE_PROCD=1 -CIFSD_IFACE="" +SMBD_IFACE="" smb_header() { - config_get CIFSD_IFACE $1 interface "lan" + config_get SMBD_IFACE $1 interface "lan" # resolve interfaces local interfaces @@ -15,7 +15,7 @@ smb_header() . /lib/functions/network.sh local net - for net in $CIFSD_IFACE; do + for net in $SMBD_IFACE; do local device network_is_up $net || continue network_get_device device "$net" @@ -28,18 +28,18 @@ smb_header() hostname="$(cat /proc/sys/kernel/hostname)" config_get workgroup $1 workgroup "WORKGROUP" - config_get description $1 description "Cifsd on OpenWrt" + config_get description $1 description "SMBD on OpenWrt" sed -e "s#|NAME|#$hostname#g" \ -e "s#|WORKGROUP|#$workgroup#g" \ -e "s#|DESCRIPTION|#$description#g" \ -e "s#|INTERFACES|#$interfaces#g" \ - /etc/cifs/smb.conf.template > /var/etc/cifs/smb.conf + /etc/smbd/smb.conf.template > /var/etc/smbd/smb.conf - [ -e /etc/cifs/smb.conf ] || ln -nsf /var/etc/cifs/smb.conf /etc/cifs/smb.conf + [ -e /etc/smbd/smb.conf ] || ln -nsf /var/etc/smbd/smb.conf /etc/smbd/smb.conf - if [ ! -L /etc/cifs/smb.conf ]; then - logger -t 'cifsd' "Local custom /etc/cifs/smb.conf file detected, all UCI/Luci config settings are ignored!" + if [ ! -L /etc/smbd/smb.conf ]; then + logger -p daemon.warn -t 'smbd' "Local custom /etc/smbd/smb.conf file detected, all UCI/Luci config settings are ignored!" fi } @@ -113,15 +113,15 @@ smb_add_share() [ -n "$hide_dot_files" ] && printf "\thide dot files = %s\n" "$hide_dot_files" [ -n "$veto_files" ] && printf "\tveto files = %s\n" "$veto_files" - } >> /var/etc/cifs/smb.conf + } >> /var/etc/smbd/smb.conf } init_config() { - mkdir -p /var/etc/cifs + mkdir -p /var/etc/smbd - config_load cifsd - # allow copy&paste from samba UCI configs (we dont have a cifsd wiki yet) + config_load smbd + # allow copy&paste from samba UCI configs (we dont have a smbd wiki yet) config_foreach smb_header globals config_foreach smb_header samba config_foreach smb_add_share share @@ -130,76 +130,68 @@ init_config() service_triggers() { - PROCD_RELOAD_DELAY=2000 + # PROCD_RELOAD_DELAY=1000 - procd_add_reload_trigger "dhcp" "system" "cifsd" + procd_add_reload_trigger "dhcp" "system" "smbd" local i - for i in $CIFSD_IFACE; do + for i in $SMBD_IFACE; do procd_add_reload_interface_trigger $i done } +kill_server() +{ + if [ -e /sys/module/smbd ]; then + if [ -e /sys/class/smbd-control/kill_server ]; then + logger -p daemon.info -t 'smbd' "triggering kill_server" + echo hard > /sys/class/smbd-control/kill_server + fi + fi +} + start_service() { init_config - if [ ! -e /etc/cifs/smb.conf ]; then - logger -t 'cifsd' "missing config /etc/cifs/smb.conf, needs to-be created manually!" + if [ ! -e /etc/smbd/smb.conf ]; then + logger -p daemon.error -t 'smbd' "missing config /etc/smbd/smb.conf!" exit 1 fi - - if [ -e /sys/module/cifsd ]; then - if [ -e /sys/class/cifsd-control/kill_server ]; then - # upstream "BUG": ensure changes in smb.conf are reflected on a running kernel-server - echo hard > /sys/class/cifsd-control/kill_server - # we need a extra timeout for the reset - sleep 5 - fi - fi - modprobe cifsd 2> /dev/null - if [ ! -e /sys/module/cifsd ]; then - logger -t 'cifsd' "modprobe of cifsd module failed, can\'t start cifsd!" + # NOTE: We don't do a soft-reload via signal, since [global] smb.conf setting changes will be ignored, so always reset hard. + kill_server + + [ ! -e /sys/module/smbd ] && modprobe smbd 2> /dev/null + if [ ! -e /sys/module/smbd ]; then + logger -p daemon.error -t 'smbd' "modprobe of smbd module failed, can\'t start smbd!" exit 1 fi - logger -t 'cifsd' "Starting CIFS/SMB userspace service." + logger -p daemon.notice -t 'smbd' "Starting SMBD userspace service." procd_open_instance - procd_set_param command /usr/sbin/cifsd --n - procd_set_param file /var/etc/cifs/smb.conf + procd_add_mdns "smb" "tcp" "445" + procd_set_param command /usr/sbin/usmbd --n + procd_set_param file /etc/smbd/smb.conf + procd_set_param limits nofile=16384 procd_close_instance } stop_service() { - logger -t 'cifsd' "Stopping CIFSD userspace service." - killall cifsd > /dev/null 2>&1 + logger -p daemon.notice -t 'smbd' "Stopping SMBD userspace service." + killall usmbd > /dev/null 2>&1 - [ -e /sys/module/cifsd ] && rmmod cifsd > /dev/null 2>&1 - # With open smb connections rmmod is not possible, without waiting for the long 'ipc timeout', so we use 'kill_server'! - if [ -e /sys/module/cifsd ]; then - logger -t 'cifsd' "triggering kill_server" - if [ -e /sys/class/cifsd-control/kill_server ]; then - echo hard > /sys/class/cifsd-control/kill_server - # we need a extra timeout for the reset - sleep 5 - fi - fi + [ -e /sys/module/smbd ] && rmmod smbd > /dev/null 2>&1 + # kill server if we cant rmmod + [ -e /sys/module/smbd ] && kill_server # next try - [ -e /sys/module/cifsd ] && rmmod cifsd > /dev/null 2>&1 - # check again - if [ -e /sys/module/cifsd ]; then - # wait more... - sleep 3 - fi - # last try - [ -e /sys/module/cifsd ] && rmmod cifsd > /dev/null 2>&1 + [ -e /sys/module/smbd ] && rmmod smbd > /dev/null 2>&1 - if [ -e /sys/module/cifsd ]; then - logger -t 'cifsd' "module still loaded after 8s timeout" + if [ -e /sys/module/smbd ]; then + logger -p daemon.error -t 'smbd' "module still loaded after kill_server?" fi - [ -f /tmp/cifsd.lock ] && rm /tmp/cifsd.lock + [ -f /tmp/smbd.lock ] && rm /tmp/smbd.lock } # reload_service() {