sys.path.insert(1,"/usr/local/share/secnet")
sys.path.insert(1,"/usr/share/secnet")
import ipaddrset
+import base91
from argparseactionnoyes import ActionNoYes
if debug_level > 0:
print(repr(args), file=sys.stderr)
+def base91s_encode(bindata):
+ return base91.encode(bindata).replace('"',"-")
+
+def base91s_decode(string):
+ return base91.decode(string.replace("-",'"'))
+
class Tainted:
def __init__(self,s,tline=None,tfile=None):
self._s=s
if maxlen is None: maxlen=max[what]
self._max_ok(what,maxlen)
if self._ok is False: return False
- if bad.search(self._s): return self._bad(what,'bad syntax')
+ if bad.search(self._s):
+ #print(repr(self), file=sys.stderr)
+ return self._bad(what,'bad syntax')
return True
def _rtnval(self, is_ok, ifgood, ifbad=''):
else:
obj.properties[propname]=kw[0](w)
+class FilterState:
+ def __init__(self):
+ self.reset()
+ def reset(self):
+ # called when we enter a new node,
+ # in particular, at the start of each site
+ pass
-def pline(il,allow_include=False):
+def pline(il,filterstate,allow_include=False):
"Process a configuration file line"
global allow_defs, obstack, root
w=il.rstrip('\n').split()
w=list([Tainted(x) for x in w])
keyword=w[0]
current=obstack[len(obstack)-1]
- copyout=lambda: [' '*len(obstack) +
- ' '.join([ww.output() for ww in w]) +
- '\n']
+ copyout_core=lambda: ' '.join([ww.output() for ww in w])
+ indent=' '*len(obstack)
+ copyout=lambda: [indent + copyout_core() + '\n']
if keyword=='end-definitions':
keyword.raw_mark_ok()
allow_defs=sitelevel.depth
sys.exit(1)
current.children[tname]=nl
current=nl
+ filterstate.reset()
obstack.append(current)
return copyout()
if keyword.raw() not in current.allow_properties:
file=name
line=0
outlines=[]
+ filterstate = FilterState()
for i in lines:
line=line+1
if (i[0]=='#'): continue
- outlines += pline(i,allow_include=allow_include)
+ outlines += pline(i,filterstate,allow_include=allow_include)
return outlines
def outputsites(w):