From fa6c8b292dc2102fb87d0730bf47ff8ad68cbb8a Mon Sep 17 00:00:00 2001 From: jstanley Date: Mon, 20 Jul 2009 14:21:25 -0400 Subject: Rename to key_checker.py, refactor matching, add -m for machine parseable output --- key_checker | 61 ------------------------------------------------ key_checker.py | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+), 61 deletions(-) delete mode 100644 key_checker create mode 100644 key_checker.py diff --git a/key_checker b/key_checker deleted file mode 100644 index e7fdfc4..0000000 --- a/key_checker +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/python -import rpm, rpmUtils.miscutils, sys - -ts=rpm.TransactionSet() -pubkeys={} -pubkeys['unknown'] = 'Unknown signing key' - -def buildKeyList(): - keys = ts.dbMatch(rpm.RPMTAG_NAME, 'gpg-pubkey') - for hdr in keys: - pubkeys[hdr[rpm.RPMTAG_VERSION]]=hdr[rpm.RPMTAG_SUMMARY][4:].rsplit('<',1)[0].rstrip() -def getPkgNevra(hdr): - if hdr[rpm.RPMTAG_EPOCH]: - return '%s-%s:%s-%s.%s' % ( hdr[rpm.RPMTAG_NAME], hdr[rpm.RPMTAG_EPOCH], - hdr[rpm.RPMTAG_VERSION], hdr[rpm.RPMTAG_RELEASE], - hdr[rpm.RPMTAG_ARCH]) - else: - return '%s-%s-%s.%s' % ( hdr[rpm.RPMTAG_NAME], hdr[rpm.RPMTAG_VERSION], - hdr[rpm.RPMTAG_RELEASE], hdr[rpm.RPMTAG_ARCH] ) -def getSig(hdr): - if hdr[rpm.RPMTAG_DSAHEADER]: - keyid = rpmUtils.miscutils.getSigInfo(hdr)[1][2][16:] - try: - return (getPkgNevra(hdr), pubkeys[keyid]) - except KeyError: - return (getPkgNevra(hdr), pubkeys['unknown']) - else: - return (getPkgNevra(hdr), 'unsigned') - -if __name__ == '__main__': - buildKeyList() - pkgs = {} - for keyname in pubkeys.itervalues(): - pkgs[keyname] = [] - pkgs['unsigned'] = [] - try: - foo = sys.argv[1] - for pkg in sys.argv[1:]: - mi=ts.dbMatch(rpm.RPMTAG_NAME, pkg) - exists = False - for hdr in mi: - exists = True - nevra, key=getSig(hdr) - pkgs[key].append(nevra) - if not exists: - sys.stderr.write('Package %s does not exist\n' % pkg) - except IndexError: - mi=ts.dbMatch() - for hdr in mi: - if hdr[rpm.RPMTAG_NAME] == 'gpg-pubkey': - continue - nevra, key = getSig(hdr) - pkgs[key].append(nevra) - for pkg in pkgs.iteritems(): - if pkg[1]: - print pkg[0] - print '-' * len(pkg[0]) - for pkginstance in pkg[1]: - print pkginstance - print - diff --git a/key_checker.py b/key_checker.py new file mode 100644 index 0000000..2130837 --- /dev/null +++ b/key_checker.py @@ -0,0 +1,73 @@ +#!/usr/bin/python +import rpm, rpmUtils.miscutils, sys +from optparse import OptionParser + +ts=rpm.TransactionSet() +pubkeys={} +pubkeys['unknown'] = 'Unknown signing key' + +def buildKeyList(): + keys = ts.dbMatch(rpm.RPMTAG_NAME, 'gpg-pubkey') + for hdr in keys: + pubkeys[hdr[rpm.RPMTAG_VERSION]]=hdr[rpm.RPMTAG_SUMMARY][4:].rsplit('<',1)[0].rstrip() +def getPkgNevra(hdr): + if hdr[rpm.RPMTAG_EPOCH]: + return '%s-%s:%s-%s.%s' % ( hdr[rpm.RPMTAG_NAME], hdr[rpm.RPMTAG_EPOCH], + hdr[rpm.RPMTAG_VERSION], hdr[rpm.RPMTAG_RELEASE], + hdr[rpm.RPMTAG_ARCH]) + else: + return '%s-%s-%s.%s' % ( hdr[rpm.RPMTAG_NAME], hdr[rpm.RPMTAG_VERSION], + hdr[rpm.RPMTAG_RELEASE], hdr[rpm.RPMTAG_ARCH] ) +def getSig(hdr): + if hdr[rpm.RPMTAG_DSAHEADER]: + keyid = rpmUtils.miscutils.getSigInfo(hdr)[1][2][16:] + try: + return (getPkgNevra(hdr), pubkeys[keyid]) + except KeyError: + return (getPkgNevra(hdr), pubkeys['unknown']) + else: + return (getPkgNevra(hdr), 'unsigned') +def getPkg(name=None): + if name: + mi=ts.dbMatch(rpm.RPMTAG_NAME, name) + else: + mi=ts.dbMatch() + exists = False + for hdr in mi: + exists = True + if hdr[rpm.RPMTAG_NAME] == 'gpg-pubkey': continue + nevra, key = getSig(hdr) + pkgs[key].append(nevra) + if not exists: + sys.stderr.write('No such package %s\n' % name) + +if __name__ == '__main__': + usage = '%prog [options] pkg1 pkg2...' + parser = OptionParser(usage) + parser.add_option('-m', '--machine-readable', action='store_true', + dest='mr', help='Produce machine readable output') + options, args = parser.parse_args() + buildKeyList() + pkgs = {} + for keyname in pubkeys.itervalues(): + pkgs[keyname] = [] + pkgs['unAsigned'] = [] + if len(args) != 0: + for pkg in args: + getPkg(pkg) + else: + getPkg() + if options.mr: + for pkg in pkgs.iteritems(): + if pkg[1]: + for pkginstance in pkg[1]: + print '%s,%s' % (pkginstance, pkg[0]) + else: + for pkg in pkgs.iteritems(): + if pkg[1]: + print pkg[0] + print '-' * len(pkg[0]) + for pkginstance in pkg[1]: + print pkginstance + print + -- cgit