Hello community, here is the log from the commit of package offlineimap for openSUSE:Factory checked in at 2016-10-13 11:32:49 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/offlineimap (Old) and /work/SRC/openSUSE:Factory/.offlineimap.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "offlineimap" Changes: -------- --- /work/SRC/openSUSE:Factory/offlineimap/offlineimap.changes 2016-09-26 12:36:46.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.offlineimap.new/offlineimap.changes 2016-10-13 11:32:51.000000000 +0200 @@ -1,0 +2,8 @@ +Thu Oct 13 07:18:15 UTC 2016 - [email protected] + +- update to 7.0.8 +- Import ui before threadutil to resolve circular dependency +- Fix implicit call to unicode() from UI functions. +- imapserver: minor code cleaning + +------------------------------------------------------------------- Old: ---- offlineimap-7.0.7.tar.gz New: ---- offlineimap-7.0.8.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ offlineimap.spec ++++++ --- /var/tmp/diff_new_pack.dU2aNt/_old 2016-10-13 11:32:52.000000000 +0200 +++ /var/tmp/diff_new_pack.dU2aNt/_new 2016-10-13 11:32:52.000000000 +0200 @@ -19,7 +19,7 @@ %{!?_userunitdir:%define _userunitdir /usr/lib/systemd/user} Name: offlineimap -Version: 7.0.7 +Version: 7.0.8 Release: 0 Summary: Powerful IMAP/Maildir Synchronization Tool License: GPL-2.0+ ++++++ offlineimap-7.0.7.tar.gz -> offlineimap-7.0.8.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/offlineimap-7.0.7/Changelog.md new/offlineimap-7.0.8/Changelog.md --- old/offlineimap-7.0.7/Changelog.md 2016-09-21 04:03:25.000000000 +0200 +++ new/offlineimap-7.0.8/Changelog.md 2016-10-08 10:10:56.000000000 +0200 @@ -15,6 +15,36 @@ * The following excerpt is only usefull when rendered in the website. {:toc} +### OfflineIMAP v7.0.8 (2016-10-08) + +#### Notes + +Very small release to fix the broken UI relying on Curses. Thanks for the +contributors! + +#### Authors + +- Nicolas Sebrecht (4) +- Ilias Tsitsimpis (1) +- Stéphane Albert (1) + +#### Features + +- Introduce contrib/README.md. [Nicolas Sebrecht] + +#### Fixes + +- Import ui before threadutil to resolve circular dependency. [Ilias Tsitsimpis] +- Fix implicit call to unicode() from UI functions. [Stéphane Albert] + +#### Changes + +- imapserver: minor code cleaning: reorder methods. [Nicolas Sebrecht] +- website-doc.sh: print usage when no argument is given. [Nicolas Sebrecht] +- Changelog: add remark about singlethreadperfolder in the resume. [Nicolas Sebrecht] + + + ### OfflineIMAP v7.0.7 (2016-09-21) #### Notes @@ -22,6 +52,8 @@ With this release, IDLE mode is a bit improved regarding stability. Offlineimap learns the default path to the certificate for Gentoo. +The singlethreadperfolder configuration option is marked stable. + There are few improvements for logs and documentation. Minor code refactoring, too. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/offlineimap-7.0.7/contrib/README.md new/offlineimap-7.0.8/contrib/README.md --- old/offlineimap-7.0.7/contrib/README.md 1970-01-01 01:00:00.000000000 +0100 +++ new/offlineimap-7.0.8/contrib/README.md 2016-10-08 10:10:56.000000000 +0200 @@ -0,0 +1,9 @@ + +README +====== + +**This "./contrib" directory is where users share their own scripts and tools.** + +Everything here is submitted and maintained *by the users for the users*. You're +welcome to add your own stuff. There is no barrier on your contributions here. +We think it's expected to find contributions of various quality. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/offlineimap-7.0.7/docs/website-doc.sh new/offlineimap-7.0.8/docs/website-doc.sh --- old/offlineimap-7.0.7/docs/website-doc.sh 2016-09-21 04:03:25.000000000 +0200 +++ new/offlineimap-7.0.8/docs/website-doc.sh 2016-10-08 10:10:56.000000000 +0200 @@ -126,7 +126,7 @@ exit_code=0 -test "n$ARGS" = 'n' && ARG='usage' # no option passed +test "n$ARGS" = 'n' && ARGS='usage' # no option passed for arg in $ARGS do # PWD was fixed at the very beginning. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/offlineimap-7.0.7/offlineimap/__init__.py new/offlineimap-7.0.8/offlineimap/__init__.py --- old/offlineimap-7.0.7/offlineimap/__init__.py 2016-09-21 04:03:25.000000000 +0200 +++ new/offlineimap-7.0.8/offlineimap/__init__.py 2016-10-08 10:10:56.000000000 +0200 @@ -2,7 +2,7 @@ __productname__ = 'OfflineIMAP' # Expecting trailing "-rcN" or "" for stable releases. -__version__ = "7.0.7" +__version__ = "7.0.8" __copyright__ = "Copyright 2002-2016 John Goerzen & contributors" __author__ = "John Goerzen" __author_email__= "[email protected]" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/offlineimap-7.0.7/offlineimap/folder/Base.py new/offlineimap-7.0.8/offlineimap/folder/Base.py --- old/offlineimap-7.0.7/offlineimap/folder/Base.py 2016-09-21 04:03:25.000000000 +0200 +++ new/offlineimap-7.0.8/offlineimap/folder/Base.py 2016-10-08 10:10:56.000000000 +0200 @@ -98,6 +98,11 @@ # FIMXE: remove calls of this. We have getname(). return self.name + def __unicode__(self): + # NOTE(sheeprine): Implicit call to this by UIBase deletingflags() which + # fails if the str is utf-8 + return self.name.decode('utf-8') + @property def accountname(self): """Account name as string""" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/offlineimap-7.0.7/offlineimap/imapserver.py new/offlineimap-7.0.8/offlineimap/imapserver.py --- old/offlineimap-7.0.7/offlineimap/imapserver.py 2016-09-21 04:03:25.000000000 +0200 +++ new/offlineimap-7.0.8/offlineimap/imapserver.py 2016-10-08 10:10:56.000000000 +0200 @@ -172,26 +172,6 @@ self.passworderror = None return self.password - - def releaseconnection(self, connection, drop_conn=False): - """Releases a connection, returning it to the pool. - - :param drop_conn: If True, the connection will be released and - not be reused. This can be used to indicate broken connections.""" - - if connection is None: - return # Noop on bad connection. - - self.connectionlock.acquire() - self.assignedconnections.remove(connection) - # Don't reuse broken connections - if connection.Terminate or drop_conn: - connection.logout() - else: - self.availableconnections.append(connection) - self.connectionlock.release() - self.semaphore.release() - def __md5handler(self, response): challenge = response.strip() self.ui.debug('imap', '__md5handler: got challenge %s'% challenge) @@ -207,7 +187,6 @@ self.ui.debug('imap', 'Attempting IMAP LOGIN authentication') imapobj.login(self.username, self.__getpassword()) - def __plainhandler(self, response): """Implements SASL PLAIN authentication, RFC 4616, http://tools.ietf.org/html/rfc4616""" @@ -225,7 +204,6 @@ self.ui.debug('imap', '__plainhandler: returning %s'% logsafe_retval) return retval - def __xoauth2handler(self, response): if self.oauth2_refresh_token is None \ and self.oauth2_access_token is None: @@ -304,7 +282,6 @@ response = '' return base64.b64decode(response) - def __start_tls(self, imapobj): if 'STARTTLS' in imapobj.capabilities and not self.usessl: self.ui.debug('imap', 'Using STARTTLS connection') @@ -315,7 +292,6 @@ "TLS connection: %s"% str(e), OfflineImapError.ERROR.REPO, None, exc_info()[2]) - ## All __authn_* procedures are helpers that do authentication. ## They are class methods that take one parameter, IMAP object. ## @@ -375,7 +351,6 @@ self.__loginauth(imapobj) return True - def __authn_helper(self, imapobj): """Authentication machinery for self.acquireconnection(). @@ -447,8 +422,45 @@ ", ".join(self.authmechs), methods), OfflineImapError.ERROR.REPO) + def __verifycert(self, cert, hostname): + """Verify that cert (in socket.getpeercert() format) matches hostname. + + CRLs are not handled. + Returns error message if any problems are found and None on success.""" + + errstr = "CA Cert verifying failed: " + if not cert: + return ('%s no certificate received'% errstr) + dnsname = hostname.lower() + certnames = [] + + # cert expired? + notafter = cert.get('notAfter') + if notafter: + if time.time() >= cert_time_to_seconds(notafter): + return '%s certificate expired %s'% (errstr, notafter) + + # First read commonName + for s in cert.get('subject', []): + key, value = s[0] + if key == 'commonName': + certnames.append(value.lower()) + if len(certnames) == 0: + return ('%s no commonName found in certificate'% errstr) + + # Then read subjectAltName + for key, value in cert.get('subjectAltName', []): + if key == 'DNS': + certnames.append(value.lower()) + + # And finally try to match hostname with one of these names + for certname in certnames: + if (certname == dnsname or + '.' in dnsname and certname == '*.' + dnsname.split('.', 1)[1]): + return None + + return ('%s no matching domain name found in certificate'% errstr) - # XXX: move above, closer to releaseconnection() def acquireconnection(self): """Fetches a connection from the pool, making sure to create a new one if needed, to obey the maximum connection limits, etc. @@ -694,44 +706,25 @@ self.ui.debug('imap', 'keepalive: event is set; exiting') return - def __verifycert(self, cert, hostname): - """Verify that cert (in socket.getpeercert() format) matches hostname. - - CRLs are not handled. - Returns error message if any problems are found and None on success.""" - - errstr = "CA Cert verifying failed: " - if not cert: - return ('%s no certificate received'% errstr) - dnsname = hostname.lower() - certnames = [] - - # cert expired? - notafter = cert.get('notAfter') - if notafter: - if time.time() >= cert_time_to_seconds(notafter): - return '%s certificate expired %s'% (errstr, notafter) - # First read commonName - for s in cert.get('subject', []): - key, value = s[0] - if key == 'commonName': - certnames.append(value.lower()) - if len(certnames) == 0: - return ('%s no commonName found in certificate'% errstr) + def releaseconnection(self, connection, drop_conn=False): + """Releases a connection, returning it to the pool. - # Then read subjectAltName - for key, value in cert.get('subjectAltName', []): - if key == 'DNS': - certnames.append(value.lower()) + :param drop_conn: If True, the connection will be released and + not be reused. This can be used to indicate broken connections.""" - # And finally try to match hostname with one of these names - for certname in certnames: - if (certname == dnsname or - '.' in dnsname and certname == '*.' + dnsname.split('.', 1)[1]): - return None + if connection is None: + return # Noop on bad connection. - return ('%s no matching domain name found in certificate'% errstr) + self.connectionlock.acquire() + self.assignedconnections.remove(connection) + # Don't reuse broken connections + if connection.Terminate or drop_conn: + connection.logout() + else: + self.availableconnections.append(connection) + self.connectionlock.release() + self.semaphore.release() class IdleThread(object): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/offlineimap-7.0.7/offlineimap/init.py new/offlineimap-7.0.8/offlineimap/init.py --- old/offlineimap-7.0.7/offlineimap/init.py 2016-09-21 04:03:25.000000000 +0200 +++ new/offlineimap-7.0.8/offlineimap/init.py 2016-10-08 10:10:56.000000000 +0200 @@ -27,8 +27,11 @@ import offlineimap import offlineimap.virtual_imaplib2 as imaplib -from offlineimap import globals, threadutil, accounts, folder, mbnames + +# Ensure that `ui` gets loaded before `threadutil` in order to +# break the circular dependency between `threadutil` and `Curses`. from offlineimap.ui import UI_LIST, setglobalui, getglobalui +from offlineimap import globals, threadutil, accounts, folder, mbnames from offlineimap.CustomConfig import CustomConfigParser from offlineimap.utils import stacktrace from offlineimap.repository import Repository
