Create 20-smb-ksmbd

This commit is contained in:
kiddin9 2026-03-24 01:41:42 +08:00 committed by GitHub
parent 0efa157a81
commit b2d5b93394
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -0,0 +1,120 @@
#!/bin/sh
. /lib/functions.sh
. /lib/functions/service.sh
global=0
config_file="/etc/config/ksmbd"
[ ! -f /etc/config/ksmbd ] && {
echo "
config globals
option workgroup 'WORKGROUP'
option charset 'UTF-8'
option description 'Ksmbd on OpenWRT'
" > $config_file
}
wait_for_init() {
for i in `seq 30`
do
[ -e /tmp/procd.done ] || {
sleep 1; continue;
}
return
done
}
smb_handle() {
local path
config_get path "$1" path
if [ -n "$path" ]; then
case "$path" in
"$2" | "$2"/*) global=1 ;;
esac
case "$2" in
"$path" | "$path"/*) global=1 ;;
esac
fi
}
chk_en() {
config_get_bool autoshare "$1" autoshare 1
[ "$autoshare" -eq 0 ] && exit
}
config_load ksmbd
config_foreach chk_en ksmbd
device=`basename "$DEVPATH"`
case "$ACTION" in
add)
case "$device" in
sd*);;
md*);;
hd*);;
mmcblk*);;
nvme*);;
*) return;;
esac
path="/dev/$device"
wait_for_init
grep -v '/boot\|/opt' /proc/mounts | while read -r j
do
str=${j%% *}
if [ "$str" = "$path" ];then
strr=${j#* }
target=${strr%% *}
global=0
config_load ksmbd
config_foreach smb_handle share "$target"
name=${target#*/mnt/}
name=$(echo "$name" | sed -e "s/^\///")
if [ "$global" -eq 0 ] ;then
echo -e "\n\nconfig share" >> $config_file
echo -e "\toption auto '1'" >> $config_file
echo -e "\toption name '$name'" >> $config_file
echo -e "\toption path '$target'" >> $config_file
echo -e "\toption read_only 'no'" >> $config_file
echo -e "\toption guest_ok 'yes'" >> $config_file
echo -e "\toption create_mask '0666'" >> $config_file
echo -e "\toption dir_mask '0777'" >> $config_file
echo -e "\toption device '$device'" >> $config_file
echo -e "\toption force_root '1'" >> $config_file
/etc/init.d/ksmbd reload
return
fi
fi
done
;;
remove)
i=0
while true
do
if ! uci -q get ksmbd.@share[$i] >/dev/null; then
break
fi
dev=$(uci -q get ksmbd.@share[$i].device)
if [ "$dev" = "$device" ]; then
auto=$(uci -q get ksmbd.@share[$i].auto)
if [ "$auto" = "1" ]; then
uci delete ksmbd.@share[$i]
uci commit ksmbd
/etc/init.d/ksmbd reload
return
fi
fi
let i+=1
done
;;
esac