set cand {}
foreach list $lists { pushnew cand [lindex $list 0] }
- ## Remove candidate items which have not the first in some other list.
+ ## Remove candidate items which are not first in some other list.
set ncand {}
foreach cand $cand {
foreach list $lists {
- if {[lsearch -exact $list $cand] < 0} { lappend ncand $cand }
+ if {[lsearch -exact $list $cand] <= 0} { lappend ncand $cand }
}
}
+ set cand $ncand
## If there's nothing left, report an error.
if {![llength $cand]} {
## Evaluate BODY, but on exit restore the CONFVAR array so that the BODY
## has no lasting effect on it.
- upvar #1 $confvar CONFIG
+ upvar #0 $confvar CONFIG
set old [array get CONFIG]
unwind-protect {
uplevel 1 $body
}
define view-map {map} {
+
+ ## OK, this needs careful documentation.
+ ##
+ ## The local nameserver presents a number of views according to its
+ ## configuration. It is our purpose here to generate a configuration
+ ## snippet for such a view.
+ ##
+ ## A user might have several different views of a zone which are meant to
+ ## be presented to different clients. These map on to the server views
+ ## in a one-to-many fashion. The `view-map' option defines this mapping.
+ ## The argument is a list of alternating SERVER-VIEW USER-VIEW pairs; the
+ ## SERVER-VIEW may be a glob pattern; the USER-VIEW may be the special
+ ## token `=' to mean `same as the SERVER-VIEW'.
+ ##
+ ## We only keep one copy of the zone file for each user view: if the user
+ ## view is used by many server views, then the zone stanza for each of
+ ## those views refers to the same zone file.
+
if {[llength $map] % 2} {
error "view map must have an even number of items"
}
proc compute-zone-properties {view config} {
## Derive interesting information from the zone configuration plist CONFIG,
- ## relative to the stated VIEW. Return a new plist.
+ ## relative to the stated server VIEW. Return a new plist.
array set zone $config