forked from freifunk-franken/firmware
99 lines
2.4 KiB
Bash
Executable File
99 lines
2.4 KiB
Bash
Executable File
#!/bin/ash
|
|
|
|
# input check functions
|
|
check_hostname() {
|
|
local STRING="$@"
|
|
[ -n "$STRING" ] || return 1
|
|
local STRING_VALID=$(echo -n "$STRING" | grep -E "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$")
|
|
[ "$STRING" == "$STRING_VALID" ] || return 1
|
|
}
|
|
|
|
check_integer() {
|
|
local STRING="$@"
|
|
[ -n "$STRING" ] || return 1
|
|
local STRING_VALID=$(echo -n "$STRING" | grep -E "^[0-9]+$")
|
|
[ "$STRING" == "$STRING_VALID" ] || return 1
|
|
}
|
|
|
|
check_httpurl() {
|
|
local STRING="$@"
|
|
[ -n "$STRING" ] || return 1
|
|
local STRING_VALID=$(echo -n "$STRING" | grep -E "http(s?):\/\/[^ \"\(\)\<\>]*")
|
|
[ "$STRING" == "$STRING_VALID" ] || return 1
|
|
}
|
|
|
|
check_contains() {
|
|
local STRING="$1"
|
|
local STRING2="$2"
|
|
local STRING_VALID=$(echo -n "$STRING" | grep -E "$STRING2")
|
|
[ "$STRING" == "$STRING_VALID" ] || return 1
|
|
}
|
|
|
|
# command implementations
|
|
set_hostname() {
|
|
local HOSTNAME="$1"
|
|
check_hostname "$HOSTNAME" || return 1
|
|
uci set system.@system[0].hostname="$HOSTNAME"
|
|
uci commit
|
|
echo "$HOSTNAME" > /proc/sys/kernel/hostname
|
|
}
|
|
|
|
set_wanratelimit() {
|
|
local UPLIMIT="$1"
|
|
local DOWNLIMIT="$2"
|
|
check_integer "$UPLIMIT" || return 1
|
|
check_integer "$DOWNLIMIT" || return 1
|
|
if [ "$UPLIMIT" -gt 0 ] && [ "$DOWNLIMIT" -gt 0 ]; then
|
|
uci set qos.wan.upload="$UPLIMIT"
|
|
uci set qos.wan.download="$DOWNLIMIT"
|
|
uci commit
|
|
/etc/init.d/qos stop
|
|
/etc/init.d/qos enable
|
|
/etc/init.d/qos start
|
|
else
|
|
/etc/init.d/qos stop
|
|
/etc/init.d/qos disable
|
|
fi
|
|
}
|
|
|
|
upgrade_firmware() {
|
|
local URL="$1"
|
|
local MD5SUM="$2"
|
|
local BOARDNAME=$(uci get board.model.name)
|
|
[ -n "$BOARDNAME" ] || return 1
|
|
if [ -z "$URL" ]; then
|
|
local UPGRADEPATH=$(uci get firmware.upgrade.path)
|
|
URL="${UPGRADEPATH}/${BOARDNAME}.bin"
|
|
fi
|
|
check_httpurl "$URL" || return 1
|
|
check_contains "$URL" "$BOARDNAME" || return 1
|
|
check_contains "$URL" "upgrade" || return 1
|
|
[ -n "$MD5SUM" ] || MD5SUM=$(wget -q -O - --no-check-certificate "$URL.md5" | cut -d" " -f1)
|
|
[ -n "$MD5SUM" ] || return 1
|
|
wget -q -O /tmp/firmware-sysupgrade.bin --no-check-certificate "$URL" || return 1
|
|
local MD5SUM_VALID=$(md5sum /tmp/firmware-sysupgrade.bin | cut -d" " -f1)
|
|
[ "$MD5SUM" == "$MD5SUM_VALID" ] || return 1
|
|
sysupgrade /tmp/firmware-sysupgrade.bin
|
|
}
|
|
|
|
ACTION="$1"
|
|
shift
|
|
|
|
case "$ACTION" in
|
|
hostname)
|
|
set_hostname $@
|
|
;;
|
|
|
|
wanratelimit)
|
|
set_wanratelimit $@
|
|
;;
|
|
|
|
upgrade)
|
|
upgrade_firmware $@
|
|
;;
|
|
|
|
*)
|
|
echo "unknown action"
|
|
;;
|
|
esac
|