summaryrefslogtreecommitdiffstats
path: root/key_checker
blob: e7fdfc4d2fee0732915507181975f75022af1d9d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/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