X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=make-secnet-sites;h=70fa7a4b9dd7483dc78b3612dd6e25b04fa65c60;hb=4d9d6e20e19c1aaa0d138e70897d136b36d673c0;hp=6e76636c1d30a4f3f4104a8e259e1041d9a52be6;hpb=3f8b562ea10431add0ce06079f303f130d0280be;p=secnet.git diff --git a/make-secnet-sites b/make-secnet-sites index 6e76636..70fa7a4 100755 --- a/make-secnet-sites +++ b/make-secnet-sites @@ -293,33 +293,34 @@ class PkmElide(PkmBase): class OpBase(): # Base case is reading a sites file from self.inputfilee. # 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): - f=open(self.sitesfile+"-tmp",'w') + 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") - f.write("# generated %s, invoked by %s\n"% - (time.asctime(time.localtime(time.time())), - self.user)) + 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") - f.close() - os.rename(self.sitesfile+"-tmp",self.sitesfile) + 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 is_service(self): return 0 - 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 check_group(self,group,w): pass def write_out(self): if self.outputfile is None: @@ -331,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: @@ -379,6 +392,10 @@ class OpUserv(OpBase): os.rename(self.groupfiledir+"/T"+self.group.groupname(), self.groupfiledir+"/R"+self.group.groupname()) 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)) def write_out_contents(self,f): for i in self.headerinput: f.write(i) files=os.listdir(self.groupfiledir) @@ -390,7 +407,6 @@ class OpUserv(OpBase): def parse_args(): global opmode - global service global prefix global key_prefix global debug_level @@ -405,6 +421,7 @@ def parse_args(): 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, @@ -431,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] @@ -575,10 +591,10 @@ class rsakey (pubkey): self.n=w[3].bignum_10('rsa','rsa n') if len(w) >= 5: w[4].email() self.a='rsa1' - self.d=base91s_encode(b'%d %s %s' % - (self.l, - self.e.encode('ascii'), - self.n.encode('ascii'))) + self.d=base91s_encode(('%d %s %s' % + (self.l, + self.e, + self.n)).encode('ascii')) # ^ this allows us to use the pubkey.forsites() # method for output in versions>=2 def __str__(self):