smbd: rename from cifsd, update to 3.0.1
authorAndy Walsh <redacted>
Tue, 31 Dec 2019 13:59:11 +0000 (14:59 +0100)
committerAndy Walsh <redacted>
Fri, 3 Jan 2020 18:09:30 +0000 (19:09 +0100)
* 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 <redacted>
kernel/cifsd/Makefile [deleted file]
kernel/smbd/Makefile [new file with mode: 0644]
kernel/smbd/patches/01-keep_kmod_metadata.patch [new file with mode: 0644]
net/cifsd-tools/Makefile [deleted file]
net/cifsd-tools/files/cifsd.config [deleted file]
net/cifsd-tools/files/smb.conf.help [deleted file]
net/smbd-tools/Makefile [new file with mode: 0644]
net/smbd-tools/files/smb.conf.template [moved from net/cifsd-tools/files/smb.conf.template with 63% similarity]
net/smbd-tools/files/smbd.config [new file with mode: 0644]
net/smbd-tools/files/smbd.config.example [moved from net/cifsd-tools/files/cifsd.config.example with 82% similarity]
net/smbd-tools/files/smbd.init [moved from net/cifsd-tools/files/cifsd.init with 59% similarity]

diff --git a/kernel/cifsd/Makefile b/kernel/cifsd/Makefile
deleted file mode 100644 (file)
index 890a5eb..0000000
+++ /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 <andy.walsh44+github@gmail.com>
-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 (file)
index 0000000..cb6da11
--- /dev/null
@@ -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 <andy.walsh44+github@gmail.com>
+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 (file)
index 0000000..9240852
--- /dev/null
@@ -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 <linux/ctype.h>
+ #include <linux/version.h>
diff --git a/net/cifsd-tools/Makefile b/net/cifsd-tools/Makefile
deleted file mode 100644 (file)
index 656cc10..0000000
+++ /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 <andy.walsh44+github@gmail.com>
-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 (file)
index f0c7921..0000000
+++ /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 (file)
index 23d0c8d..0000000
+++ /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 (file)
index 0000000..b8e4a0a
--- /dev/null
@@ -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 <andy.walsh44+github@gmail.com>
+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))
similarity index 63%
rename from net/cifsd-tools/files/smb.conf.template
rename to net/smbd-tools/files/smb.conf.template
index 2da98b16e2b6b1c0a8e3bc787aa4365621f9e15e..4cb7be3c07fc0dfa7bdcf93ccf0f7b48e92d6988 100644 (file)
@@ -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 (file)
index 0000000..0393ea7
--- /dev/null
@@ -0,0 +1,3 @@
+config globals
+       option 'workgroup'              'WORKGROUP'
+       option 'description'    'SMBD on OpenWrt'
similarity index 82%
rename from net/cifsd-tools/files/cifsd.config.example
rename to net/smbd-tools/files/smbd.config.example
index dfe08adc6f3ad29e18d059336a9c0d0e3bc10319..2c515d9c7c2bf47e45ee12c9475c183e8310b1c6 100644 (file)
@@ -1,5 +1,5 @@
 config globals
-       option 'description'    'Cifsd on OpenWrt'
+       option 'description'    'SMBD on OpenWrt'
 
 config share
        option name 'testshare'
similarity index 59%
rename from net/cifsd-tools/files/cifsd.init
rename to net/smbd-tools/files/smbd.init
index 04849184212af67e31e1864da71a17393dbe7504..00f1cf71a3e27ca5ce16eb3fe8775bb115f3515c 100644 (file)
@@ -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() {
git clone https://git.99rst.org/PROJECT