]> git.pld-linux.org Git - projects/pld-ftp-admin.git/blame - bin/pfa-signpkg
Sign all rpm files with asking for password only once.
[projects/pld-ftp-admin.git] / bin / pfa-signpkg
CommitLineData
f56d33c5
ER
1#!/usr/bin/env python
2# vi: encoding=utf-8 ts=8 sts=4 sw=4 et
3
4import sys, os
5sys.path.insert(0, os.environ['HOME']+'/pld-ftp-admin/modules')
6import ftptree
89b8ea8d 7import getpass
f56d33c5
ER
8from common import checkdir
9import ftpio
55bd5397 10from config import sign_key
42c96205 11from sign import is_signed, signpkgs
f56d33c5
ER
12
13if len(sys.argv) < 3:
55bd5397
ER
14 print >>sys.stderr, "ERR: not enough parameters given"
15 print >>sys.stderr, "sign.py tree package1 [package2...]"
16 sys.exit(1)
17
18if sign_key == None:
19 print >>sys.stderr, "ERR: sign_key not defined in config"
f56d33c5
ER
20 sys.exit(1)
21
22checkdir(sys.argv[1])
23
24ftpio.connect('sign')
25
26if not ftpio.lock(sys.argv[1], True):
4e83e214 27 print >>sys.stderr, "ERR: %s tree already locked" % sys.argv[1]
f56d33c5
ER
28 sys.exit(1)
29
42c96205 30files = []
f56d33c5 31try:
42c96205 32 tree = ftptree.FtpTree(sys.argv[1])
55bd5397
ER
33 tree.mark4moving(sys.argv[2:])
34 files = tree.rpmfiles()
35
f56d33c5
ER
36except ftptree.SomeError:
37 # In case of problems we need to unlock the tree before exiting
38 ftpio.unlock(sys.argv[1])
39 sys.exit(1)
40
41ftpio.unlock(sys.argv[1])
42c96205
ER
42
43print "Checking signatures of %d files from %d packages" % (len(files), len(tree.loadedpkgs))
44sign = []
95843bd6 45n = c = 0
42c96205
ER
46for file in files:
47 if not is_signed(file):
48 sign.append(file)
95843bd6
ER
49 c += 1
50 n += 1
2000899b 51 print "\r%d/%d %s\033[0K" % (n, c, file),
95843bd6
ER
52
53print ""
42c96205
ER
54
55if len(sign) == 0:
4e15eddf 56 print "No files to sign"
42c96205
ER
57 sys.exit(0)
58
95843bd6
ER
59# http://mail.python.org/pipermail/python-list/2009-February/700658.html
60def chunk(seq, size, pad=None):
61 '''
62 Slice a list into consecutive disjoint 'chunks' of
63 length equal to size. The last chunk is padded if necessary.
64
65 >>> list(chunk(range(1,10),3))
66 [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
67 >>> list(chunk(range(1,9),3))
68 [[1, 2, 3], [4, 5, 6], [7, 8, None]]
69 >>> list(chunk(range(1,8),3))
70 [[1, 2, 3], [4, 5, 6], [7, None, None]]
71 >>> list(chunk(range(1,10),1))
72 [[1], [2], [3], [4], [5], [6], [7], [8], [9]]
73 >>> list(chunk(range(1,10),9))
74 [[1, 2, 3, 4, 5, 6, 7, 8, 9]]
75 >>> for X in chunk([],3): print X
76 >>>
77 '''
78 n = len(seq)
79 mod = n % size
80 for i in xrange(0, n - mod, size):
81 yield seq[i : i + size]
82 if mod:
83 yield seq[-mod:]
84
85print "Total %d files to sign" % len(sign)
89b8ea8d 86password = getpass.getpass("Enter signing password: ")
4e83e214 87try:
95843bd6
ER
88 for x in chunk(sign, 512):
89 print "Signing %d files" % len(x)
89b8ea8d 90 signpkgs(x, password)
4e83e214
ER
91except OSError, e:
92 print >>sys.stderr, "ERR: %s" % e
93 exit(1)
This page took 0.036342 seconds and 4 git commands to generate.