120 lines
3.0 KiB
Bash
Executable File
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
|
|
}
|