1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
#!/bin/sh
### BEGIN FUNCTION COPIED FROM THE resolvconf SCRIPT ###
#
# Echo stdin with:
# comments removed;
# initial and terminal whitespace removed;
# whitespace strings replaced by single blanks;
# leading zeroes removed from nameserver address fields;
# first set of zero fields in an IPv6 address collapsed to '::';
# empty lines removed.
normalized_stdin() {
sed \
-e 's/#.*$//' \
-e 's/[[:blank:]]\+$//' \
-e 's/^[[:blank:]]\+//' \
-e 's/[[:blank:]]\+/ /g' \
-e '/^nameserver/!b ENDOFCYCLE' \
-e 's/$/ /' \
-e 's/\([:. ]\)0\+/\10/g' \
-e 's/\([:. ]\)0\([123456789abcdefABCDEF][[:xdigit:]]*\)/\1\2/g' \
-e '/::/b ENDOFCYCLE; s/ \(0[: ]\)\+/ ::/' \
-e '/::/b ENDOFCYCLE; s/:\(0[: ]\)\+/::/' \
-e ': ENDOFCYCLE' \
- | \
sed \
-e 's/[[:blank:]]\+$//' \
-e '/^$/d'
}
### END FUNCTION COPIED FROM THE resolvconf SCRIPT ###
test_result() {
[ "$1" = "$2" ] || { echo "Normalization test failed: actual '$1' != '$2' expected" ; exit 1 ; }
}
test_result "$(echo "" | normalized_stdin)" ""
test_result "$(echo "
" | normalized_stdin)" ""
test_result "$(echo "nameserver 127.0.0.1" | normalized_stdin)" "nameserver 127.0.0.1"
test_result "$(echo " nameserver 127.0.0.1 # foo " | normalized_stdin)" "nameserver 127.0.0.1"
test_result "$(echo "nameserver 127.000.000.1" | normalized_stdin)" "nameserver 127.0.0.1"
test_result "$(echo "nameserver 127.000.000.1" | normalized_stdin)" "nameserver 127.0.0.1"
test_result "$(echo "nameserver ::1" | normalized_stdin)" "nameserver ::1"
test_result "$(echo " nameserver ::1 # foo " | normalized_stdin)" "nameserver ::1"
test_result "$(echo "nameserver 0:0:0:0:0:0:0:1" | normalized_stdin)" "nameserver ::1"
test_result "$(echo " nameserver 0:0:0:0:0:0:0:1 # foo " | normalized_stdin)" "nameserver ::1"
test_result "$(echo "nameserver 00:000:0:0000:0001" | normalized_stdin)" "nameserver ::1"
test_result "$(echo " nameserver 00:000:0:0000:0001" | normalized_stdin)" "nameserver ::1"
test_result "$(echo "nameserver 003:1020:0105:55:0000:1000:0000:0000" | normalized_stdin)" "nameserver 3:1020:105:55::1000:0:0"
test_result "$(echo " nameserver 003:1020:0105:55:0000:1000:0000:0000" | normalized_stdin)" "nameserver 3:1020:105:55::1000:0:0"
test_result "$(echo "nameserver 30:1020:0105:55:0500:1000:0000:0000" | normalized_stdin)" "nameserver 30:1020:105:55:500:1000::"
test_result "$(echo " nameserver 30:1020:0105:55:0500:1000:0000:0000" | normalized_stdin)" "nameserver 30:1020:105:55:500:1000::"
test_result "$(echo "nameserver 30::0500:100:0009:0000" | normalized_stdin)" "nameserver 30::500:100:9:0"
test_result "$(echo " nameserver 30::0500:100:0009:0000" | normalized_stdin)" "nameserver 30::500:100:9:0"
test_result "$(echo "nameserver 30:0500:100::0009:0000" | normalized_stdin)" "nameserver 30:500:100::9:0"
test_result "$(echo " nameserver 30:0500:100::0009:0000" | normalized_stdin)" "nameserver 30:500:100::9:0"
test_result "$(echo \
"#foo
nameserver 30:1020:0105:55:0500:1000:0000:0000
nameserver ::1
nameserver 0000::1 # foo nameserver bwaa haa
nameserver 0005::1 # foo bar
nameserver 003:1020:0105:55:0000:1000:0000:0000
options nameserver
anotherthing 1:2 03::4::0005 # Don't touch non-nameservers lines
nameserver 127.0.0.1 #foo bar
nameserver 0:0:00:0000000:0:0:0:1
bar
search yoyodyne.biz yyy.xxx
baz
# foo " | normalized_stdin)" \
"nameserver 30:1020:105:55:500:1000::
nameserver ::1
nameserver 0::1
nameserver 5::1
nameserver 3:1020:105:55::1000:0:0
options nameserver
anotherthing 1:2 03::4::0005
nameserver 127.0.0.1
nameserver ::1
bar
search yoyodyne.biz yyy.xxx
baz"
# Check that we are actually testing something
( test_result "$(echo "nameserver 127.0.0.1" | normalized_stdin)" "bogusstring" ) > /dev/null
[ "$?" = 1 ] || { echo "Normalization test script contains a programming error." ; exit 2 ; }
echo "Normalization test passed."
exit 0
|