Skip site navigation (1)Skip section navigation (2)
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>