forked from coolsnowwolf/lede
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
luci-app-cifsd: add cifsd package and luci
- Loading branch information
1 parent
c148eef
commit 76e64d0
Showing
40 changed files
with
3,477 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
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-30 | ||
PKG_SOURCE_VERSION:=830cba084ef70dd006a7f9acdf87fd07100754ff | ||
|
||
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)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
|
||
config globals | ||
option workgroup 'WORKGROUP' | ||
option description 'OpenWrt' | ||
|
||
config share | ||
option name 'testshare' | ||
option read_only 'no' | ||
option guest_ok 'yes' | ||
option create_mask '0666' | ||
option dir_mask '0777' | ||
option browseable 'yes' | ||
option path '/tmp/tmp' | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
config globals | ||
option 'description' 'Cifsd 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 force_root '1' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,190 @@ | ||
#!/bin/sh /etc/rc.common | ||
|
||
START=98 | ||
|
||
CIFSD_IFACE="" | ||
|
||
smb_header() | ||
{ | ||
config_get CIFSD_IFACE $1 interface "lan" | ||
|
||
# resolve interfaces | ||
local interfaces | ||
interfaces=$( | ||
. /lib/functions/network.sh | ||
local net | ||
for net in $CIFSD_IFACE; do | ||
local device | ||
network_is_up $net || continue | ||
network_get_device device "$net" | ||
echo -n "${device:-$net} " | ||
done | ||
) | ||
|
||
local workgroup description | ||
local hostname | ||
hostname="$(cat /proc/sys/kernel/hostname)" | ||
|
||
config_get workgroup $1 workgroup "WORKGROUP" | ||
config_get description $1 description "Cifsd 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 | ||
|
||
[ -e /etc/cifs/smb.conf ] || ln -nsf /var/etc/cifs/smb.conf /etc/cifs/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!" | ||
fi | ||
} | ||
|
||
smb_add_share() | ||
{ | ||
local name | ||
local path | ||
local comment | ||
local users | ||
local create_mask | ||
local dir_mask | ||
local browseable | ||
local read_only | ||
local writeable | ||
local guest_ok | ||
local force_root | ||
local write_list | ||
local read_list | ||
local hide_dot_files | ||
local veto_files | ||
local inherit_owner | ||
local force_create_mode | ||
local force_directory_mode | ||
|
||
config_get name $1 name | ||
config_get path $1 path | ||
config_get comment $1 comment | ||
config_get users $1 users | ||
config_get create_mask $1 create_mask | ||
config_get dir_mask $1 dir_mask | ||
config_get browseable $1 browseable | ||
config_get read_only $1 read_only | ||
config_get writeable $1 writeable | ||
config_get guest_ok $1 guest_ok | ||
config_get_bool force_root $1 force_root 0 | ||
config_get write_list $1 write_list | ||
config_get read_list $1 read_list | ||
config_get hide_dot_files $1 hide_dot_files | ||
config_get veto_files $1 veto_files | ||
config_get inherit_owner $1 inherit_owner | ||
config_get force_create_mode $1 force_create_mode | ||
config_get force_directory_mode $1 force_directory_mode | ||
|
||
[ -z "$name" ] || [ -z "$path" ] && return | ||
|
||
{ | ||
printf "\n[%s]\n\tpath = %s\n" "$name" "$path" | ||
[ -n "$comment" ] && printf "\tcomment = %s\n" "$comment" | ||
|
||
if [ "$force_root" -eq 1 ]; then | ||
printf "\tforce user = %s\n" "root" | ||
printf "\tforce group = %s\n" "root" | ||
else | ||
[ -n "$users" ] && printf "\tvalid users = %s\n" "$users" | ||
fi | ||
|
||
[ -n "$create_mask" ] && printf "\tcreate mask = %s\n" "$create_mask" | ||
[ -n "$dir_mask" ] && printf "\tdirectory mask = %s\n" "$dir_mask" | ||
[ -n "$force_create_mode" ] && printf "\tforce create mode = %s\n" "$force_create_mode" | ||
[ -n "$force_directory_mode" ] && printf "\tforce directory mode = %s\n" "$force_directory_mode" | ||
|
||
[ -n "$browseable" ] && printf "\tbrowseable = %s\n" "$browseable" | ||
[ -n "$read_only" ] && printf "\tread only = %s\n" "$read_only" | ||
[ -n "$writeable" ] && printf "\twriteable = %s\n" "$writeable" | ||
|
||
[ -n "$guest_ok" ] && printf "\tguest ok = %s\n" "$guest_ok" | ||
[ -n "$inherit_owner" ] && printf "\tinherit owner = %s\n" "$inherit_owner" | ||
|
||
[ -n "$write_list" ] && printf "\twrite list = %s\n" "$write_list" | ||
[ -n "$read_list" ] && printf "\tread list = %s\n" "$read_list" | ||
|
||
[ -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 | ||
} | ||
|
||
init_config() | ||
{ | ||
mkdir -p /var/etc/cifs | ||
|
||
config_load cifsd | ||
# allow copy&paste from samba UCI configs (we dont have a cifsd wiki yet) | ||
config_foreach smb_header globals | ||
config_foreach smb_header samba | ||
config_foreach smb_add_share share | ||
config_foreach smb_add_share sambashare | ||
} | ||
|
||
|
||
start() | ||
{ | ||
init_config | ||
|
||
if [ ! -e /etc/cifs/smb.conf ]; then | ||
logger -t 'cifsd' "missing config /etc/cifs/smb.conf, needs to-be created manually!" | ||
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!" | ||
exit 1 | ||
fi | ||
|
||
logger -t 'cifsd' "Starting CIFS/SMB userspace service." | ||
/usr/sbin/cifsd --config /var/etc/cifs/smb.conf --n --s > /dev/null 2>&1 | ||
|
||
} | ||
|
||
stop() | ||
{ | ||
logger -t 'cifsd' "Stopping CIFSD userspace service." | ||
killall cifsd > /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 | ||
# 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 | ||
|
||
if [ -e /sys/module/cifsd ]; then | ||
logger -t 'cifsd' "module still loaded after 8s timeout" | ||
fi | ||
[ -f /tmp/cifsd.lock ] && rm /tmp/cifsd.lock | ||
} | ||
|
Oops, something went wrong.