Date: Mon, 1 Apr 2013 14:06:50 -0400 From: John Baldwin <jhb@freebsd.org> To: freebsd-current@freebsd.org Cc: freebsd-rc@freebsd.org, Andriy Gapon <avg@freebsd.org> Subject: Re: rc.subr: disabling globbing while processing devfs rules Message-ID: <201304011406.50417.jhb@freebsd.org> In-Reply-To: <514D6AC5.8010409@FreeBSD.org> References: <514D6AC5.8010409@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Saturday, March 23, 2013 4:41:41 am Andriy Gapon wrote: > > Any objections / concerns for the following change? > > An example. > This rule in devfs.rules: > add path da* mode 660 group operator > and this directory: > /data > result in the following rule being actually installed: > 100 path data group operator mode 660 > > Of course, I could refine the pattern in the rule, but I shouldn't have to do > it, because the pattern is for /dev/ entries, not arbitrary files in the > filesystem namespace. > > commit 7ce5e9ca5c107e2669f18efa472c1ab14999247c > Author: Andriy Gapon <avg@icyb.net.ua> > Date: Sat Mar 23 10:29:39 2013 +0200 > > rc.subr: disabling globbing while processing devfs rules in > devfs_rulesets_from_file() > > The rules themselves typically have shell-like patterns and it is incorrect > when they get replaced with matching filesystem entries. > > Shell magic by: jilles > > diff --git a/etc/rc.subr b/etc/rc.subr > index f37ede7..9952c82 100644 > --- a/etc/rc.subr > +++ b/etc/rc.subr > @@ -1301,7 +1301,7 @@ make_symlink() > # > devfs_rulesets_from_file() > { > - local file _err _me > + local file _err _me _opts > file="$1" > _me="devfs_rulesets_from_file" > _err=0 > @@ -1314,6 +1314,11 @@ devfs_rulesets_from_file() > debug "$_me: no such file ($file)" > return 0 > fi > + > + # Disable globbing so that the rule patterns are not expanded > + # by accident with matching filesystem entries. > + _opts=$-; set -f > + > debug "reading rulesets from file ($file)" > { while read line > do > @@ -1360,6 +1365,7 @@ devfs_rulesets_from_file() > break > fi > done } < $file > + case $_opts in *f*) ;; *) set +f ;; esac > return $_err > } Why not use 'local -' instead of the $- magic? That is: devfs_rulesets_from_file() { local file _err _me - ... set -f ... } That would seem to be simpler. -- John Baldwin
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201304011406.50417.jhb>