X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=make-secnet-sites;h=3d7d75597ec475ade7493bc61030381a4d837973;hb=c8e3385687277ff6b165a2d025914aeaf74e45d0;hp=ac3efe64d63b27b35c7a6ec55b1550c1854c4680;hpb=aedbecae9e5f0a7ea5e8309d56978daa56f1d9cc;p=secnet.git diff --git a/make-secnet-sites b/make-secnet-sites index ac3efe6..3d7d755 100755 --- a/make-secnet-sites +++ b/make-secnet-sites @@ -149,8 +149,8 @@ class Tainted: bad_name=re.compile(r'^[^a-zA-Z]|[^-_0-9a-zA-Z]') # secnet accepts _ at start of names, but we reserve that bad_name_counter=0 - def name(self): - ok=self._re_ok(Tainted.bad_name,'name') + def name(self,what='name'): + ok=self._re_ok(Tainted.bad_name,what) return self._rtn(ok, '_line%d_%s' % (self._line, id(self))) @@ -182,6 +182,13 @@ class Tainted: % (minn,maxx)) return self._rtnval(ok,v,minn) + def hexid(self,byteslen,what): + ok=self._re_ok(Tainted.bad_hex,what,byteslen*2) + if ok: + if len(self._s) < byteslen*2: + ok=self._bad(what,'too short') + return self._rtn(ok,ifbad='00'*byteslen) + bad_host=re.compile(r'[^-\][_.:0-9a-zA-Z]') # We permit _ so we can refer to special non-host domains # which have A and AAAA RRs. This is a crude check and we may @@ -205,12 +212,18 @@ class Tainted: ok=self._re_ok(Tainted.bad_groupname,'group name',64) return self._rtn(ok) + bad_base91=re.compile(r'[^!-~]|[\'\"\\]') + def base91(self,what='base91'): + ok=self._re_ok(Tainted.bad_base91,what,4096) + return self._rtn(ok) + def parse_args(): global service global inputfile global header global groupfiledir global sitesfile + global outputfile global group global user global of @@ -258,8 +271,6 @@ def parse_args(): print("Too many arguments") sys.exit(1) (inputfile, outputfile) = (av.arg + [None]*2)[0:2] - if outputfile is None: of=sys.stdout - else: of=open(outputfile,'w') parse_args() @@ -543,6 +554,7 @@ def moan(msg): "Complain about something in general" global complaints print(msg); + if complaints is None: sys.exit(1) complaints=complaints+1 class UntaintedRoot(): @@ -558,10 +570,12 @@ 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 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): @@ -775,4 +789,11 @@ if service: f.close() os.rename(sitesfile+"-tmp",sitesfile) else: + if outputfile is None: + of=sys.stdout + else: + tmp_outputfile=outputfile+'~tmp~' + of=open(tmp_outputfile,'w') outputsites(of) + if outputfile is not None: + os.rename(tmp_outputfile,outputfile)