chiark / gitweb /
make-secnet-sites: Allow properties to control output to sites
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 29 Nov 2019 20:07:45 +0000 (20:07 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 15 Feb 2020 21:56:52 +0000 (21:56 +0000)
When lines containing properties are being copied to an output sites
file, the property can now control what gets written.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
make-secnet-sites

index a51b53d992e22943960463575a03dd42a1b1a44c..21ff4604ca0c26bee4771f6c22252d8c32ba4b2a 100755 (executable)
@@ -304,6 +304,8 @@ class basetype:
        def add(self,obj,w):
                complain("%s %s already has property %s defined"%
                        (obj.type,obj.name,w[0].raw()))
+       def forsites(self,version,copy,fs):
+               return copy
 
 class conflist:
        "A list of some kind of configuration type."
@@ -314,6 +316,9 @@ class conflist:
                self.list.append(self.subtype(w))
        def __str__(self):
                return ', '.join(map(str, self.list))
+       def forsites(self,version,copy,fs):
+               most_recent=self.list[len(self.list)-1]
+               return most_recent.forsites(version,copy,fs)
 def listof(subtype):
        return lambda w: conflist(subtype, w)
 
@@ -602,6 +607,7 @@ def set_property(obj,w):
                obj.properties[propname].add(obj,w)
        else:
                obj.properties[propname]=kw[0](w)
+       return obj.properties[propname]
 
 class FilterState:
        def __init__(self):
@@ -679,8 +685,11 @@ def pline(il,filterstate,allow_include=False):
                complain("Not allowed to set VPN properties here")
                return []
        else:
-               set_property(current,w)
-               return copyout()
+               prop=set_property(current,w)
+               out=[copyout_core()]
+               out=prop.forsites(output_version,out,filterstate)
+               if len(out)==0: return [indent + '#', copyout_core(), '\n']
+               return [indent + ' '.join(out) + '\n']
 
        complain("unknown keyword '%s'"%(keyword.raw()))