]> TLD Linux GIT Repositories - tld-ftp-admin.git/blob - bin/pfa-checksign
- non-integer releases are ok in TLD
[tld-ftp-admin.git] / bin / pfa-checksign
1 #!/usr/bin/env python3
2 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
3
4 from __future__ import print_function
5
6 import sys, os
7 import getopt
8 sys.path.insert(0, os.environ['HOME']+'/tld-ftp-admin/modules')
9 import ftptree
10 import getpass
11 from common import checkdir
12 import ftpio
13 from config import sign_key
14 from sign import is_signed, signpkgs
15
16 try:
17     opts, args = getopt.getopt(sys.argv[1:], '')
18 except getopt.GetoptError:
19     print("ERR: options error", file=sys.stderr)
20     print("checksign.py tree package1 [package2...]", file=sys.stderr)
21     sys.exit(1)
22
23 if len(args) < 1:
24     print("ERR: missing tree name", file=sys.stderr)
25     print("checksign.py tree package1 [package2...]", file=sys.stderr)
26     sys.exit(1)
27
28 if sign_key == None:
29     print("ERR: sign_key not defined in config", file=sys.stderr)
30     sys.exit(1)
31
32 treename = args[0]
33 packages = args[1:]
34
35 checkdir(treename)
36
37 ftpio.connect('sign')
38
39 if not ftpio.lock(treename, True):
40     print("ERR: %s tree already locked" % treename, file=sys.stderr)
41     sys.exit(1)
42
43 files = []
44 try:
45     if len(packages) < 1:
46         loadall = True
47     else:
48         loadall = False
49
50     # if no files specified, grab whole tree contents
51     tree = ftptree.FtpTree(treename, loadall = loadall)
52     if loadall:
53         # this is hack, should be a param, not access private .loadedpkgs element
54         tree.mark4moving(tree.loadedpkgs)
55     else:
56         tree.mark4moving(packages)
57
58 except ftptree.SomeError:
59     # In case of problems we need to unlock the tree before exiting
60     ftpio.unlock(treename)
61     sys.exit(1)
62
63 ftpio.unlock(treename)
64
65 print("Checking signatures of %d packages" % len(tree.loadedpkgs))
66 sign = []
67 for pkg in tree.marked4moving:
68     unsigned = 0
69     for file in pkg.rpmfiles():
70         if not is_signed(file):
71             unsigned += 1
72
73     if unsigned != 0:
74         print('%s: %d files NOT signed' % (pkg.nvr, unsigned))
75     else:
76         print('%s signed' % pkg.nvr)
77
78 sys.exit(0)