source: fedd/confirm_sshkey.py @ 457c4ac

axis_examplecompt_changesinfo-opsversion-1.30version-2.00version-3.01version-3.02
Last change on this file since 457c4ac was 457c4ac, checked in by Ted Faber <faber@…>, 15 years ago

Command line utility to check keys in a world without a modified addpubkey

  • Property mode set to 100755
File size: 1.7 KB
Line 
1#!/usr/local/bin/python
2
3import os, sys
4import MySQLdb
5from optparse import OptionParser
6
7
8class opt_parser(OptionParser):
9    def __init__(self):
10        OptionParser.__init__(self, usage="%prog [opts] (--help for details)",
11                version="0.1")
12        self.add_option('-u', '--user', dest='user', action='store',
13                default=None, help="User to confirm key of")
14        self.add_option('-f', '--keyfile', dest='keyfile', action='store',
15                default=None, help="file containing pubkey to confirm")
16        self.add_option('-k', '--key', dest='key',
17                default=None, action='store',
18                help='Key on the command line')
19        self.add_option('-q', '--quiet', dest='verbose', action='store_false', 
20                default=True, help="No output")
21
22
23def read_keyfile(file):
24    """
25    Return the contents of file as a single line
26    """
27
28    f = open(file, "r")
29    key = ""
30    for line in f:
31        line = line.strip()
32        key += line
33    f.close()
34    return key
35
36
37query_template = """
38SELECT
39    uid
40FROM user_pubkeys
41WHERE uid = '%s' AND pubkey='%s'
42"""
43parser = opt_parser()
44opts, args = parser.parse_args()
45if len(args):
46    parser.error("Unlabeled option.  Did you forget to quote a key?")
47
48if opts.user: user = opts.user
49else: parser.error("--user is required")
50
51if opts.keyfile: 
52    try:
53        key = read_keyfile(opts.keyfile)
54    except IOError, e:
55        sys.exit('Cannot read keyfile %s: %s' % (opts.keyfile, e))
56elif opts.key: key = opts.key.strip()
57else: parser.error("--keyfile or --key is required")
58
59query = query_template % (user, key)
60
61db = MySQLdb.connect(db='tbdb')
62c = db.cursor()
63c.execute(query)
64
65if len(c.fetchall()) == 1:
66    if opts.verbose: print "Confirmed"
67    sys.exit(0)
68else:
69    if opts.verbose: print "No such key for %s" % user
70    sys.exit(1)
Note: See TracBrowser for help on using the repository browser.