diff --git a/.github/diy/packages/luci-app-samba4/root/etc/hotplug.d/block/20-smb b/.github/diy/packages/luci-app-samba4/root/etc/hotplug.d/block/20-smb new file mode 100644 index 00000000..236d07c3 --- /dev/null +++ b/.github/diy/packages/luci-app-samba4/root/etc/hotplug.d/block/20-smb @@ -0,0 +1,120 @@ +#!/bin/sh + +. /lib/functions.sh +. /lib/functions/service.sh + +global=0 +config_file="/etc/config/samba4" + +[ ! -f /etc/config/samba4 ] && { +echo " +config samba + option workgroup 'WORKGROUP' + option charset 'UTF-8' + option description 'Samba 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 samba4 +config_foreach chk_en samba4 + +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 samba4 + config_foreach smb_handle sambashare "$target" + + name=${target#*/mnt/} + name=$(echo "$name" | sed -e "s/^\///") + + if [ "$global" -eq 0 ] ;then + echo -e "\n\nconfig sambashare" >> $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/samba4 reload + return + fi + fi + done + ;; + + remove) + i=0 + while true + do + if ! uci -q get samba4.@sambashare[$i] >/dev/null; then + break + fi + + dev=$(uci -q get samba4.@sambashare[$i].device) + if [ "$dev" = "$device" ]; then + auto=$(uci -q get samba4.@sambashare[$i].auto) + if [ "$auto" = "1" ]; then + uci delete samba4.@sambashare[$i] + uci commit samba4 + /etc/init.d/samba4 reload + return + fi + fi + let i+=1 + done + ;; +esac