From 4b9857dfae846f9f58316b5026583b1df8b3748c Mon Sep 17 00:00:00 2001 Message-Id: <4b9857dfae846f9f58316b5026583b1df8b3748c.1715067864.git.mdw@distorted.org.uk> From: Mark Wooding Date: Thu, 24 Jan 2013 09:56:48 +0000 Subject: [PATCH] zoneconf.in: Isolate our local variables from the configuration file. Organization: Straylight/Edgeware From: Mark Wooding I had a signature failure after changing the configuration file caused by variables set in the config file interfering with those in the command procedure. There are good reasons why `confspc-eval' uses `uplevel'; but this situation is bad, so it wants fixing properly. Introduce a new procedure `isolate' which exists largely so its variables can be clobbered with impunity. --- zoneconf.in | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/zoneconf.in b/zoneconf.in index d16e74a..22f170f 100755 --- a/zoneconf.in +++ b/zoneconf.in @@ -198,6 +198,13 @@ proc run {what command args} { } } +proc isolate {body} { + ## Evaluate BODY without changing the caller's variables. Return its + ## result. + + eval $body +} + ###-------------------------------------------------------------------------- ### Configuration spaces. ### @@ -1330,7 +1337,7 @@ defcmd outputs {} { } { global ZONECFG CONFFILE - confspc-eval toplevel [list source $CONFFILE] + isolate [list confspc-eval toplevel [list source $CONFFILE]] foreach view $ZONECFG(all-views) { puts [output-file-name $view] } } @@ -1340,7 +1347,7 @@ defcmd update {} { global ZONECFG ZONES CONFFILE ## Read the configuration. - confspc-eval toplevel [list source $CONFFILE] + isolate [list confspc-eval toplevel [list source $CONFFILE]] ## Safely update the files. set win false @@ -1395,7 +1402,7 @@ provided by the named USER." global QUIS ZONECFG ZONES CONFFILE errorInfo errorCode ## Read the configuration. - confspc-eval toplevel [list source $CONFFILE] + isolate [list confspc-eval toplevel [list source $CONFFILE]] ## Make sure there's a temporary directory. file mkdir [file join $ZONECFG(home-dir) "tmp"] @@ -1494,7 +1501,7 @@ defcmd sign {} { set rc 0 ## Read the configuration. - confspc-eval toplevel [list source $CONFFILE] + isolate [list confspc-eval toplevel [list source $CONFFILE]] ## Grind through all of the zones. array unset seen -- [mdw]