X-Git-Url: https://git.archive.openwrt.org/?p=openwrt.git;a=blobdiff_plain;f=package%2Fbase-files%2Ffiles%2Flib%2Ffunctions.sh;h=6f23e0b8b2ea57fedc0cf3ae8d1f300e843a1516;hp=19cfbae172a00730db80383386399f9eca1afe80;hb=1cd654611f450bd2ce579590a9118e7c84712587;hpb=7eb5ccb9768ca1357d7592505894f2545f615e66 diff --git a/package/base-files/files/lib/functions.sh b/package/base-files/files/lib/functions.sh index 19cfbae172..6f23e0b8b2 100755 --- a/package/base-files/files/lib/functions.sh +++ b/package/base-files/files/lib/functions.sh @@ -248,17 +248,36 @@ mtd_get_mac_ascii() local part local mac_dirty - . /lib/functions.sh - part=$(find_mtd_part "$mtdname") if [ -z "$part" ]; then echo "mtd_get_mac_ascii: partition $mtdname not found!" >&2 return fi - mac_dirty=$(strings "$part" | sed -n 's/'"$key"'=//p') + mac_dirty=$(strings "$part" | sed -n 's/^'"$key"'=//p') + # "canonicalize" mac - printf "%02x:%02x:%02x:%02x:%02x:%02x" 0x${mac_dirty//:/ 0x} + [ -n "$mac_dirty" ] && macaddr_canonicalize "$mac_dirty" +} + +mtd_get_blob() +{ + local mtdname="$1" + local offset="$2" + local count="$3" + local firmware="$4" + local part + + part=$(find_mtd_part "$mtdname") + if [ -z "$part" ]; then + echo "mtd_get_blob: partition $mtdname not found!" >&2 + return 1 + fi + + dd if=$part of=$firmware bs=1 skip=$offset count=$count 2>/dev/null || { + echo "mtd_get_blob: failed to extract $firmware from $part" >&2 + return 1 + } } mtd_get_mac_binary() { @@ -311,6 +330,39 @@ macaddr_2bin() echo -ne \\x${mac//:/\\x} } +macaddr_canonicalize() +{ + local mac="$1" + local canon="" + + [ ${#mac} -gt 17 ] && return + [ -n "${mac//[a-fA-F0-9\.: -]/}" ] && return + + for octet in ${mac//[\.:-]/ }; do + case "${#octet}" in + 1) + octet="0${octet}" + ;; + 2) + ;; + 4) + octet="${octet:0:2} ${octet:2:2}" + ;; + 12) + octet="${octet:0:2} ${octet:2:2} ${octet:4:2} ${octet:6:2} ${octet:8:2} ${octet:10:2}" + ;; + *) + return + ;; + esac + canon=${canon}${canon:+ }${octet} + done + + [ ${#canon} -ne 17 ] && return + + printf "%02x:%02x:%02x:%02x:%02x:%02x" 0x${canon// / 0x} 2>/dev/null +} + strtok() { # { [] ... } local tmp local val="$1"