From 664479fa8965c469e552eeec94e7678c28bc157b Mon Sep 17 00:00:00 2001 From: Andy Walsh Date: Sun, 26 Jan 2020 16:32:53 +0100 Subject: [PATCH] smbd: update to 3.1.1, rename to "ksmbd", "ksmbd-tools" * rename smbd->ksmbd (upstream name change) * ksmbd-tools: build with static glib2 (usmbd = ~90kb, smbuseradd = ~40kb) * new etc folder location = /etc/ksmbd/smb.conf * new database name = /etc/ksmbd/ksmbdpwd.db * fixes "map to guest = Bad User" while userdb is also used * fixes missing ipv6 support * update/rename to "luci-app-ksmbd" * remove UCI samba compatibility code for section names (ksmbd uses [share] + [globals] not [sambashare] + [global]) * ksmbd: release 3.1.1 version * ksmbd: does not work if ipv6 module is not loaded or compiled in * ksmbd: capsule ifdef CONFIG_SMB_INSECURE_SERVER with smb1 codes * ksmbd: release 3.1.0 version * ksmbd: fix over 80 character warnings * ksmbd: rename smbd-tools to ksmbd-tools in travis.yml * ksmbd: fix password db file location in travis.yml * ksmbd: rename smbd prefix function to ksmbd * ksmbd: rename smbd prefix source files to ksmbd * Revert "smbd: set connection status with SMBD_SESS_EXITING instead of direct destory" * ksmbd: rename smbd to ksmbd in .travis.yml * smbd: rename module name to ksmbd.ko * smbd: set connection status with SMBD_SESS_EXITING instead of direct destory * smbd: previous session with same user and same password should be deleted * smbd: only use global session table in smb2 session * smbd: add support for ipv6 * smbd: fix empty macro issue from smbd_debug * cifsd: fix printing of file names in find_next Signed-off-by: Andy Walsh --- kernel/{smbd => ksmbd}/Makefile | 18 +-- .../patches/01-keep_kmod_metadata.patch | 4 +- net/ksmbd-tools/Makefile | 113 ++++++++++++++++++ .../files/ksmbd.config} | 2 +- .../files/ksmbd.config.example} | 2 +- .../files/ksmbd.init} | 57 +++++---- .../files/smb.conf.template | 0 net/smbd-tools/Makefile | 113 ------------------ 8 files changed, 153 insertions(+), 156 deletions(-) rename kernel/{smbd => ksmbd}/Makefile (74%) rename kernel/{smbd => ksmbd}/patches/01-keep_kmod_metadata.patch (76%) create mode 100644 net/ksmbd-tools/Makefile rename net/{smbd-tools/files/smbd.config => ksmbd-tools/files/ksmbd.config} (53%) rename net/{smbd-tools/files/smbd.config.example => ksmbd-tools/files/ksmbd.config.example} (82%) rename net/{smbd-tools/files/smbd.init => ksmbd-tools/files/ksmbd.init} (70%) rename net/{smbd-tools => ksmbd-tools}/files/smb.conf.template (100%) delete mode 100644 net/smbd-tools/Makefile diff --git a/kernel/smbd/Makefile b/kernel/ksmbd/Makefile similarity index 74% rename from kernel/smbd/Makefile rename to kernel/ksmbd/Makefile index f5c541fb5..b6d93678f 100644 --- a/kernel/smbd/Makefile +++ b/kernel/ksmbd/Makefile @@ -1,12 +1,12 @@ include $(TOPDIR)/rules.mk -PKG_NAME:=smbd -PKG_VERSION:=3.0.2 +PKG_NAME:=ksmbd +PKG_VERSION:=3.1.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:=13e256fed6992fddec5027d0866bc1eb4ff8da1e5f6a41b3296007f5cceb1a0a +PKG_HASH:=5cf00902b77206a56f20b8ec499aea061292a15003bbdd8194fcb2299fb2343e PKG_MAINTAINER:=Andy Walsh PKG_LICENSE:=GPL-2.0-or-later @@ -15,11 +15,11 @@ PKG_LICENSE_FILES:=COPYING include $(INCLUDE_DIR)/kernel.mk include $(INCLUDE_DIR)/package.mk -define KernelPackage/fs-smbd +define KernelPackage/fs-ksmbd SUBMENU:=Filesystems TITLE:=SMB kernel server support - URL:=https://github.com/cifsd-team/smbd - FILES:=$(PKG_BUILD_DIR)/smbd.ko + URL:=https://github.com/cifsd-team/ksmbd + FILES:=$(PKG_BUILD_DIR)/ksmbd.ko DEPENDS:= \ +kmod-nls-base \ +kmod-nls-utf8 \ @@ -37,8 +37,8 @@ define KernelPackage/fs-smbd +kmod-crypto-gcm endef -define KernelPackage/fs-smbd/description - Smbd is an In-kernel SMB2/3 fileserver. +define KernelPackage/fs-ksmbd/description + Ksmbd 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 @@ -49,4 +49,4 @@ define Build/Compile modules endef -$(eval $(call KernelPackage,fs-smbd)) +$(eval $(call KernelPackage,fs-ksmbd)) diff --git a/kernel/smbd/patches/01-keep_kmod_metadata.patch b/kernel/ksmbd/patches/01-keep_kmod_metadata.patch similarity index 76% rename from kernel/smbd/patches/01-keep_kmod_metadata.patch rename to kernel/ksmbd/patches/01-keep_kmod_metadata.patch index 9240852c8..9fc547f2a 100644 --- a/kernel/smbd/patches/01-keep_kmod_metadata.patch +++ b/kernel/ksmbd/patches/01-keep_kmod_metadata.patch @@ -1,8 +1,8 @@ --- a/glob.h 2019-12-08 +++ b/glob.h 2019-12-08 @@ -7,6 +7,8 @@ - #ifndef __SMBD_GLOB_H - #define __SMBD_GLOB_H + #ifndef __KSMBD_GLOB_H + #define __KSMBD_GLOB_H +#undef CONFIG_MODULE_STRIPPED + diff --git a/net/ksmbd-tools/Makefile b/net/ksmbd-tools/Makefile new file mode 100644 index 000000000..5543a7fe1 --- /dev/null +++ b/net/ksmbd-tools/Makefile @@ -0,0 +1,113 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=ksmbd-tools +PKG_VERSION:=3.1.0 +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:=7a01b327028cb52824a394dc2c4e706d15145b823fd0ff399c359f7a4c991c4a + +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/ksmbd-tools/Default + SECTION:=net + CATEGORY:=Network + SUBMENU:=Filesystem + TITLE:=Kernel SMB + URL:=https://github.com/cifsd-team/ksmbd-tools + DEPENDS:= $(ICONV_DEPENDS) $(INTL_DEPENDS) +endef + +define Package/ksmbd-tools/Default/description + Userspace tools to manage the SMB kernel fileserver (ksmbd.ko). + The config file location is /etc/ksmbd/smb.conf +endef + +define Package/ksmbd-server + $(call Package/ksmbd-tools/Default) + TITLE+= server + DEPENDS+= +kmod-fs-ksmbd +libnl-core +libnl-genl +endef + +define Package/ksmbd-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 user database file ksmbdpwd.db. +endef + +define Package/ksmbd-server/config + select PACKAGE_wsdd2 +endef + +define Package/ksmbd-utils + $(call Package/ksmbd-tools/Default) + TITLE+= user management-util +endef + +define Package/ksmbd-utils/description + installs: smbuseradd (smbshareadd) + + Tool needed to create the ksmbdpwd.db, to manage per user share passwords. + NOTE: Not needed for 'guest only' shares. +endef + +define Package/ksmbd-utils/config + config KSMBD_UTILS_SHAREADD + bool "Add smbshareadd util" + depends on PACKAGE_ksmbd-utils + help + Add the smbshareadd tool, to directly manipulate the /etc/ksmbd/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/ksmbd-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/ksmbd $(1)/etc/init.d + $(INSTALL_CONF) ./files/ksmbd.config $(1)/etc/config/ksmbd + $(INSTALL_DATA) ./files/smb.conf.template $(1)/etc/ksmbd/ + $(INSTALL_BIN) ./files/ksmbd.init $(1)/etc/init.d/ksmbd + # copy examples until we have a wiki page + $(INSTALL_DATA) ./files/ksmbd.config.example $(1)/etc/ksmbd/ + $(INSTALL_DATA) $(PKG_BUILD_DIR)/Documentation/configuration.txt $(1)/etc/ksmbd/ +endef + +define Package/ksmbd-utils/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/smbuseradd $(1)/usr/sbin/ +ifeq ($(CONFIG_KSMBD_UTILS_SHAREADD),y) + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/smbshareadd $(1)/usr/sbin/ +endif +endef + +define Package/ksmbd-server/conffiles +/etc/config/ksmbd +/etc/ksmbd/smb.conf.template +/etc/ksmbd/smb.conf +/etc/ksmbd/ksmbdpwd.db +endef + +$(eval $(call BuildPackage,ksmbd-server)) +$(eval $(call BuildPackage,ksmbd-utils)) diff --git a/net/smbd-tools/files/smbd.config b/net/ksmbd-tools/files/ksmbd.config similarity index 53% rename from net/smbd-tools/files/smbd.config rename to net/ksmbd-tools/files/ksmbd.config index 0393ea7ba..52c65185c 100644 --- a/net/smbd-tools/files/smbd.config +++ b/net/ksmbd-tools/files/ksmbd.config @@ -1,3 +1,3 @@ config globals option 'workgroup' 'WORKGROUP' - option 'description' 'SMBD on OpenWrt' + option 'description' 'Ksmbd on OpenWrt' diff --git a/net/smbd-tools/files/smbd.config.example b/net/ksmbd-tools/files/ksmbd.config.example similarity index 82% rename from net/smbd-tools/files/smbd.config.example rename to net/ksmbd-tools/files/ksmbd.config.example index 2c515d9c7..9a457e03b 100644 --- a/net/smbd-tools/files/smbd.config.example +++ b/net/ksmbd-tools/files/ksmbd.config.example @@ -1,5 +1,5 @@ config globals - option 'description' 'SMBD on OpenWrt' + option 'description' 'Ksmbd on OpenWrt' config share option name 'testshare' diff --git a/net/smbd-tools/files/smbd.init b/net/ksmbd-tools/files/ksmbd.init similarity index 70% rename from net/smbd-tools/files/smbd.init rename to net/ksmbd-tools/files/ksmbd.init index 00f1cf71a..6ae7cdb64 100644 --- a/net/smbd-tools/files/smbd.init +++ b/net/ksmbd-tools/files/ksmbd.init @@ -28,18 +28,18 @@ smb_header() hostname="$(cat /proc/sys/kernel/hostname)" config_get workgroup $1 workgroup "WORKGROUP" - config_get description $1 description "SMBD on OpenWrt" + config_get description $1 description "Ksmbd on OpenWrt" sed -e "s#|NAME|#$hostname#g" \ -e "s#|WORKGROUP|#$workgroup#g" \ -e "s#|DESCRIPTION|#$description#g" \ -e "s#|INTERFACES|#$interfaces#g" \ - /etc/smbd/smb.conf.template > /var/etc/smbd/smb.conf + /etc/ksmbd/smb.conf.template > /var/etc/ksmbd/smb.conf - [ -e /etc/smbd/smb.conf ] || ln -nsf /var/etc/smbd/smb.conf /etc/smbd/smb.conf + [ -e /etc/ksmbd/smb.conf ] || ln -nsf /var/etc/ksmbd/smb.conf /etc/ksmbd/smb.conf - 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!" + if [ ! -L /etc/ksmbd/smb.conf ]; then + logger -p daemon.warn -t 'ksmbd' "Local custom /etc/ksmbd/smb.conf file detected, all UCI/Luci config settings are ignored!" fi } @@ -113,26 +113,23 @@ 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/smbd/smb.conf + } >> /var/etc/ksmbd/smb.conf } init_config() { - mkdir -p /var/etc/smbd + mkdir -p /var/etc/ksmbd - config_load smbd - # allow copy&paste from samba UCI configs (we dont have a smbd wiki yet) + config_load ksmbd config_foreach smb_header globals - config_foreach smb_header samba config_foreach smb_add_share share - config_foreach smb_add_share sambashare } service_triggers() { # PROCD_RELOAD_DELAY=1000 - procd_add_reload_trigger "dhcp" "system" "smbd" + procd_add_reload_trigger "dhcp" "system" "ksmbd" local i for i in $SMBD_IFACE; do @@ -142,10 +139,10 @@ service_triggers() 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 + if [ -e /sys/module/ksmbd ]; then + if [ -e /sys/class/ksmbd-control/kill_server ]; then + logger -p daemon.info -t 'ksmbd' "triggering kill_server" + echo hard > /sys/class/ksmbd-control/kill_server fi fi } @@ -154,44 +151,44 @@ start_service() { init_config - if [ ! -e /etc/smbd/smb.conf ]; then - logger -p daemon.error -t 'smbd' "missing config /etc/smbd/smb.conf!" + if [ ! -e /etc/ksmbd/smb.conf ]; then + logger -p daemon.error -t 'ksmbd' "missing config /etc/ksmbd/smb.conf!" exit 1 fi # 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!" + [ ! -e /sys/module/ksmbd ] && modprobe ksmbd 2> /dev/null + if [ ! -e /sys/module/ksmbd ]; then + logger -p daemon.error -t 'ksmbd' "modprobe of ksmbd module failed, can\'t start ksmbd!" exit 1 fi - logger -p daemon.notice -t 'smbd' "Starting SMBD userspace service." + logger -p daemon.notice -t 'ksmbd' "Starting Ksmbd userspace service." procd_open_instance 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 file /etc/ksmbd/smb.conf procd_set_param limits nofile=16384 procd_close_instance } stop_service() { - logger -p daemon.notice -t 'smbd' "Stopping SMBD userspace service." + logger -p daemon.notice -t 'ksmbd' "Stopping Ksmbd userspace service." killall usmbd > /dev/null 2>&1 - [ -e /sys/module/smbd ] && rmmod smbd > /dev/null 2>&1 + [ -e /sys/module/ksmbd ] && rmmod ksmbd > /dev/null 2>&1 # kill server if we cant rmmod - [ -e /sys/module/smbd ] && kill_server + [ -e /sys/module/ksmbd ] && kill_server # next try - [ -e /sys/module/smbd ] && rmmod smbd > /dev/null 2>&1 + [ -e /sys/module/ksmbd ] && rmmod ksmbd > /dev/null 2>&1 - if [ -e /sys/module/smbd ]; then - logger -p daemon.error -t 'smbd' "module still loaded after kill_server?" + if [ -e /sys/module/ksmbd ]; then + logger -p daemon.error -t 'ksmbd' "module still loaded after kill_server?" fi - [ -f /tmp/smbd.lock ] && rm /tmp/smbd.lock + [ -f /tmp/usmbd.lock ] && rm /tmp/usmbd.lock } # reload_service() { diff --git a/net/smbd-tools/files/smb.conf.template b/net/ksmbd-tools/files/smb.conf.template similarity index 100% rename from net/smbd-tools/files/smb.conf.template rename to net/ksmbd-tools/files/smb.conf.template diff --git a/net/smbd-tools/Makefile b/net/smbd-tools/Makefile deleted file mode 100644 index b8e4a0ad9..000000000 --- a/net/smbd-tools/Makefile +++ /dev/null @@ -1,113 +0,0 @@ -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))