chiark / gitweb /
make-secnet-sites: pubkeys: Allow multiple
[secnet.git] / make-secnet-sites
index 2c0543364afa0ab8f244233c6c285e614c9374ad..b666351e9e05917f62367bb2048012bbf7336b05 100755 (executable)
@@ -391,7 +391,7 @@ keywords={
  'renegotiate-time':(num,"Time after key setup to begin renegotiation (ms)"),
  'restrict-nets':(networks,"Allowable networks"),
  'networks':(networks,"Claimed networks"),
- 'pubkey':(rsakey,"RSA public site key"),
+ 'pubkey':(listof(rsakey),"RSA public site key"),
  'peer':(single_ipaddr,"Tunnel peer IP address"),
  'address':(address,"External contact address and port"),
  'mobile':(boolean,"Site is mobile"),
@@ -511,7 +511,7 @@ class sitelevel(level):
         'address':sp,
         'networks':None,
         'peer':None,
-        'pubkey':(lambda n,v:"key %s;\n"%v),
+        'pubkey':None,
         'mobile':sp,
        })
        require_properties={
@@ -531,6 +531,8 @@ class sitelevel(level):
                w.write("%s {\n"%(self.kname()))
                self.indent(w,ind+2)
                w.write("name \"%s\";\n"%(np,))
+               self.indent(w,ind+2)
+               w.write("key %s;\n"%str(self.properties["pubkey"].list[0]))
                self.output_props(w,ind+2)
                self.indent(w,ind+2)
                w.write("link netlink {\n");
@@ -570,10 +572,13 @@ allow_defs=0   # Level above which new definitions are permitted
 def set_property(obj,w):
        "Set a property on a configuration node"
        prop=w[0]
-       if prop.raw() in obj.properties:
-               obj.properties[prop.raw_mark_ok()].add(obj,w)
+       propname=prop.raw_mark_ok()
+       kw=keywords[propname]
+       if len(kw) >= 3: propname=kw[2] # for aliases
+       if propname in obj.properties:
+               obj.properties[propname].add(obj,w)
        else:
-               obj.properties[prop.raw()]=keywords[prop.raw_mark_ok()][0](w)
+               obj.properties[propname]=kw[0](w)
 
 
 def pline(il,allow_include=False):