X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=secnet.git;a=blobdiff_plain;f=make-secnet-sites;h=f102b1fb93f5339b5fc632c856f8e760179409e5;hp=8e3ec7360f0379d40d4dda703965a5217281225a;hb=9b8369e07aeba5ed2c69fb4a7f74d07c8cebe015;hpb=00152558bd7f5c51096fd2fa83e8609aa02aa29c diff --git a/make-secnet-sites b/make-secnet-sites index 8e3ec73..f102b1f 100755 --- a/make-secnet-sites +++ b/make-secnet-sites @@ -54,6 +54,7 @@ import time import sys import os import getopt +import re # The ipaddr library is installed as part of secnet sys.path.append("/usr/local/share/secnet") @@ -108,6 +109,18 @@ class email: def __str__(self): return '<%s>'%(self.addr) +class boolean: + "A boolean" + def __init__(self,w): + if re.match('[TtYy1]',w[1]): + self.b=True + elif re.match('[FfNn0]',w[1]): + self.b=False + else: + complain("invalid boolean value"); + def __str__(self): + return ['False','True'][self.b] + class num: "A decimal number" def __init__(self,w): @@ -148,7 +161,8 @@ keywords={ 'networks':(networks,"Claimed networks"), 'pubkey':(rsakey,"RSA public site key"), 'peer':(single_ipaddr,"Tunnel peer IP address"), - 'address':(address,"External contact address and port") + 'address':(address,"External contact address and port"), + 'mobile':(boolean,"Site is mobile"), } def sp(name,value): @@ -165,7 +179,7 @@ global_properties={ 'setup-retries':sp, 'wait-time':sp, 'renegotiate-time':sp, - 'restrict-nets':(lambda name,value:"# restrict-nets %s\n"%value) + 'restrict-nets':(lambda name,value:"# restrict-nets %s\n"%value), } class level: @@ -252,7 +266,8 @@ class sitelevel(level): 'address':sp, 'networks':None, 'peer':None, - 'pubkey':(lambda n,v:"key %s;\n"%v) + 'pubkey':(lambda n,v:"key %s;\n"%v), + 'mobile':sp, }) require_properties={ 'dh':"Diffie-Hellman group", @@ -261,7 +276,7 @@ class sitelevel(level): 'networks':"Networks claimed by the site", 'hash':"hash function", 'peer':"Gateway address of the site", - 'pubkey':"RSA public key of the site" + 'pubkey':"RSA public key of the site", } def __init__(self,w): level.__init__(self,w) @@ -364,6 +379,11 @@ def pline(i): complain("unknown keyword '%s'"%(keyword)) +def pfilepath(pathname): + f=open(pathname) + pfile(pathname,f.readlines()) + f.close() + def pfile(name,lines): "Process a file" global file,line @@ -435,19 +455,14 @@ else: if not ok: print "caller not in group %s"%group sys.exit(1) - f=open(header) - headerinput=f.readlines() - f.close() - pfile(header,headerinput) + pfilepath(header) userinput=sys.stdin.readlines() pfile("user input",userinput) else: if len(sys.argv)>3: print "Too many arguments" sys.exit(1) - f=open(sys.argv[1]) - pfile(sys.argv[1],f.readlines()) - f.close() + pfilepath(sys.argv[1]) of=sys.stdout if len(sys.argv)>2: of=open(sys.argv[2],'w')