Date: Wed, 19 Apr 2000 16:51:24 +0200 From: Neil Blakey-Milner <nbm@mithrandr.moria.org> To: Doug Barton <Doug@gorean.org> Cc: freebsd-hackers@freebsd.org, adrian@creative.net.au Subject: Re: Safe sourcing of rc files Message-ID: <20000419165123.A59794@mithrandr.moria.org> In-Reply-To: <38F17E7A.5892318A@gorean.org>; from Doug@gorean.org on Mon, Apr 10, 2000 at 12:10:50AM -0700 References: <38F17E7A.5892318A@gorean.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Mon 2000-04-10 (00:10), Doug Barton wrote: > +if [ -z "${sourcercs_defined}" ]; then > + sourcercs_defined=yes > + sourcercs ( ) { > + local sourced_files > + for i in ${rc_conf_files}; do > + case "${sourced_files}" in > + *:$i:*) > + ;; > + *) > + sourced_files="${sourced_files}:$i:" > + if [ -r $i ]; then > + . $i > + fi > + ;; > + esac > + done > + } > +fi I have another idea: We make a sh script named "rcsource" or whatever, which we source when we want to have the rc environment, stealing your code maliciously: /-- sourcercs_sourced_files= sourcercs ( ) { local rc_conf_files for i in $*; do case "${sourcercs_sourced_files}" in *:$i:*) ;; *) sourcercs_sourced_files="${sourcercs_sourced_files}:$i:" echo $i if [ -r $i ]; then . $i sourcercs ${rc_conf_files} fi ;; esac done } sourcercs /etc/defaults/rc.conf \-- Anyway, this'll do something I've been considering missing - the ability to set more rc_conf_files in /etc/rc.conf and friends. It also means a total lack of sh-script in /etc/defaults/rc.conf and /etc/rc.conf, which means that we can start developing something in C that can read those files (libconf, Daniel?). Basically, it localizes rc_conf_files so that you don't lose any you've specified before. So, in /etc/defaults/rc.conf, it sets rc_conf_files to "/etc/rc.conf /etc/rc.conf.local", and when it runs /etc/rc.conf, rc_conf_files changes to "/etc/foo.conf", and that'll be read. After it's finished, it pops up two spaces, and goes on to /etc/rc.conf.local. A file will only ever be sourced once. One possible extension may be a specifier of a preprocessor for a file: preprocessor__etc_defaults_rc.conf='cpp' will be checked if sourcercs is run on /etc/defaults/rc.conf, and it will be passed through cpp before trying to understand it. This should be extensible enough to avoid the need of sh-script to get a value for a variable. Any more ideas? Neil -- Neil Blakey-Milner Hacker In Chief, Sunesi Clinical Systems nbm@mithrandr.moria.org To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20000419165123.A59794>