ksmbd-tools: use ksmbd.conf
[feed/packages.git] / net / ksmbd-tools / files / ksmbd.init
1 #!/bin/sh /etc/rc.common
2
3 START=98
4 STOP=05
5 USE_PROCD=1
6
7 SMBD_IFACE=""
8
9 config_get_sane()
10 {
11 config_get "$@"
12 set -- "$(echo "$1" | tr -d '<>[]{};%?=#\n')"
13 }
14
15 smb_header()
16 {
17 config_get_sane SMBD_IFACE "$1" interface "lan"
18
19 # resolve interfaces
20 interfaces=$(
21 . /lib/functions/network.sh
22
23 for net in $SMBD_IFACE; do
24 network_is_up "$net" || continue
25 network_get_device device "$net"
26 printf "%s " "${device:-$net}"
27 done
28 )
29
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')"
32
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
36
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
42
43 {
44 printf "\n######### Dynamic written config options #########\n"
45
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"
50 fi
51 } >> /var/etc/ksmbd/ksmbd.conf
52
53 [ -e /etc/ksmbd/ksmbd.conf ] || ln -nsf /var/etc/ksmbd/ksmbd.conf /etc/ksmbd/ksmbd.conf
54
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!"
57 fi
58 }
59
60 smb_add_share()
61 {
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
80
81 [ -z "$name" ] || [ -z "$path" ] && return
82
83 {
84 printf "\n[%s]\n\tpath = %s\n" "$name" "$path"
85 [ -n "$comment" ] && printf "\tcomment = %s\n" "$comment"
86
87 if [ "$force_root" -eq 1 ]; then
88 printf "\tforce user = %s\n" "root"
89 printf "\tforce group = %s\n" "root"
90 else
91 [ -n "$users" ] && printf "\tvalid users = %s\n" "$users"
92 fi
93
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"
98
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"
102
103 [ -n "$guest_ok" ] && printf "\tguest ok = %s\n" "$guest_ok"
104 [ -n "$inherit_owner" ] && printf "\tinherit owner = %s\n" "$inherit_owner"
105
106 [ -n "$write_list" ] && printf "\twrite list = %s\n" "$write_list"
107 [ -n "$read_list" ] && printf "\tread list = %s\n" "$read_list"
108
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
112 }
113
114 init_config()
115 {
116 mkdir -p /var/etc/ksmbd
117
118 config_load 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
122 }
123
124 service_triggers()
125 {
126 # PROCD_RELOAD_DELAY=1000
127
128 procd_add_reload_trigger "dhcp" "system" "ksmbd"
129
130 for i in $SMBD_IFACE; do
131 procd_add_reload_interface_trigger "$i"
132 done
133 }
134
135 kill_server()
136 {
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
141 fi
142 fi
143 }
144
145 start_service()
146 {
147 init_config
148
149 if [ ! -e /etc/ksmbd/ksmbd.conf ]; then
150 logger -p daemon.error -t 'ksmbd' "missing config /etc/ksmbd/ksmbd.conf!"
151 exit 1
152 fi
153
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
156
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!"
160 exit 1
161 fi
162
163 logger -p daemon.notice -t 'ksmbd' "Starting Ksmbd userspace service."
164 procd_open_instance
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
169 procd_close_instance
170 }
171
172 stop_service()
173 {
174 logger -p daemon.notice -t 'ksmbd' "Stopping Ksmbd userspace service."
175 killall ksmbd.mountd > /dev/null 2>&1
176
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
180 # next try
181 [ -e /sys/module/ksmbd ] && rmmod ksmbd > /dev/null 2>&1
182
183 if [ -e /sys/module/ksmbd ]; then
184 logger -p daemon.error -t 'ksmbd' "module still loaded after kill_server?"
185 fi
186 [ -f /tmp/ksmbd.lock ] && rm /tmp/ksmbd.lock
187 }
188
189 # reload_service() {
190 # restart "$@"
191 # }