]> git.pld-linux.org Git - projects/pld-ftp-admin.git/blame - modules/sign.py
Switch to Python 3 for rpm.org rpm
[projects/pld-ftp-admin.git] / modules / sign.py
CommitLineData
a1e62e44 1#!/usr/bin/env python3
7b5c7734
ER
2# vi: encoding=utf-8 ts=8 sts=4 sw=4 et
3
4import os
89b8ea8d 5import sys
7b5c7734 6import rpm
89b8ea8d 7import pexpect
7b5c7734
ER
8from config import sign_key
9
10def getSigInfo(hdr):
11 """checks signature from an hdr hand back signature information and/or
12 an error code"""
13 # yum-3.2.22/rpmUtils/miscutils.py
14
15 string = '%|DSAHEADER?{%{DSAHEADER:pgpsig}}:{%|RSAHEADER?{%{RSAHEADER:pgpsig}}:{%|SIGGPG?{%{SIGGPG:pgpsig}}:{%|SIGPGP?{%{SIGPGP:pgpsig}}:{(none)}|}|}|}|'
16 siginfo = hdr.sprintf(string)
17 if siginfo == '(none)':
18 return None
5a666fec 19
7b5c7734
ER
20 return siginfo.split(',')[2].lstrip()
21
22def is_signed(rpm_file):
23 """Returns rpm information is package signed by the same key"""
24 # http://code.activestate.com/recipes/306705/
25
26 if sign_key == None:
27 return None
28
29 ts = rpm.ts()
7e39d1d1 30 ts.setVSFlags(rpm.RPMVSF_NODSAHEADER)
7b5c7734
ER
31 fdno = os.open(rpm_file, os.O_RDONLY)
32 hdr = ts.hdrFromFdno(fdno)
33 os.close(fdno)
34
35 sigid = getSigInfo(hdr)
36 if sigid == None:
37 return None
38
39 return sign_key == sigid[-len(sign_key):]
40
89b8ea8d 41def signpkgs(files, password):
7b5c7734 42 if not os.path.isfile('/usr/bin/gpg'):
9c170c61 43 raise OSError('Missing gnupg binary')
7b5c7734 44 if not os.path.isfile('/bin/rpm'):
9c170c61 45 raise OSError('Missing rpm binary')
7b5c7734 46
89b8ea8d
AM
47 os.putenv('LC_ALL', 'C')
48 args = ['--resign', '--define', '_signature gpg', '--define', '_gpg_name ' + sign_key] + files
9ebafd9b 49 child = pexpect.spawn('/bin/rpm', args, encoding='utf-8')
866a153b 50 child.logfile_read = sys.stderr
2086ad42 51 child.expect(u'Enter pass phrase:', timeout=30)
89b8ea8d 52 child.sendline(password)
866a153b 53 child.expect(pexpect.EOF, timeout=None)
89b8ea8d
AM
54 child.close()
55 rc = child.exitstatus
7b5c7734 56 if rc != 0:
9c170c61 57 raise OSError('package signing failed')
00df5447 58 for rpm in files:
ff13be59 59 os.chmod(rpm, 0o644)
This page took 1.316622 seconds and 4 git commands to generate.