X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Fdbconn.py;h=31caa902dcd8f50ca06cde5f31c9ab16252e768f;hb=b42e8ecb651be5d4aa588fcc57d0339b17c6c902;hp=7c1feed635c49a34b616aa548b8ccb1362d914cf;hpb=9b194c0a49096be2d659906c98500d2981b75b53;p=dak.git diff --git a/daklib/dbconn.py b/daklib/dbconn.py index 7c1feed6..31caa902 100644 --- a/daklib/dbconn.py +++ b/daklib/dbconn.py @@ -110,11 +110,11 @@ class DebVersion(UserDefinedType): return None sa_major_version = sqlalchemy.__version__[0:3] -if sa_major_version in ["0.5", "0.6", "0.7"]: +if sa_major_version in ["0.5", "0.6", "0.7", "0.8"]: from sqlalchemy.databases import postgres postgres.ischema_names['debversion'] = DebVersion else: - raise Exception("dak only ported to SQLA versions 0.5 to 0.7. See daklib/dbconn.py") + raise Exception("dak only ported to SQLA versions 0.5 to 0.8. See daklib/dbconn.py") ################################################################################ @@ -1030,7 +1030,9 @@ class PoolFile(ORMObject): @property def fullpath(self): session = DBConn().session().object_session(self) - af = session.query(ArchiveFile).join(Archive).filter(ArchiveFile.file == self).first() + af = session.query(ArchiveFile).join(Archive) \ + .filter(ArchiveFile.file == self) \ + .order_by(Archive.tainted.desc()).first() return af.path @property @@ -1248,8 +1250,22 @@ class Keyring(object): LDAPDn = cnf["Import-LDAP-Fingerprints::LDAPDn"] LDAPServer = cnf["Import-LDAP-Fingerprints::LDAPServer"] + ca_cert_file = cnf.get('Import-LDAP-Fingerprints::CACertFile') l = ldap.open(LDAPServer) + + if ca_cert_file: + # TODO: This should request a new context and use + # connection-specific options (i.e. "l.set_option(...)") + + # Request a new TLS context. If there was already one, libldap + # would not change the TLS options (like which CAs to trust). + #l.set_option(ldap.OPT_X_TLS_NEWCTX, True) + ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_HARD) + #ldap.set_option(ldap.OPT_X_TLS_CACERTDIR, None) + ldap.set_option(ldap.OPT_X_TLS_CACERTFILE, ca_cert_file) + l.start_tls_s() + l.simple_bind_s("","") Attrs = l.search_s(LDAPDn, ldap.SCOPE_ONELEVEL, "(&(keyfingerprint=*)(gidnumber=%s))" % (cnf["Import-Users-From-Passwd::ValidGID"]), @@ -1474,7 +1490,7 @@ class NewComment(object): __all__.append('NewComment') @session_wrapper -def has_new_comment(package, version, session=None): +def has_new_comment(policy_queue, package, version, session=None): """ Returns true if the given combination of C{package}, C{version} has a comment. @@ -1492,7 +1508,7 @@ def has_new_comment(package, version, session=None): @return: true/false """ - q = session.query(NewComment) + q = session.query(NewComment).filter_by(policy_queue=policy_queue) q = q.filter_by(package=package) q = q.filter_by(version=version) @@ -1501,7 +1517,7 @@ def has_new_comment(package, version, session=None): __all__.append('has_new_comment') @session_wrapper -def get_new_comments(package=None, version=None, comment_id=None, session=None): +def get_new_comments(policy_queue, package=None, version=None, comment_id=None, session=None): """ Returns (possibly empty) list of NewComment objects for the given parameters @@ -1523,7 +1539,7 @@ def get_new_comments(package=None, version=None, comment_id=None, session=None): @return: A (possibly empty) list of NewComment objects will be returned """ - q = session.query(NewComment) + q = session.query(NewComment).filter_by(policy_queue=policy_queue) if package is not None: q = q.filter_by(package=package) if version is not None: q = q.filter_by(version=version) if comment_id is not None: q = q.filter_by(comment_id=comment_id) @@ -2734,7 +2750,8 @@ class DBConn(object): extension = validator) mapper(NewComment, self.tbl_new_comments, - properties = dict(comment_id = self.tbl_new_comments.c.id)) + properties = dict(comment_id = self.tbl_new_comments.c.id, + policy_queue = relation(PolicyQueue))) mapper(Override, self.tbl_override, properties = dict(suite_id = self.tbl_override.c.suite, @@ -2889,7 +2906,7 @@ class DBConn(object): engine_args['pool_size'] = int(cnf['DB::PoolSize']) if cnf.has_key('DB::MaxOverflow'): engine_args['max_overflow'] = int(cnf['DB::MaxOverflow']) - if sa_major_version == '0.6' and cnf.has_key('DB::Unicode') and \ + if sa_major_version != '0.5' and cnf.has_key('DB::Unicode') and \ cnf['DB::Unicode'] == 'false': engine_args['use_native_unicode'] = False