Add functions to set info needed for libremap and some more to "admin.sh"

This commit is contained in:
Marc René Schädler 2013-11-13 11:59:56 +01:00 committed by Tim Niemeyer
parent 7ea319f9f2
commit 4e98822cd6
2 changed files with 178 additions and 31 deletions

View File

@ -1,38 +1,66 @@
#!/bin/ash #!/bin/ash
# input check functions # string check
check_hostname() { check() {
local STRING="$@" local MODE="$1"
[ -n "$STRING" ] || return 1 local STRING="$2"
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])$") local REGEXP=
[ "$STRING" == "$STRING_VALID" ] || return 1 local STRING_VALID=
} [ -n "$2" ] || return 1
case "$MODE" in
binary)
REGEXP="^[01]+$"
;;
check_integer() { bool)
local STRING="$@" REGEXP="^[01]$"
[ -n "$STRING" ] || return 1 ;;
local STRING_VALID=$(echo -n "$STRING" | grep -E "^[0-9]+$")
[ "$STRING" == "$STRING_VALID" ] || return 1
}
check_httpurl() { direction)
local STRING="$@" REGEXP="^[NESW]{1,3}$"
[ -n "$STRING" ] || return 1 ;;
local STRING_VALID=$(echo -n "$STRING" | grep -E "http(s?):\/\/[^ \"\(\)\<\>]*")
[ "$STRING" == "$STRING_VALID" ] || return 1
}
check_contains() { email)
local STRING="$1" REGEXP="^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$"
local STRING2="$2" ;;
local STRING_VALID=$(echo -n "$STRING" | grep -E "$STRING2")
hostname)
REGEXP="^(([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])$"
;;
httpurl)
REGEXP="^http(s?):\/\/[^ \"\(\)\<\>]*$"
;;
integer)
REGEXP="^[0-9]+$"
;;
numeric)
REGEXP="^[0-9]+(\.[0-9]+)?$"
;;
regexp)
REGEXP="$3"
;;
telephone)
REGEXP="^\+?[-0-9./() ]+$"
;;
simplestring)
REGEXP="^[-a-zA-Z0-9._ ]+$"
;;
esac
STRING_VALID=$(echo -n "$STRING" | grep -E "$REGEXP")
[ "$STRING" == "$STRING_VALID" ] || return 1 [ "$STRING" == "$STRING_VALID" ] || return 1
} }
# command implementations # command implementations
set_hostname() { set_hostname() {
local HOSTNAME="$1" local HOSTNAME="$1"
check_hostname "$HOSTNAME" || return 1 check hostname "$HOSTNAME" || return 1
uci set system.@system[0].hostname="$HOSTNAME" uci set system.@system[0].hostname="$HOSTNAME"
uci commit uci commit
echo "$HOSTNAME" > /proc/sys/kernel/hostname echo "$HOSTNAME" > /proc/sys/kernel/hostname
@ -41,8 +69,8 @@ set_hostname() {
set_wanratelimit() { set_wanratelimit() {
local UPLIMIT="$1" local UPLIMIT="$1"
local DOWNLIMIT="$2" local DOWNLIMIT="$2"
check_integer "$UPLIMIT" || return 1 check integer "$UPLIMIT" || return 1
check_integer "$DOWNLIMIT" || return 1 check integer "$DOWNLIMIT" || return 1
if [ "$UPLIMIT" -gt 0 ] && [ "$DOWNLIMIT" -gt 0 ]; then if [ "$UPLIMIT" -gt 0 ] && [ "$DOWNLIMIT" -gt 0 ]; then
uci set qos.wan.upload="$UPLIMIT" uci set qos.wan.upload="$UPLIMIT"
uci set qos.wan.download="$DOWNLIMIT" uci set qos.wan.download="$DOWNLIMIT"
@ -65,9 +93,9 @@ upgrade_firmware() {
local UPGRADEPATH=$(uci get firmware.upgrade.path) local UPGRADEPATH=$(uci get firmware.upgrade.path)
URL="${UPGRADEPATH}/${BOARDNAME}.bin" URL="${UPGRADEPATH}/${BOARDNAME}.bin"
fi fi
check_httpurl "$URL" || return 1 check httpurl "$URL" || return 1
check_contains "$URL" "$BOARDNAME" || return 1 check regexp "$URL" "$BOARDNAME" || return 1
check_contains "$URL" "upgrade" || return 1 check regexp "$URL" "upgrade" || return 1
[ -n "$MD5SUM" ] || MD5SUM=$(wget -q -O - --no-check-certificate "$URL.md5" | cut -d" " -f1) [ -n "$MD5SUM" ] || MD5SUM=$(wget -q -O - --no-check-certificate "$URL.md5" | cut -d" " -f1)
[ -n "$MD5SUM" ] || return 1 [ -n "$MD5SUM" ] || return 1
wget -q -O /tmp/firmware-sysupgrade.bin --no-check-certificate "$URL" || return 1 wget -q -O /tmp/firmware-sysupgrade.bin --no-check-certificate "$URL" || return 1
@ -76,6 +104,77 @@ upgrade_firmware() {
sysupgrade /tmp/firmware-sysupgrade.bin sysupgrade /tmp/firmware-sysupgrade.bin
} }
set_upgradepath() {
local UPGRADEPATH="$1"
check httpurl "$UPGRADEPATH" || return 1
uci set firmware.upgrade=upgrade || return 1
uci set firmware.upgrade.path="$UPGRADEPATH" || return 1
uci commit
}
set_location() {
local LATITUDE="$1"
local LONGITUDE="$2"
local ELEVATION="$3"
check numeric "$LATITUDE" || return 1
check numeric "$LONGITUDE" || return 1
uci set site.location=location
uci set site.location.latitude="$LATITUDE"
uci set site.location.longitude="$LONGITUDE"
check numeric "$ELEVATION" && uci set site.location.elevation="$ELEVATION"
uci commit
}
set_outdoor() {
local OUTDOOR="$1"
check bool "$OUTDOOR" || return 1
uci set site.location=location
uci set site.location.outdoor="$OUTDOOR"
uci commit
}
set_direction() {
local DIRECTION="$@"
DIRECTION=$(echo "$DIRECTION" | tr "nesw" "NESW") || return 1
check direction "$DIRECTION" || return 1
uci set site.location=location
uci set site.location.direction="$DIRECTION"
uci commit
}
set_tags() {
local TAGS="$@"
TAGS=$(echo $TAGS | tr -s " ")
check simplestring "$TAGS" || return 1
uci set site.location=location
uci set site.location.tags="$TAGS"
uci commit
}
set_email() {
local EMAIL="$@"
check email "$EMAIL" || return 1
uci set site.contact=contact
uci set site.contact.email="$EMAIL"
uci commit
}
set_contact() {
local CONTACT="$@"
check simplestring "$CONTACT" || return 1
uci set site.contact=contact
uci set site.contact.name="$CONTACT"
uci commit
}
set_telephone() {
local TELEPHONE="$@"
check telephone "$TELEPHONE" || return 1
uci set site.contact=contact
uci set site.contact.telephone="$TELEPHONE"
uci commit
}
ACTION="$1" ACTION="$1"
shift shift
@ -84,7 +183,7 @@ case "$ACTION" in
set_hostname $@ set_hostname $@
;; ;;
wanratelimit) wanlimit)
set_wanratelimit $@ set_wanratelimit $@
;; ;;
@ -92,7 +191,43 @@ case "$ACTION" in
upgrade_firmware $@ upgrade_firmware $@
;; ;;
upgradepath)
set_upgradepath $@
;;
location)
set_location $@
;;
outdoor)
set_outdoor $@
;;
direction)
set_direction $@
;;
tags)
set_tags $@
;;
email)
set_email $@
;;
contact)
set_contact $@
;;
telephone)
set_telephone $@
;;
*) *)
echo "unknown action" echo "unknown action '$ACTION'"
exit 1
;; ;;
esac esac
# dont add anything here so we get the exit status of the action

View File

@ -0,0 +1,12 @@
config location 'location'
option latitude 0
option longitude 0
option elevation 0
option direction ''
option tags 'indoor omnidirectional'
config contact 'contact'
option name ''
option email ''
option telephone ''