small-package/luci-app-webd/root/etc/init.d/webd

120 lines
3.0 KiB
Bash
Executable File

#!/bin/sh /etc/rc.common
START=99
USE_PROCD=1
LOGGER="logger -t [Webd]"
start_service() {
local basic_list="enable webd_conf webd_bin webd_port webd_root enable_recyclebin enable_anonymous anonymous_perm enable_ipv6"
local users_list="enable_read enable_read_list enable_upload enable_move enable_showhide"
for i in $(echo $basic_list);do
local eval $i="$(uci_get_by_type webd 0 $i)"
done;unset i
if [ "$enable" == 1 ]
then
[ ! -r "$webd_root" -o ! -d "$webd_root" ] && EXIT "Unable to access $webd_root,exit ..."
[ ! -x "$webd_bin" ] && EXIT "Unable to access $webd_bin,exit ..."
if [ "$enable_recyclebin" == 1 -a ! -d "$webd_root/.Trash" ]
then
${LOGGER} "Creating Recycle Bin directory ..."
mkdir -p $webd_root/.Trash || EXIT "Failed to create Recycle Bin directory,exit ..."
fi
${LOGGER} "Removing old config file ..."
rm -f $webd_conf
touch -a $webd_conf || EXIT "Failed to create config,exit ..."
[ "$enable_ipv6" == 1 ] && webd_port="[::]:${webd_port}"
if [ "$enable_anonymous" != 0 ]
then
if [ -n "$anonymous_perm" ]
then
unset enable_anonymous
for i in $(echo $anonymous_perm);do
enable_anonymous="$enable_anonymous$i"
done
unset i
else
enable_anonymous=0
uci set webd.@webd[0].enable_anonymous=0
uci commit webd
fi
fi
echo "Webd.Listen $webd_port" >> $webd_conf
echo "Webd.Root $webd_root" >> $webd_conf
echo "Webd.Guest $enable_anonymous" >> $webd_conf
for u in 0 1;do
for i in $(echo $users_list);do
eval ${i}=$(uci_get_by_type users $u $i 0)
echo "$users_list" | grep -q $i
[ "$?" == 0 ] && eval perm_bin=$(eval echo '$'perm_bin)$(uci_get_by_type users $u $i)
done
unset i
username=$(uci_get_by_type users $u username)
password=$(uci_get_by_type users $u password)
if [ -n "$username" ]
then
eval perm=$(perm_converter $(eval echo '$'perm_bin) | tail -n 1)
if [ -n "$(eval echo '$'perm)" ]
then
${LOGGER} "Creating account for User $username ..."
echo "Webd.User $(eval echo '$'perm) $username $password" >> $webd_conf
else
${LOGGER} "Removing excessive user config ..."
uci delete webd.@users[$u]
uci commit webd
fi
unset perm_bin
fi
done
unset u
ps -efww | grep "$webd_bin" | awk '{print $1}' | xargs kill -9 2> /dev/null
${LOGGER} "Starting Webd Service ..."
procd_open_instance
procd_set_param command $webd_bin -c $webd_conf
procd_set_param respawn
procd_close_instance
else
stop_service
${LOGGER} "Webd Service is now disabled ..."
fi
}
stop_service() {
${LOGGER} "Stopping Webd Service ..."
}
service_triggers() {
procd_add_reload_trigger "webd"
}
uci_get_by_type() {
local ret=$(uci get webd.@$1[$2].$3 2>/dev/null)
echo ${ret:=$4}
}
EXIT() {
${LOGGER} $*
exit
}
perm_converter() {
local u i=1
echo $1 | egrep -o [0-1] | while read X
do
if [ "$X" == 1 ]
then
case $i in
1)u=r;;
2)u=l;;
3)u=u;;
4)u=m;;
5)u=S;;
esac
[ -n "$u" ] && a="$a$u"
echo "$a"
fi
i=$(($i + 1))
done
}