From 89b8ea8ddb4c154b34ce9a98c970fc9b19196884 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Arkadiusz=20Mi=C5=9Bkiewicz?= Date: Wed, 5 Aug 2009 07:12:26 +0000 Subject: [PATCH] Sign all rpm files with asking for password only once. Changed files: bin/pfa-signpkg -> 1.9 modules/sign.py -> 1.2 --- bin/pfa-signpkg | 4 +++- modules/sign.py | 17 ++++++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/bin/pfa-signpkg b/bin/pfa-signpkg index d900386..8b86182 100644 --- a/bin/pfa-signpkg +++ b/bin/pfa-signpkg @@ -4,6 +4,7 @@ import sys, os sys.path.insert(0, os.environ['HOME']+'/pld-ftp-admin/modules') import ftptree +import getpass from common import checkdir import ftpio from config import sign_key @@ -82,10 +83,11 @@ def chunk(seq, size, pad=None): yield seq[-mod:] print "Total %d files to sign" % len(sign) +password = getpass.getpass("Enter signing password: ") try: for x in chunk(sign, 512): print "Signing %d files" % len(x) - signpkgs(x) + signpkgs(x, password) except OSError, e: print >>sys.stderr, "ERR: %s" % e exit(1) diff --git a/modules/sign.py b/modules/sign.py index 8c1167a..153ec67 100644 --- a/modules/sign.py +++ b/modules/sign.py @@ -2,8 +2,10 @@ # vi: encoding=utf-8 ts=8 sts=4 sw=4 et import os +import sys import rpm import subprocess +import pexpect from config import sign_key def getSigInfo(hdr): @@ -37,13 +39,22 @@ def is_signed(rpm_file): return sign_key == sigid[-len(sign_key):] -def signpkgs(files): +def signpkgs(files, password): if not os.path.isfile('/usr/bin/gpg'): raise OSError, 'Missing gnupg binary' if not os.path.isfile('/bin/rpm'): raise OSError, 'Missing rpm binary' - cmd = ['/bin/rpm', '--resign', '--define', '_signature gpg', '--define', '_gpg_name ' + sign_key] + files - rc = subprocess.call(cmd, stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE, close_fds = True) + os.putenv('LC_ALL', 'C') + args = ['--resign', '--define', '_signature gpg', '--define', '_gpg_name ' + sign_key] + files + child = pexpect.spawn('/bin/rpm', args) + child.logfile = sys.stderr + child.expect('Enter pass phrase:', timeout=30) + child.sendline(password) + child.expect(pexpect.EOF) + child.close() + rc = child.exitstatus + #cmd = ['/bin/rpm', '--resign', '--define', '_signature gpg', '--define', '_gpg_name ' + sign_key] + files + #rc = subprocess.call(cmd, stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE, close_fds = True) if rc != 0: raise OSError, 'package signing failed' -- 2.44.0