X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=make-secnet-sites;h=a84479ca0ce2fc41939d0c73d3e50721aa57bbb0;hb=7e311a0bf071a2fb1fc6857a9e9828b8c8f7da54;hp=c484e4c69f158244cb70138bab5fffa362ed77b2;hpb=edbccac5769019cb3d2c618bf50a2ea71f7d4716;p=secnet.git diff --git a/make-secnet-sites b/make-secnet-sites index c484e4c..a84479c 100755 --- a/make-secnet-sites +++ b/make-secnet-sites @@ -292,19 +292,35 @@ class PkmElide(PkmBase): class OpBase(): # Base case is reading a sites file from self.inputfilee. - def read_in(self): - if self.inputfile is None: - pfile("stdin",sys.stdin.readlines()) - else: - pfilepath(self.inputfile) - -class OpConf(OpBase): - def is_service(self): return 0 + # And writing a sites file to self.sitesfile. def positional_args(self, av): if len(av.arg)>3: print("Too many arguments") sys.exit(1) (self.inputfile, self.outputfile) = (av.arg + [None]*2)[0:2] + def read_in(self): + if self.inputfile is None: + self.inputlines = pfile("stdin",sys.stdin.readlines()) + else: + self.inputlines = pfilepath(self.inputfile) + def write_out(self): + if self.outputfile is None: + f=sys.stdout + else: + f=open(self.outputfile+"-tmp",'w') + f.write("# sites file autogenerated by make-secnet-sites\n") + self.write_out_heading(f) + f.write("# use make-secnet-sites to turn this file into a\n") + f.write("# valid /etc/secnet/sites.conf file\n\n") + self.write_out_contents(f) + f.write("# end of sites file\n") + if self.outputfile is not None: + f.close() + os.rename(self.outputfile+"-tmp",self.outputfile) + +class OpConf(OpBase): + opts = ['--conf'] + help = 'sites.conf generation mode (default)' def check_group(self,group,w): pass def write_out(self): if self.outputfile is None: @@ -316,16 +332,28 @@ class OpConf(OpBase): if self.outputfile is not None: os.rename(tmp_outputfile,self.outputfile) +class OpFilter(OpBase): + opts = ['--filter'] + help = 'sites file filtering mode' + def positional_arXgs(self, av): + if len(av.arg)!=1: + print("Too many arguments") + (self.inputfile,) = (av.arg + [None])[0:1] + self.outputfile = None + def write_out_heading(self,f): + f.write("# --filter --output-version=%d\n"%output_version) + def write_out_contents(self,f): + for i in self.inputlines: f.write(i) + class OpUserv(OpBase): opts = ['--userv','-u'] help = 'userv service fragment update mode' - def is_service(self): return 1 def positional_args(self, av): if len(av.arg)!=4: print("Wrong number of arguments") sys.exit(1) (self.header, self.groupfiledir, - self.sitesfile, self.group) = av.arg + self.outputfile, self.group) = av.arg self.group = Tainted(self.group,0,'command line') # untrusted argument from caller if "USERV_USER" not in os.environ: @@ -363,13 +391,12 @@ class OpUserv(OpBase): f.close() os.rename(self.groupfiledir+"/T"+self.group.groupname(), self.groupfiledir+"/R"+self.group.groupname()) - f=open(self.sitesfile+"-tmp",'w') - f.write("# sites file autogenerated by make-secnet-sites\n") + OpBase.write_out(self) + def write_out_heading(self,f): f.write("# generated %s, invoked by %s\n"% (time.asctime(time.localtime(time.time())), self.user)) - f.write("# use make-secnet-sites to turn this file into a\n") - f.write("# valid /etc/secnet/sites.conf file\n\n") + def write_out_contents(self,f): for i in self.headerinput: f.write(i) files=os.listdir(self.groupfiledir) for i in files: @@ -377,14 +404,9 @@ class OpUserv(OpBase): j=open(self.groupfiledir+"/"+i) f.write(j.read()) j.close() - f.write("# end of sites file\n") - f.close() - os.rename(self.sitesfile+"-tmp",self.sitesfile) - def parse_args(): global opmode - global service global prefix global key_prefix global debug_level @@ -398,6 +420,8 @@ def parse_args(): nargs=0, fn=(lambda v,ns,*x: setattr(ns,'opmode',how)), help=how().help) + add_opmode(OpConf) + add_opmode(OpFilter) add_opmode(OpUserv) ap.add_argument('--conf-key-prefix', action=ActionNoYes, default=True, @@ -424,7 +448,6 @@ def parse_args(): debug_level = av.debug debugrepr('av',av) opmode = getattr(av,'opmode',OpConf)() - service = opmode.is_service() prefix = '' if av.prefix is None else av.prefix[0] key_prefix = av.conf_key_prefix output_version = av.output_version[0]