#!/usr/bin/env python import os, sys import MySQLdb from federation.util import file_expanding_opts class opt_parser(file_expanding_opts): def __init__(self): OptionParser.__init__(self, usage="%prog [opts] (--help for details)", version="0.1") self.add_option('-u', '--user', dest='user', action='store', default=None, help="User to confirm key of") self.add_option('-f', '--keyfile', dest='keyfile', action='callback', callback=self.expand_file, type='str', default=None, help="file containing pubkey to confirm") self.add_option('-k', '--key', dest='key', default=None, action='callback', callback=self.expand_file, type='str', help='Key on the command line') self.add_option('-q', '--quiet', dest='verbose', action='store_false', default=True, help="No output") self.add_option('-C', dest='dummy', help="Compatibility option, no function") def read_keyfile(file): """ Return the contents of file as a single line """ f = open(file, "r") key = "" for line in f: line = line.strip() key += line f.close() return key query_template = """ SELECT uid FROM user_pubkeys WHERE uid = '%s' AND pubkey='%s' """ parser = opt_parser() opts, args = parser.parse_args() if len(args): parser.error("Unlabeled option. Did you forget to quote a key?") if opts.user: user = opts.user else: parser.error("--user is required") if opts.keyfile: try: key = read_keyfile(opts.keyfile) except IOError, e: sys.exit('Cannot read keyfile %s: %s' % (opts.keyfile, e)) elif opts.key: key = opts.key.strip() else: parser.error("--keyfile or --key is required") query = query_template % (user, key) try: db = MySQLdb.connect(db='tbdb') except Exception, e: if len(e.args) == 2: num, str = e.args else: str = unicode(e) num = -1 sys.exit("Cannot connect: %s (%d)" % (str, num)) c = db.cursor() c.execute(query) if len(c.fetchall()) == 1: if opts.verbose: print "Confirmed" sys.exit(0) else: if opts.verbose: print "No such key for %s" % user sys.exit(1)