sys.path.insert(1,"/usr/local/share/secnet")
sys.path.insert(1,"/usr/share/secnet")
import ipaddrset
+import base91
from argparseactionnoyes import ActionNoYes
VERSION="0.1.18"
+max_version = 1
+
from sys import version_info
if version_info.major == 2: # for python2
import codecs
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=''):
global prefix
global key_prefix
global debug_level
+ global output_version
ap = argparse.ArgumentParser(description='process secnet sites files')
ap.add_argument('--userv', '-u', action='store_true',
ap.add_argument('--conf-key-prefix', action=ActionNoYes,
default=True,
help='prefix conf file key names derived from sites data')
+ ap.add_argument('--output-version', nargs=1, type=int,
+ help='sites file output version',
+ default=[max_version])
ap.add_argument('--prefix', '-P', nargs=1,
help='set prefix')
ap.add_argument('--debug', '-D', action='count', default=0)
service = 1 if av.userv else 0
prefix = '' if av.prefix is None else av.prefix[0]
key_prefix = av.conf_key_prefix
+ output_version = av.output_version[0]
if service:
if len(av.arg)!=4:
print("Wrong number of arguments")
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):