| #!/bin/sh |
| # convert: |
| |
| # dhcptype=5 |
| # serverid=172.16.42.102 |
| # lease=97200 |
| # interface=eth0 |
| # ip=172.16.42.177 |
| # subnet=255.255.255.0 |
| # mask=24 |
| # broadcast=172.16.22.255 |
| # router=172.16.42.98 |
| # dns=10.34.32.125 10.32.63.5 10.34.255.7 10.11.255.27 |
| # domain=lab.example.com example.com |
| # ntpsrv=10.34.32.125 10.34.255.7 |
| |
| # into: |
| |
| #let cfg=cfg+1 |
| #if[$cfg]=...; ip[$cfg]=...; ipmask[$cfg]=.../...; gw[$cfg]=...; net[$cfg]=... dns[$cfg]=... |
| |
| exec >"$0.out" 2>&1 |
| |
| test "$interface" || exit 1 |
| test -f "$1" || exit 1 |
| |
| # Unsafe, and does not handle values with spaces: |
| #. "./$1" || exit 1 |
| # Safe(r) parsing: |
| sq="'" |
| while read line; do |
| #echo "line: $line" |
| # Skip empty lines and lines with single quotes |
| test "${line##*$sq*}" || continue |
| var="${line%%=*}" |
| val="${line#*=}" |
| #echo "var:$var val:'$val'" |
| eval "$var='$val'" |
| done <"$1" |
| |
| { |
| echo "let cfg=cfg+1" |
| test "$interface" && echo "if[\$cfg]='$interface'" |
| test "$ip" && echo "ip[\$cfg]='$ip'" |
| test "$ip" && test "$mask" \ |
| && echo "ipmask[\$cfg]='$ip/$mask'" |
| test "$router" && echo "gw[\$cfg]='$router'" |
| test "$dns" && echo "dns[\$cfg]='$dns'" |
| # TODO: I never saw a dhcp server which correctly announces |
| # which subnet(s) is/are available thru advertised router |
| # Assume 0/0 |
| echo "net[\$cfg]='0/0'" |
| } >"$2" |