From e50d3907aefcc6977fa207c2024eec841dc3c3f2 Mon Sep 17 00:00:00 2001 From: Scott Kitterman Date: Mon, 26 Mar 2018 03:35:03 -0400 Subject: [PATCH] Fixup script structure for entrypoints --- dkim/arcsign.py | 52 ++++++++++++----------- dkim/arcverify.py | 32 ++++++++------- dkim/dkimsign.py | 100 +++++++++++++++++++++++---------------------- dkim/dkimverify.py | 34 ++++++++------- dkim/dknewkey.py | 4 +- setup.py | 10 ++--- 6 files changed, 124 insertions(+), 108 deletions(-) diff --git a/dkim/arcsign.py b/dkim/arcsign.py index b37ac75..3363299 100644 --- a/dkim/arcsign.py +++ b/dkim/arcsign.py @@ -35,32 +35,36 @@ import dkim logging.basicConfig(level=10) -if len(sys.argv) != 4: - print("Usage: arcsign.py selector domain privatekeyfile", file=sys.stderr) - sys.exit(1) +def main(): + if len(sys.argv) != 4: + print("Usage: arcsign.py selector domain privatekeyfile", file=sys.stderr) + sys.exit(1) -if sys.version_info[0] >= 3: - # Make sys.stdin and stdout binary streams. - sys.stdin = sys.stdin.detach() - sys.stdout = sys.stdout.detach() + if sys.version_info[0] >= 3: + # Make sys.stdin and stdout binary streams. + sys.stdin = sys.stdin.detach() + sys.stdout = sys.stdout.detach() -selector = sys.argv[1].encode('ascii') -domain = sys.argv[2].encode('ascii') -privatekeyfile = sys.argv[3] + selector = sys.argv[1].encode('ascii') + domain = sys.argv[2].encode('ascii') + privatekeyfile = sys.argv[3] -message = sys.stdin.read() + message = sys.stdin.read() -# Pick a cv status -cv = dkim.CV_None -if re.search('arc-seal', message, re.IGNORECASE): - cv = dkim.CV_Pass + # Pick a cv status + cv = dkim.CV_None + if re.search('arc-seal', message, re.IGNORECASE): + cv = dkim.CV_Pass -#try: -sig = dkim.arc_sign(message, selector, domain, open(privatekeyfile, "rb").read(), - domain + ": none", cv) -for line in sig: - sys.stdout.write(line) -sys.stdout.write(message) -#except Exception as e: -# print(e, file=sys.stderr) - #sys.stdout.write(message) + #try: + sig = dkim.arc_sign(message, selector, domain, open(privatekeyfile, "rb").read(), + domain + ": none", cv) + for line in sig: + sys.stdout.write(line) + sys.stdout.write(message) + #except Exception as e: + # print(e, file=sys.stderr) + #sys.stdout.write(message) + +if __name__ == "__main__": + main() diff --git a/dkim/arcverify.py b/dkim/arcverify.py index 3ed3b4f..e746840 100644 --- a/dkim/arcverify.py +++ b/dkim/arcverify.py @@ -32,19 +32,23 @@ import sys import dkim -if sys.version_info[0] >= 3: - # Make sys.stdin a binary stream. - sys.stdin = sys.stdin.detach() +def main(): + if sys.version_info[0] >= 3: + # Make sys.stdin a binary stream. + sys.stdin = sys.stdin.detach() -message = sys.stdin.read() -verbose = '-v' in sys.argv -if verbose: - logging.basicConfig(level=10) - a = dkim.ARC(message) - cv, results, comment = a.verify() -else: - cv, results, comment = dkim.arc_verify(message) + message = sys.stdin.read() + verbose = '-v' in sys.argv + if verbose: + logging.basicConfig(level=10) + a = dkim.ARC(message) + cv, results, comment = a.verify() + else: + cv, results, comment = dkim.arc_verify(message) -print("arc verification: cv=%s %s" % (cv, comment)) -if verbose: - print(repr(results)) + print("arc verification: cv=%s %s" % (cv, comment)) + if verbose: + print(repr(results)) + +if __name__ == "__main__": + main() diff --git a/dkim/dkimsign.py b/dkim/dkimsign.py index ff36c97..089d464 100644 --- a/dkim/dkimsign.py +++ b/dkim/dkimsign.py @@ -29,53 +29,57 @@ import argparse import dkim -# Backward compatibility hack because argparse doesn't support optional -# positional arguments -arguments=['--'+arg if arg[:8] == 'identity' else arg for arg in sys.argv[1:]] -parser = argparse.ArgumentParser( - description='Produce DKIM signature for email messages.', - epilog="message to be signed follows commands on stdin") -parser.add_argument('selector', action="store") -parser.add_argument('domain', action="store") -parser.add_argument('privatekeyfile', action="store") -parser.add_argument('--hcanon', choices=['simple', 'relaxed'], - default='relaxed', - help='Header canonicalization algorithm: default=relaxed') -parser.add_argument('--bcanon', choices=['simple', 'relaxed'], - default='simple', - help='Body canonicalization algorithm: default=simple') -parser.add_argument('--signalg', choices=['rsa-sha256', 'ed25519-sha256', 'rsa-sha1'], - default='rsa-sha256', - help='Signature algorithm: default=rsa-sha256') -parser.add_argument('--identity', help='Optional value for i= tag.') -args=parser.parse_args(arguments) -include_headers = None -length = None -logger = None +def main(): + # Backward compatibility hack because argparse doesn't support optional + # positional arguments + arguments=['--'+arg if arg[:8] == 'identity' else arg for arg in sys.argv[1:]] + parser = argparse.ArgumentParser( + description='Produce DKIM signature for email messages.', + epilog="message to be signed follows commands on stdin") + parser.add_argument('selector', action="store") + parser.add_argument('domain', action="store") + parser.add_argument('privatekeyfile', action="store") + parser.add_argument('--hcanon', choices=['simple', 'relaxed'], + default='relaxed', + help='Header canonicalization algorithm: default=relaxed') + parser.add_argument('--bcanon', choices=['simple', 'relaxed'], + default='simple', + help='Body canonicalization algorithm: default=simple') + parser.add_argument('--signalg', choices=['rsa-sha256', 'ed25519-sha256', 'rsa-sha1'], + default='rsa-sha256', + help='Signature algorithm: default=rsa-sha256') + parser.add_argument('--identity', help='Optional value for i= tag.') + args=parser.parse_args(arguments) + include_headers = None + length = None + logger = None -if sys.version_info[0] >= 3: - args.selector = bytes(args.selector, encoding='UTF-8') - args.domain = bytes(args.domain, encoding='UTF-8') - if args.identity is not None: - args.identity = bytes(args.identity, encoding='UTF-8') - args.hcanon = bytes(args.hcanon, encoding='UTF-8') - args.bcanon = bytes(args.bcanon, encoding='UTF-8') - args.signalg = bytes(args.signalg, encoding='UTF-8') - # Make sys.stdin and stdout binary streams. - sys.stdin = sys.stdin.detach() - sys.stdout = sys.stdout.detach() -canonicalize = (args.hcanon, args.bcanon) + if sys.version_info[0] >= 3: + args.selector = bytes(args.selector, encoding='UTF-8') + args.domain = bytes(args.domain, encoding='UTF-8') + if args.identity is not None: + args.identity = bytes(args.identity, encoding='UTF-8') + args.hcanon = bytes(args.hcanon, encoding='UTF-8') + args.bcanon = bytes(args.bcanon, encoding='UTF-8') + args.signalg = bytes(args.signalg, encoding='UTF-8') + # Make sys.stdin and stdout binary streams. + sys.stdin = sys.stdin.detach() + sys.stdout = sys.stdout.detach() + canonicalize = (args.hcanon, args.bcanon) -message = sys.stdin.read() -try: - d = dkim.DKIM(message,logger=logger, - signature_algorithm=args.signalg) - sig = d.sign(args.selector, args.domain, open( - args.privatekeyfile, "rb").read(), identity = args.identity, - canonicalize=canonicalize, include_headers=include_headers, - length=length) - sys.stdout.write(sig) - sys.stdout.write(message) -except Exception as e: - print(e, file=sys.stderr) - sys.stdout.write(message) + message = sys.stdin.read() + try: + d = dkim.DKIM(message,logger=logger, + signature_algorithm=args.signalg) + sig = d.sign(args.selector, args.domain, open( + args.privatekeyfile, "rb").read(), identity = args.identity, + canonicalize=canonicalize, include_headers=include_headers, + length=length) + sys.stdout.write(sig) + sys.stdout.write(message) + except Exception as e: + print(e, file=sys.stderr) + sys.stdout.write(message) + +if __name__ == "__main__": + main() diff --git a/dkim/dkimverify.py b/dkim/dkimverify.py index 2787566..e1309ac 100644 --- a/dkim/dkimverify.py +++ b/dkim/dkimverify.py @@ -27,19 +27,23 @@ import sys import dkim -if sys.version_info[0] >= 3: - # Make sys.stdin a binary stream. - sys.stdin = sys.stdin.detach() +def main(): + if sys.version_info[0] >= 3: + # Make sys.stdin a binary stream. + sys.stdin = sys.stdin.detach() -message = sys.stdin.read() -verbose = '-v' in sys.argv -if verbose: - import logging - d = dkim.DKIM(message, logger=logging) - res = d.verify() -else: - res = dkim.verify(message) -if not res: - print("signature verification failed") - sys.exit(1) -print("signature ok") + message = sys.stdin.read() + verbose = '-v' in sys.argv + if verbose: + import logging + d = dkim.DKIM(message, logger=logging) + res = d.verify() + else: + res = dkim.verify(message) + if not res: + print("signature verification failed") + sys.exit(1) + print("signature ok") + +if __name__ == "__main__": + main() diff --git a/dkim/dknewkey.py b/dkim/dknewkey.py index bb9425d..395bc54 100644 --- a/dkim/dknewkey.py +++ b/dkim/dknewkey.py @@ -90,7 +90,7 @@ def ExtractEd25519PublicKey(private_key_file, dns_file, priv_key): print >> dns_fp, "k=ed25519; p={0}".format(output) dns_fp.close() -def main(argv): +def main(): parser = argparse.ArgumentParser( description='Produce DKIM keys.',) parser.add_argument('key_name', action="store") @@ -121,4 +121,4 @@ def main(argv): if __name__ == '__main__': - main(sys.argv) + main() diff --git a/setup.py b/setup.py index 4294f0b..7349cf5 100644 --- a/setup.py +++ b/setup.py @@ -41,11 +41,11 @@ verification.""", packages = ["dkim"], entry_points = { 'console_scripts' : [ - 'arcsign = dkim.arcsign', - 'arverify = dkim.arcverify', - 'dkimgsign = dkim.dkimsign', - 'dkimverify = dkim.dkimverify', - 'dknewkey = dkim.dknewkey' + 'arcsign = dkim.arcsign:main', + 'arverify = dkim.arcverify:main', + 'dkimgsign = dkim.dkimsign:main', + 'dkimverify = dkim.dkimverify:main', + 'dknewkey = dkim.dknewkey:main' ], }, data_files = [(os.path.join('share', 'man', 'man1'),