1 #!/bin/sh /etc/rc.common
12 set -- "$(echo "$1" | tr -d '<>[]{};%?=#\n')"
17 config_get_sane SMBD_IFACE
"$1" interface
"lan"
21 .
/lib
/functions
/network.sh
23 for net
in $SMBD_IFACE; do
24 network_is_up
"$net" ||
continue
25 network_get_device device
"$net"
26 printf "%s " "${device:-$net}"
30 # we dont use netbios anymore as default and wsd/avahi is dns based
31 hostname
="$(sed 's/\..*//' /proc/sys/kernel/hostname | tr -d '{};%?=#\n')"
33 config_get_sane workgroup
"$1" workgroup
"WORKGROUP"
34 config_get_sane description
"$1" description
"Ksmbd on OpenWrt"
35 config_get_bool ALLOW_LEGACY_PROTOCOLS
"$1" allow_legacy_protocols
0
37 sed -e "s#|NAME|#$hostname#g" \
38 -e "s#|WORKGROUP|#$workgroup#g" \
39 -e "s#|DESCRIPTION|#$description#g" \
40 -e "s#|INTERFACES|#$interfaces#g" \
41 /etc
/ksmbd
/ksmbd.conf.template
> /var
/etc
/ksmbd
/ksmbd.conf
44 printf "\n######### Dynamic written config options #########\n"
46 if [ "$ALLOW_LEGACY_PROTOCOLS" -eq 1 ]; then
47 logger
-p daemon.info
-t 'ksmbd' "Legacy Protocols allowed, don't use this option for secure environments!"
48 printf "\tserver min protocol = NT1\n"
49 printf "\tserver signing = disabled\n"
51 } >> /var
/etc
/ksmbd
/ksmbd.conf
53 [ -e /etc
/ksmbd
/ksmbd.conf
] ||
ln -nsf /var
/etc
/ksmbd
/ksmbd.conf
/etc
/ksmbd
/ksmbd.conf
55 if [ ! -L /etc
/ksmbd
/ksmbd.conf
]; then
56 logger
-p daemon.warn
-t 'ksmbd' "Local custom /etc/ksmbd/ksmbd.conf file detected, all UCI/Luci config settings are ignored!"
62 config_get_sane name
"$1" name
63 config_get_sane path
"$1" path
64 config_get_sane comment
"$1" comment
65 config_get_sane users
"$1" users
66 config_get_sane create_mask
"$1" create_mask
67 config_get_sane dir_mask
"$1" dir_mask
68 config_get_sane browseable
"$1" browseable
69 config_get_sane read_only
"$1" read_only
70 config_get_sane writeable
"$1" writeable
71 config_get_sane guest_ok
"$1" guest_ok
72 config_get_bool force_root
"$1" force_root
0
73 config_get_sane write_list
"$1" write_list
74 config_get_sane read_list
"$1" read_list
75 config_get_sane hide_dot_files
"$1" hide_dot_files
76 config_get_sane veto_files
"$1" veto_files
77 config_get_sane inherit_owner
"$1" inherit_owner
78 config_get_sane force_create_mode
"$1" force_create_mode
79 config_get_sane force_directory_mode
"$1" force_directory_mode
81 [ -z "$name" ] ||
[ -z "$path" ] && return
84 printf "\n[%s]\n\tpath = %s\n" "$name" "$path"
85 [ -n "$comment" ] && printf "\tcomment = %s\n" "$comment"
87 if [ "$force_root" -eq 1 ]; then
88 printf "\tforce user = %s\n" "root"
89 printf "\tforce group = %s\n" "root"
91 [ -n "$users" ] && printf "\tvalid users = %s\n" "$users"
94 [ -n "$create_mask" ] && printf "\tcreate mask = %s\n" "$create_mask"
95 [ -n "$dir_mask" ] && printf "\tdirectory mask = %s\n" "$dir_mask"
96 [ -n "$force_create_mode" ] && printf "\tforce create mode = %s\n" "$force_create_mode"
97 [ -n "$force_directory_mode" ] && printf "\tforce directory mode = %s\n" "$force_directory_mode"
99 [ -n "$browseable" ] && printf "\tbrowseable = %s\n" "$browseable"
100 [ -n "$read_only" ] && printf "\tread only = %s\n" "$read_only"
101 [ -n "$writeable" ] && printf "\twriteable = %s\n" "$writeable"
103 [ -n "$guest_ok" ] && printf "\tguest ok = %s\n" "$guest_ok"
104 [ -n "$inherit_owner" ] && printf "\tinherit owner = %s\n" "$inherit_owner"
106 [ -n "$write_list" ] && printf "\twrite list = %s\n" "$write_list"
107 [ -n "$read_list" ] && printf "\tread list = %s\n" "$read_list"
109 [ -n "$hide_dot_files" ] && printf "\thide dot files = %s\n" "$hide_dot_files"
110 [ -n "$veto_files" ] && printf "\tveto files = %s\n" "$veto_files"
111 } >> /var
/etc
/ksmbd
/ksmbd.conf
116 mkdir
-p /var
/etc
/ksmbd
119 CONFIG_APPEND
=1 UCI_CONFIG_DIR
=/var
/run
/config config_load ksmbd
120 config_foreach smb_header globals
121 config_foreach smb_add_share share
126 # PROCD_RELOAD_DELAY=1000
128 procd_add_reload_trigger
"dhcp" "system" "ksmbd"
130 for i
in $SMBD_IFACE; do
131 procd_add_reload_interface_trigger
"$i"
137 if [ -e /sys
/module
/ksmbd
]; then
138 if [ -e /sys
/class
/ksmbd-control
/kill_server
]; then
139 logger
-p daemon.info
-t 'ksmbd' "triggering kill_server"
140 echo hard
> /sys
/class
/ksmbd-control
/kill_server
149 if [ ! -e /etc
/ksmbd
/ksmbd.conf
]; then
150 logger
-p daemon.error
-t 'ksmbd' "missing config /etc/ksmbd/ksmbd.conf!"
154 # NOTE: We don't do a soft-reload via signal, since [global] ksmbd.conf setting changes will be ignored, so always reset hard.
155 [ -e /sys
/module
/ksmbd
] && stop_service
157 [ ! -e /sys
/module
/ksmbd
] && modprobe ksmbd
2> /dev
/null
158 if [ ! -e /sys
/module
/ksmbd
]; then
159 logger
-p daemon.error
-t 'ksmbd' "modprobe of ksmbd module failed, can\'t start ksmbd!"
163 logger
-p daemon.notice
-t 'ksmbd' "Starting Ksmbd userspace service."
165 procd_add_mdns
"smb" "tcp" "445" "daemon=ksmbd"
166 procd_set_param
command /usr
/sbin
/ksmbd.mountd
--n
167 procd_set_param
file /etc
/ksmbd
/ksmbd.conf
168 procd_set_param limits nofile
=16384
174 logger
-p daemon.notice
-t 'ksmbd' "Stopping Ksmbd userspace service."
175 killall ksmbd.mountd
> /dev
/null
2>&1
177 [ -e /sys
/module
/ksmbd
] && rmmod ksmbd
> /dev
/null
2>&1
178 # kill server if we cant rmmod
179 [ -e /sys
/module
/ksmbd
] && kill_server
181 [ -e /sys
/module
/ksmbd
] && rmmod ksmbd
> /dev
/null
2>&1
183 if [ -e /sys
/module
/ksmbd
]; then
184 logger
-p daemon.error
-t 'ksmbd' "module still loaded after kill_server?"
186 [ -f /tmp
/ksmbd.lock
] && rm /tmp
/ksmbd.lock