diff options
author | kn <kn@cvs.openbsd.org> | 2021-07-20 11:20:10 +0000 |
---|---|---|
committer | kn <kn@cvs.openbsd.org> | 2021-07-20 11:20:10 +0000 |
commit | 3e94dd002c19cc33630df7ef1afea2c42c0cec0d (patch) | |
tree | d95a98c0601d2b8f2a53c3e5dde25141cd97eafc /distrib/miniroot | |
parent | 7e497cb1fa8938755e6ab2274d178e78355de314 (diff) |
Simplify DHCP lease file parer after switch to dhcpleased
dhcpleased(8)'s lease files are much simpler than dhclient.leases(5):
- exactly one lease per file (not many)
- only option lines (not statement, declaration, etc.)
- every option/value is separated by a single ": " (no optional leading
"option ")
- values are not quoted or escaped (like dhclient does)
lease_value() is hard to read, mostly because it strips optional double
quotes around option values as was required with dhclient.
dhclient VIS_ALL's values if they contain backticks, backslashes and
other characters, otherwise it VIS_SAFE's (and optionally quotes them).
dhcpleased VIS_SAFE's all value strings equally.
All install.sub users of lease_value() quote its output so they should
be safe without any special unescaping as previously done.
OK florian
Diffstat (limited to 'distrib/miniroot')
-rw-r--r-- | distrib/miniroot/install.sub | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/distrib/miniroot/install.sub b/distrib/miniroot/install.sub index 999c0b095aa..fb95222fef5 100644 --- a/distrib/miniroot/install.sub +++ b/distrib/miniroot/install.sub @@ -1,5 +1,5 @@ #!/bin/ksh -# $OpenBSD: install.sub,v 1.1168 2021/07/18 15:18:49 deraadt Exp $ +# $OpenBSD: install.sub,v 1.1169 2021/07/20 11:20:09 kn Exp $ # # Copyright (c) 1997-2015 Todd Miller, Theo de Raadt, Ken Westerback # Copyright (c) 2015, Robert Peichaer <rpe@openbsd.org> @@ -244,21 +244,20 @@ prep_root_mail() { __EOT } -# Examine the contents of the DHCP lease file $1 for a line containing the -# field provided as parameters and return the value of the first field found. +# Examine the contents of the dhcpleased lease file $1 for a line containing the +# field(s) provided as parameters and return the value of the first field found. # -# Note that strings are unescaped but not unvis()'d. +# Note that value strings are VIS_SAFE'd. lease_value() { - local _lf=$1 _o + local _lf=$1 _o _opt _val [[ -s $_lf ]] || return shift for _o; do - sed -E \ - -e '/^'"$_o"': (.*)$/!d;s//\1/' \ - -e '/^"(.*)"$/{s//\1/;s/\\(.)/\1/g;};q' "$_lf" \ - | grep ^ && return + while read -r _opt _val; do + [[ $_opt == ${_o}: ]] && echo "$_val" && return + done < "$_lf" done } |