summaryrefslogtreecommitdiff
path: root/distrib/miniroot
diff options
context:
space:
mode:
authorkn <kn@cvs.openbsd.org>2021-07-20 11:20:10 +0000
committerkn <kn@cvs.openbsd.org>2021-07-20 11:20:10 +0000
commit3e94dd002c19cc33630df7ef1afea2c42c0cec0d (patch)
treed95a98c0601d2b8f2a53c3e5dde25141cd97eafc /distrib/miniroot
parent7e497cb1fa8938755e6ab2274d178e78355de314 (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.sub17
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
}