X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=daklib%2Futils.py;h=90c87bf4435fa6e0a625dfbb1ef76c017fcc87fe;hb=8ddfb3391d47d9b73c90948b521b6b0a76add4b7;hp=96a01ec4e04666070142aaab8a707e5a5d6e9684;hpb=ea5573c53aa22b9812489bddf63344324fa907ca;p=dak.git diff --git a/daklib/utils.py b/daklib/utils.py index 96a01ec4..90c87bf4 100644 --- a/daklib/utils.py +++ b/daklib/utils.py @@ -23,6 +23,7 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA import commands +import codecs import datetime import email.Header import os @@ -57,8 +58,8 @@ from gpg import SignedFile from textutils import fix_maintainer from regexes import re_html_escaping, html_escaping, re_single_line_field, \ re_multi_line_field, re_srchasver, re_taint_free, \ - re_gpg_uid, re_re_mark, re_whitespace_comment, re_issource, \ - re_is_orig_source, re_build_dep_arch + re_re_mark, re_whitespace_comment, re_issource, \ + re_is_orig_source, re_build_dep_arch, re_parse_maintainer from formats import parse_format, validate_changes_format from srcformats import get_format_from_string @@ -154,11 +155,7 @@ def extract_component_from_section(section, session=None): # Expand default component if component == "": - comp = get_component(section, session) - if comp is None: - component = "main" - else: - component = comp.component_name + component = "main" return (section, component) @@ -1363,21 +1360,38 @@ def gpg_get_key_addresses(fingerprint): if addresses != None: return addresses addresses = list() - cmd = "gpg --no-default-keyring %s --fingerprint %s" \ - % (gpg_keyring_args(), fingerprint) - (result, output) = commands.getstatusoutput(cmd) - if result == 0: + try: + with open(os.devnull, "wb") as devnull: + output = daklib.daksubprocess.check_output( + ["gpg", "--no-default-keyring"] + gpg_keyring_args().split() + + ["--with-colons", "--list-keys", fingerprint], stderr=devnull) + except subprocess.CalledProcessError: + pass + else: for l in output.split('\n'): - m = re_gpg_uid.match(l) + parts = l.split(':') + if parts[0] not in ("uid", "pub"): + continue + try: + uid = parts[9] + except IndexError: + continue + try: + # Do not use unicode_escape, because it is locale-specific + uid = codecs.decode(uid, "string_escape").decode("utf-8") + except UnicodeDecodeError: + uid = uid.decode("latin1") # does not fail + m = re_parse_maintainer.match(uid) if not m: continue - address = m.group(1) + address = m.group(2) + address = address.encode("utf8") # dak still uses bytes if address.endswith('@debian.org'): # prefer @debian.org addresses # TODO: maybe not hardcode the domain addresses.insert(0, address) else: - addresses.append(m.group(1)) + addresses.append(address) key_uid_email_cache[fingerprint] = addresses return addresses