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>
index | next in thread | previous in thread | raw e-mail
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
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201304011406.50417.jhb>
