X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/tripe/blobdiff_plain/1b9a78583fbff3967b91e128dd7f57fcbcdc8db9..14b77b60fdb2b36409a403bf8753d877f33e32b9:/keys/tripe-keys.in diff --git a/keys/tripe-keys.in b/keys/tripe-keys.in index ad8671e1..901e09b9 100644 --- a/keys/tripe-keys.in +++ b/keys/tripe-keys.in @@ -344,8 +344,9 @@ Subcommands available: args = commands.keys() args.sort() for c in args: - func, min, max, help = commands[c] - print '%s %s' % (c, help) + try: func, min, max, help = commands[c] + except KeyError: die("unknown command `%s'" % c) + print '%s%s%s' % (c, help and ' ', help) ###-------------------------------------------------------------------------- ### Commands: newmaster @@ -498,22 +499,34 @@ def cmd_clean(args): ###-------------------------------------------------------------------------- ### Commands: check -def cmd_check(args): +def check_key(k): now = T.time() thresh = int(conf['kx-warn-days']) * 86400 - for krf in ['master', 'keyring.pub']: - if not OS.path.exists(krf): continue - kr = C.KeyFile(krf) - for k in kr.itervalues(): - if k.exptime == C.KEXP_FOREVER: continue - elif k.exptime == C.KEXP_EXPIRE: left = -1 - else: left = k.exptime - now - if left < 0: - print "key `%s' HAS EXPIRED" % k.tag - elif left < thresh: - if left >= 86400: n, u, uu = left // 86400, 'day', 'days' - else: n, u, uu = left // 3600, 'hour', 'hours' - print "key `%s' EXPIRES in %d %s" % (k.tag, n, n == 1 and u or uu) + if k.exptime == C.KEXP_FOREVER: return None + elif k.exptime == C.KEXP_EXPIRE: left = -1 + else: left = k.exptime - now + if left < 0: + return "key `%s' HAS EXPIRED" % k.tag + elif left < thresh: + if left >= 86400: n, u, uu = left // 86400, 'day', 'days' + else: n, u, uu = left // 3600, 'hour', 'hours' + return "key `%s' EXPIRES in %d %s" % (k.tag, n, n == 1 and u or uu) + else: + return None + +def cmd_check(args): + if OS.path.exists('keyring.pub'): + for k in C.KeyFile('keyring.pub').itervalues(): + whinge = check_key(k) + if whinge is not None: print whinge + if OS.path.exists('master'): + whinges = [] + for k in C.KeyFile('master').itervalues(): + whinge = check_key(k) + if whinge is None: break + whinges.append(whinge) + else: + for whinge in whinges: print whinge ###-------------------------------------------------------------------------- ### Commands: mtu @@ -542,9 +555,6 @@ def cmd_mtu(args): ###-------------------------------------------------------------------------- ### Main driver. -## Exceptions. -class UsageError (Exception): pass - commands = {'help': (cmd_help, 0, 1, ''), 'newmaster': (cmd_newmaster, 0, 0, ''), 'setup': (cmd_setup, 0, 0, ''), @@ -592,10 +602,12 @@ def main(argv): cmd_help([]) else: c = argv[1] - func, min, max, help = commands[c] + try: func, min, max, help = commands[c] + except KeyError: die("unknown command `%s'" % c) args = argv[2:] - if len(args) < min or (max > 0 and len(args) > max): - raise UsageError, (c, help) + if len(args) < min or (max is not None and len(args) > max): + SYS.stderr.write('Usage: %s %s%s%s\n' % (quis, c, help and ' ', help)) + SYS.exit(1) func(args) ###----- That's all, folks --------------------------------------------------