chiark / gitweb /
changelog, Makefile.in: finalise 0.3.4
[secnet.git] / make-secnet-sites
index c49467a19f687c5f1fb78dfb15ebe44a5790c9ae..b8a2077d8e76274b326817b65dfc523e0f20ec62 100755 (executable)
@@ -57,8 +57,8 @@ import getopt
 import re
 
 # The ipaddr library is installed as part of secnet
-sys.path.append("/usr/local/share/secnet")
-sys.path.append("/usr/share/secnet")
+sys.path.insert(0,"/usr/local/share/secnet")
+sys.path.insert(0,"/usr/share/secnet")
 import ipaddr
 
 VERSION="0.1.18"
@@ -267,7 +267,7 @@ class sitelevel(level):
         'networks':None,
         'peer':None,
         'pubkey':(lambda n,v:"key %s;\n"%v),
-        'address':None,
+        'address':(lambda n,v:"address %s;\n"%v),
         'mobile':sp,
        })
        require_properties={
@@ -333,24 +333,23 @@ def set_property(obj,w):
 def pline(i,allow_include=False):
        "Process a configuration file line"
        global allow_defs, obstack, root
-       w=string.split(i)
-       if len(w)==0: return
+       w=string.split(i.rstrip('\n'))
+       if len(w)==0: return [i]
        keyword=w[0]
        current=obstack[len(obstack)-1]
        if keyword=='end-definitions':
                allow_defs=sitelevel.depth
                obstack=[root]
-               return
+               return [i]
        if keyword=='include':
                if not allow_include:
                        complain("include not permitted here")
-                       return
+                       return []
                if len(w) != 2:
                        complain("include requires one argument")
-                       return
+                       return []
                newfile=os.path.join(os.path.dirname(file),w[1])
-               pfilepath(newfile,allow_include=allow_include)
-               return
+               return pfilepath(newfile,allow_include=allow_include)
        if levels.has_key(keyword):
                # We may go up any number of levels, but only down by one
                newdepth=levels[keyword].depth
@@ -376,37 +375,39 @@ def pline(i,allow_include=False):
                        if nl.depth<allow_defs:
                                complain("New definitions not allowed at "
                                        "level %d"%nl.depth)
+                               # we risk crashing if we continue
+                               sys.exit(1)
                        current.children[w[1]]=nl
                        current=nl
                obstack.append(current)
-               return
+               return [i]
        if current.allow_properties.has_key(keyword):
                set_property(current,w)
-               return
+               return [i]
        else:
                complain("Property %s not allowed at %s level"%
                        (keyword,current.type))
-               return
+               return []
 
        complain("unknown keyword '%s'"%(keyword))
 
 def pfilepath(pathname,allow_include=False):
        f=open(pathname)
-       lines=f.readlines()
-       pfile(pathname,lines,allow_include=allow_include)
+       outlines=pfile(pathname,f.readlines(),allow_include=allow_include)
        f.close()
-       return lines
+       return outlines
 
 def pfile(name,lines,allow_include=False):
        "Process a file"
        global file,line
        file=name
        line=0
+       outlines=[]
        for i in lines:
                line=line+1
                if (i[0]=='#'): continue
-               if (i[len(i)-1]=='\n'): i=i[:len(i)-1] # strip trailing LF
-               pline(i,allow_include=allow_include)
+               outlines += pline(i,allow_include=allow_include)
+       return outlines
 
 def outputsites(w):
        "Output include file for secnet configuration"
@@ -479,7 +480,7 @@ else:
                if len(sys.argv)>3:
                        print "Too many arguments"
                        sys.exit(1)
-               pfilepath(sys.argv[1],allow_include=True)
+               pfilepath(sys.argv[1])
                of=sys.stdout
                if len(sys.argv)>2:
                        of=open(sys.argv[2],'w')