base-files: Really check path in get_mac_binary
[openwrt/staging/blogic.git] / package / base-files / files / lib / functions / system.sh
index d4402c3a148ae1f7aede36d6bdc1c8775ec38116..df671465beaf79cf8513d49923e4f6a749e05b52 100644 (file)
@@ -4,7 +4,7 @@ get_mac_binary() {
        local path="$1"
        local offset="$2"
 
-       if [ -z "$path" ]; then
+       if [ -e "$path" ]; then
                echo "get_mac_binary: file $path not found!" >&2
                return
        fi
@@ -20,8 +20,7 @@ find_mtd_chardev() {
        echo "${INDEX:+$PREFIX$INDEX}"
 }
 
-mtd_get_mac_ascii()
-{
+mtd_get_mac_ascii() {
        local mtdname="$1"
        local key="$2"
        local part
@@ -39,6 +38,29 @@ mtd_get_mac_ascii()
        [ -n "$mac_dirty" ] && macaddr_canonicalize "$mac_dirty"
 }
 
+mtd_get_mac_text() {
+       local mtdname=$1
+       local offset=$2
+       local part
+       local mac_dirty
+
+       part=$(find_mtd_part "$mtdname")
+       if [ -z "$part" ]; then
+               echo "mtd_get_mac_text: partition $mtdname not found!" >&2
+               return
+       fi
+
+       if [ -z "$offset" ]; then
+               echo "mtd_get_mac_text: offset missing!" >&2
+               return
+       fi
+
+       mac_dirty=$(dd if="$part" bs=1 skip="$offset" count=17 2>/dev/null)
+
+       # "canonicalize" mac
+       [ -n "$mac_dirty" ] && macaddr_canonicalize "$mac_dirty"
+}
+
 mtd_get_mac_binary() {
        local mtdname="$1"
        local offset="$2"
@@ -87,22 +109,19 @@ macaddr_add() {
        echo $oui:$nic
 }
 
-macaddr_setbit_la()
-{
+macaddr_setbit_la() {
        local mac=$1
 
        printf "%02x:%s" $((0x${mac%%:*} | 0x02)) ${mac#*:}
 }
 
-macaddr_2bin()
-{
+macaddr_2bin() {
        local mac=$1
 
        echo -ne \\x${mac//:/\\x}
 }
 
-macaddr_canonicalize()
-{
+macaddr_canonicalize() {
        local mac="$1"
        local canon=""