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: remove 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 * smbd-tools: add low memory options to template, to prevent oom Signed-off-by: Andy Walsh <andy.walsh44+github@gmail.com>
This commit is contained in:
parent
34938d03f6
commit
8bc58d175e
11 changed files with 243 additions and 337 deletions
|
@ -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-22
|
||||
PKG_SOURCE_VERSION:=511ee7e852c0be06b74fbb3eba69760b86658679
|
||||
PKG_MIRROR_HASH:=23040d73230ff6afcea46cf9c51a1aab7b706859471de204da4824bfea5934c8
|
||||
|
||||
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))
|
51
kernel/smbd/Makefile
Normal file
51
kernel/smbd/Makefile
Normal file
|
@ -0,0 +1,51 @@
|
|||
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-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))
|
10
kernel/smbd/patches/01-keep_kmod_metadata.patch
Normal file
10
kernel/smbd/patches/01-keep_kmod_metadata.patch
Normal file
|
@ -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>
|
|
@ -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-25
|
||||
PKG_SOURCE_VERSION:=49d0c40129fe22161999ffb7e059b90089f23078
|
||||
PKG_MIRROR_HASH:=cd3702f1387ab643233200dcf5c244989b6d6efa196c69e842791e434eb3eea7
|
||||
|
||||
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) ./files/smb.conf.help $(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))
|
|
@ -1,2 +0,0 @@
|
|||
config globals
|
||||
option 'description' 'Cifsd on OpenWrt'
|
|
@ -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
|
113
net/smbd-tools/Makefile
Normal file
113
net/smbd-tools/Makefile
Normal file
|
@ -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))
|
|
@ -4,6 +4,11 @@
|
|||
workgroup = |WORKGROUP|
|
||||
interfaces = |INTERFACES|
|
||||
bind interfaces only = yes
|
||||
ipc timeout = 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
|
3
net/smbd-tools/files/smbd.config
Normal file
3
net/smbd-tools/files/smbd.config
Normal file
|
@ -0,0 +1,3 @@
|
|||
config globals
|
||||
option 'workgroup' 'WORKGROUP'
|
||||
option 'description' 'SMBD on OpenWrt'
|
|
@ -1,11 +1,11 @@
|
|||
config globals
|
||||
option 'description' 'Cifsd on OpenWrt'
|
||||
option 'description' 'SMBD on OpenWrt'
|
||||
|
||||
config share
|
||||
option name 'testshare'
|
||||
option path '/tmp'
|
||||
option read_only 'no'
|
||||
option guest_ok 'yes'
|
||||
option create_mask '0666'
|
||||
option dir_mask '0777'
|
||||
option writeable 'yes'
|
||||
option force_root '1'
|
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -103,12 +103,8 @@ smb_add_share()
|
|||
|
||||
[ -n "$browseable" ] && printf "\tbrowseable = %s\n" "$browseable"
|
||||
[ -n "$read_only" ] && printf "\tread only = %s\n" "$read_only"
|
||||
# possible upstream bug?
|
||||
if [ "$read_only" = "no" ]; then
|
||||
printf "\twriteable = yes\n"
|
||||
else
|
||||
[ -n "$writeable" ] && printf "\twriteable = %s\n" "$writeable"
|
||||
fi
|
||||
|
||||
[ -n "$guest_ok" ] && printf "\tguest ok = %s\n" "$guest_ok"
|
||||
[ -n "$inherit_owner" ] && printf "\tinherit owner = %s\n" "$inherit_owner"
|
||||
|
||||
|
@ -117,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
|
||||
|
@ -134,55 +130,70 @@ 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
|
||||
|
||||
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_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
|
||||
sleep 1
|
||||
[ -e /sys/class/cifsd-control/kill_server ] && echo hard > /sys/class/cifsd-control/kill_server
|
||||
sleep 2
|
||||
[ -e /sys/module/cifsd ] && rmmod cifsd > /dev/null 2>&1
|
||||
# With open smb connections rmmod takes longer
|
||||
if [ -e /sys/module/cifsd ]; then
|
||||
sleep 5
|
||||
rmmod cifsd > /dev/null 2>&1
|
||||
logger -p daemon.notice -t 'smbd' "Stopping SMBD userspace service."
|
||||
killall usmbd > /dev/null 2>&1
|
||||
|
||||
[ -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/smbd ] && rmmod smbd > /dev/null 2>&1
|
||||
|
||||
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() {
|
||||
stop_service "$@"
|
||||
sleep 1
|
||||
start_service "$@"
|
||||
}
|
||||
# reload_service() {
|
||||
# restart "$@"
|
||||
# }
|
Loading…
Reference in a new issue