X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=utils.py;h=ebe3f9653c55544ffd4da24b840af25b76dfcbfe;hb=61ab25281202b45572379adfc0a6653ffe500406;hp=60efbb9b14832c4d734c80c3737e4e14aa62e7e6;hpb=20ef2ddf06d0c75fd3786fae338ccc3161868f7e;p=dak.git diff --git a/utils.py b/utils.py index 60efbb9b..ebe3f965 100644 --- a/utils.py +++ b/utils.py @@ -1,6 +1,6 @@ # Utility functions # Copyright (C) 2000, 2001 James Troup -# $Id: utils.py,v 1.33 2001-09-26 03:49:16 troup Exp $ +# $Id: utils.py,v 1.37 2002-01-19 18:58:07 troup Exp $ # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -import commands, os, pwd, re, socket, shutil, stat, string, sys, tempfile +import commands, os, pwd, re, socket, shutil, stat, string, sys, tempfile, traceback import apt_pkg re_comments = re.compile(r"\#.*") @@ -29,6 +29,7 @@ re_issource = re.compile (r"(.+)_(.+?)\.(orig\.tar\.gz|diff\.gz|tar\.gz|dsc)"); re_single_line_field = re.compile(r"^(\S*)\s*:\s*(.*)"); re_multi_line_field = re.compile(r"^\s(.*)"); +re_taint_free = re.compile(r"^[-+\.\w]+$"); re_parse_maintainer = re.compile(r"^\s*(\S.*\S)\s*\<([^\> \t]+)\>"); @@ -44,19 +45,8 @@ send_mail_invalid_args_exc = "Both arguments are non-null."; sendmail_failed_exc = "Sendmail invocation failed"; tried_too_hard_exc = "Tried too hard to find a free filename."; -# Valid components; used by extract_component_from_section() because -# it doesn't know about Conf from it's caller. FIXME - -valid_components = { - "main": "", - "contrib": "", - "non-free": "" - }; - default_config = "/etc/katie/katie.conf"; default_apt_config = "/etc/katie/apt.conf"; -DefaultCnf = apt_pkg.newConfiguration(); -apt_pkg.ReadConfigFileISC(DefaultCnf,default_config); ###################################################################################### @@ -67,6 +57,10 @@ def open_file(filename, mode='r'): raise cant_open_exc, filename return f +def touch_file(filename): + fd = os.open(filename, os.O_RDONLY | os.O_CREAT); + os.close(fd); + ###################################################################################### # From reportbug @@ -89,18 +83,15 @@ def str_isnum (s): ###################################################################################### -# Prefix and components hardcoded into this like a good'un; need to unhardcod at some -# stage. [FIXME] - def extract_component_from_section(section): component = ""; if string.find(section, '/') != -1: component = string.split(section, '/')[0]; if string.lower(component) == "non-us" and string.count(section, '/') > 0: - s = string.split(section, '/')[1]; - if valid_components.has_key(s): # Avoid e.g. non-US/libs - component = string.split(section, '/')[0]+ '/' + string.split(section, '/')[1]; + s = component + '/' + string.split(section, '/')[1]; + if Cnf.has_key("Component::%s" % s): # Avoid e.g. non-US/libs + component = s; if string.lower(section) == "non-us": component = "non-US/main"; @@ -111,7 +102,7 @@ def extract_component_from_section(section): # Expand default component if component == "": - if valid_components.has_key(section): + if Cnf.has_key("Component::%s" % section): component = section; else: component = "main"; @@ -136,12 +127,12 @@ def extract_component_from_section(section): # "-----BEGIN PGP SIGNATURE-----". def parse_changes(filename, dsc_whitespace_rules): - changes_in = open_file(filename,'r'); + changes_in = open_file(filename); error = ""; changes = {}; lines = changes_in.readlines(); - if lines == []: + if not lines: raise changes_parse_error_exc, "[Empty changes file]"; # Reindex by line number so we can easily verify the format of @@ -165,13 +156,13 @@ def parse_changes(filename, dsc_whitespace_rules): if index > max(indices): raise invalid_dsc_format_exc, index; line = indexed_lines[index]; - if line[:24] != "-----BEGIN PGP SIGNATURE": + if string.find(line, "-----BEGIN PGP SIGNATURE") != 0: raise invalid_dsc_format_exc, index; inside_signature = 0; break; - if line[:24] == "-----BEGIN PGP SIGNATURE": + if string.find(line, "-----BEGIN PGP SIGNATURE") == 0: break; - if line[:29] == "-----BEGIN PGP SIGNED MESSAGE": + if string.find(line, "-----BEGIN PGP SIGNED MESSAGE") == 0: if dsc_whitespace_rules: inside_signature = 1; while index < max(indices) and line != "": @@ -274,9 +265,6 @@ def fix_maintainer (maintainer): # sendmail wrapper, takes _either_ a message string or a file as arguments def send_mail (message, filename): - #### FIXME, how do I get this out of Cnf in katie? - sendmail_command = "/usr/sbin/sendmail -odq -oi -t"; - # Sanity check arguments if message != "" and filename != "": raise send_mail_invalid_args_exc; @@ -289,7 +277,7 @@ def send_mail (message, filename): os.close (fd); # Invoke sendmail - (result, output) = commands.getstatusoutput("%s < %s" % (sendmail_command, filename)); + (result, output) = commands.getstatusoutput("%s < %s" % (Cnf["Dinstall::SendmailCommand"], filename)); if (result != 0): raise sendmail_failed_exc, output; @@ -361,22 +349,23 @@ def copy (src, dest, overwrite = 0): def where_am_i (): res = socket.gethostbyaddr(socket.gethostname()); - if DefaultCnf.get("Config::" + res[0] + "::DatbaseHostname"): - return DefaultCnf["Config::" + res[0] + "::DatabaseHostname"] + database_hostname = Cnf.get("Config::" + res[0] + "::DatabaseHostname"); + if database_hostname: + return database_hostname; else: return res[0]; def which_conf_file (): res = socket.gethostbyaddr(socket.gethostname()); - if DefaultCnf.get("Config::" + res[0] + "::KatieConfig"): - return DefaultCnf["Config::" + res[0] + "::KatieConfig"] + if Cnf.get("Config::" + res[0] + "::KatieConfig"): + return Cnf["Config::" + res[0] + "::KatieConfig"] else: return default_config; def which_apt_conf_file (): res = socket.gethostbyaddr(socket.gethostname()); - if DefaultCnf.get("Config::" + res[0] + "::AptConfig"): - return DefaultCnf["Config::" + res[0] + "::AptConfig"] + if Cnf.get("Config::" + res[0] + "::AptConfig"): + return Cnf["Config::" + res[0] + "::AptConfig"] else: return default_apt_config; @@ -505,3 +494,18 @@ def result_join (original, sep = '\t'): return string.join(list, sep); ################################################################################ + +def get_conf(): + return Cnf; + +################################################################################ + +apt_pkg.init() + +Cnf = apt_pkg.newConfiguration(); +apt_pkg.ReadConfigFileISC(Cnf,default_config); + +if which_conf_file() != default_config: + apt_pkg.ReadConfigFileISC(Cnf,which_conf_file()) + +################################################################################