diff --git a/fetchmail-6.3.26.tar.xz b/fetchmail-6.3.26.tar.xz
deleted file mode 100644
index 95e826b..0000000
--- a/fetchmail-6.3.26.tar.xz
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:79b4c54cdbaf02c1a9a691d9948fcb1a77a1591a813e904283a8b614b757e850
-size 1283816
diff --git a/fetchmail-6.3.26.tar.xz.asc b/fetchmail-6.3.26.tar.xz.asc
deleted file mode 100644
index 0f01f0f..0000000
--- a/fetchmail-6.3.26.tar.xz.asc
+++ /dev/null
@@ -1,7 +0,0 @@
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.4.11 (GNU/Linux)
-
-iEYEABECAAYFAlF2/zAACgkQvmGDOQUufZU65ACgsCpaBSklzY/wF9lYX8xLeOPZ
-KFAAniIj07N3WeMmWtOHUcmqbJjbl0QU
-=3T6y
------END PGP SIGNATURE-----
diff --git a/fetchmail-6.3.8-smtp_errors.patch b/fetchmail-6.3.8-smtp_errors.patch
index 3985dcb..6f1dad7 100644
--- a/fetchmail-6.3.8-smtp_errors.patch
+++ b/fetchmail-6.3.8-smtp_errors.patch
@@ -6,11 +6,11 @@
 # be considered that important.
 # 2) use the 501 error code to mark spam - in such a case
 # the 'antispam' option should be used
-Index: fetchmail-6.3.10-beta1/sink.c
+Index: fetchmail-6.4.1/sink.c
 ===================================================================
---- fetchmail-6.3.10-beta1.orig/sink.c	2009-05-25 17:55:07.000000000 +0200
-+++ fetchmail-6.3.10-beta1/sink.c	2009-06-01 14:37:12.000000000 +0200
-@@ -553,6 +553,19 @@ static int handle_smtp_report(struct que
+--- fetchmail-6.4.1.orig/sink.c
++++ fetchmail-6.4.1/sink.c
+@@ -536,6 +536,19 @@ static int handle_smtp_report(struct que
  	free(responses[0]);
  	return(PS_TRANSIENT);
  
@@ -30,8 +30,8 @@ Index: fetchmail-6.3.10-beta1/sink.c
      default:
  	/* bounce non-transient errors back to the sender */
  	if (smtperr >= 500 && smtperr <= 599)
-@@ -622,7 +635,7 @@ static int handle_smtp_report_without_bo
- #endif /* __DONT_FEED_THE_SPAMMERS__ */
+@@ -601,7 +614,7 @@ static int handle_smtp_report_without_bo
+     case 553: /* invalid sending domain */
  	return(PS_REFUSED);
  
 -    default:
diff --git a/fetchmail-6.4.1.tar.xz b/fetchmail-6.4.1.tar.xz
new file mode 100644
index 0000000..fdba8ec
--- /dev/null
+++ b/fetchmail-6.4.1.tar.xz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3f33f11dd08c3e8cc3e9d18eec686b1626d4818f4d5a72791507bbc4dce6a9a0
+size 1257488
diff --git a/fetchmail-fetchmailconf-python3-1of3.patch b/fetchmail-fetchmailconf-python3-1of3.patch
deleted file mode 100644
index c9f53a0..0000000
--- a/fetchmail-fetchmailconf-python3-1of3.patch
+++ /dev/null
@@ -1,3074 +0,0 @@
-From 2a23b1b8f3f8d73ba65f2109b0b496bc3d13f59a Mon Sep 17 00:00:00 2001
-From: Samuel Martin <s.martin49@gmail.com>
-Date: Wed, 8 Jun 2016 21:36:28 +0200
-Subject: [PATCH] fetchmailconf.py: fix tabs/spaces mixup preventing from compiling the pyc module
-
-This whitespace-only change substitutes all leading tabulations with
-the right number of spaces to get the standard 4-space indentation.
-
-This bug was triggered by the Buildroot farms:
-  http://autobuild.buildroot.org/results/700/7009445dd116a1c02db82a351d38db44db8dad16/build-end.log
-
-Signed-off-by: Samuel Martin <s.martin49@gmail.com>
-Signed-off-by: Matthias Andree <matthias.andree@gmx.de>
----
- fetchmailconf.py | 2532 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- 1 file changed, 1266 insertions(+), 1266 deletions(-)
-
-diff --git a/fetchmailconf.py b/fetchmailconf.py
-index 2dc02d8..d64556e 100755
---- a/fetchmailconf.py
-+++ b/fetchmailconf.py
-@@ -16,416 +16,416 @@ import sys, time, os, string, socket, getopt, tempfile
- #
- class Configuration:
-     def __init__(self):
--	self.poll_interval = 0		# Normally, run in foreground
--	self.logfile = None		# No logfile, initially
--	self.idfile = os.environ["HOME"] + "/.fetchids"	 # Default idfile, initially
--	self.postmaster = None		# No last-resort address, initially
--	self.bouncemail = TRUE		# Bounce errors to users
--	self.spambounce = FALSE		# Bounce spam errors
--	self.softbounce = TRUE		# Treat permanent error as temporary
--	self.properties = None		# No exiguous properties
--	self.invisible = FALSE		# Suppress Received line & spoof?
--	self.syslog = FALSE		# Use syslogd for logging?
--	self.servers = []		# List of included sites
--	Configuration.typemap = (
--	    ('poll_interval',	'Int'),
--	    ('logfile',	 'String'),
--	    ('idfile',	  'String'),
--	    ('postmaster',	'String'),
--	    ('bouncemail',	'Boolean'),
--	    ('spambounce',	'Boolean'),
--	    ('softbounce',	'Boolean'),
--	    ('properties',	'String'),
--	    ('syslog',	  'Boolean'),
--	    ('invisible',	'Boolean'))
-+        self.poll_interval = 0		# Normally, run in foreground
-+        self.logfile = None		# No logfile, initially
-+        self.idfile = os.environ["HOME"] + "/.fetchids"	 # Default idfile, initially
-+        self.postmaster = None		# No last-resort address, initially
-+        self.bouncemail = TRUE		# Bounce errors to users
-+        self.spambounce = FALSE		# Bounce spam errors
-+        self.softbounce = TRUE		# Treat permanent error as temporary
-+        self.properties = None		# No exiguous properties
-+        self.invisible = FALSE		# Suppress Received line & spoof?
-+        self.syslog = FALSE		# Use syslogd for logging?
-+        self.servers = []		# List of included sites
-+        Configuration.typemap = (
-+            ('poll_interval',	'Int'),
-+            ('logfile',	 'String'),
-+            ('idfile',	  'String'),
-+            ('postmaster',	'String'),
-+            ('bouncemail',	'Boolean'),
-+            ('spambounce',	'Boolean'),
-+            ('softbounce',	'Boolean'),
-+            ('properties',	'String'),
-+            ('syslog',	  'Boolean'),
-+            ('invisible',	'Boolean'))
- 
-     def __repr__(self):
--	str = "";
--	if self.syslog != ConfigurationDefaults.syslog:
--	   str = str + ("set syslog\n")
--	elif self.logfile:
--	    str = str + ("set logfile \"%s\"\n" % (self.logfile,));
--	if self.idfile != ConfigurationDefaults.idfile:
--	    str = str + ("set idfile \"%s\"\n" % (self.idfile,));
--	if self.postmaster != ConfigurationDefaults.postmaster:
--	    str = str + ("set postmaster \"%s\"\n" % (self.postmaster,));
--	if self.bouncemail:
--	    str = str + ("set bouncemail\n")
--	else:
--	    str = str + ("set nobouncemail\n")
--	if self.spambounce:
--	    str = str + ("set spambounce\n")
--	else:
--	    str = str + ("set no spambounce\n")
--	if self.softbounce:
--	    str = str + ("set softbounce\n")
--	else:
--	    str = str + ("set no softbounce\n")
--	if self.properties != ConfigurationDefaults.properties:
--	    str = str + ("set properties \"%s\"\n" % (self.properties,));
--	if self.poll_interval > 0:
--	    str = str + "set daemon " + `self.poll_interval` + "\n"
--	if self.invisible:
--	   str = str + ("set invisible\n")
--	for site in self.servers:
--	    str = str + repr(site)
--	return str
-+        str = "";
-+        if self.syslog != ConfigurationDefaults.syslog:
-+           str = str + ("set syslog\n")
-+        elif self.logfile:
-+            str = str + ("set logfile \"%s\"\n" % (self.logfile,));
-+        if self.idfile != ConfigurationDefaults.idfile:
-+            str = str + ("set idfile \"%s\"\n" % (self.idfile,));
-+        if self.postmaster != ConfigurationDefaults.postmaster:
-+            str = str + ("set postmaster \"%s\"\n" % (self.postmaster,));
-+        if self.bouncemail:
-+            str = str + ("set bouncemail\n")
-+        else:
-+            str = str + ("set nobouncemail\n")
-+        if self.spambounce:
-+            str = str + ("set spambounce\n")
-+        else:
-+            str = str + ("set no spambounce\n")
-+        if self.softbounce:
-+            str = str + ("set softbounce\n")
-+        else:
-+            str = str + ("set no softbounce\n")
-+        if self.properties != ConfigurationDefaults.properties:
-+            str = str + ("set properties \"%s\"\n" % (self.properties,));
-+        if self.poll_interval > 0:
-+            str = str + "set daemon " + `self.poll_interval` + "\n"
-+        if self.invisible:
-+           str = str + ("set invisible\n")
-+        for site in self.servers:
-+            str = str + repr(site)
-+        return str
- 
-     def __delitem__(self, name):
--	for si in range(len(self.servers)):
--	    if self.servers[si].pollname == name:
--		del self.servers[si]
--		break
-+        for si in range(len(self.servers)):
-+            if self.servers[si].pollname == name:
-+                del self.servers[si]
-+                break
- 
-     def __str__(self):
--	return "[Configuration: " + repr(self) + "]"
-+        return "[Configuration: " + repr(self) + "]"
- 
- class Server:
-     def __init__(self):
--	self.pollname = None		# Poll label
--	self.via = None			# True name of host
--	self.active = TRUE		# Poll status
--	self.interval = 0		# Skip interval
--	self.protocol = 'auto'		# Default to auto protocol
--	self.service = None		# Service name to use
--	self.uidl = FALSE		# Don't use RFC1725 UIDLs by default
--	self.auth = 'any'		# Default to password authentication
--	self.timeout = 300		# 5-minute timeout
--	self.envelope = 'Received'	# Envelope-address header
--	self.envskip = 0		# Number of envelope headers to skip
--	self.qvirtual = None		# Name prefix to strip
--	self.aka = []			# List of DNS aka names
--	self.dns = TRUE			# Enable DNS lookup on multidrop
--	self.localdomains = []		# Domains to be considered local
--	self.interface = None		# IP address and range
--	self.monitor = None		# IP address and range
--	self.plugin = None		# Plugin command for going to server
--	self.plugout = None		# Plugin command for going to listener
--	self.principal = None		# Kerberos principal
--	self.esmtpname = None		# ESMTP 2554 name
--	self.esmtppassword = None	# ESMTP 2554 password
--	self.tracepolls = FALSE		# Add trace-poll info to headers
--	self.badheader = FALSE		# Pass messages with bad headers on?
--	self.users = []			# List of user entries for site
--	Server.typemap = (
--	    ('pollname',  'String'),
--	    ('via',	  'String'),
--	    ('active',	  'Boolean'),
--	    ('interval',  'Int'),
--	    ('protocol',  'String'),
--	    ('service',	  'String'),
--	    ('uidl',	  'Boolean'),
--	    ('auth',	  'String'),
--	    ('timeout',   'Int'),
--	    ('envelope',  'String'),
--	    ('envskip',   'Int'),
--	    ('qvirtual',  'String'),
--	    # leave aka out
--	    ('dns',	  'Boolean'),
--	    # leave localdomains out
--	    ('interface', 'String'),
--	    ('monitor',   'String'),
--	    ('plugin',	  'String'),
--	    ('plugout',   'String'),
--	    ('esmtpname', 'String'),
--	    ('esmtppassword', 'String'),
--	    ('principal', 'String'),
--	    ('tracepolls','Boolean'),
--	    ('badheader', 'Boolean'))
-+        self.pollname = None		# Poll label
-+        self.via = None			# True name of host
-+        self.active = TRUE		# Poll status
-+        self.interval = 0		# Skip interval
-+        self.protocol = 'auto'		# Default to auto protocol
-+        self.service = None		# Service name to use
-+        self.uidl = FALSE		# Don't use RFC1725 UIDLs by default
-+        self.auth = 'any'		# Default to password authentication
-+        self.timeout = 300		# 5-minute timeout
-+        self.envelope = 'Received'	# Envelope-address header
-+        self.envskip = 0		# Number of envelope headers to skip
-+        self.qvirtual = None		# Name prefix to strip
-+        self.aka = []			# List of DNS aka names
-+        self.dns = TRUE			# Enable DNS lookup on multidrop
-+        self.localdomains = []		# Domains to be considered local
-+        self.interface = None		# IP address and range
-+        self.monitor = None		# IP address and range
-+        self.plugin = None		# Plugin command for going to server
-+        self.plugout = None		# Plugin command for going to listener
-+        self.principal = None		# Kerberos principal
-+        self.esmtpname = None		# ESMTP 2554 name
-+        self.esmtppassword = None	# ESMTP 2554 password
-+        self.tracepolls = FALSE		# Add trace-poll info to headers
-+        self.badheader = FALSE		# Pass messages with bad headers on?
-+        self.users = []			# List of user entries for site
-+        Server.typemap = (
-+            ('pollname',  'String'),
-+            ('via',	  'String'),
-+            ('active',	  'Boolean'),
-+            ('interval',  'Int'),
-+            ('protocol',  'String'),
-+            ('service',	  'String'),
-+            ('uidl',	  'Boolean'),
-+            ('auth',	  'String'),
-+            ('timeout',   'Int'),
-+            ('envelope',  'String'),
-+            ('envskip',   'Int'),
-+            ('qvirtual',  'String'),
-+            # leave aka out
-+            ('dns',	  'Boolean'),
-+            # leave localdomains out
-+            ('interface', 'String'),
-+            ('monitor',   'String'),
-+            ('plugin',	  'String'),
-+            ('plugout',   'String'),
-+            ('esmtpname', 'String'),
-+            ('esmtppassword', 'String'),
-+            ('principal', 'String'),
-+            ('tracepolls','Boolean'),
-+            ('badheader', 'Boolean'))
- 
-     def dump(self, folded):
--	res = ""
--	if self.active:   res = res + "poll"
--	else:	     res = res + "skip"
--	res = res + (" " + self.pollname)
--	if self.via:
--	    res = res + (" via " + str(self.via) + "\n");
--	if self.protocol != ServerDefaults.protocol:
--	    res = res + " with proto " + self.protocol
--	if self.service and self.protocol and self.service != defaultports[self.protocol] and defaultports[self.protocol] and self.service != ianaservices[defaultports[self.protocol]]:
--	    res = res + " service " + self.service
--	if self.timeout != ServerDefaults.timeout:
--	    res = res + " timeout " + `self.timeout`
--	if self.interval != ServerDefaults.interval:
--	    res = res + " interval " + `self.interval`
--	if self.envelope != ServerDefaults.envelope or self.envskip != ServerDefaults.envskip:
--	    if self.envskip:
--		res = res + " envelope " + `self.envskip` + " " + self.envelope
--	    else:
--		res = res + " envelope " + self.envelope
--	if self.qvirtual:
--	    res = res + (" qvirtual " + str(self.qvirtual) + "\n");
--	if self.auth != ServerDefaults.auth:
--	    res = res + " auth " + self.auth
--	if self.dns != ServerDefaults.dns or self.uidl != ServerDefaults.uidl:
--	    res = res + " and options"
--	if self.dns != ServerDefaults.dns:
--	    res = res + flag2str(self.dns, 'dns')
--	if self.uidl != ServerDefaults.uidl:
--	    res = res + flag2str(self.uidl, 'uidl')
--	if folded:	res = res + "\n    "
--	else:	     res = res + " "
--
--	if self.aka:
--	     res = res + "aka"
--	     for x in self.aka:
--		res = res + " " + x
--	if self.aka and self.localdomains: res = res + " "
--	if self.localdomains:
--	     res = res + ("localdomains")
--	     for x in self.localdomains:
--		res = res + " " + x
--	if (self.aka or self.localdomains):
--	    if folded:
--		res = res + "\n    "
--	    else:
--		res = res + " "
--
--	if self.tracepolls:
--	   res = res + "tracepolls\n"
--
--	if self.interface:
--	    res = res + " interface " + str(self.interface)
--	if self.monitor:
--	    res = res + " monitor " + str(self.monitor)
--	if self.plugin:
--	    res = res + " plugin " + `self.plugin`
--	if self.plugout:
--	    res = res + " plugout " + `self.plugout`
--	if self.principal:
--	    res = res + " principal " + `self.principal`
--	if self.esmtpname:
--	    res = res + " esmtpname " + `self.esmtpname`
--	if self.esmtppassword:
--	    res = res + " esmtppassword " + `self.esmtppassword`
--	if self.interface or self.monitor or self.principal or self.plugin or self.plugout:
--	    if folded:
--		res = res + "\n"
--	if self.badheader:
--		res = res + "bad-header accept "
--
--	if res[-1] == " ": res = res[0:-1]
--
--	for user in self.users:
--	    res = res + repr(user)
--	res = res + "\n"
--	return res;
-+        res = ""
-+        if self.active:   res = res + "poll"
-+        else:	     res = res + "skip"
-+        res = res + (" " + self.pollname)
-+        if self.via:
-+            res = res + (" via " + str(self.via) + "\n");
-+        if self.protocol != ServerDefaults.protocol:
-+            res = res + " with proto " + self.protocol
-+        if self.service and self.protocol and self.service != defaultports[self.protocol] and defaultports[self.protocol] and self.service != ianaservices[defaultports[self.protocol]]:
-+            res = res + " service " + self.service
-+        if self.timeout != ServerDefaults.timeout:
-+            res = res + " timeout " + `self.timeout`
-+        if self.interval != ServerDefaults.interval:
-+            res = res + " interval " + `self.interval`
-+        if self.envelope != ServerDefaults.envelope or self.envskip != ServerDefaults.envskip:
-+            if self.envskip:
-+                res = res + " envelope " + `self.envskip` + " " + self.envelope
-+            else:
-+                res = res + " envelope " + self.envelope
-+        if self.qvirtual:
-+            res = res + (" qvirtual " + str(self.qvirtual) + "\n");
-+        if self.auth != ServerDefaults.auth:
-+            res = res + " auth " + self.auth
-+        if self.dns != ServerDefaults.dns or self.uidl != ServerDefaults.uidl:
-+            res = res + " and options"
-+        if self.dns != ServerDefaults.dns:
-+            res = res + flag2str(self.dns, 'dns')
-+        if self.uidl != ServerDefaults.uidl:
-+            res = res + flag2str(self.uidl, 'uidl')
-+        if folded:	res = res + "\n    "
-+        else:	     res = res + " "
-+
-+        if self.aka:
-+             res = res + "aka"
-+             for x in self.aka:
-+                res = res + " " + x
-+        if self.aka and self.localdomains: res = res + " "
-+        if self.localdomains:
-+             res = res + ("localdomains")
-+             for x in self.localdomains:
-+                res = res + " " + x
-+        if (self.aka or self.localdomains):
-+            if folded:
-+                res = res + "\n    "
-+            else:
-+                res = res + " "
-+
-+        if self.tracepolls:
-+           res = res + "tracepolls\n"
-+
-+        if self.interface:
-+            res = res + " interface " + str(self.interface)
-+        if self.monitor:
-+            res = res + " monitor " + str(self.monitor)
-+        if self.plugin:
-+            res = res + " plugin " + `self.plugin`
-+        if self.plugout:
-+            res = res + " plugout " + `self.plugout`
-+        if self.principal:
-+            res = res + " principal " + `self.principal`
-+        if self.esmtpname:
-+            res = res + " esmtpname " + `self.esmtpname`
-+        if self.esmtppassword:
-+            res = res + " esmtppassword " + `self.esmtppassword`
-+        if self.interface or self.monitor or self.principal or self.plugin or self.plugout:
-+            if folded:
-+                res = res + "\n"
-+        if self.badheader:
-+                res = res + "bad-header accept "
-+
-+        if res[-1] == " ": res = res[0:-1]
-+
-+        for user in self.users:
-+            res = res + repr(user)
-+        res = res + "\n"
-+        return res;
- 
-     def __delitem__(self, name):
--	for ui in range(len(self.users)):
--	    if self.users[ui].remote == name:
--		del self.users[ui]
--		break
-+        for ui in range(len(self.users)):
-+            if self.users[ui].remote == name:
-+                del self.users[ui]
-+                break
- 
-     def __repr__(self):
--	return self.dump(TRUE)
-+        return self.dump(TRUE)
- 
-     def __str__(self):
--	return "[Server: " + self.dump(FALSE) + "]"
-+        return "[Server: " + self.dump(FALSE) + "]"
- 
- class User:
-     def __init__(self):
--	if os.environ.has_key("USER"):
--	    self.remote = os.environ["USER"]	# Remote username
--	elif os.environ.has_key("LOGNAME"):
--	    self.remote = os.environ["LOGNAME"]
--	else:
--	    print "Can't get your username!"
--	    sys.exit(1)
--	self.localnames = [self.remote,]# Local names
--	self.password = None	# Password for mail account access
--	self.mailboxes = []	# Remote folders to retrieve from
--	self.smtphunt = []	# Hosts to forward to
--	self.fetchdomains = []	# Domains to fetch from
--	self.smtpaddress = None	# Append this to MAIL FROM line
--	self.smtpname = None	# Use this for RCPT TO
--	self.preconnect = None	# Connection setup
--	self.postconnect = None	# Connection wrapup
--	self.mda = None		# Mail Delivery Agent
--	self.bsmtp = None	# BSMTP output file
--	self.lmtp = FALSE	# Use LMTP rather than SMTP?
--	self.antispam = ""	# Listener's spam-block code
--	self.keep = FALSE	# Keep messages
--	self.flush = FALSE	# Flush messages
--	self.limitflush = FALSE	# Flush oversized messages
--	self.fetchall = FALSE	# Fetch old messages
--	self.rewrite = TRUE	# Rewrite message headers
--	self.forcecr = FALSE	# Force LF -> CR/LF
--	self.stripcr = FALSE	# Strip CR
--	self.pass8bits = FALSE	# Force BODY=7BIT
--	self.mimedecode = FALSE	# Undo MIME armoring
--	self.dropstatus = FALSE	# Drop incoming Status lines
--	self.dropdelivered = FALSE     # Drop incoming Delivered-To lines
--	self.idle = FALSE	       # IDLE after poll
--	self.limit = 0		# Message size limit
--	self.warnings = 3600	# Size warning interval (see tunable.h)
--	self.fetchlimit = 0	# Max messages fetched per batch
--	self.fetchsizelimit = 100	# Max message sizes fetched per transaction
--	self.fastuidl = 4	# Do fast uidl 3 out of 4 times
--	self.batchlimit = 0	# Max message forwarded per batch
--	self.expunge = 0	# Interval between expunges (IMAP)
--	self.ssl = 0		# Enable Seccure Socket Layer
--	self.sslkey = None	# SSL key filename
--	self.sslcert = None	# SSL certificate filename
--	self.sslproto = None	# Force SSL?
--	self.sslcertck = 0	# Enable strict SSL cert checking
--	self.sslcertpath = None	# Path to trusted certificates
--	self.sslcommonname = None	# SSL CommonName to expect
--	self.sslfingerprint = None	# SSL key fingerprint to check
--	self.properties = None	# Extension properties
--	User.typemap = (
--	    ('remote',	    'String'),
--	    # leave out mailboxes and localnames
--	    ('password',    'String'),
--	    # Leave out smtphunt, fetchdomains
--	    ('smtpaddress', 'String'),
--	    ('smtpname', 'String'),
--	    ('preconnect',  'String'),
--	    ('postconnect', 'String'),
--	    ('mda',	 'String'),
--	    ('bsmtp',	    'String'),
--	    ('lmtp',	'Boolean'),
--	    ('antispam',    'String'),
--	    ('keep',	'Boolean'),
--	    ('flush',	    'Boolean'),
--	    ('limitflush',  'Boolean'),
--	    ('fetchall',    'Boolean'),
--	    ('rewrite',     'Boolean'),
--	    ('forcecr',     'Boolean'),
--	    ('stripcr',     'Boolean'),
--	    ('pass8bits',   'Boolean'),
--	    ('mimedecode',  'Boolean'),
--	    ('dropstatus',  'Boolean'),
--	    ('dropdelivered', 'Boolean'),
--	    ('idle',	'Boolean'),
--	    ('limit',	    'Int'),
--	    ('warnings',    'Int'),
--	    ('fetchlimit',  'Int'),
--	    ('fetchsizelimit',	'Int'),
--	    ('fastuidl',    'Int'),
--	    ('batchlimit',  'Int'),
--	    ('expunge',     'Int'),
--	    ('ssl',	 'Boolean'),
--	    ('sslkey',	    'String'),
--	    ('sslcert',     'String'),
--	    ('sslcertck',   'Boolean'),
--	    ('sslcertpath', 'String'),
--	    ('sslcommonname', 'String'),
--	    ('sslfingerprint', 'String'),
--	    ('properties',  'String'))
-+        if os.environ.has_key("USER"):
-+            self.remote = os.environ["USER"]	# Remote username
-+        elif os.environ.has_key("LOGNAME"):
-+            self.remote = os.environ["LOGNAME"]
-+        else:
-+            print "Can't get your username!"
-+            sys.exit(1)
-+        self.localnames = [self.remote,]# Local names
-+        self.password = None	# Password for mail account access
-+        self.mailboxes = []	# Remote folders to retrieve from
-+        self.smtphunt = []	# Hosts to forward to
-+        self.fetchdomains = []	# Domains to fetch from
-+        self.smtpaddress = None	# Append this to MAIL FROM line
-+        self.smtpname = None	# Use this for RCPT TO
-+        self.preconnect = None	# Connection setup
-+        self.postconnect = None	# Connection wrapup
-+        self.mda = None		# Mail Delivery Agent
-+        self.bsmtp = None	# BSMTP output file
-+        self.lmtp = FALSE	# Use LMTP rather than SMTP?
-+        self.antispam = ""	# Listener's spam-block code
-+        self.keep = FALSE	# Keep messages
-+        self.flush = FALSE	# Flush messages
-+        self.limitflush = FALSE	# Flush oversized messages
-+        self.fetchall = FALSE	# Fetch old messages
-+        self.rewrite = TRUE	# Rewrite message headers
-+        self.forcecr = FALSE	# Force LF -> CR/LF
-+        self.stripcr = FALSE	# Strip CR
-+        self.pass8bits = FALSE	# Force BODY=7BIT
-+        self.mimedecode = FALSE	# Undo MIME armoring
-+        self.dropstatus = FALSE	# Drop incoming Status lines
-+        self.dropdelivered = FALSE     # Drop incoming Delivered-To lines
-+        self.idle = FALSE	       # IDLE after poll
-+        self.limit = 0		# Message size limit
-+        self.warnings = 3600	# Size warning interval (see tunable.h)
-+        self.fetchlimit = 0	# Max messages fetched per batch
-+        self.fetchsizelimit = 100	# Max message sizes fetched per transaction
-+        self.fastuidl = 4	# Do fast uidl 3 out of 4 times
-+        self.batchlimit = 0	# Max message forwarded per batch
-+        self.expunge = 0	# Interval between expunges (IMAP)
-+        self.ssl = 0		# Enable Seccure Socket Layer
-+        self.sslkey = None	# SSL key filename
-+        self.sslcert = None	# SSL certificate filename
-+        self.sslproto = None	# Force SSL?
-+        self.sslcertck = 0	# Enable strict SSL cert checking
-+        self.sslcertpath = None	# Path to trusted certificates
-+        self.sslcommonname = None	# SSL CommonName to expect
-+        self.sslfingerprint = None	# SSL key fingerprint to check
-+        self.properties = None	# Extension properties
-+        User.typemap = (
-+            ('remote',	    'String'),
-+            # leave out mailboxes and localnames
-+            ('password',    'String'),
-+            # Leave out smtphunt, fetchdomains
-+            ('smtpaddress', 'String'),
-+            ('smtpname', 'String'),
-+            ('preconnect',  'String'),
-+            ('postconnect', 'String'),
-+            ('mda',	 'String'),
-+            ('bsmtp',	    'String'),
-+            ('lmtp',	'Boolean'),
-+            ('antispam',    'String'),
-+            ('keep',	'Boolean'),
-+            ('flush',	    'Boolean'),
-+            ('limitflush',  'Boolean'),
-+            ('fetchall',    'Boolean'),
-+            ('rewrite',     'Boolean'),
-+            ('forcecr',     'Boolean'),
-+            ('stripcr',     'Boolean'),
-+            ('pass8bits',   'Boolean'),
-+            ('mimedecode',  'Boolean'),
-+            ('dropstatus',  'Boolean'),
-+            ('dropdelivered', 'Boolean'),
-+            ('idle',	'Boolean'),
-+            ('limit',	    'Int'),
-+            ('warnings',    'Int'),
-+            ('fetchlimit',  'Int'),
-+            ('fetchsizelimit',	'Int'),
-+            ('fastuidl',    'Int'),
-+            ('batchlimit',  'Int'),
-+            ('expunge',     'Int'),
-+            ('ssl',	 'Boolean'),
-+            ('sslkey',	    'String'),
-+            ('sslcert',     'String'),
-+            ('sslcertck',   'Boolean'),
-+            ('sslcertpath', 'String'),
-+            ('sslcommonname', 'String'),
-+            ('sslfingerprint', 'String'),
-+            ('properties',  'String'))
- 
-     def __repr__(self):
--	res = "    "
--	res = res + "user " + `self.remote` + " there ";
--	if self.password:
--	    res = res + "with password " + `self.password` + " "
--	if self.localnames:
--	    res = res + "is"
--	    for x in self.localnames:
--		res = res + " " + `x`
--	    res = res + " here"
--	if (self.keep != UserDefaults.keep
--		or self.flush != UserDefaults.flush
--		or self.limitflush != UserDefaults.limitflush
--		or self.fetchall != UserDefaults.fetchall
--		or self.rewrite != UserDefaults.rewrite
--		or self.forcecr != UserDefaults.forcecr
--		or self.stripcr != UserDefaults.stripcr
--		or self.pass8bits != UserDefaults.pass8bits
--		or self.mimedecode != UserDefaults.mimedecode
--		or self.dropstatus != UserDefaults.dropstatus
--		or self.dropdelivered != UserDefaults.dropdelivered
--		or self.idle != UserDefaults.idle):
--	    res = res + " options"
--	if self.keep != UserDefaults.keep:
--	    res = res + flag2str(self.keep, 'keep')
--	if self.flush != UserDefaults.flush:
--	    res = res + flag2str(self.flush, 'flush')
--	if self.limitflush != UserDefaults.limitflush:
--	    res = res + flag2str(self.limitflush, 'limitflush')
--	if self.fetchall != UserDefaults.fetchall:
--	    res = res + flag2str(self.fetchall, 'fetchall')
--	if self.rewrite != UserDefaults.rewrite:
--	    res = res + flag2str(self.rewrite, 'rewrite')
--	if self.forcecr != UserDefaults.forcecr:
--	    res = res + flag2str(self.forcecr, 'forcecr')
--	if self.stripcr != UserDefaults.stripcr:
--	    res = res + flag2str(self.stripcr, 'stripcr')
--	if self.pass8bits != UserDefaults.pass8bits:
--	    res = res + flag2str(self.pass8bits, 'pass8bits')
--	if self.mimedecode != UserDefaults.mimedecode:
--	    res = res + flag2str(self.mimedecode, 'mimedecode')
--	if self.dropstatus != UserDefaults.dropstatus:
--	    res = res + flag2str(self.dropstatus, 'dropstatus')
--	if self.dropdelivered != UserDefaults.dropdelivered:
--	    res = res + flag2str(self.dropdelivered, 'dropdelivered')
--	if self.idle != UserDefaults.idle:
--	    res = res + flag2str(self.idle, 'idle')
--	if self.limit != UserDefaults.limit:
--	    res = res + " limit " + `self.limit`
--	if self.warnings != UserDefaults.warnings:
--	    res = res + " warnings " + `self.warnings`
--	if self.fetchlimit != UserDefaults.fetchlimit:
--	    res = res + " fetchlimit " + `self.fetchlimit`
--	if self.fetchsizelimit != UserDefaults.fetchsizelimit:
--	    res = res + " fetchsizelimit " + `self.fetchsizelimit`
--	if self.fastuidl != UserDefaults.fastuidl:
--	    res = res + " fastuidl " + `self.fastuidl`
--	if self.batchlimit != UserDefaults.batchlimit:
--	    res = res + " batchlimit " + `self.batchlimit`
--	if self.ssl and self.ssl != UserDefaults.ssl:
--	    res = res + flag2str(self.ssl, 'ssl')
--	if self.sslkey and self.sslkey != UserDefaults.sslkey:
--	    res = res + " sslkey " + `self.sslkey`
--	if self.sslcert and self.sslcert != UserDefaults.sslcert:
--	    res = res + " sslcert " + `self.sslcert`
--	if self.sslproto and self.sslproto != UserDefaults.sslproto:
--	    res = res + " sslproto " + `self.sslproto`
--	if self.sslcertck and self.sslcertck != UserDefaults.sslcertck:
--	    res = res +  flag2str(self.sslcertck, 'sslcertck')
--	if self.sslcertpath and self.sslcertpath != UserDefaults.sslcertpath:
--	    res = res + " sslcertpath " + `self.sslcertpath`
--	if self.sslcommonname and self.sslcommonname != UserDefaults.sslcommonname:
--	    res = res + " sslcommonname " + `self.sslcommonname`
--	if self.sslfingerprint and self.sslfingerprint != UserDefaults.sslfingerprint:
--	    res = res + " sslfingerprint " + `self.sslfingerprint`
--	if self.expunge != UserDefaults.expunge:
--	    res = res + " expunge " + `self.expunge`
--	res = res + "\n"
--	trimmed = self.smtphunt;
--	if trimmed != [] and trimmed[len(trimmed) - 1] == "localhost":
--	    trimmed = trimmed[0:len(trimmed) - 1]
--	if trimmed != [] and trimmed[len(trimmed) - 1] == hostname:
--	    trimmed = trimmed[0:len(trimmed) - 1]
--	if trimmed != []:
--	    res = res + "    smtphost "
--	    for x in trimmed:
--		res = res + " " + x
--		res = res + "\n"
--	trimmed = self.fetchdomains
--	if trimmed != [] and trimmed[len(trimmed) - 1] == hostname:
--	    trimmed = trimmed[0:len(trimmed) - 1]
--	if trimmed != []:
--	    res = res + "    fetchdomains "
--	    for x in trimmed:
--		res = res + " " + x
--		res = res + "\n"
--	if self.mailboxes:
--	     res = res + "    folder"
--	     for x in self.mailboxes:
--		res = res + ' "%s"' % x
--	     res = res + "\n"
--	for fld in ('smtpaddress', 'preconnect', 'postconnect', 'mda', 'bsmtp', 'properties'):
--	    if getattr(self, fld):
--		res = res + " %s %s\n" % (fld, `getattr(self, fld)`)
--	if self.lmtp != UserDefaults.lmtp:
--	    res = res + flag2str(self.lmtp, 'lmtp')
--	if self.antispam != UserDefaults.antispam:
--	    res = res + "    antispam " + self.antispam + "\n"
--	return res;
-+        res = "    "
-+        res = res + "user " + `self.remote` + " there ";
-+        if self.password:
-+            res = res + "with password " + `self.password` + " "
-+        if self.localnames:
-+            res = res + "is"
-+            for x in self.localnames:
-+                res = res + " " + `x`
-+            res = res + " here"
-+        if (self.keep != UserDefaults.keep
-+                or self.flush != UserDefaults.flush
-+                or self.limitflush != UserDefaults.limitflush
-+                or self.fetchall != UserDefaults.fetchall
-+                or self.rewrite != UserDefaults.rewrite
-+                or self.forcecr != UserDefaults.forcecr
-+                or self.stripcr != UserDefaults.stripcr
-+                or self.pass8bits != UserDefaults.pass8bits
-+                or self.mimedecode != UserDefaults.mimedecode
-+                or self.dropstatus != UserDefaults.dropstatus
-+                or self.dropdelivered != UserDefaults.dropdelivered
-+                or self.idle != UserDefaults.idle):
-+            res = res + " options"
-+        if self.keep != UserDefaults.keep:
-+            res = res + flag2str(self.keep, 'keep')
-+        if self.flush != UserDefaults.flush:
-+            res = res + flag2str(self.flush, 'flush')
-+        if self.limitflush != UserDefaults.limitflush:
-+            res = res + flag2str(self.limitflush, 'limitflush')
-+        if self.fetchall != UserDefaults.fetchall:
-+            res = res + flag2str(self.fetchall, 'fetchall')
-+        if self.rewrite != UserDefaults.rewrite:
-+            res = res + flag2str(self.rewrite, 'rewrite')
-+        if self.forcecr != UserDefaults.forcecr:
-+            res = res + flag2str(self.forcecr, 'forcecr')
-+        if self.stripcr != UserDefaults.stripcr:
-+            res = res + flag2str(self.stripcr, 'stripcr')
-+        if self.pass8bits != UserDefaults.pass8bits:
-+            res = res + flag2str(self.pass8bits, 'pass8bits')
-+        if self.mimedecode != UserDefaults.mimedecode:
-+            res = res + flag2str(self.mimedecode, 'mimedecode')
-+        if self.dropstatus != UserDefaults.dropstatus:
-+            res = res + flag2str(self.dropstatus, 'dropstatus')
-+        if self.dropdelivered != UserDefaults.dropdelivered:
-+            res = res + flag2str(self.dropdelivered, 'dropdelivered')
-+        if self.idle != UserDefaults.idle:
-+            res = res + flag2str(self.idle, 'idle')
-+        if self.limit != UserDefaults.limit:
-+            res = res + " limit " + `self.limit`
-+        if self.warnings != UserDefaults.warnings:
-+            res = res + " warnings " + `self.warnings`
-+        if self.fetchlimit != UserDefaults.fetchlimit:
-+            res = res + " fetchlimit " + `self.fetchlimit`
-+        if self.fetchsizelimit != UserDefaults.fetchsizelimit:
-+            res = res + " fetchsizelimit " + `self.fetchsizelimit`
-+        if self.fastuidl != UserDefaults.fastuidl:
-+            res = res + " fastuidl " + `self.fastuidl`
-+        if self.batchlimit != UserDefaults.batchlimit:
-+            res = res + " batchlimit " + `self.batchlimit`
-+        if self.ssl and self.ssl != UserDefaults.ssl:
-+            res = res + flag2str(self.ssl, 'ssl')
-+        if self.sslkey and self.sslkey != UserDefaults.sslkey:
-+            res = res + " sslkey " + `self.sslkey`
-+        if self.sslcert and self.sslcert != UserDefaults.sslcert:
-+            res = res + " sslcert " + `self.sslcert`
-+        if self.sslproto and self.sslproto != UserDefaults.sslproto:
-+            res = res + " sslproto " + `self.sslproto`
-+        if self.sslcertck and self.sslcertck != UserDefaults.sslcertck:
-+            res = res +  flag2str(self.sslcertck, 'sslcertck')
-+        if self.sslcertpath and self.sslcertpath != UserDefaults.sslcertpath:
-+            res = res + " sslcertpath " + `self.sslcertpath`
-+        if self.sslcommonname and self.sslcommonname != UserDefaults.sslcommonname:
-+            res = res + " sslcommonname " + `self.sslcommonname`
-+        if self.sslfingerprint and self.sslfingerprint != UserDefaults.sslfingerprint:
-+            res = res + " sslfingerprint " + `self.sslfingerprint`
-+        if self.expunge != UserDefaults.expunge:
-+            res = res + " expunge " + `self.expunge`
-+        res = res + "\n"
-+        trimmed = self.smtphunt;
-+        if trimmed != [] and trimmed[len(trimmed) - 1] == "localhost":
-+            trimmed = trimmed[0:len(trimmed) - 1]
-+        if trimmed != [] and trimmed[len(trimmed) - 1] == hostname:
-+            trimmed = trimmed[0:len(trimmed) - 1]
-+        if trimmed != []:
-+            res = res + "    smtphost "
-+            for x in trimmed:
-+                res = res + " " + x
-+                res = res + "\n"
-+        trimmed = self.fetchdomains
-+        if trimmed != [] and trimmed[len(trimmed) - 1] == hostname:
-+            trimmed = trimmed[0:len(trimmed) - 1]
-+        if trimmed != []:
-+            res = res + "    fetchdomains "
-+            for x in trimmed:
-+                res = res + " " + x
-+                res = res + "\n"
-+        if self.mailboxes:
-+             res = res + "    folder"
-+             for x in self.mailboxes:
-+                res = res + ' "%s"' % x
-+             res = res + "\n"
-+        for fld in ('smtpaddress', 'preconnect', 'postconnect', 'mda', 'bsmtp', 'properties'):
-+            if getattr(self, fld):
-+                res = res + " %s %s\n" % (fld, `getattr(self, fld)`)
-+        if self.lmtp != UserDefaults.lmtp:
-+            res = res + flag2str(self.lmtp, 'lmtp')
-+        if self.antispam != UserDefaults.antispam:
-+            res = res + "    antispam " + self.antispam + "\n"
-+        return res;
- 
-     def __str__(self):
--	return "[User: " + repr(self) + "]"
-+        return "[User: " + repr(self) + "]"
- 
- #
- # Helper code
-@@ -433,24 +433,24 @@ class User:
- 
- # IANA port assignments and bogus 1109 entry
- ianaservices = {"pop2":109,
--		"pop3":110,
--		"1109":1109,
--		"imap":143,
--		"smtp":25,
--		"odmr":366}
-+                "pop3":110,
-+                "1109":1109,
-+                "imap":143,
-+                "smtp":25,
-+                "odmr":366}
- 
- # fetchmail protocol to IANA service name
- defaultports = {"auto":None,
--		"POP2":"pop2",
--		"POP3":"pop3",
--		"APOP":"pop3",
--		"KPOP":"1109",
--		"IMAP":"imap",
--		"ETRN":"smtp",
--		"ODMR":"odmr"}
-+                "POP2":"pop2",
-+                "POP3":"pop3",
-+                "APOP":"pop3",
-+                "KPOP":"1109",
-+                "IMAP":"imap",
-+                "ETRN":"smtp",
-+                "ODMR":"odmr"}
- 
- authlist = ("any", "password", "gssapi", "kerberos", "ssh", "otp",
--	    "msn", "ntlm")
-+            "msn", "ntlm")
- 
- listboxhelp = {
-     'title' : 'List Selection Help',
-@@ -463,23 +463,23 @@ def flag2str(value, string):
- # make a string representation of a .fetchmailrc flag or negated flag
-     str = ""
-     if value != None:
--	str = str + (" ")
--	if value == FALSE: str = str + ("no ")
--	str = str + string;
-+        str = str + (" ")
-+        if value == FALSE: str = str + ("no ")
-+        str = str + string;
-     return str
- 
- class LabeledEntry(Frame):
- # widget consisting of entry field with caption to left
-     def bind(self, key, action):
--	self.E.bind(key, action)
-+        self.E.bind(key, action)
-     def focus_set(self):
--	self.E.focus_set()
-+        self.E.focus_set()
-     def __init__(self, Master, text, textvar, lwidth, ewidth=12):
--	Frame.__init__(self, Master)
--	self.L = Label(self, {'text':text, 'width':lwidth, 'anchor':'w'})
--	self.E = Entry(self, {'textvar':textvar, 'width':ewidth})
--	self.L.pack({'side':'left'})
--	self.E.pack({'side':'left', 'expand':'1', 'fill':'x'})
-+        Frame.__init__(self, Master)
-+        self.L = Label(self, {'text':text, 'width':lwidth, 'anchor':'w'})
-+        self.E = Entry(self, {'textvar':textvar, 'width':ewidth})
-+        self.L.pack({'side':'left'})
-+        self.E.pack({'side':'left', 'expand':'1', 'fill':'x'})
- 
- def ButtonBar(frame, legend, ref, alternatives, depth, command):
- # array of radio buttons, caption to left, picking from a string list
-@@ -487,20 +487,20 @@ def ButtonBar(frame, legend, ref, alternatives, depth, command):
-     width = (len(alternatives)+1) / depth;
-     Label(bar, text=legend).pack(side=LEFT)
-     for column in range(width):
--	subframe = Frame(bar)
--	for row in range(depth):
--	    ind = width * row + column
--	    if ind < len(alternatives):
--		Radiobutton(subframe,
--			{'text':alternatives[ind],
--			 'variable':ref,
--			 'value':alternatives[ind],
--			 'command':command}).pack(side=TOP, anchor=W)
--	    else:
--		# This is just a spacer
--		Radiobutton(subframe,
--			{'text':" ",'state':DISABLED}).pack(side=TOP, anchor=W)
--	subframe.pack(side=LEFT)
-+        subframe = Frame(bar)
-+        for row in range(depth):
-+            ind = width * row + column
-+            if ind < len(alternatives):
-+                Radiobutton(subframe,
-+                        {'text':alternatives[ind],
-+                         'variable':ref,
-+                         'value':alternatives[ind],
-+                         'command':command}).pack(side=TOP, anchor=W)
-+            else:
-+                # This is just a spacer
-+                Radiobutton(subframe,
-+                        {'text':" ",'state':DISABLED}).pack(side=TOP, anchor=W)
-+        subframe.pack(side=LEFT)
-     bar.pack(side=TOP);
-     return bar
- 
-@@ -520,142 +520,142 @@ def helpwin(helpdict):
-     scroll.pack(side=RIGHT, fill=BOTH)
-     helpwin.textwidget.insert(END, helpdict['text']);
-     Button(helpwin, text='Done',
--	   command=lambda x=helpwin: x.destroy(), bd=2).pack()
-+           command=lambda x=helpwin: x.destroy(), bd=2).pack()
-     textframe.pack(side=TOP)
- 
- def make_icon_window(base, image):
-     try:
--	# Some older pythons will error out on this
--	icon_image = PhotoImage(data=image)
--	icon_window = Toplevel()
--	Label(icon_window, image=icon_image, bg='black').pack()
--	base.master.iconwindow(icon_window)
--	# Avoid TkInter brain death. PhotoImage objects go out of
--	# scope when the enclosing function returns.  Therefore
--	# we have to explicitly link them to something.
--	base.keepalive.append(icon_image)
-+        # Some older pythons will error out on this
-+        icon_image = PhotoImage(data=image)
-+        icon_window = Toplevel()
-+        Label(icon_window, image=icon_image, bg='black').pack()
-+        base.master.iconwindow(icon_window)
-+        # Avoid TkInter brain death. PhotoImage objects go out of
-+        # scope when the enclosing function returns.  Therefore
-+        # we have to explicitly link them to something.
-+        base.keepalive.append(icon_image)
-     except:
--	pass
-+        pass
- 
- class ListEdit(Frame):
- # edit a list of values (duplicates not allowed) with a supplied editor hook
-     def __init__(self, newlegend, list, editor, deletor, master, helptxt):
--	self.editor = editor
--	self.deletor = deletor
--	self.list = list
--
--	# Set up a widget to accept new elements
--	self.newval = StringVar(master)
--	newwin = LabeledEntry(master, newlegend, self.newval, '12')
--	newwin.bind('<Double-1>', self.handleNew)
--	newwin.bind('<Return>', self.handleNew)
--	newwin.pack(side=TOP, fill=X, anchor=E)
--
--	# Edit the existing list
--	listframe = Frame(master)
--	scroll = Scrollbar(listframe)
--	self.listwidget = Listbox(listframe, height=0, selectmode='browse')
--	if self.list:
--	    for x in self.list:
--		self.listwidget.insert(END, x)
--	listframe.pack(side=TOP, expand=YES, fill=BOTH)
--	self.listwidget.config(yscrollcommand=scroll.set)
--	self.listwidget.pack(side=LEFT, expand=YES, fill=BOTH)
--	scroll.config(command=self.listwidget.yview)
--	scroll.pack(side=RIGHT, fill=BOTH)
--	self.listwidget.config(selectmode=SINGLE, setgrid=TRUE)
--	self.listwidget.bind('<Double-1>', self.handleList);
--	self.listwidget.bind('<Return>', self.handleList);
--
--	bf = Frame(master);
--	if self.editor:
--	    Button(bf, text='Edit',   command=self.editItem).pack(side=LEFT)
--	Button(bf, text='Delete', command=self.deleteItem).pack(side=LEFT)
--	if helptxt:
--	    self.helptxt = helptxt
--	    Button(bf, text='Help', fg='blue',
--		   command=self.help).pack(side=RIGHT)
--	bf.pack(fill=X)
-+        self.editor = editor
-+        self.deletor = deletor
-+        self.list = list
-+
-+        # Set up a widget to accept new elements
-+        self.newval = StringVar(master)
-+        newwin = LabeledEntry(master, newlegend, self.newval, '12')
-+        newwin.bind('<Double-1>', self.handleNew)
-+        newwin.bind('<Return>', self.handleNew)
-+        newwin.pack(side=TOP, fill=X, anchor=E)
-+
-+        # Edit the existing list
-+        listframe = Frame(master)
-+        scroll = Scrollbar(listframe)
-+        self.listwidget = Listbox(listframe, height=0, selectmode='browse')
-+        if self.list:
-+            for x in self.list:
-+                self.listwidget.insert(END, x)
-+        listframe.pack(side=TOP, expand=YES, fill=BOTH)
-+        self.listwidget.config(yscrollcommand=scroll.set)
-+        self.listwidget.pack(side=LEFT, expand=YES, fill=BOTH)
-+        scroll.config(command=self.listwidget.yview)
-+        scroll.pack(side=RIGHT, fill=BOTH)
-+        self.listwidget.config(selectmode=SINGLE, setgrid=TRUE)
-+        self.listwidget.bind('<Double-1>', self.handleList);
-+        self.listwidget.bind('<Return>', self.handleList);
-+
-+        bf = Frame(master);
-+        if self.editor:
-+            Button(bf, text='Edit',   command=self.editItem).pack(side=LEFT)
-+        Button(bf, text='Delete', command=self.deleteItem).pack(side=LEFT)
-+        if helptxt:
-+            self.helptxt = helptxt
-+            Button(bf, text='Help', fg='blue',
-+                   command=self.help).pack(side=RIGHT)
-+        bf.pack(fill=X)
- 
-     def help(self):
--	helpwin(self.helptxt)
-+        helpwin(self.helptxt)
- 
-     def handleList(self, event):
--	self.editItem();
-+        self.editItem();
- 
-     def handleNew(self, event):
--	item = self.newval.get()
--	if item:
--	    entire = self.listwidget.get(0, self.listwidget.index('end'));
--	    if item and (not entire) or (not item in self.listwidget.get(0, self.listwidget.index('end'))):
--		self.listwidget.insert('end', item)
--		if self.list != None: self.list.append(item)
--		if self.editor:
--		    apply(self.editor, (item,))
--	    self.newval.set('')
-+        item = self.newval.get()
-+        if item:
-+            entire = self.listwidget.get(0, self.listwidget.index('end'));
-+            if item and (not entire) or (not item in self.listwidget.get(0, self.listwidget.index('end'))):
-+                self.listwidget.insert('end', item)
-+                if self.list != None: self.list.append(item)
-+                if self.editor:
-+                    apply(self.editor, (item,))
-+            self.newval.set('')
- 
-     def editItem(self):
--	select = self.listwidget.curselection()
--	if not select:
--	    helpwin(listboxhelp)
--	else:
--	    index = select[0]
--	    if index and self.editor:
--		label = self.listwidget.get(index);
--		if self.editor:
--		    apply(self.editor, (label,))
-+        select = self.listwidget.curselection()
-+        if not select:
-+            helpwin(listboxhelp)
-+        else:
-+            index = select[0]
-+            if index and self.editor:
-+                label = self.listwidget.get(index);
-+                if self.editor:
-+                    apply(self.editor, (label,))
- 
-     def deleteItem(self):
--	select = self.listwidget.curselection()
--	if not select:
--	    helpwin(listboxhelp)
--	else:
--	    index = string.atoi(select[0])
--	    label = self.listwidget.get(index);
--	    self.listwidget.delete(index)
--	    if self.list != None:
--		del self.list[index]
--	    if self.deletor != None:
--		apply(self.deletor, (label,))
-+        select = self.listwidget.curselection()
-+        if not select:
-+            helpwin(listboxhelp)
-+        else:
-+            index = string.atoi(select[0])
-+            label = self.listwidget.get(index);
-+            self.listwidget.delete(index)
-+            if self.list != None:
-+                del self.list[index]
-+            if self.deletor != None:
-+                apply(self.deletor, (label,))
- 
- def ConfirmQuit(frame, context):
-     ans = Dialog(frame,
--		 title = 'Quit?',
--		 text = 'Really quit ' + context + ' without saving?',
--		 bitmap = 'question',
--		 strings = ('Yes', 'No'),
--		 default = 1)
-+                 title = 'Quit?',
-+                 text = 'Really quit ' + context + ' without saving?',
-+                 bitmap = 'question',
-+                 strings = ('Yes', 'No'),
-+                 default = 1)
-     return ans.num == 0
- 
- def dispose_window(master, legend, help, savelegend='OK'):
-     dispose = Frame(master, relief=RAISED, bd=5)
-     Label(dispose, text=legend).pack(side=TOP,pady=10)
-     Button(dispose, text=savelegend, fg='blue',
--	   command=master.save).pack(side=LEFT)
-+           command=master.save).pack(side=LEFT)
-     Button(dispose, text='Quit', fg='blue',
--	   command=master.nosave).pack(side=LEFT)
-+           command=master.nosave).pack(side=LEFT)
-     Button(dispose, text='Help', fg='blue',
--	   command=lambda x=help: helpwin(x)).pack(side=RIGHT)
-+           command=lambda x=help: helpwin(x)).pack(side=RIGHT)
-     dispose.pack(fill=X)
-     return dispose
- 
- class MyWidget:
- # Common methods for Tkinter widgets -- deals with Tkinter declaration
-     def post(self, widgetclass, field):
--	for x in widgetclass.typemap:
--	    if x[1] == 'Boolean':
--		setattr(self, x[0], BooleanVar(self))
--	    elif x[1] == 'String':
--		setattr(self, x[0], StringVar(self))
--	    elif x[1] == 'Int':
--		setattr(self, x[0], IntVar(self))
--	    source = getattr(getattr(self, field), x[0])
--	    if source:
--		getattr(self, x[0]).set(source)
-+        for x in widgetclass.typemap:
-+            if x[1] == 'Boolean':
-+                setattr(self, x[0], BooleanVar(self))
-+            elif x[1] == 'String':
-+                setattr(self, x[0], StringVar(self))
-+            elif x[1] == 'Int':
-+                setattr(self, x[0], IntVar(self))
-+            source = getattr(getattr(self, field), x[0])
-+            if source:
-+                getattr(self, x[0]).set(source)
- 
-     def fetch(self, widgetclass, field):
--	for x in widgetclass.typemap:
--	    setattr(getattr(self, field), x[0], getattr(self, x[0]).get())
-+        for x in widgetclass.typemap:
-+            setattr(getattr(self, field), x[0], getattr(self, x[0]).get())
- 
- #
- # First, code to set the global fetchmail run controls.
-@@ -708,46 +708,46 @@ In the `Run Controls' panel, you can set the following options that
- control how fetchmail runs:
- 
- Poll interval
--	Number of seconds to wait between polls in the background.
--	If zero, fetchmail will run in foreground.
-+        Number of seconds to wait between polls in the background.
-+        If zero, fetchmail will run in foreground.
- 
- Logfile
--	If empty, emit progress and error messages to stderr.
--	Otherwise this gives the name of the files to write to.
--	This field is ignored if the "Log to syslog?" option is on.
-+        If empty, emit progress and error messages to stderr.
-+        Otherwise this gives the name of the files to write to.
-+        This field is ignored if the "Log to syslog?" option is on.
- 
- Idfile
--	If empty, store seen-message IDs in .fetchids under user's home
--	directory.  If nonempty, use given file name.
-+        If empty, store seen-message IDs in .fetchids under user's home
-+        directory.  If nonempty, use given file name.
- 
- Postmaster
--	Who to send multidrop mail to as a last resort if no address can
--	be matched.  Normally empty; in this case, fetchmail treats the
--	invoking user as the address of last resort unless that user is
--	root.  If that user is root, fetchmail sends to `postmaster'.
-+        Who to send multidrop mail to as a last resort if no address can
-+        be matched.  Normally empty; in this case, fetchmail treats the
-+        invoking user as the address of last resort unless that user is
-+        root.  If that user is root, fetchmail sends to `postmaster'.
- 
- Bounces to sender?
--	If this option is on (the default) error mail goes to the sender.
--	Otherwise it goes to the postmaster.
-+        If this option is on (the default) error mail goes to the sender.
-+        Otherwise it goes to the postmaster.
- 
- Send spam bounces?
--	If this option is on, spam bounces are sent to the sender or
--	postmaster (depending on the "Bounces to sender?" option.  Otherwise,
--	spam bounces are not sent (the default).
-+        If this option is on, spam bounces are sent to the sender or
-+        postmaster (depending on the "Bounces to sender?" option.  Otherwise,
-+        spam bounces are not sent (the default).
- 
- Use soft bounces?
--	If this option is on, permanent delivery errors are treated as
--	temporary, i. e. mail is kept on the upstream server. Useful
--	during testing and after configuration changes, and on by
--	default.
--	  If this option is off, permanent delivery errors delete
--	undeliverable mail from the upstream.
-+        If this option is on, permanent delivery errors are treated as
-+        temporary, i. e. mail is kept on the upstream server. Useful
-+        during testing and after configuration changes, and on by
-+        default.
-+          If this option is off, permanent delivery errors delete
-+        undeliverable mail from the upstream.
- 
- Invisible
--	If false (the default) fetchmail generates a Received line into
--	each message and generates a HELO from the machine it is running on.
--	If true, fetchmail generates no Received line and HELOs as if it were
--	the remote site.
-+        If false (the default) fetchmail generates a Received line into
-+        each message and generates a HELO from the machine it is running on.
-+        If true, fetchmail generates no Received line and HELOs as if it were
-+        the remote site.
- 
- In the `Remote Mail Configurations' panel, you can:
- 
-@@ -767,155 +767,155 @@ This will take you to a site configuration dialogue.
- 
- class ConfigurationEdit(Frame, MyWidget):
-     def __init__(self, configuration, outfile, master, onexit):
--	self.subwidgets = {}
--	self.configuration = configuration
--	self.outfile = outfile
--	self.container = master
--	self.onexit = onexit
--	ConfigurationEdit.mode_to_help = {
--	    'novice':configure_novice_help, 'expert':configure_expert_help
--	    }
-+        self.subwidgets = {}
-+        self.configuration = configuration
-+        self.outfile = outfile
-+        self.container = master
-+        self.onexit = onexit
-+        ConfigurationEdit.mode_to_help = {
-+            'novice':configure_novice_help, 'expert':configure_expert_help
-+            }
- 
-     def server_edit(self, sitename):
--	self.subwidgets[sitename] = ServerEdit(sitename, self).edit(self.mode, Toplevel())
-+        self.subwidgets[sitename] = ServerEdit(sitename, self).edit(self.mode, Toplevel())
- 
-     def server_delete(self, sitename):
--	try:
--	    for user in self.subwidgets.keys():
--		user.destruct()
--	    del self.configuration[sitename]
--	except:
--	    pass
-+        try:
-+            for user in self.subwidgets.keys():
-+                user.destruct()
-+            del self.configuration[sitename]
-+        except:
-+            pass
- 
-     def edit(self, mode):
--	self.mode = mode
--	Frame.__init__(self, self.container)
--	self.master.title('fetchmail ' + self.mode + ' configurator');
--	self.master.iconname('fetchmail ' + self.mode + ' configurator');
--	self.master.protocol('WM_DELETE_WINDOW', self.nosave)
--	self.keepalive = []	# Use this to anchor the PhotoImage object
--	make_icon_window(self, fetchmail_icon)
--	Pack.config(self)
--	self.post(Configuration, 'configuration')
--
--	dispose_window(self,
--		       'Configurator ' + self.mode + ' Controls',
--		       ConfigurationEdit.mode_to_help[self.mode],
--		       'Save')
--
--	gf = Frame(self, relief=RAISED, bd = 5)
--	Label(gf,
--		text='Fetchmail Run Controls',
--		bd=2).pack(side=TOP, pady=10)
--
--	df = Frame(gf)
--
--	ff = Frame(df)
--	if self.mode != 'novice':
--	    # Set the postmaster
--	    log = LabeledEntry(ff, '	 Postmaster:', self.postmaster, '14')
--	    log.pack(side=RIGHT, anchor=E)
--
--	# Set the poll interval
--	de = LabeledEntry(ff, '     Poll interval:', self.poll_interval, '14')
--	de.pack(side=RIGHT, anchor=E)
--	ff.pack()
--
--	df.pack()
--
--	if self.mode != 'novice':
--	    pf = Frame(gf)
--	    Checkbutton(pf,
--		{'text':'Bounces to sender?',
--		'variable':self.bouncemail,
--		'relief':GROOVE}).pack(side=LEFT, anchor=W)
--	    pf.pack(fill=X)
--
--	    sb = Frame(gf)
--	    Checkbutton(sb,
--		{'text':'Send spam bounces?',
--		'variable':self.spambounce,
--		'relief':GROOVE}).pack(side=LEFT, anchor=W)
--	    sb.pack(fill=X)
--
--	    sb = Frame(gf)
--	    Checkbutton(sb,
--		{'text':'Treat permanent errors as temporary?',
--		'variable':self.softbounce,
--		'relief':GROOVE}).pack(side=LEFT, anchor=W)
--	    sb.pack(fill=X)
--
--	    sf = Frame(gf)
--	    Checkbutton(sf,
--		{'text':'Log to syslog?',
--		'variable':self.syslog,
--		'relief':GROOVE}).pack(side=LEFT, anchor=W)
--	    log = LabeledEntry(sf, '	 Logfile:', self.logfile, '14')
--	    log.pack(side=RIGHT, anchor=E)
--	    sf.pack(fill=X)
--
--	    Checkbutton(gf,
--		{'text':'Invisible mode?',
--		'variable':self.invisible,
--		 'relief':GROOVE}).pack(side=LEFT, anchor=W)
--	    # Set the idfile
--	    log = LabeledEntry(gf, '	 Idfile:', self.idfile, '14')
--	    log.pack(side=RIGHT, anchor=E)
--
--	gf.pack(fill=X)
--
--	# Expert mode allows us to edit multiple sites
--	lf = Frame(self, relief=RAISED, bd=5)
--	Label(lf,
--	      text='Remote Mail Server Configurations',
--	      bd=2).pack(side=TOP, pady=10)
--	ListEdit('New Server:',
--		map(lambda x: x.pollname, self.configuration.servers),
--		lambda site, self=self: self.server_edit(site),
--		lambda site, self=self: self.server_delete(site),
--		lf, remotehelp)
--	lf.pack(fill=X)
-+        self.mode = mode
-+        Frame.__init__(self, self.container)
-+        self.master.title('fetchmail ' + self.mode + ' configurator');
-+        self.master.iconname('fetchmail ' + self.mode + ' configurator');
-+        self.master.protocol('WM_DELETE_WINDOW', self.nosave)
-+        self.keepalive = []	# Use this to anchor the PhotoImage object
-+        make_icon_window(self, fetchmail_icon)
-+        Pack.config(self)
-+        self.post(Configuration, 'configuration')
-+
-+        dispose_window(self,
-+                       'Configurator ' + self.mode + ' Controls',
-+                       ConfigurationEdit.mode_to_help[self.mode],
-+                       'Save')
-+
-+        gf = Frame(self, relief=RAISED, bd = 5)
-+        Label(gf,
-+                text='Fetchmail Run Controls',
-+                bd=2).pack(side=TOP, pady=10)
-+
-+        df = Frame(gf)
-+
-+        ff = Frame(df)
-+        if self.mode != 'novice':
-+            # Set the postmaster
-+            log = LabeledEntry(ff, '	 Postmaster:', self.postmaster, '14')
-+            log.pack(side=RIGHT, anchor=E)
-+
-+        # Set the poll interval
-+        de = LabeledEntry(ff, '     Poll interval:', self.poll_interval, '14')
-+        de.pack(side=RIGHT, anchor=E)
-+        ff.pack()
-+
-+        df.pack()
-+
-+        if self.mode != 'novice':
-+            pf = Frame(gf)
-+            Checkbutton(pf,
-+                {'text':'Bounces to sender?',
-+                'variable':self.bouncemail,
-+                'relief':GROOVE}).pack(side=LEFT, anchor=W)
-+            pf.pack(fill=X)
-+
-+            sb = Frame(gf)
-+            Checkbutton(sb,
-+                {'text':'Send spam bounces?',
-+                'variable':self.spambounce,
-+                'relief':GROOVE}).pack(side=LEFT, anchor=W)
-+            sb.pack(fill=X)
-+
-+            sb = Frame(gf)
-+            Checkbutton(sb,
-+                {'text':'Treat permanent errors as temporary?',
-+                'variable':self.softbounce,
-+                'relief':GROOVE}).pack(side=LEFT, anchor=W)
-+            sb.pack(fill=X)
-+
-+            sf = Frame(gf)
-+            Checkbutton(sf,
-+                {'text':'Log to syslog?',
-+                'variable':self.syslog,
-+                'relief':GROOVE}).pack(side=LEFT, anchor=W)
-+            log = LabeledEntry(sf, '	 Logfile:', self.logfile, '14')
-+            log.pack(side=RIGHT, anchor=E)
-+            sf.pack(fill=X)
-+
-+            Checkbutton(gf,
-+                {'text':'Invisible mode?',
-+                'variable':self.invisible,
-+                 'relief':GROOVE}).pack(side=LEFT, anchor=W)
-+            # Set the idfile
-+            log = LabeledEntry(gf, '	 Idfile:', self.idfile, '14')
-+            log.pack(side=RIGHT, anchor=E)
-+
-+        gf.pack(fill=X)
-+
-+        # Expert mode allows us to edit multiple sites
-+        lf = Frame(self, relief=RAISED, bd=5)
-+        Label(lf,
-+              text='Remote Mail Server Configurations',
-+              bd=2).pack(side=TOP, pady=10)
-+        ListEdit('New Server:',
-+                map(lambda x: x.pollname, self.configuration.servers),
-+                lambda site, self=self: self.server_edit(site),
-+                lambda site, self=self: self.server_delete(site),
-+                lf, remotehelp)
-+        lf.pack(fill=X)
- 
-     def destruct(self):
--	for sitename in self.subwidgets.keys():
--	    self.subwidgets[sitename].destruct()
--	self.master.destroy()
--	self.onexit()
-+        for sitename in self.subwidgets.keys():
-+            self.subwidgets[sitename].destruct()
-+        self.master.destroy()
-+        self.onexit()
- 
-     def nosave(self):
--	if ConfirmQuit(self, self.mode + " configuration editor"):
--	    self.destruct()
-+        if ConfirmQuit(self, self.mode + " configuration editor"):
-+            self.destruct()
- 
-     def save(self):
--	for sitename in self.subwidgets.keys():
--	    self.subwidgets[sitename].save()
--	self.fetch(Configuration, 'configuration')
--	fm = None
--	if not self.outfile:
--	    fm = sys.stdout
--	elif not os.path.isfile(self.outfile) or Dialog(self,
--		 title = 'Overwrite existing run control file?',
--		 text = 'Really overwrite existing run control file?',
--		 bitmap = 'question',
--		 strings = ('Yes', 'No'),
--		 default = 1).num == 0:
--	    try:
--		os.rename(self.outfile, self.outfile + "~")
--	    # Pre-1.5.2 compatibility...
--	    except os.error:
--		pass
--	    oldumask = os.umask(077)
--	    fm = open(self.outfile, 'w')
--	    os.umask(oldumask)
--	if fm:
--	    # be paranoid
--	    if fm != sys.stdout:
--		os.chmod(self.outfile, 0600)
--	    fm.write("# Configuration created %s by fetchmailconf %s\n" % (time.ctime(time.time()), version))
--	    fm.write(`self.configuration`)
--	    if self.outfile:
--		fm.close()
--	    self.destruct()
-+        for sitename in self.subwidgets.keys():
-+            self.subwidgets[sitename].save()
-+        self.fetch(Configuration, 'configuration')
-+        fm = None
-+        if not self.outfile:
-+            fm = sys.stdout
-+        elif not os.path.isfile(self.outfile) or Dialog(self,
-+                 title = 'Overwrite existing run control file?',
-+                 text = 'Really overwrite existing run control file?',
-+                 bitmap = 'question',
-+                 strings = ('Yes', 'No'),
-+                 default = 1).num == 0:
-+            try:
-+                os.rename(self.outfile, self.outfile + "~")
-+            # Pre-1.5.2 compatibility...
-+            except os.error:
-+                pass
-+            oldumask = os.umask(077)
-+            fm = open(self.outfile, 'w')
-+            os.umask(oldumask)
-+        if fm:
-+            # be paranoid
-+            if fm != sys.stdout:
-+                os.chmod(self.outfile, 0600)
-+            fm.write("# Configuration created %s by fetchmailconf %s\n" % (time.ctime(time.time()), version))
-+            fm.write(`self.configuration`)
-+            if self.outfile:
-+                fm.close()
-+            self.destruct()
- 
- #
- # Server editing stuff.
-@@ -1063,217 +1063,217 @@ user's options on that site.
- 
- class ServerEdit(Frame, MyWidget):
-     def __init__(self, host, parent):
--	self.parent = parent
--	self.server = None
--	self.subwidgets = {}
--	for site in parent.configuration.servers:
--	    if site.pollname == host:
--		self.server = site
--	if (self.server == None):
--		self.server = Server()
--		self.server.pollname = host
--		self.server.via = None
--		parent.configuration.servers.append(self.server)
-+        self.parent = parent
-+        self.server = None
-+        self.subwidgets = {}
-+        for site in parent.configuration.servers:
-+            if site.pollname == host:
-+                self.server = site
-+        if (self.server == None):
-+                self.server = Server()
-+                self.server.pollname = host
-+                self.server.via = None
-+                parent.configuration.servers.append(self.server)
- 
-     def edit(self, mode, master=None):
--	Frame.__init__(self, master)
--	Pack.config(self)
--	self.master.title('Fetchmail host ' + self.server.pollname);
--	self.master.iconname('Fetchmail host ' + self.server.pollname);
--	self.post(Server, 'server')
--	self.makeWidgets(self.server.pollname, mode)
--	self.keepalive = []	# Use this to anchor the PhotoImage object
--	make_icon_window(self, fetchmail_icon)
-+        Frame.__init__(self, master)
-+        Pack.config(self)
-+        self.master.title('Fetchmail host ' + self.server.pollname);
-+        self.master.iconname('Fetchmail host ' + self.server.pollname);
-+        self.post(Server, 'server')
-+        self.makeWidgets(self.server.pollname, mode)
-+        self.keepalive = []	# Use this to anchor the PhotoImage object
-+        make_icon_window(self, fetchmail_icon)
- #	self.grab_set()
- #	self.focus_set()
- #	self.wait_window()
--	return self
-+        return self
- 
-     def destruct(self):
--	for username in self.subwidgets.keys():
--	    self.subwidgets[username].destruct()
--	del self.parent.subwidgets[self.server.pollname]
--	self.master.destroy()
-+        for username in self.subwidgets.keys():
-+            self.subwidgets[username].destruct()
-+        del self.parent.subwidgets[self.server.pollname]
-+        self.master.destroy()
- 
-     def nosave(self):
--	if ConfirmQuit(self, 'server option editing'):
--	    self.destruct()
-+        if ConfirmQuit(self, 'server option editing'):
-+            self.destruct()
- 
-     def save(self):
--	self.fetch(Server, 'server')
--	for username in self.subwidgets.keys():
--	    self.subwidgets[username].save()
--	self.destruct()
-+        self.fetch(Server, 'server')
-+        for username in self.subwidgets.keys():
-+            self.subwidgets[username].save()
-+        self.destruct()
- 
-     def defaultPort(self):
--	proto = self.protocol.get()
--	# Callback to reset the port number whenever the protocol type changes.
--	# We used to only reset the port if it had a default (zero) value.
--	# This turns out to be a bad idea especially in Novice mode -- if
--	# you set POP3 and then set IMAP, the port invisibly remained 110.
--	# Now we reset unconditionally on the theory that if you're setting
--	# a custom port number you should be in expert mode and playing
--	# close enough attention to notice this...
--	self.service.set(defaultports[proto])
--	if not proto in ("POP3", "APOP", "KPOP"): self.uidl.state = DISABLED
-+        proto = self.protocol.get()
-+        # Callback to reset the port number whenever the protocol type changes.
-+        # We used to only reset the port if it had a default (zero) value.
-+        # This turns out to be a bad idea especially in Novice mode -- if
-+        # you set POP3 and then set IMAP, the port invisibly remained 110.
-+        # Now we reset unconditionally on the theory that if you're setting
-+        # a custom port number you should be in expert mode and playing
-+        # close enough attention to notice this...
-+        self.service.set(defaultports[proto])
-+        if not proto in ("POP3", "APOP", "KPOP"): self.uidl.state = DISABLED
- 
-     def user_edit(self, username, mode):
--	self.subwidgets[username] = UserEdit(username, self).edit(mode, Toplevel())
-+        self.subwidgets[username] = UserEdit(username, self).edit(mode, Toplevel())
- 
-     def user_delete(self, username):
--	if self.subwidgets.has_key(username):
--	    self.subwidgets[username].destruct()
--	del self.server[username]
-+        if self.subwidgets.has_key(username):
-+            self.subwidgets[username].destruct()
-+        del self.server[username]
- 
-     def makeWidgets(self, host, mode):
--	topwin = dispose_window(self, "Server options for querying " + host, serverhelp)
--
--	leftwin = Frame(self);
--	leftwidth = '25';
--
--	if mode != 'novice':
--	    ctlwin = Frame(leftwin, relief=RAISED, bd=5)
--	    Label(ctlwin, text="Run Controls").pack(side=TOP)
--	    Checkbutton(ctlwin, text='Poll ' + host + ' normally?', variable=self.active).pack(side=TOP)
--	    Checkbutton(ctlwin, text='Pass messages with bad headers?',
--		    variable=self.badheader).pack(side=TOP)
--	    LabeledEntry(ctlwin, 'True name of ' + host + ':',
--		      self.via, leftwidth).pack(side=TOP, fill=X)
--	    LabeledEntry(ctlwin, 'Cycles to skip between polls:',
--		      self.interval, leftwidth).pack(side=TOP, fill=X)
--	    LabeledEntry(ctlwin, 'Server timeout (seconds):',
--		      self.timeout, leftwidth).pack(side=TOP, fill=X)
--	    Button(ctlwin, text='Help', fg='blue',
--	       command=lambda: helpwin(controlhelp)).pack(side=RIGHT)
--	    ctlwin.pack(fill=X)
--
--	# Compute the available protocols from the compile-time options
--	protolist = ['auto']
--	if 'pop2' in feature_options:
--	    protolist.append("POP2")
--	if 'pop3' in feature_options:
--	    protolist = protolist + ["POP3", "APOP", "KPOP"]
--	if 'sdps' in feature_options:
--	    protolist.append("SDPS")
--	if 'imap' in feature_options:
--	    protolist.append("IMAP")
--	if 'etrn' in feature_options:
--	    protolist.append("ETRN")
--	if 'odmr' in feature_options:
--	    protolist.append("ODMR")
--
--	protwin = Frame(leftwin, relief=RAISED, bd=5)
--	Label(protwin, text="Protocol").pack(side=TOP)
--	ButtonBar(protwin, '',
--		  self.protocol, protolist, 2,
--		  self.defaultPort)
--	if mode != 'novice':
--	    LabeledEntry(protwin, 'On server TCP/IP service:',
--		      self.service, leftwidth).pack(side=TOP, fill=X)
--	    self.defaultPort()
--	    Checkbutton(protwin,
--		text="POP3: track `seen' with client-side UIDLs?",
--		variable=self.uidl).pack(side=TOP)
--	Button(protwin, text='Probe for supported protocols', fg='blue',
--	       command=self.autoprobe).pack(side=LEFT)
--	Button(protwin, text='Help', fg='blue',
--	       command=lambda: helpwin(protohelp)).pack(side=RIGHT)
--	protwin.pack(fill=X)
--
--	userwin = Frame(leftwin, relief=RAISED, bd=5)
--	Label(userwin, text="User entries for " + host).pack(side=TOP)
--	ListEdit("New user: ",
--		 map(lambda x: x.remote, self.server.users),
--		 lambda u, m=mode, s=self: s.user_edit(u, m),
--		 lambda u, s=self: s.user_delete(u),
--		 userwin, suserhelp)
--	userwin.pack(fill=X)
--
--	leftwin.pack(side=LEFT, anchor=N, fill=X);
--
--	if mode != 'novice':
--	    rightwin = Frame(self);
--
--	    mdropwin = Frame(rightwin, relief=RAISED, bd=5)
--	    Label(mdropwin, text="Multidrop options").pack(side=TOP)
--	    LabeledEntry(mdropwin, 'Envelope address header:',
--		      self.envelope, '22').pack(side=TOP, fill=X)
--	    LabeledEntry(mdropwin, 'Envelope headers to skip:',
--		      self.envskip, '22').pack(side=TOP, fill=X)
--	    LabeledEntry(mdropwin, 'Name prefix to strip:',
--		      self.qvirtual, '22').pack(side=TOP, fill=X)
--	    Checkbutton(mdropwin, text="Enable multidrop DNS lookup?",
--		    variable=self.dns).pack(side=TOP)
--	    Label(mdropwin, text="DNS aliases").pack(side=TOP)
--	    ListEdit("New alias: ", self.server.aka, None, None, mdropwin, None)
--	    Label(mdropwin, text="Domains to be considered local").pack(side=TOP)
--	    ListEdit("New domain: ",
--		 self.server.localdomains, None, None, mdropwin, multihelp)
--	    mdropwin.pack(fill=X)
--
--	    if os_type in ('linux', 'freebsd'):
--		secwin = Frame(rightwin, relief=RAISED, bd=5)
--		Label(secwin, text="Security").pack(side=TOP)
--		# Don't actually let users set this.  KPOP sets it implicitly
--		ButtonBar(secwin, 'Authorization mode:',
--			 self.auth, authlist, 2, None).pack(side=TOP)
--		if os_type == 'linux' or os_type == 'freebsd'  or 'interface' in dictmembers:
--		    LabeledEntry(secwin, 'IP range to check before poll:',
--			 self.interface, leftwidth).pack(side=TOP, fill=X)
--		if os_type == 'linux' or os_type == 'freebsd' or 'monitor' in dictmembers:
--		    LabeledEntry(secwin, 'Interface to monitor:',
--			 self.monitor, leftwidth).pack(side=TOP, fill=X)
--		# Someday this should handle Kerberos 5 too
--		if 'kerberos' in feature_options:
--		    LabeledEntry(secwin, 'Principal:',
--			 self.principal, '12').pack(side=TOP, fill=X)
--		# ESMTP authentication
--		LabeledEntry(secwin, 'ESMTP name:',
--			     self.esmtpname, '12').pack(side=TOP, fill=X)
--		LabeledEntry(secwin, 'ESMTP password:',
--			     self.esmtppassword, '12').pack(side=TOP, fill=X)
--		Button(secwin, text='Help', fg='blue',
--		       command=lambda: helpwin(sechelp)).pack(side=RIGHT)
--		secwin.pack(fill=X)
--
--	    rightwin.pack(side=LEFT, anchor=N);
-+        topwin = dispose_window(self, "Server options for querying " + host, serverhelp)
-+
-+        leftwin = Frame(self);
-+        leftwidth = '25';
-+
-+        if mode != 'novice':
-+            ctlwin = Frame(leftwin, relief=RAISED, bd=5)
-+            Label(ctlwin, text="Run Controls").pack(side=TOP)
-+            Checkbutton(ctlwin, text='Poll ' + host + ' normally?', variable=self.active).pack(side=TOP)
-+            Checkbutton(ctlwin, text='Pass messages with bad headers?',
-+                    variable=self.badheader).pack(side=TOP)
-+            LabeledEntry(ctlwin, 'True name of ' + host + ':',
-+                      self.via, leftwidth).pack(side=TOP, fill=X)
-+            LabeledEntry(ctlwin, 'Cycles to skip between polls:',
-+                      self.interval, leftwidth).pack(side=TOP, fill=X)
-+            LabeledEntry(ctlwin, 'Server timeout (seconds):',
-+                      self.timeout, leftwidth).pack(side=TOP, fill=X)
-+            Button(ctlwin, text='Help', fg='blue',
-+               command=lambda: helpwin(controlhelp)).pack(side=RIGHT)
-+            ctlwin.pack(fill=X)
-+
-+        # Compute the available protocols from the compile-time options
-+        protolist = ['auto']
-+        if 'pop2' in feature_options:
-+            protolist.append("POP2")
-+        if 'pop3' in feature_options:
-+            protolist = protolist + ["POP3", "APOP", "KPOP"]
-+        if 'sdps' in feature_options:
-+            protolist.append("SDPS")
-+        if 'imap' in feature_options:
-+            protolist.append("IMAP")
-+        if 'etrn' in feature_options:
-+            protolist.append("ETRN")
-+        if 'odmr' in feature_options:
-+            protolist.append("ODMR")
-+
-+        protwin = Frame(leftwin, relief=RAISED, bd=5)
-+        Label(protwin, text="Protocol").pack(side=TOP)
-+        ButtonBar(protwin, '',
-+                  self.protocol, protolist, 2,
-+                  self.defaultPort)
-+        if mode != 'novice':
-+            LabeledEntry(protwin, 'On server TCP/IP service:',
-+                      self.service, leftwidth).pack(side=TOP, fill=X)
-+            self.defaultPort()
-+            Checkbutton(protwin,
-+                text="POP3: track `seen' with client-side UIDLs?",
-+                variable=self.uidl).pack(side=TOP)
-+        Button(protwin, text='Probe for supported protocols', fg='blue',
-+               command=self.autoprobe).pack(side=LEFT)
-+        Button(protwin, text='Help', fg='blue',
-+               command=lambda: helpwin(protohelp)).pack(side=RIGHT)
-+        protwin.pack(fill=X)
-+
-+        userwin = Frame(leftwin, relief=RAISED, bd=5)
-+        Label(userwin, text="User entries for " + host).pack(side=TOP)
-+        ListEdit("New user: ",
-+                 map(lambda x: x.remote, self.server.users),
-+                 lambda u, m=mode, s=self: s.user_edit(u, m),
-+                 lambda u, s=self: s.user_delete(u),
-+                 userwin, suserhelp)
-+        userwin.pack(fill=X)
-+
-+        leftwin.pack(side=LEFT, anchor=N, fill=X);
-+
-+        if mode != 'novice':
-+            rightwin = Frame(self);
-+
-+            mdropwin = Frame(rightwin, relief=RAISED, bd=5)
-+            Label(mdropwin, text="Multidrop options").pack(side=TOP)
-+            LabeledEntry(mdropwin, 'Envelope address header:',
-+                      self.envelope, '22').pack(side=TOP, fill=X)
-+            LabeledEntry(mdropwin, 'Envelope headers to skip:',
-+                      self.envskip, '22').pack(side=TOP, fill=X)
-+            LabeledEntry(mdropwin, 'Name prefix to strip:',
-+                      self.qvirtual, '22').pack(side=TOP, fill=X)
-+            Checkbutton(mdropwin, text="Enable multidrop DNS lookup?",
-+                    variable=self.dns).pack(side=TOP)
-+            Label(mdropwin, text="DNS aliases").pack(side=TOP)
-+            ListEdit("New alias: ", self.server.aka, None, None, mdropwin, None)
-+            Label(mdropwin, text="Domains to be considered local").pack(side=TOP)
-+            ListEdit("New domain: ",
-+                 self.server.localdomains, None, None, mdropwin, multihelp)
-+            mdropwin.pack(fill=X)
-+
-+            if os_type in ('linux', 'freebsd'):
-+                secwin = Frame(rightwin, relief=RAISED, bd=5)
-+                Label(secwin, text="Security").pack(side=TOP)
-+                # Don't actually let users set this.  KPOP sets it implicitly
-+                ButtonBar(secwin, 'Authorization mode:',
-+                         self.auth, authlist, 2, None).pack(side=TOP)
-+                if os_type == 'linux' or os_type == 'freebsd'  or 'interface' in dictmembers:
-+                    LabeledEntry(secwin, 'IP range to check before poll:',
-+                         self.interface, leftwidth).pack(side=TOP, fill=X)
-+                if os_type == 'linux' or os_type == 'freebsd' or 'monitor' in dictmembers:
-+                    LabeledEntry(secwin, 'Interface to monitor:',
-+                         self.monitor, leftwidth).pack(side=TOP, fill=X)
-+                # Someday this should handle Kerberos 5 too
-+                if 'kerberos' in feature_options:
-+                    LabeledEntry(secwin, 'Principal:',
-+                         self.principal, '12').pack(side=TOP, fill=X)
-+                # ESMTP authentication
-+                LabeledEntry(secwin, 'ESMTP name:',
-+                             self.esmtpname, '12').pack(side=TOP, fill=X)
-+                LabeledEntry(secwin, 'ESMTP password:',
-+                             self.esmtppassword, '12').pack(side=TOP, fill=X)
-+                Button(secwin, text='Help', fg='blue',
-+                       command=lambda: helpwin(sechelp)).pack(side=RIGHT)
-+                secwin.pack(fill=X)
-+
-+            rightwin.pack(side=LEFT, anchor=N);
- 
-     def autoprobe(self):
--	# Note: this only handles case (1) near fetchmail.c:1032
--	# We're assuming people smart enough to set up ssh tunneling
--	# won't need autoprobing.
--	if self.server.via:
--	    realhost = self.server.via
--	else:
--	    realhost = self.server.pollname
--	greetline = None
--	for protocol in ("IMAP","POP3","POP2"):
--	    service = defaultports[protocol]
--	    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
--	    try:
--		sock.connect((realhost, ianaservices[service]))
--		greetline = sock.recv(1024)
--		sock.close()
--	    except:
--		pass
--	    else:
--		break
--	confwin = Toplevel()
--	if greetline == None:
--	    title = "Autoprobe of " + realhost + " failed"
--	    confirm = """
-+        # Note: this only handles case (1) near fetchmail.c:1032
-+        # We're assuming people smart enough to set up ssh tunneling
-+        # won't need autoprobing.
-+        if self.server.via:
-+            realhost = self.server.via
-+        else:
-+            realhost = self.server.pollname
-+        greetline = None
-+        for protocol in ("IMAP","POP3","POP2"):
-+            service = defaultports[protocol]
-+            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-+            try:
-+                sock.connect((realhost, ianaservices[service]))
-+                greetline = sock.recv(1024)
-+                sock.close()
-+            except:
-+                pass
-+            else:
-+                break
-+        confwin = Toplevel()
-+        if greetline == None:
-+            title = "Autoprobe of " + realhost + " failed"
-+            confirm = """
- Fetchmailconf didn't find any mailservers active.
- This could mean the host doesn't support any,
- or that your Internet connection is down, or
- that the host is so slow that the probe timed
- out before getting a response.
- """
--	else:
--	    warnings = ''
--	    # OK, now try to recognize potential problems
-+        else:
-+            warnings = ''
-+            # OK, now try to recognize potential problems
- 
--	    if protocol == "POP2":
--		warnings = warnings + """
-+            if protocol == "POP2":
-+                warnings = warnings + """
- It appears you have somehow found a mailserver running only POP2.
- Congratulations.  Have you considered a career in archaeology?
- 
-@@ -1286,8 +1286,8 @@ switch --enable-POP2.
- 
- ### POP3 servers start here
- 
--	    if string.find(greetline, "1.003") > 0 or string.find(greetline, "1.004") > 0:
--		warnings = warnings + """
-+            if string.find(greetline, "1.003") > 0 or string.find(greetline, "1.004") > 0:
-+                warnings = warnings + """
- This appears to be an old version of the UC Davis POP server.  These are
- dangerously unreliable (among other problems, they may drop your mailbox
- on the floor if your connection is interrupted during the session).
-@@ -1296,8 +1296,8 @@ It is strongly recommended that you find a better POP3 server.	The fetchmail
- FAQ includes pointers to good ones.
- 
- """
--	    if string.find(greetline, "comcast.net") > 0:
--		warnings = warnings + """
-+            if string.find(greetline, "comcast.net") > 0:
-+                warnings = warnings + """
- The Comcast Maillennium POP3 server only returns the first 80K of a long
- message retrieved with TOP. Its response to RETR is normal, so use the
- `fetchall' option.
-@@ -1321,8 +1321,8 @@ message retrieved with TOP. Its response to RETR is normal, so use the
- #
- # +OK Cubic Circle's v1.31 1998/05/13 POP3 ready <6229000062f95036@wakko>
- #
--	    if string.find(greetline, "Cubic Circle") > 0:
--		warnings = warnings + """
-+            if string.find(greetline, "Cubic Circle") > 0:
-+                warnings = warnings + """
- I see your server is running cucipop.  Better make sure the server box
- isn't a SunOS 4.1.4 machine; cucipop tickles a bug in SunOS realloc()
- under that version, and doesn't cope with the result gracefully.  Newer
-@@ -1332,8 +1332,8 @@ Also, some versions of cucipop don't assert an exclusive lock on your
- mailbox when it's being queried.  This means that if you have more than
- one fetchmail query running against the same mailbox, bad things can happen.
- """
--	    if string.find(greetline, "David POP3 Server") > 0:
--		warnings = warnings + """
-+            if string.find(greetline, "David POP3 Server") > 0:
-+                warnings = warnings + """
- This POP3 server is badly broken.  You should get rid of it -- and the
- brain-dead Microsoft operating system it rode in on.
- 
-@@ -1341,20 +1341,20 @@ brain-dead Microsoft operating system it rode in on.
- # The greeting line on the server known to be buggy is:
- # +OK POP3 server ready (running FTGate V2, 2, 1, 0 Jun 21 1999 09:55:01)
- #
--	    if string.find(greetline, "FTGate") > 0:
--		warnings = warnings + """
-+            if string.find(greetline, "FTGate") > 0:
-+                warnings = warnings + """
- This POP server has a weird bug; it says OK twice in response to TOP.
- Its response to RETR is normal, so use the `fetchall' option.
- 
- """
--	    if string.find(greetline, " geonet.de") > 0:
--		warnings = warnings + """
-+            if string.find(greetline, " geonet.de") > 0:
-+                warnings = warnings + """
- You appear to be using geonet.	As of late 2002, the TOP command on
- geonet's POP3 is broken.  Use the fetchall option.
- 
- """
--	    if string.find(greetline, "OpenMail") > 0:
--		warnings = warnings + """
-+            if string.find(greetline, "OpenMail") > 0:
-+                warnings = warnings + """
- You appear to be using some version of HP OpenMail.  Many versions of
- OpenMail do not process the "TOP" command correctly; the symptom is that
- only the header and first line of each message is retrieved.  To work
-@@ -1362,16 +1362,16 @@ around this bug, turn on `fetchall' on all user entries associated with
- this server.
- 
- """
--	    if string.find(greetline, "Escape character is") > 0:
--		warnings = warnings + """
-+            if string.find(greetline, "Escape character is") > 0:
-+                warnings = warnings + """
- Your greeting line looks like it was written by a fetid pile of
- camel dung identified to me as `popa3d written by Solar Designer'.
- Beware!  The UIDL support in this thing is known to be completely broken,
- and other things probably are too.
- 
- """
--	    if string.find(greetline, "MercuryP/NLM v1.48") > 0:
--		warnings = warnings + """
-+            if string.find(greetline, "MercuryP/NLM v1.48") > 0:
-+                warnings = warnings + """
- This is not a POP3 server.  It has delusions of being one, but after
- RETR all messages are automatically marked to be deleted.  The only
- way to prevent this is to issue an RSET before leaving the server.
-@@ -1379,8 +1379,8 @@ Fetchmail does this, but we suspect this is probably broken in lots
- of other ways, too.
- 
- """
--	    if string.find(greetline, "POP-Max") > 0:
--		warnings = warnings + """
-+            if string.find(greetline, "POP-Max") > 0:
-+                warnings = warnings + """
- The Mail Max POP3 server screws up on mail with attachments.  It
- reports the message size with attachments included, but doesn't
- download them on a RETR or TOP (this violates the IMAP RFCs).  It also
-@@ -1388,14 +1388,14 @@ doesn't implement TOP correctly.  You should get rid of it -- and the
- brain-dead NT server it rode in on.
- 
- """
--	    if string.find(greetline, "POP3 Server Ready") > 0:
--		warnings = warnings + """
-+            if string.find(greetline, "POP3 Server Ready") > 0:
-+                warnings = warnings + """
- Some server that uses this greeting line has been observed to choke on
- TOP %d 99999999.  Use the fetchall option. if necessary, to force RETR.
- 
- """
--	    if string.find(greetline, "QPOP") > 0:
--		warnings = warnings + """
-+            if string.find(greetline, "QPOP") > 0:
-+                warnings = warnings + """
- This appears to be a version of Eudora qpopper.  That's good.  Fetchmail
- knows all about qpopper.  However, be aware that the 2.53 version of
- qpopper does something odd that causes fetchmail to hang with a socket
-@@ -1404,16 +1404,16 @@ it has been observed with fetchpop.  The fix is to upgrade to qpopper
- 3.0beta or a more recent version.  Better yet, switch to IMAP.
- 
- """
--	    if string.find(greetline, " sprynet.com") > 0:
--		warnings = warnings + """
-+            if string.find(greetline, " sprynet.com") > 0:
-+                warnings = warnings + """
- You appear to be using a SpryNet server.  In mid-1999 it was reported that
- the SpryNet TOP command marks messages seen.  Therefore, for proper error
- recovery in the event of a line drop, it is strongly recommended that you
- turn on `fetchall' on all user entries associated with this server.
- 
- """
--	    if string.find(greetline, "TEMS POP3") > 0:
--		warnings = warnings + """
-+            if string.find(greetline, "TEMS POP3") > 0:
-+                warnings = warnings + """
- Your POP3 server has "TEMS" in its header line.  At least one such
- server does not process the "TOP" command correctly; the symptom is
- that fetchmail hangs when trying to retrieve mail.  To work around
-@@ -1421,8 +1421,8 @@ this bug, turn on `fetchall' on all user entries associated with this
- server.
- 
- """
--	    if string.find(greetline, " spray.se") > 0:
--		warnings = warnings + """
-+            if string.find(greetline, " spray.se") > 0:
-+                warnings = warnings + """
- Your POP3 server has "spray.se" in its header line.  In May 2000 at
- least one such server did not process the "TOP" command correctly; the
- symptom is that messages are treated as headerless.  To work around
-@@ -1430,8 +1430,8 @@ this bug, turn on `fetchall' on all user entries associated with this
- server.
- 
- """
--	    if string.find(greetline, " usa.net") > 0:
--		warnings = warnings + """
-+            if string.find(greetline, " usa.net") > 0:
-+                warnings = warnings + """
- You appear to be using USA.NET's free mail service.  Their POP3 servers
- (at least as of the 2.2 version in use mid-1998) are quite flaky, but
- fetchmail can compensate.  They seem to require that fetchall be switched on
-@@ -1444,15 +1444,15 @@ Therefore, it is strongly recommended that you turn on `fetchall' on all
- user entries associated with this server.
- 
- """
--	    if string.find(greetline, " Novonyx POP3") > 0:
--		warnings = warnings + """
-+            if string.find(greetline, " Novonyx POP3") > 0:
-+                warnings = warnings + """
- Your mailserver is running Novonyx POP3.  This server, at least as of
- version 2.17, seems to have problems handling and reporting seen bits.
- You may have to use the fetchall option.
- 
- """
--	    if string.find(greetline, " IMS POP3") > 0:
--		warnings = warnings + """
-+            if string.find(greetline, " IMS POP3") > 0:
-+                warnings = warnings + """
- Some servers issuing the greeting line 'IMS POP3' have been known to
- do byte-stuffing incorrectly.  This means that if a message you receive
- has a . (period) at start of line, fetchmail will become confused and
-@@ -1462,8 +1462,8 @@ probably wedge itself.	(This bug was recorded on IMS POP3 0.86.)
- 
- ### IMAP servers start here
- 
--	    if string.find(greetline, "GroupWise") > 0:
--		warnings = warnings + """
-+            if string.find(greetline, "GroupWise") > 0:
-+                warnings = warnings + """
- The Novell GroupWise IMAP server would be better named GroupFoolish;
- it is (according to the designer of IMAP) unusably broken.  Among
- other things, it doesn't include a required content length in its
-@@ -1475,8 +1475,8 @@ with code as shoddy as GroupWise seems to be, you will probably pay
- for it with other problems.<p>
- 
- """
--	    if string.find(greetline, "InterChange") > 0:
--		warnings = warnings + """
-+            if string.find(greetline, "InterChange") > 0:
-+                warnings = warnings + """
- 
- The InterChange IMAP server at release levels below 3.61.08 screws up
- on mail with attachments.  It doesn't fetch them if you give it a
-@@ -1487,16 +1487,16 @@ Exchange (quite legally under RFC2062) rejectsit.  The InterChange
- folks claim to have fixed this bug in 3.61.08.
- 
- """
--	    if string.find(greetline, "Imail") > 0:
--		warnings = warnings + """
-+            if string.find(greetline, "Imail") > 0:
-+                warnings = warnings + """
- We've seen a bug report indicating that this IMAP server (at least as of
- version 5.0.7) returns an invalid body size for messages with MIME
- attachments; the effect is to drop the attachments on the floor.  We
- recommend you upgrade to a non-broken IMAP server.
- 
- """
--	    if string.find(greetline, "Domino IMAP4") > 0:
--		warnings = warnings + """
-+            if string.find(greetline, "Domino IMAP4") > 0:
-+                warnings = warnings + """
- Your IMAP server appears to be Lotus Domino.  This server, at least up
- to version 4.6.2a, has a bug in its generation of MIME boundaries (see
- the details in the fetchmail FAQ).  As a result, even MIME aware MUAs
-@@ -1507,16 +1507,16 @@ POP3 facility is enabled, we recommend you fall back on it.
- 
- ### Checks for protocol variants start here
- 
--	    closebrak = string.find(greetline, ">")
--	    if	closebrak > 0 and greetline[closebrak+1] == "\r":
--		warnings = warnings + """
-+            closebrak = string.find(greetline, ">")
-+            if	closebrak > 0 and greetline[closebrak+1] == "\r":
-+                warnings = warnings + """
- It looks like you could use APOP on this server and avoid sending it your
- password in clear.  You should talk to the mailserver administrator about
- this.
- 
- """
--	    if string.find(greetline, "IMAP2bis") > 0:
--		warnings = warnings + """
-+            if string.find(greetline, "IMAP2bis") > 0:
-+                warnings = warnings + """
- IMAP2bis servers have a minor problem; they can't peek at messages without
- marking them seen.  If you take a line hit during the retrieval, the
- interrupted message may get left on the server, marked seen.
-@@ -1529,30 +1529,30 @@ To fix this bug, upgrade to an IMAP4 server.  The fetchmail FAQ includes
- a pointer to an open-source implementation.
- 
- """
--	    if string.find(greetline, "IMAP4rev1") > 0:
--		warnings = warnings + """
-+            if string.find(greetline, "IMAP4rev1") > 0:
-+                warnings = warnings + """
- I see an IMAP4rev1 server.  Excellent.	This is (a) the best kind of
- remote-mail server, and (b) the one the fetchmail author uses.	Fetchmail
- has therefore been extremely well tested with this class of server.
- 
- """
--	    if warnings == '':
--		warnings = warnings + """
-+            if warnings == '':
-+                warnings = warnings + """
- Fetchmail doesn't know anything special about this server type.
- 
- """
- 
--	    # Display success window with warnings
--	    title = "Autoprobe of " + realhost + " succeeded"
--	    confirm = "The " + protocol + " server said:\n\n" + greetline + warnings
--	    self.protocol.set(protocol)
--	    self.service.set(defaultports[protocol])
--	confwin.title(title)
--	confwin.iconname(title)
--	Label(confwin, text=title).pack()
--	Message(confwin, text=confirm, width=600).pack()
--	Button(confwin, text='Done',
--		   command=lambda x=confwin: x.destroy(), bd=2).pack()
-+            # Display success window with warnings
-+            title = "Autoprobe of " + realhost + " succeeded"
-+            confirm = "The " + protocol + " server said:\n\n" + greetline + warnings
-+            self.protocol.set(protocol)
-+            self.service.set(defaultports[protocol])
-+        confwin.title(title)
-+        confwin.iconname(title)
-+        Label(confwin, text=title).pack()
-+        Message(confwin, text=confirm, width=600).pack()
-+        Button(confwin, text='Done',
-+                   command=lambda x=confwin: x.destroy(), bd=2).pack()
- 
- #
- # User editing stuff
-@@ -1597,193 +1597,193 @@ of sending it to your local system.
- 
- class UserEdit(Frame, MyWidget):
-     def __init__(self, username, parent):
--	self.parent = parent
--	self.user = None
--	for user in parent.server.users:
--	    if user.remote == username:
--		self.user = user
--	if self.user == None:
--	    self.user = User()
--	    self.user.remote = username
--	    self.user.localnames = [username]
--	    parent.server.users.append(self.user)
-+        self.parent = parent
-+        self.user = None
-+        for user in parent.server.users:
-+            if user.remote == username:
-+                self.user = user
-+        if self.user == None:
-+            self.user = User()
-+            self.user.remote = username
-+            self.user.localnames = [username]
-+            parent.server.users.append(self.user)
- 
-     def edit(self, mode, master=None):
--	Frame.__init__(self, master)
--	Pack.config(self)
--	self.master.title('Fetchmail user ' + self.user.remote
--			  + ' querying ' + self.parent.server.pollname);
--	self.master.iconname('Fetchmail user ' + self.user.remote);
--	self.post(User, 'user')
--	self.makeWidgets(mode, self.parent.server.pollname)
--	self.keepalive = []	# Use this to anchor the PhotoImage object
--	make_icon_window(self, fetchmail_icon)
-+        Frame.__init__(self, master)
-+        Pack.config(self)
-+        self.master.title('Fetchmail user ' + self.user.remote
-+                          + ' querying ' + self.parent.server.pollname);
-+        self.master.iconname('Fetchmail user ' + self.user.remote);
-+        self.post(User, 'user')
-+        self.makeWidgets(mode, self.parent.server.pollname)
-+        self.keepalive = []	# Use this to anchor the PhotoImage object
-+        make_icon_window(self, fetchmail_icon)
- #	self.grab_set()
- #	self.focus_set()
- #	self.wait_window()
--	return self
-+        return self
- 
-     def destruct(self):
--	# Yes, this test can fail -- if you delete the parent window.
--	if self.parent.subwidgets.has_key(self.user.remote):
--	    del self.parent.subwidgets[self.user.remote]
--	self.master.destroy()
-+        # Yes, this test can fail -- if you delete the parent window.
-+        if self.parent.subwidgets.has_key(self.user.remote):
-+            del self.parent.subwidgets[self.user.remote]
-+        self.master.destroy()
- 
-     def nosave(self):
--	if ConfirmQuit(self, 'user option editing'):
--	    self.destruct()
-+        if ConfirmQuit(self, 'user option editing'):
-+            self.destruct()
- 
-     def save(self):
--	ok = 0
--	for x in self.user.localnames: ok = ok + (string.find(x, '@') != -1)
--	if ok == 0 or  Dialog(self,
--	    title = "Really accept an embedded '@' ?",
--	    text = "Local names with an embedded '@', such as in foo@bar "
--		   "might result in your mail being sent to foo@bar.com "
--		   "instead of your local system.\n Are you sure you want "
--		   "a local user name with an '@' in it?",
--	    bitmap = 'question',
--	    strings = ('Yes', 'No'),
--	    default = 1).num == 0:
--		self.fetch(User, 'user')
--		self.destruct()
-+        ok = 0
-+        for x in self.user.localnames: ok = ok + (string.find(x, '@') != -1)
-+        if ok == 0 or  Dialog(self,
-+            title = "Really accept an embedded '@' ?",
-+            text = "Local names with an embedded '@', such as in foo@bar "
-+                   "might result in your mail being sent to foo@bar.com "
-+                   "instead of your local system.\n Are you sure you want "
-+                   "a local user name with an '@' in it?",
-+            bitmap = 'question',
-+            strings = ('Yes', 'No'),
-+            default = 1).num == 0:
-+                self.fetch(User, 'user')
-+                self.destruct()
- 
-     def makeWidgets(self, mode, servername):
--	dispose_window(self,
--			"User options for " + self.user.remote + " querying " + servername,
--			userhelp)
--
--	if mode != 'novice':
--	    leftwin = Frame(self);
--	else:
--	    leftwin = self
--
--	secwin = Frame(leftwin, relief=RAISED, bd=5)
--	Label(secwin, text="Authentication").pack(side=TOP)
--	LabeledEntry(secwin, 'Password:',
--		      self.password, '12').pack(side=TOP, fill=X)
--	secwin.pack(fill=X, anchor=N)
--
--	if 'ssl' in feature_options or 'ssl' in dictmembers:
--	    sslwin = Frame(leftwin, relief=RAISED, bd=5)
--	    Checkbutton(sslwin, text="Use SSL?",
--			variable=self.ssl).pack(side=TOP, fill=X)
--	    LabeledEntry(sslwin, 'SSL key:',
--			 self.sslkey, '14').pack(side=TOP, fill=X)
--	    LabeledEntry(sslwin, 'SSL certificate:',
--			 self.sslcert, '14').pack(side=TOP, fill=X)
--	    Checkbutton(sslwin, text="Check server SSL certificate?",
--			variable=self.sslcertck).pack(side=TOP, fill=X)
--	    LabeledEntry(sslwin, 'SSL trusted certificate directory:',
--			 self.sslcertpath, '14').pack(side=TOP, fill=X)
--	    LabeledEntry(sslwin, 'SSL CommonName:',
--			 self.sslcommonname, '14').pack(side=TOP, fill=X)
--	    LabeledEntry(sslwin, 'SSL key fingerprint:',
--			 self.sslfingerprint, '14').pack(side=TOP, fill=X)
--	    sslwin.pack(fill=X, anchor=N)
--
--	names = Frame(leftwin, relief=RAISED, bd=5)
--	Label(names, text="Local names").pack(side=TOP)
--	ListEdit("New name: ",
--		     self.user.localnames, None, None, names, localhelp)
--	names.pack(fill=X, anchor=N)
--
--	if mode != 'novice':
--	    targwin = Frame(leftwin, relief=RAISED, bd=5)
--	    Label(targwin, text="Forwarding Options").pack(side=TOP)
--	    Label(targwin, text="Listeners to forward to").pack(side=TOP)
--	    ListEdit("New listener:",
--		     self.user.smtphunt, None, None, targwin, None)
--	    Label(targwin, text="Domains to fetch from (ODMR/ETRN only)").pack(side=TOP)
--	    ListEdit("Domains:",
--		     self.user.fetchdomains, None, None, targwin, None)
--	    LabeledEntry(targwin, 'Use domain on RCPT TO line:',
--		     self.smtpaddress, '26').pack(side=TOP, fill=X)
--	    LabeledEntry(targwin, 'Set fixed RCPT TO address:',
--		     self.smtpname, '26').pack(side=TOP, fill=X)
--	    LabeledEntry(targwin, 'Connection setup command:',
--		     self.preconnect, '26').pack(side=TOP, fill=X)
--	    LabeledEntry(targwin, 'Connection wrapup command:',
--		     self.postconnect, '26').pack(side=TOP, fill=X)
--	    LabeledEntry(targwin, 'Local delivery agent:',
--		     self.mda, '26').pack(side=TOP, fill=X)
--	    LabeledEntry(targwin, 'BSMTP output file:',
--		     self.bsmtp, '26').pack(side=TOP, fill=X)
--	    LabeledEntry(targwin, 'Listener spam-block codes:',
--		     self.antispam, '26').pack(side=TOP, fill=X)
--	    LabeledEntry(targwin, 'Pass-through properties:',
--		     self.properties, '26').pack(side=TOP, fill=X)
--	    Checkbutton(targwin, text="Use LMTP?",
--			variable=self.lmtp).pack(side=TOP, fill=X)
--	    targwin.pack(fill=X, anchor=N)
--
--	if mode != 'novice':
--	    leftwin.pack(side=LEFT, fill=X, anchor=N)
--	    rightwin = Frame(self)
--	else:
--	    rightwin = self
--
--	optwin = Frame(rightwin, relief=RAISED, bd=5)
--	Label(optwin, text="Processing Options").pack(side=TOP)
--	Checkbutton(optwin, text="Suppress deletion of messages after reading",
--		    variable=self.keep).pack(side=TOP, anchor=W)
--	Checkbutton(optwin, text="Fetch old messages as well as new",
--		    variable=self.fetchall).pack(side=TOP, anchor=W)
--	if mode != 'novice':
--	    Checkbutton(optwin, text="Flush seen messages before retrieval",
--		    variable=self.flush).pack(side=TOP, anchor=W)
--	    Checkbutton(optwin, text="Flush oversized messages before retrieval",
--		    variable=self.limitflush).pack(side=TOP, anchor=W)
--	    Checkbutton(optwin, text="Rewrite To/Cc/Bcc messages to enable reply",
--		    variable=self.rewrite).pack(side=TOP, anchor=W)
--	    Checkbutton(optwin, text="Force CR/LF at end of each line",
--		    variable=self.forcecr).pack(side=TOP, anchor=W)
--	    Checkbutton(optwin, text="Strip CR from end of each line",
--		    variable=self.stripcr).pack(side=TOP, anchor=W)
--	    Checkbutton(optwin, text="Pass 8 bits even though SMTP says 7BIT",
--		    variable=self.pass8bits).pack(side=TOP, anchor=W)
--	    Checkbutton(optwin, text="Undo MIME armoring on header and body",
--		    variable=self.mimedecode).pack(side=TOP, anchor=W)
--	    Checkbutton(optwin, text="Drop Status lines from forwarded messages",
--		    variable=self.dropstatus).pack(side=TOP, anchor=W)
--	    Checkbutton(optwin, text="Drop Delivered-To lines from forwarded messages",
--		    variable=self.dropdelivered).pack(side=TOP, anchor=W)
--	optwin.pack(fill=X)
--
--	if mode != 'novice':
--	    limwin = Frame(rightwin, relief=RAISED, bd=5)
--	    Label(limwin, text="Resource Limits").pack(side=TOP)
--	    LabeledEntry(limwin, 'Message size limit:',
--		      self.limit, '30').pack(side=TOP, fill=X)
--	    LabeledEntry(limwin, 'Size warning interval:',
--		      self.warnings, '30').pack(side=TOP, fill=X)
--	    LabeledEntry(limwin, 'Max messages to fetch per poll:',
--		      self.fetchlimit, '30').pack(side=TOP, fill=X)
--	    LabeledEntry(limwin, 'Max message sizes to fetch per transaction:',
--		      self.fetchsizelimit, '30').pack(side=TOP, fill=X)
--	    if self.parent.server.protocol not in ('ETRN', 'ODMR'):
--		LabeledEntry(limwin, 'Use fast UIDL:',
--			self.fastuidl, '30').pack(side=TOP, fill=X)
--	    LabeledEntry(limwin, 'Max messages to forward per poll:',
--		      self.batchlimit, '30').pack(side=TOP, fill=X)
--	    if self.parent.server.protocol not in ('ETRN', 'ODMR'):
--		LabeledEntry(limwin, 'Interval between expunges:',
--			     self.expunge, '30').pack(side=TOP, fill=X)
--	    Checkbutton(limwin, text="Idle after each poll (IMAP only)",
--		    variable=self.idle).pack(side=TOP, anchor=W)
--	    limwin.pack(fill=X)
--
--	    if self.parent.server.protocol == 'IMAP':
--		foldwin = Frame(rightwin, relief=RAISED, bd=5)
--		Label(foldwin, text="Remote folders (IMAP only)").pack(side=TOP)
--		ListEdit("New folder:", self.user.mailboxes,
--			 None, None, foldwin, None)
--		foldwin.pack(fill=X, anchor=N)
--
--	if mode != 'novice':
--	    rightwin.pack(side=LEFT)
--	else:
--	    self.pack()
-+        dispose_window(self,
-+                        "User options for " + self.user.remote + " querying " + servername,
-+                        userhelp)
-+
-+        if mode != 'novice':
-+            leftwin = Frame(self);
-+        else:
-+            leftwin = self
-+
-+        secwin = Frame(leftwin, relief=RAISED, bd=5)
-+        Label(secwin, text="Authentication").pack(side=TOP)
-+        LabeledEntry(secwin, 'Password:',
-+                      self.password, '12').pack(side=TOP, fill=X)
-+        secwin.pack(fill=X, anchor=N)
-+
-+        if 'ssl' in feature_options or 'ssl' in dictmembers:
-+            sslwin = Frame(leftwin, relief=RAISED, bd=5)
-+            Checkbutton(sslwin, text="Use SSL?",
-+                        variable=self.ssl).pack(side=TOP, fill=X)
-+            LabeledEntry(sslwin, 'SSL key:',
-+                         self.sslkey, '14').pack(side=TOP, fill=X)
-+            LabeledEntry(sslwin, 'SSL certificate:',
-+                         self.sslcert, '14').pack(side=TOP, fill=X)
-+            Checkbutton(sslwin, text="Check server SSL certificate?",
-+                        variable=self.sslcertck).pack(side=TOP, fill=X)
-+            LabeledEntry(sslwin, 'SSL trusted certificate directory:',
-+                         self.sslcertpath, '14').pack(side=TOP, fill=X)
-+            LabeledEntry(sslwin, 'SSL CommonName:',
-+                         self.sslcommonname, '14').pack(side=TOP, fill=X)
-+            LabeledEntry(sslwin, 'SSL key fingerprint:',
-+                         self.sslfingerprint, '14').pack(side=TOP, fill=X)
-+            sslwin.pack(fill=X, anchor=N)
-+
-+        names = Frame(leftwin, relief=RAISED, bd=5)
-+        Label(names, text="Local names").pack(side=TOP)
-+        ListEdit("New name: ",
-+                     self.user.localnames, None, None, names, localhelp)
-+        names.pack(fill=X, anchor=N)
-+
-+        if mode != 'novice':
-+            targwin = Frame(leftwin, relief=RAISED, bd=5)
-+            Label(targwin, text="Forwarding Options").pack(side=TOP)
-+            Label(targwin, text="Listeners to forward to").pack(side=TOP)
-+            ListEdit("New listener:",
-+                     self.user.smtphunt, None, None, targwin, None)
-+            Label(targwin, text="Domains to fetch from (ODMR/ETRN only)").pack(side=TOP)
-+            ListEdit("Domains:",
-+                     self.user.fetchdomains, None, None, targwin, None)
-+            LabeledEntry(targwin, 'Use domain on RCPT TO line:',
-+                     self.smtpaddress, '26').pack(side=TOP, fill=X)
-+            LabeledEntry(targwin, 'Set fixed RCPT TO address:',
-+                     self.smtpname, '26').pack(side=TOP, fill=X)
-+            LabeledEntry(targwin, 'Connection setup command:',
-+                     self.preconnect, '26').pack(side=TOP, fill=X)
-+            LabeledEntry(targwin, 'Connection wrapup command:',
-+                     self.postconnect, '26').pack(side=TOP, fill=X)
-+            LabeledEntry(targwin, 'Local delivery agent:',
-+                     self.mda, '26').pack(side=TOP, fill=X)
-+            LabeledEntry(targwin, 'BSMTP output file:',
-+                     self.bsmtp, '26').pack(side=TOP, fill=X)
-+            LabeledEntry(targwin, 'Listener spam-block codes:',
-+                     self.antispam, '26').pack(side=TOP, fill=X)
-+            LabeledEntry(targwin, 'Pass-through properties:',
-+                     self.properties, '26').pack(side=TOP, fill=X)
-+            Checkbutton(targwin, text="Use LMTP?",
-+                        variable=self.lmtp).pack(side=TOP, fill=X)
-+            targwin.pack(fill=X, anchor=N)
-+
-+        if mode != 'novice':
-+            leftwin.pack(side=LEFT, fill=X, anchor=N)
-+            rightwin = Frame(self)
-+        else:
-+            rightwin = self
-+
-+        optwin = Frame(rightwin, relief=RAISED, bd=5)
-+        Label(optwin, text="Processing Options").pack(side=TOP)
-+        Checkbutton(optwin, text="Suppress deletion of messages after reading",
-+                    variable=self.keep).pack(side=TOP, anchor=W)
-+        Checkbutton(optwin, text="Fetch old messages as well as new",
-+                    variable=self.fetchall).pack(side=TOP, anchor=W)
-+        if mode != 'novice':
-+            Checkbutton(optwin, text="Flush seen messages before retrieval",
-+                    variable=self.flush).pack(side=TOP, anchor=W)
-+            Checkbutton(optwin, text="Flush oversized messages before retrieval",
-+                    variable=self.limitflush).pack(side=TOP, anchor=W)
-+            Checkbutton(optwin, text="Rewrite To/Cc/Bcc messages to enable reply",
-+                    variable=self.rewrite).pack(side=TOP, anchor=W)
-+            Checkbutton(optwin, text="Force CR/LF at end of each line",
-+                    variable=self.forcecr).pack(side=TOP, anchor=W)
-+            Checkbutton(optwin, text="Strip CR from end of each line",
-+                    variable=self.stripcr).pack(side=TOP, anchor=W)
-+            Checkbutton(optwin, text="Pass 8 bits even though SMTP says 7BIT",
-+                    variable=self.pass8bits).pack(side=TOP, anchor=W)
-+            Checkbutton(optwin, text="Undo MIME armoring on header and body",
-+                    variable=self.mimedecode).pack(side=TOP, anchor=W)
-+            Checkbutton(optwin, text="Drop Status lines from forwarded messages",
-+                    variable=self.dropstatus).pack(side=TOP, anchor=W)
-+            Checkbutton(optwin, text="Drop Delivered-To lines from forwarded messages",
-+                    variable=self.dropdelivered).pack(side=TOP, anchor=W)
-+        optwin.pack(fill=X)
-+
-+        if mode != 'novice':
-+            limwin = Frame(rightwin, relief=RAISED, bd=5)
-+            Label(limwin, text="Resource Limits").pack(side=TOP)
-+            LabeledEntry(limwin, 'Message size limit:',
-+                      self.limit, '30').pack(side=TOP, fill=X)
-+            LabeledEntry(limwin, 'Size warning interval:',
-+                      self.warnings, '30').pack(side=TOP, fill=X)
-+            LabeledEntry(limwin, 'Max messages to fetch per poll:',
-+                      self.fetchlimit, '30').pack(side=TOP, fill=X)
-+            LabeledEntry(limwin, 'Max message sizes to fetch per transaction:',
-+                      self.fetchsizelimit, '30').pack(side=TOP, fill=X)
-+            if self.parent.server.protocol not in ('ETRN', 'ODMR'):
-+                LabeledEntry(limwin, 'Use fast UIDL:',
-+                        self.fastuidl, '30').pack(side=TOP, fill=X)
-+            LabeledEntry(limwin, 'Max messages to forward per poll:',
-+                      self.batchlimit, '30').pack(side=TOP, fill=X)
-+            if self.parent.server.protocol not in ('ETRN', 'ODMR'):
-+                LabeledEntry(limwin, 'Interval between expunges:',
-+                             self.expunge, '30').pack(side=TOP, fill=X)
-+            Checkbutton(limwin, text="Idle after each poll (IMAP only)",
-+                    variable=self.idle).pack(side=TOP, anchor=W)
-+            limwin.pack(fill=X)
-+
-+            if self.parent.server.protocol == 'IMAP':
-+                foldwin = Frame(rightwin, relief=RAISED, bd=5)
-+                Label(foldwin, text="Remote folders (IMAP only)").pack(side=TOP)
-+                ListEdit("New folder:", self.user.mailboxes,
-+                         None, None, foldwin, None)
-+                foldwin.pack(fill=X, anchor=N)
-+
-+        if mode != 'novice':
-+            rightwin.pack(side=LEFT)
-+        else:
-+            self.pack()
- 
- 
- #
-@@ -1793,162 +1793,162 @@ class UserEdit(Frame, MyWidget):
- 
- class Configurator(Frame):
-     def __init__(self, outfile, master, onexit, parent):
--	Frame.__init__(self, master)
--	self.outfile = outfile
--	self.onexit = onexit
--	self.parent = parent
--	self.master.title('fetchmail configurator');
--	self.master.iconname('fetchmail configurator');
--	Pack.config(self)
--	self.keepalive = []	# Use this to anchor the PhotoImage object
--	make_icon_window(self, fetchmail_icon)
--
--	Message(self, text="""
-+        Frame.__init__(self, master)
-+        self.outfile = outfile
-+        self.onexit = onexit
-+        self.parent = parent
-+        self.master.title('fetchmail configurator');
-+        self.master.iconname('fetchmail configurator');
-+        Pack.config(self)
-+        self.keepalive = []	# Use this to anchor the PhotoImage object
-+        make_icon_window(self, fetchmail_icon)
-+
-+        Message(self, text="""
- Use `Novice Configuration' for basic fetchmail setup;
- with this, you can easily set up a single-drop connection
- to one remote mail server.
- """, width=600).pack(side=TOP)
--	Button(self, text='Novice Configuration',
--				fg='blue', command=self.novice).pack()
-+        Button(self, text='Novice Configuration',
-+                                fg='blue', command=self.novice).pack()
- 
--	Message(self, text="""
-+        Message(self, text="""
- Use `Expert Configuration' for advanced fetchmail setup,
- including multiple-site or multidrop connections.
- """, width=600).pack(side=TOP)
--	Button(self, text='Expert Configuration',
--				fg='blue', command=self.expert).pack()
-+        Button(self, text='Expert Configuration',
-+                                fg='blue', command=self.expert).pack()
- 
--	Message(self, text="""
-+        Message(self, text="""
- Or you can just select `Quit' to leave the configurator now and
- return to the main panel.
- """, width=600).pack(side=TOP)
--	Button(self, text='Quit', fg='blue', command=self.leave).pack()
--	master.protocol("WM_DELETE_WINDOW", self.leave)
-+        Button(self, text='Quit', fg='blue', command=self.leave).pack()
-+        master.protocol("WM_DELETE_WINDOW", self.leave)
- 
-     def novice(self):
--	self.master.destroy()
--	ConfigurationEdit(Fetchmailrc, self.outfile, Toplevel(), self.onexit).edit('novice')
-+        self.master.destroy()
-+        ConfigurationEdit(Fetchmailrc, self.outfile, Toplevel(), self.onexit).edit('novice')
- 
-     def expert(self):
--	self.master.destroy()
--	ConfigurationEdit(Fetchmailrc, self.outfile, Toplevel(), self.onexit).edit('expert')
-+        self.master.destroy()
-+        ConfigurationEdit(Fetchmailrc, self.outfile, Toplevel(), self.onexit).edit('expert')
- 
-     def leave(self):
--	self.master.destroy()
--	self.onexit()
-+        self.master.destroy()
-+        self.onexit()
- 
- # Run a command in a scrolling text widget, displaying its output
- 
- class RunWindow(Frame):
-     def __init__(self, command, master, parent):
--	Frame.__init__(self, master)
--	self.master = master
--	self.master.title('fetchmail run window');
--	self.master.iconname('fetchmail run window');
--	Pack.config(self)
--	Label(self,
--		text="Running "+command,
--		bd=2).pack(side=TOP, pady=10)
--	self.keepalive = []	# Use this to anchor the PhotoImage object
--	make_icon_window(self, fetchmail_icon)
--
--	# This is a scrolling text window
--	textframe = Frame(self)
--	scroll = Scrollbar(textframe)
--	self.textwidget = Text(textframe, setgrid=TRUE)
--	textframe.pack(side=TOP, expand=YES, fill=BOTH)
--	self.textwidget.config(yscrollcommand=scroll.set)
--	self.textwidget.pack(side=LEFT, expand=YES, fill=BOTH)
--	scroll.config(command=self.textwidget.yview)
--	scroll.pack(side=RIGHT, fill=BOTH)
--	textframe.pack(side=TOP)
--
--	Button(self, text='Quit', fg='blue', command=self.leave).pack()
--
--	self.update()	# Draw widget before executing fetchmail
--
--	# Always look for a runnable command in the directory we're running in
--	# first. This avoids some obscure version-skew errors that can occur
--	# if you pick up an old fetchmail from the standard system locations.
--	os.environ["PATH"] = os.path.dirname(sys.argv[0]) + ":" + os.environ["PATH"]
--	child_stdout = os.popen(command + " 2>&1 </dev/null", "r")
--	while 1:
--	    ch = child_stdout.read(1)
--	    if not ch:
--		break
--	    self.textwidget.insert(END, ch)
--	self.textwidget.insert(END, "Done.")
--	self.textwidget.see(END);
-+        Frame.__init__(self, master)
-+        self.master = master
-+        self.master.title('fetchmail run window');
-+        self.master.iconname('fetchmail run window');
-+        Pack.config(self)
-+        Label(self,
-+                text="Running "+command,
-+                bd=2).pack(side=TOP, pady=10)
-+        self.keepalive = []	# Use this to anchor the PhotoImage object
-+        make_icon_window(self, fetchmail_icon)
-+
-+        # This is a scrolling text window
-+        textframe = Frame(self)
-+        scroll = Scrollbar(textframe)
-+        self.textwidget = Text(textframe, setgrid=TRUE)
-+        textframe.pack(side=TOP, expand=YES, fill=BOTH)
-+        self.textwidget.config(yscrollcommand=scroll.set)
-+        self.textwidget.pack(side=LEFT, expand=YES, fill=BOTH)
-+        scroll.config(command=self.textwidget.yview)
-+        scroll.pack(side=RIGHT, fill=BOTH)
-+        textframe.pack(side=TOP)
-+
-+        Button(self, text='Quit', fg='blue', command=self.leave).pack()
-+
-+        self.update()	# Draw widget before executing fetchmail
-+
-+        # Always look for a runnable command in the directory we're running in
-+        # first. This avoids some obscure version-skew errors that can occur
-+        # if you pick up an old fetchmail from the standard system locations.
-+        os.environ["PATH"] = os.path.dirname(sys.argv[0]) + ":" + os.environ["PATH"]
-+        child_stdout = os.popen(command + " 2>&1 </dev/null", "r")
-+        while 1:
-+            ch = child_stdout.read(1)
-+            if not ch:
-+                break
-+            self.textwidget.insert(END, ch)
-+        self.textwidget.insert(END, "Done.")
-+        self.textwidget.see(END);
- 
-     def leave(self):
--	self.master.destroy()
-+        self.master.destroy()
- 
- # Here's where we choose either configuration or launching
- 
- class MainWindow(Frame):
-     def __init__(self, outfile, master=None):
--	Frame.__init__(self, master)
--	self.outfile = outfile
--	self.master.title('fetchmail launcher');
--	self.master.iconname('fetchmail launcher');
--	Pack.config(self)
--	Label(self,
--		text='Fetchmailconf ' + version,
--		bd=2).pack(side=TOP, pady=10)
--	self.keepalive = []	# Use this to anchor the PhotoImage object
--	make_icon_window(self, fetchmail_icon)
--	self.debug = 0
--
--	## Test icon display with the following:
--	# icon_image = PhotoImage(data=fetchmail_icon)
--	# Label(self, image=icon_image).pack(side=TOP, pady=10)
--	# self.keepalive.append(icon_image)
--
--	Message(self, text="""
-+        Frame.__init__(self, master)
-+        self.outfile = outfile
-+        self.master.title('fetchmail launcher');
-+        self.master.iconname('fetchmail launcher');
-+        Pack.config(self)
-+        Label(self,
-+                text='Fetchmailconf ' + version,
-+                bd=2).pack(side=TOP, pady=10)
-+        self.keepalive = []	# Use this to anchor the PhotoImage object
-+        make_icon_window(self, fetchmail_icon)
-+        self.debug = 0
-+
-+        ## Test icon display with the following:
-+        # icon_image = PhotoImage(data=fetchmail_icon)
-+        # Label(self, image=icon_image).pack(side=TOP, pady=10)
-+        # self.keepalive.append(icon_image)
-+
-+        Message(self, text="""
- Use `Configure fetchmail' to tell fetchmail about the remote
- servers it should poll (the host name, your username there,
- whether to use POP or IMAP, and so forth).
- """, width=600).pack(side=TOP)
--	self.configbutton = Button(self, text='Configure fetchmail',
--				fg='blue', command=self.configure)
--	self.configbutton.pack()
-+        self.configbutton = Button(self, text='Configure fetchmail',
-+                                fg='blue', command=self.configure)
-+        self.configbutton.pack()
- 
--	Message(self, text="""
-+        Message(self, text="""
- Use `Run fetchmail' to run fetchmail with debugging enabled.
- This is a good way to test out a new configuration.
- """, width=600).pack(side=TOP)
--	Button(self, text='Run fetchmail',fg='blue', command=self.test).pack()
-+        Button(self, text='Run fetchmail',fg='blue', command=self.test).pack()
- 
--	Message(self, text="""
-+        Message(self, text="""
- Use `Run fetchmail' to run fetchmail in foreground.
- Progress  messages will be shown, but not debug messages.
- """, width=600).pack(side=TOP)
--	Button(self, text='Run fetchmail', fg='blue', command=self.run).pack()
-+        Button(self, text='Run fetchmail', fg='blue', command=self.run).pack()
- 
--	Message(self, text="""
-+        Message(self, text="""
- Or you can just select `Quit' to exit the launcher now.
- """, width=600).pack(side=TOP)
--	Button(self, text='Quit', fg='blue', command=self.leave).pack()
-+        Button(self, text='Quit', fg='blue', command=self.leave).pack()
- 
-     def configure(self):
--	self.configbutton.configure(state=DISABLED)
--	Configurator(self.outfile, Toplevel(),
--		     lambda self=self: self.configbutton.configure(state=NORMAL),
--		     self)
-+        self.configbutton.configure(state=DISABLED)
-+        Configurator(self.outfile, Toplevel(),
-+                     lambda self=self: self.configbutton.configure(state=NORMAL),
-+                     self)
-     def test(self):
--	cmd = "fetchmail -N -d0 --nosyslog -v"
--	if rcfile:
--	    cmd = cmd + " -f " + rcfile
--	RunWindow(cmd, Toplevel(), self)
-+        cmd = "fetchmail -N -d0 --nosyslog -v"
-+        if rcfile:
-+            cmd = cmd + " -f " + rcfile
-+        RunWindow(cmd, Toplevel(), self)
- 
-     def run(self):
--	cmd = "fetchmail -N -d0"
--	if rcfile:
--	    cmd = cmd + " -f " + rcfile
--	RunWindow(cmd, Toplevel(), self)
-+        cmd = "fetchmail -N -d0"
-+        if rcfile:
-+            cmd = cmd + " -f " + rcfile
-+        RunWindow(cmd, Toplevel(), self)
- 
-     def leave(self):
--	self.quit()
-+        self.quit()
- 
- # Functions for turning a dictionary into an instantiated object tree.
- 
-@@ -1956,51 +1956,51 @@ def intersect(list1, list2):
- # Compute set intersection of lists
-     res = []
-     for x in list1:
--	if x in list2:
--	    res.append(x)
-+        if x in list2:
-+            res.append(x)
-     return res
- 
- def setdiff(list1, list2):
- # Compute set difference of lists
-     res = []
-     for x in list1:
--	if not x in list2:
--	    res.append(x)
-+        if not x in list2:
-+            res.append(x)
-     return res
- 
- def copy_instance(toclass, fromdict):
- # Initialize a class object of given type from a conformant dictionary.
-     for fld in fromdict.keys():
--	if not fld in dictmembers:
--	    dictmembers.append(fld)
-+        if not fld in dictmembers:
-+            dictmembers.append(fld)
- # The `optional' fields are the ones we can ignore for purposes of
- # conformability checking; they'll still get copied if they are
- # present in the dictionary.
-     optional = ('interface', 'monitor',
--		'esmtpname', 'esmtppassword',
--		'ssl', 'sslkey', 'sslcert', 'sslproto', 'sslcertck',
--		'sslcertpath', 'sslcommonname', 'sslfingerprint', 'showdots')
-+                'esmtpname', 'esmtppassword',
-+                'ssl', 'sslkey', 'sslcert', 'sslproto', 'sslcertck',
-+                'sslcertpath', 'sslcommonname', 'sslfingerprint', 'showdots')
-     class_sig = setdiff(toclass.__dict__.keys(), optional)
-     class_sig.sort()
-     dict_keys = setdiff(fromdict.keys(), optional)
-     dict_keys.sort()
-     common = intersect(class_sig, dict_keys)
-     if 'typemap' in class_sig:
--	class_sig.remove('typemap')
-+        class_sig.remove('typemap')
-     if tuple(class_sig) != tuple(dict_keys):
--	print "Fields don't match what fetchmailconf expected:"
-+        print "Fields don't match what fetchmailconf expected:"
- #	print "Class signature: " + `class_sig`
- #	print "Dictionary keys: " + `dict_keys`
--	diff = setdiff(class_sig, common)
--	if diff:
--	    print "Not matched in class `" + toclass.__class__.__name__ + "' signature: " + `diff`
--	diff = setdiff(dict_keys, common)
--	if diff:
--	    print "Not matched in dictionary keys: " + `diff`
--	sys.exit(1)
-+        diff = setdiff(class_sig, common)
-+        if diff:
-+            print "Not matched in class `" + toclass.__class__.__name__ + "' signature: " + `diff`
-+        diff = setdiff(dict_keys, common)
-+        if diff:
-+            print "Not matched in dictionary keys: " + `diff`
-+        sys.exit(1)
-     else:
--	for x in fromdict.keys():
--	    setattr(toclass, x, fromdict[x])
-+        for x in fromdict.keys():
-+            setattr(toclass, x, fromdict[x])
- 
- #
- # And this is the main sequence.  How it works:
-@@ -2028,8 +2028,8 @@ def copy_instance(toclass, fromdict):
- if __name__ == '__main__':
- 
-     if not os.environ.has_key("DISPLAY"):
--	print "fetchmailconf must be run under X"
--	sys.exit(1)
-+        print "fetchmailconf must be run under X"
-+        sys.exit(1)
- 
-     fetchmail_icon = """
- R0lGODdhPAAoAPcAAP///wgICBAQEISEhIyMjJSUlKWlpa2trbW1tcbGxs7Ozufn5+/v7//39yEY
-@@ -2073,31 +2073,31 @@ gUSiYASJpMEHhilJTEnhAlGoQqYAZQ1AiqEMZ0jDGtqQImhwwA13yMMevoQAGvGhEAWHGMOAAAA7
- 
-     # Process options
-     (options, arguments) = getopt.getopt(sys.argv[1:], "df:hV", ["help",
--	    "version"])
-+            "version"])
-     dump = rcfile = None;
-     for (switch, val) in options:
--	if (switch == '-d'):
--	    dump = TRUE
--	elif (switch == '-f'):
--	    rcfile = val
--	elif (switch == '-h' or switch == '--help'):
--	    print """
-+        if (switch == '-d'):
-+            dump = TRUE
-+        elif (switch == '-f'):
-+            rcfile = val
-+        elif (switch == '-h' or switch == '--help'):
-+            print """
- Usage: fetchmailconf {[-d] [-f fetchmailrc]|-h|--help|-V|--version}
-            -d      - dump configuration (for debugging)
-            -f fmrc - read alternate fetchmailrc file
- --help,    -h      - print this help text and quit
- --version, -V      - print fetchmailconf version and quit
- """
--	    sys.exit(0)
--	elif (switch == '-V' or switch == '--version'):
--	    print "fetchmailconf %s" % version
--	    print """
-+            sys.exit(0)
-+        elif (switch == '-V' or switch == '--version'):
-+            print "fetchmailconf %s" % version
-+            print """
- Copyright (C) 1997 - 2003 Eric S. Raymond
- Copyright (C) 2005, 2006, 2008, 2009 Matthias Andree
- fetchmailconf comes with ABSOLUTELY NO WARRANTY.  This is free software, you are
- welcome to redistribute it under certain conditions.  Please see the file
- COPYING in the source or documentation directory for details."""
--	    sys.exit(0)
-+            sys.exit(0)
- 
-     # Get client host's FQDN
-     hostname = socket.gethostbyaddr(socket.gethostname())[0]
-@@ -2112,26 +2112,26 @@ COPYING in the source or documentation directory for details."""
-     # want crackers to snoop password information out of the tempfile.
-     tmpfile = tempfile.mktemp()
-     if rcfile:
--	cmd = "umask 077 && fetchmail </dev/null -f " + rcfile + " --configdump --nosyslog >" + tmpfile
-+        cmd = "umask 077 && fetchmail </dev/null -f " + rcfile + " --configdump --nosyslog >" + tmpfile
-     else:
--	cmd = "umask 077 && fetchmail </dev/null --configdump --nosyslog >" + tmpfile
-+        cmd = "umask 077 && fetchmail </dev/null --configdump --nosyslog >" + tmpfile
- 
-     try:
--	s = os.system(cmd)
--	if s != 0:
--	    print "`" + cmd + "' run failure, status " + `s`
--	    raise SystemExit
-+        s = os.system(cmd)
-+        if s != 0:
-+            print "`" + cmd + "' run failure, status " + `s`
-+            raise SystemExit
-     except:
--	print "Unknown error while running fetchmail --configdump"
--	os.remove(tmpfile)
--	sys.exit(1)
-+        print "Unknown error while running fetchmail --configdump"
-+        os.remove(tmpfile)
-+        sys.exit(1)
- 
-     try:
--	execfile(tmpfile)
-+        execfile(tmpfile)
-     except:
--	print "Can't read configuration output of fetchmail --configdump."
--	os.remove(tmpfile)
--	sys.exit(1)
-+        print "Can't read configuration output of fetchmail --configdump."
-+        os.remove(tmpfile)
-+        sys.exit(1)
- 
-     os.remove(tmpfile)
- 
-@@ -2145,23 +2145,23 @@ COPYING in the source or documentation directory for details."""
-     copy_instance(Fetchmailrc, fetchmailrc)
-     Fetchmailrc.servers = [];
-     for server in fetchmailrc['servers']:
--	Newsite = Server()
--	copy_instance(Newsite, server)
--	Fetchmailrc.servers.append(Newsite)
--	Newsite.users = [];
--	for user in server['users']:
--	    Newuser = User()
--	    copy_instance(Newuser, user)
--	    Newsite.users.append(Newuser)
-+        Newsite = Server()
-+        copy_instance(Newsite, server)
-+        Fetchmailrc.servers.append(Newsite)
-+        Newsite.users = [];
-+        for user in server['users']:
-+            Newuser = User()
-+            copy_instance(Newuser, user)
-+            Newsite.users.append(Newuser)
- 
-     # We may want to display the configuration and quit
-     if dump:
--	print "This is a dump of the configuration we read:\n"+`Fetchmailrc`
-+        print "This is a dump of the configuration we read:\n"+`Fetchmailrc`
- 
-     # The theory here is that -f alone sets the rcfile location,
-     # but -d and -f together mean the new configuration should go to stdout.
-     if not rcfile and not dump:
--	rcfile = os.environ["HOME"] + "/.fetchmailrc"
-+        rcfile = os.environ["HOME"] + "/.fetchmailrc"
- 
-     # OK, now run the configuration edit
-     root = MainWindow(rcfile)
---
-libgit2 0.26.0
-
diff --git a/fetchmail-fetchmailconf-python3-2of3.patch b/fetchmail-fetchmailconf-python3-2of3.patch
deleted file mode 100644
index 37157fd..0000000
--- a/fetchmail-fetchmailconf-python3-2of3.patch
+++ /dev/null
@@ -1,280 +0,0 @@
-From ff279a5697992730bc885ddd171456c06c09fb10 Mon Sep 17 00:00:00 2001
-From: Samuel Martin <s.martin49@gmail.com>
-Date: Wed, 8 Jun 2016 21:36:29 +0200
-Subject: [PATCH] fetchmailconf.py: make fetchmailconf.py python{2, 3}-compliant
-
-This change does:
-- use repr(...) instead of `...` (see [1]);
-- fix print call;
-- fix octal numbers.
-
-[1] https://docs.python.org/release/3.0.1/whatsnew/3.0.html#removed-syntax
-
-Signed-off-by: Samuel Martin <s.martin49@gmail.com>
-Signed-off-by: Matthias Andree <matthias.andree@gmx.de>
----
- fetchmailconf.py | 94 ++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------
- 1 file changed, 48 insertions(+), 46 deletions(-)
-
-diff --git a/fetchmailconf.py b/fetchmailconf.py
-index d64556e..697e4f7 100755
---- a/fetchmailconf.py
-+++ b/fetchmailconf.py
-@@ -5,6 +5,8 @@
- # Matthias Andree <matthias.andree@gmx.de>
- # Requires Python with Tkinter, and the following OS-dependent services:
- #	posix, posixpath, socket
-+from __future__ import print_function
-+
- version = "1.57"
- 
- from Tkinter import *
-@@ -64,7 +66,7 @@ class Configuration:
-         if self.properties != ConfigurationDefaults.properties:
-             str = str + ("set properties \"%s\"\n" % (self.properties,));
-         if self.poll_interval > 0:
--            str = str + "set daemon " + `self.poll_interval` + "\n"
-+            str = str + "set daemon " + repr(self.poll_interval) + "\n"
-         if self.invisible:
-            str = str + ("set invisible\n")
-         for site in self.servers:
-@@ -145,12 +147,12 @@ class Server:
-         if self.service and self.protocol and self.service != defaultports[self.protocol] and defaultports[self.protocol] and self.service != ianaservices[defaultports[self.protocol]]:
-             res = res + " service " + self.service
-         if self.timeout != ServerDefaults.timeout:
--            res = res + " timeout " + `self.timeout`
-+            res = res + " timeout " + repr(self.timeout)
-         if self.interval != ServerDefaults.interval:
--            res = res + " interval " + `self.interval`
-+            res = res + " interval " + repr(self.interval)
-         if self.envelope != ServerDefaults.envelope or self.envskip != ServerDefaults.envskip:
-             if self.envskip:
--                res = res + " envelope " + `self.envskip` + " " + self.envelope
-+                res = res + " envelope " + repr(self.envskip) + " " + self.envelope
-             else:
-                 res = res + " envelope " + self.envelope
-         if self.qvirtual:
-@@ -189,15 +191,15 @@ class Server:
-         if self.monitor:
-             res = res + " monitor " + str(self.monitor)
-         if self.plugin:
--            res = res + " plugin " + `self.plugin`
-+            res = res + " plugin " + repr(self.plugin)
-         if self.plugout:
--            res = res + " plugout " + `self.plugout`
-+            res = res + " plugout " + repr(self.plugout)
-         if self.principal:
--            res = res + " principal " + `self.principal`
-+            res = res + " principal " + repr(self.principal)
-         if self.esmtpname:
--            res = res + " esmtpname " + `self.esmtpname`
-+            res = res + " esmtpname " + repr(self.esmtpname)
-         if self.esmtppassword:
--            res = res + " esmtppassword " + `self.esmtppassword`
-+            res = res + " esmtppassword " + repr(self.esmtppassword)
-         if self.interface or self.monitor or self.principal or self.plugin or self.plugout:
-             if folded:
-                 res = res + "\n"
-@@ -230,7 +232,7 @@ class User:
-         elif os.environ.has_key("LOGNAME"):
-             self.remote = os.environ["LOGNAME"]
-         else:
--            print "Can't get your username!"
-+            print("Can't get your username!")
-             sys.exit(1)
-         self.localnames = [self.remote,]# Local names
-         self.password = None	# Password for mail account access
-@@ -316,13 +318,13 @@ class User:
- 
-     def __repr__(self):
-         res = "    "
--        res = res + "user " + `self.remote` + " there ";
-+        res = res + "user " + repr(self.remote) + " there ";
-         if self.password:
--            res = res + "with password " + `self.password` + " "
-+            res = res + "with password " + repr(self.password) + " "
-         if self.localnames:
-             res = res + "is"
-             for x in self.localnames:
--                res = res + " " + `x`
-+                res = res + " " + repr(x)
-             res = res + " here"
-         if (self.keep != UserDefaults.keep
-                 or self.flush != UserDefaults.flush
-@@ -362,35 +364,35 @@ class User:
-         if self.idle != UserDefaults.idle:
-             res = res + flag2str(self.idle, 'idle')
-         if self.limit != UserDefaults.limit:
--            res = res + " limit " + `self.limit`
-+            res = res + " limit " + repr(self.limit)
-         if self.warnings != UserDefaults.warnings:
--            res = res + " warnings " + `self.warnings`
-+            res = res + " warnings " + repr(self.warnings)
-         if self.fetchlimit != UserDefaults.fetchlimit:
--            res = res + " fetchlimit " + `self.fetchlimit`
-+            res = res + " fetchlimit " + repr(self.fetchlimit)
-         if self.fetchsizelimit != UserDefaults.fetchsizelimit:
--            res = res + " fetchsizelimit " + `self.fetchsizelimit`
-+            res = res + " fetchsizelimit " + repr(self.fetchsizelimit)
-         if self.fastuidl != UserDefaults.fastuidl:
--            res = res + " fastuidl " + `self.fastuidl`
-+            res = res + " fastuidl " + repr(self.fastuidl)
-         if self.batchlimit != UserDefaults.batchlimit:
--            res = res + " batchlimit " + `self.batchlimit`
-+            res = res + " batchlimit " + repr(self.batchlimit)
-         if self.ssl and self.ssl != UserDefaults.ssl:
-             res = res + flag2str(self.ssl, 'ssl')
-         if self.sslkey and self.sslkey != UserDefaults.sslkey:
--            res = res + " sslkey " + `self.sslkey`
-+            res = res + " sslkey " + repr(self.sslkey)
-         if self.sslcert and self.sslcert != UserDefaults.sslcert:
--            res = res + " sslcert " + `self.sslcert`
-+            res = res + " sslcert " + repr(self.sslcert)
-         if self.sslproto and self.sslproto != UserDefaults.sslproto:
--            res = res + " sslproto " + `self.sslproto`
-+            res = res + " sslproto " + repr(self.sslproto)
-         if self.sslcertck and self.sslcertck != UserDefaults.sslcertck:
-             res = res +  flag2str(self.sslcertck, 'sslcertck')
-         if self.sslcertpath and self.sslcertpath != UserDefaults.sslcertpath:
--            res = res + " sslcertpath " + `self.sslcertpath`
-+            res = res + " sslcertpath " + repr(self.sslcertpath)
-         if self.sslcommonname and self.sslcommonname != UserDefaults.sslcommonname:
--            res = res + " sslcommonname " + `self.sslcommonname`
-+            res = res + " sslcommonname " + repr(self.sslcommonname)
-         if self.sslfingerprint and self.sslfingerprint != UserDefaults.sslfingerprint:
--            res = res + " sslfingerprint " + `self.sslfingerprint`
-+            res = res + " sslfingerprint " + repr(self.sslfingerprint)
-         if self.expunge != UserDefaults.expunge:
--            res = res + " expunge " + `self.expunge`
-+            res = res + " expunge " + repr(self.expunge)
-         res = res + "\n"
-         trimmed = self.smtphunt;
-         if trimmed != [] and trimmed[len(trimmed) - 1] == "localhost":
-@@ -417,7 +419,7 @@ class User:
-              res = res + "\n"
-         for fld in ('smtpaddress', 'preconnect', 'postconnect', 'mda', 'bsmtp', 'properties'):
-             if getattr(self, fld):
--                res = res + " %s %s\n" % (fld, `getattr(self, fld)`)
-+                res = res + " %s %s\n" % (fld, repr(getattr(self, fld)))
-         if self.lmtp != UserDefaults.lmtp:
-             res = res + flag2str(self.lmtp, 'lmtp')
-         if self.antispam != UserDefaults.antispam:
-@@ -904,15 +906,15 @@ class ConfigurationEdit(Frame, MyWidget):
-             # Pre-1.5.2 compatibility...
-             except os.error:
-                 pass
--            oldumask = os.umask(077)
-+            oldumask = os.umask(0o77)
-             fm = open(self.outfile, 'w')
-             os.umask(oldumask)
-         if fm:
-             # be paranoid
-             if fm != sys.stdout:
--                os.chmod(self.outfile, 0600)
-+                os.chmod(self.outfile, 0o600)
-             fm.write("# Configuration created %s by fetchmailconf %s\n" % (time.ctime(time.time()), version))
--            fm.write(`self.configuration`)
-+            fm.write(repr(self.configuration))
-             if self.outfile:
-                 fm.close()
-             self.destruct()
-@@ -1988,15 +1990,15 @@ def copy_instance(toclass, fromdict):
-     if 'typemap' in class_sig:
-         class_sig.remove('typemap')
-     if tuple(class_sig) != tuple(dict_keys):
--        print "Fields don't match what fetchmailconf expected:"
--#	print "Class signature: " + `class_sig`
--#	print "Dictionary keys: " + `dict_keys`
-+        print("Fields don't match what fetchmailconf expected:")
-+#	print("Class signature: " + repr(class_sig))
-+#	print("Dictionary keys: " + repr(dict_keys))
-         diff = setdiff(class_sig, common)
-         if diff:
--            print "Not matched in class `" + toclass.__class__.__name__ + "' signature: " + `diff`
-+            print("Not matched in class `" + toclass.__class__.__name__ + "' signature: " + repr(diff))
-         diff = setdiff(dict_keys, common)
-         if diff:
--            print "Not matched in dictionary keys: " + `diff`
-+            print("Not matched in dictionary keys: " + repr(diff))
-         sys.exit(1)
-     else:
-         for x in fromdict.keys():
-@@ -2028,7 +2030,7 @@ def copy_instance(toclass, fromdict):
- if __name__ == '__main__':
- 
-     if not os.environ.has_key("DISPLAY"):
--        print "fetchmailconf must be run under X"
-+        print("fetchmailconf must be run under X")
-         sys.exit(1)
- 
-     fetchmail_icon = """
-@@ -2068,7 +2070,7 @@ gUSiYASJpMEHhilJTEnhAlGoQqYAZQ1AiqEMZ0jDGtqQImhwwA13yMMevoQAGvGhEAWHGMOAAAA7
- # The base64 data in the string above was generated by the following procedure:
- #
- # import base64
--# print base64.encodestring(open("fetchmail.gif", "rb").read())
-+# print(base64.encodestring(open("fetchmail.gif", "rb").read()))
- #
- 
-     # Process options
-@@ -2081,22 +2083,22 @@ gUSiYASJpMEHhilJTEnhAlGoQqYAZQ1AiqEMZ0jDGtqQImhwwA13yMMevoQAGvGhEAWHGMOAAAA7
-         elif (switch == '-f'):
-             rcfile = val
-         elif (switch == '-h' or switch == '--help'):
--            print """
-+            print("""
- Usage: fetchmailconf {[-d] [-f fetchmailrc]|-h|--help|-V|--version}
-            -d      - dump configuration (for debugging)
-            -f fmrc - read alternate fetchmailrc file
- --help,    -h      - print this help text and quit
- --version, -V      - print fetchmailconf version and quit
--"""
-+""")
-             sys.exit(0)
-         elif (switch == '-V' or switch == '--version'):
--            print "fetchmailconf %s" % version
--            print """
-+            print("fetchmailconf %s" % version)
-+            print("""
- Copyright (C) 1997 - 2003 Eric S. Raymond
- Copyright (C) 2005, 2006, 2008, 2009 Matthias Andree
- fetchmailconf comes with ABSOLUTELY NO WARRANTY.  This is free software, you are
- welcome to redistribute it under certain conditions.  Please see the file
--COPYING in the source or documentation directory for details."""
-+COPYING in the source or documentation directory for details.""")
-             sys.exit(0)
- 
-     # Get client host's FQDN
-@@ -2119,17 +2121,17 @@ COPYING in the source or documentation directory for details."""
-     try:
-         s = os.system(cmd)
-         if s != 0:
--            print "`" + cmd + "' run failure, status " + `s`
-+            print("`" + cmd + "' run failure, status " + repr(s))
-             raise SystemExit
-     except:
--        print "Unknown error while running fetchmail --configdump"
-+        print("Unknown error while running fetchmail --configdump")
-         os.remove(tmpfile)
-         sys.exit(1)
- 
-     try:
-         execfile(tmpfile)
-     except:
--        print "Can't read configuration output of fetchmail --configdump."
-+        print("Can't read configuration output of fetchmail --configdump.")
-         os.remove(tmpfile)
-         sys.exit(1)
- 
-@@ -2156,7 +2158,7 @@ COPYING in the source or documentation directory for details."""
- 
-     # We may want to display the configuration and quit
-     if dump:
--        print "This is a dump of the configuration we read:\n"+`Fetchmailrc`
-+        print("This is a dump of the configuration we read:\n" + repr(Fetchmailrc))
- 
-     # The theory here is that -f alone sets the rcfile location,
-     # but -d and -f together mean the new configuration should go to stdout.
---
-libgit2 0.26.0
-
diff --git a/fetchmail-fetchmailconf-python3-3of3.patch b/fetchmail-fetchmailconf-python3-3of3.patch
deleted file mode 100644
index 025bac8..0000000
--- a/fetchmail-fetchmailconf-python3-3of3.patch
+++ /dev/null
@@ -1,86 +0,0 @@
-From 1a405368c25f76db054fd3befa7fb72e7a5e1f2e Mon Sep 17 00:00:00 2001
-From: Matthias Andree <matthias.andree@gmx.de>
-Date: Wed, 8 Jun 2016 22:34:23 +0200
-Subject: [PATCH] A few Python 3 compatibility fixes.
-
-Still needs 2to3 to be run under Python 3.
----
- fetchmailconf.py | 20 +++++++++++++-------
- 1 file changed, 13 insertions(+), 7 deletions(-)
-
-diff --git a/fetchmailconf.py b/fetchmailconf.py
-index 697e4f7..5c0b8ed 100755
---- a/fetchmailconf.py
-+++ b/fetchmailconf.py
-@@ -5,12 +5,17 @@
- # Matthias Andree <matthias.andree@gmx.de>
- # Requires Python with Tkinter, and the following OS-dependent services:
- #	posix, posixpath, socket
-+
-+# WARNING: this needs to be updated for fetchmail 6.4's SSL options,
-+# and other recent new options;
-+# WARNING: to be compatible with Python 3, needs to be run thru 2to3.py.
- from __future__ import print_function
- 
--version = "1.57"
-+version = "1.58"
- 
- from Tkinter import *
- from Dialog import *
-+
- import sys, time, os, string, socket, getopt, tempfile
- 
- #
-@@ -227,9 +232,9 @@ class Server:
- 
- class User:
-     def __init__(self):
--        if os.environ.has_key("USER"):
-+        if "USER" in os.environ:
-             self.remote = os.environ["USER"]	# Remote username
--        elif os.environ.has_key("LOGNAME"):
-+        elif "LOGNAME" in os.environ:
-             self.remote = os.environ["LOGNAME"]
-         else:
-             print("Can't get your username!")
-@@ -1123,7 +1128,7 @@ class ServerEdit(Frame, MyWidget):
-         self.subwidgets[username] = UserEdit(username, self).edit(mode, Toplevel())
- 
-     def user_delete(self, username):
--        if self.subwidgets.has_key(username):
-+        if username in self.subwidgets:
-             self.subwidgets[username].destruct()
-         del self.server[username]
- 
-@@ -1627,7 +1632,7 @@ class UserEdit(Frame, MyWidget):
- 
-     def destruct(self):
-         # Yes, this test can fail -- if you delete the parent window.
--        if self.parent.subwidgets.has_key(self.user.remote):
-+        if self.user.remote in self.parent.subwidgets:
-             del self.parent.subwidgets[self.user.remote]
-         self.master.destroy()
- 
-@@ -2029,7 +2034,7 @@ def copy_instance(toclass, fromdict):
- 
- if __name__ == '__main__':
- 
--    if not os.environ.has_key("DISPLAY"):
-+    if "DISPLAY" not in os.environ:
-         print("fetchmailconf must be run under X")
-         sys.exit(1)
- 
-@@ -2130,8 +2135,9 @@ COPYING in the source or documentation directory for details.""")
- 
-     try:
-         execfile(tmpfile)
--    except:
-+    except Exception as e:
-         print("Can't read configuration output of fetchmail --configdump.")
-+        print(repr(e))
-         os.remove(tmpfile)
-         sys.exit(1)
- 
---
-libgit2 0.26.0
-
diff --git a/fetchmail-openssl11.patch b/fetchmail-openssl11.patch
deleted file mode 100644
index 9e01412..0000000
--- a/fetchmail-openssl11.patch
+++ /dev/null
@@ -1,1576 +0,0 @@
-Description: <short summary of the patch>
- TODO: Put a short summary on the line above and replace this paragraph
- with a longer explanation of this change. Complete the meta-information
- with other relevant fields (see below for details). To make it easier, the
- information below has been extracted from the changelog. Adjust it or drop
- it.
- .
- fetchmail (6.3.26-2) unstable; urgency=low
- .
-   * New maintainer (closes: #800750).
-   * Backport upstream fix for SSLv3 removal (closes: #804604) and do not
-     recommend SSLv3 (closes: #801178).
-   * Remove quilt and its usage.
-   * Add dh-python to build depends.
-   * Update upstream URLs.
-   * Update watch file.
-   * Update Standards-Version to 3.9.6 .
-Author: Laszlo Boszormenyi (GCS) <gcs@debian.org>
-Bug-Debian: https://bugs.debian.org/800750
-Bug-Debian: https://bugs.debian.org/801178
-Bug-Debian: https://bugs.debian.org/804604
-
----
-The information above should follow the Patch Tagging Guidelines, please
-checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here
-are templates for supplementary fields that you might want to add:
-
-Origin: <vendor|upstream|other>, <url of original patch>
-Bug: <url in upstream bugtracker>
-Bug-Debian: https://bugs.debian.org/<bugnumber>
-Bug-Ubuntu: https://launchpad.net/bugs/<bugnumber>
-Forwarded: <no|not-needed|url proving that it has been forwarded>
-Reviewed-By: <name and email of someone who approved the patch>
-Last-Update: <YYYY-MM-DD>
-
---- fetchmail-6.3.26.orig/Makefile.am
-+++ fetchmail-6.3.26/Makefile.am
-@@ -31,7 +31,7 @@ libfm_a_SOURCES=	xmalloc.c base64.c rfc8
- 			servport.c ntlm.h smbbyteorder.h smbdes.h smbmd4.h \
- 			smbencrypt.h smbdes.c smbencrypt.c smbmd4.c smbutil.c \
- 			libesmtp/gethostbyname.h libesmtp/gethostbyname.c \
--			smbtypes.h fm_getaddrinfo.c tls.c rfc822valid.c \
-+			smbtypes.h fm_getaddrinfo.c starttls.c rfc822valid.c \
- 			xmalloc.h sdump.h sdump.c x509_name_match.c \
- 			fm_strl.h md5c.c
- if NTLM_ENABLE
---- fetchmail-6.3.26.orig/Makefile.in
-+++ fetchmail-6.3.26/Makefile.in
-@@ -97,14 +97,14 @@ am__libfm_a_SOURCES_DIST = xmalloc.c bas
- 	rfc2047e.c servport.c ntlm.h smbbyteorder.h smbdes.h smbmd4.h \
- 	smbencrypt.h smbdes.c smbencrypt.c smbmd4.c smbutil.c \
- 	libesmtp/gethostbyname.h libesmtp/gethostbyname.c smbtypes.h \
--	fm_getaddrinfo.c tls.c rfc822valid.c xmalloc.h sdump.h sdump.c \
-+	fm_getaddrinfo.c starttls.c rfc822valid.c xmalloc.h sdump.h sdump.c \
- 	x509_name_match.c fm_strl.h md5c.c ntlmsubr.c
- @NTLM_ENABLE_TRUE@am__objects_1 = ntlmsubr.$(OBJEXT)
- am_libfm_a_OBJECTS = xmalloc.$(OBJEXT) base64.$(OBJEXT) \
- 	rfc822.$(OBJEXT) report.$(OBJEXT) rfc2047e.$(OBJEXT) \
- 	servport.$(OBJEXT) smbdes.$(OBJEXT) smbencrypt.$(OBJEXT) \
- 	smbmd4.$(OBJEXT) smbutil.$(OBJEXT) gethostbyname.$(OBJEXT) \
--	fm_getaddrinfo.$(OBJEXT) tls.$(OBJEXT) rfc822valid.$(OBJEXT) \
-+	fm_getaddrinfo.$(OBJEXT) starttls.$(OBJEXT) rfc822valid.$(OBJEXT) \
- 	sdump.$(OBJEXT) x509_name_match.$(OBJEXT) md5c.$(OBJEXT) \
- 	$(am__objects_1)
- libfm_a_OBJECTS = $(am_libfm_a_OBJECTS)
-@@ -483,7 +483,7 @@ libfm_a_SOURCES = xmalloc.c base64.c rfc
- 	servport.c ntlm.h smbbyteorder.h smbdes.h smbmd4.h \
- 	smbencrypt.h smbdes.c smbencrypt.c smbmd4.c smbutil.c \
- 	libesmtp/gethostbyname.h libesmtp/gethostbyname.c smbtypes.h \
--	fm_getaddrinfo.c tls.c rfc822valid.c xmalloc.h sdump.h sdump.c \
-+	fm_getaddrinfo.c starttls.c rfc822valid.c xmalloc.h sdump.h sdump.c \
- 	x509_name_match.c fm_strl.h md5c.c $(am__append_1)
- libfm_a_LIBADD = $(EXTRAOBJ)
- libfm_a_DEPENDENCIES = $(EXTRAOBJ)
---- fetchmail-6.3.26.orig/NEWS
-+++ fetchmail-6.3.26/NEWS
-@@ -51,8 +51,6 @@ removed from a 6.4.0 or newer release.)
- * The --bsmtp - mode of operation may be removed in a future release.
- * Given that OpenSSL is severely underdocumented, and needs license exceptions,
-   fetchmail may switch to a different SSL library.
--* SSLv2 support will be removed from a future fetchmail release. It has been
--  obsolete for more than a decade.
- 
- --------------------------------------------------------------------------------
- 
---- fetchmail-6.3.26.orig/README.SSL
-+++ fetchmail-6.3.26/README.SSL
-@@ -11,36 +11,45 @@ specific to fetchmail.
- In case of troubles, mail the README.SSL-SERVER file to your ISP and 
- have them check their server configuration against it.
- 
--Unfortunately, fetchmail confuses SSL/TLS protocol levels with whether 
--a service needs to use in-band negotiation (STLS/STARTTLS for POP3/IMAP4) or is 
--totally SSL-wrapped on a separate port.  For compatibility reasons, this cannot 
--be fixed in a bugfix release.
-+Unfortunately, fetchmail confuses SSL/TLS protocol levels with whether a
-+service needs to use in-band negotiation (STLS/STARTTLS for POP3/IMAP4)
-+or is totally SSL-wrapped on a separate port.  For compatibility
-+reasons, this cannot be fixed in a bugfix or minor release.
-+
-+Also, fetchmail 6.4.0 and newer releases changed some of the semantics
-+as the result of a bug-fix, and will auto-negotiate TLSv1 or newer only.
-+If your server does not support this, you may have to specify --sslproto
-+ssl3.  This is in order to prefer the newer TLS protocols, because SSLv2
-+and v3 are broken.
- 
--	-- Matthias Andree, 2009-05-09
-+       -- Matthias Andree, 2015-01-16
- 
- 
- Quickstart
- ----------
- 
-+Use an up-to-date release of OpenSSL 1.0.1 or newer, so as to get
-+TLSv1.2 support.
-+
- For use of SSL or TLS with in-band negotiation on the regular service's port, 
- i. e. with STLS or STARTTLS, use these command line options
- 
--    --sslproto tls1 --sslcertck
-+    --sslproto auto --sslcertck
- 
- or these options in the rcfile (after the respective "user"... options)
- 
--      sslproto tls1   sslcertck
-+      sslproto auto   sslcertck
- 
- 
- For use of SSL or TLS on a separate port, if the whole TCP connection is 
--SSL-encrypted from the very beginning, use these command line options (in the 
--rcfile, omit all leading "--"):
-+SSL-encrypted from the very beginning (SSL- or TLS-wrapped), use these
-+command line options (in the rcfile, omit all leading "--"):
- 
--    --ssl --sslproto ssl3 --sslcertck
-+    --ssl --sslproto auto --sslcertck
- 
- or these options in the rcfile (after the respective "user"... options)
- 
--      ssl   sslproto ssl3   sslcertck
-+      ssl   sslproto auto   sslcertck
- 
- 
- Background and use (long version :-))
---- fetchmail-6.3.26.orig/config.h.in
-+++ fetchmail-6.3.26/config.h.in
-@@ -49,9 +49,9 @@
-    don't. */
- #undef HAVE_DECL_H_ERRNO
- 
--/* Define to 1 if you have the declaration of `SSLv2_client_method', and to 0
-+/* Define to 1 if you have the declaration of `SSLv3_client_method', and to 0
-    if you don't. */
--#undef HAVE_DECL_SSLV2_CLIENT_METHOD
-+#undef HAVE_DECL_SSLV3_CLIENT_METHOD
- 
- /* Define to 1 if you have the declaration of `strerror', and to 0 if you
-    don't. */
---- fetchmail-6.3.26.orig/configure
-+++ fetchmail-6.3.26/configure
-@@ -1,13 +1,11 @@
- #! /bin/sh
- # Guess values for system-dependent variables and create Makefiles.
--# Generated by GNU Autoconf 2.68 for fetchmail 6.3.26.
-+# Generated by GNU Autoconf 2.69 for fetchmail 6.3.26.
- #
- # Report bugs to <fetchmail-users@lists.berlios.de>.
- #
- #
--# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
--# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
--# Foundation, Inc.
-+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
- #
- #
- # This configure script is free software; the Free Software Foundation
-@@ -136,6 +134,31 @@ export LANGUAGE
- # CDPATH.
- (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
- 
-+# Use a proper internal environment variable to ensure we don't fall
-+  # into an infinite loop, continuously re-executing ourselves.
-+  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
-+    _as_can_reexec=no; export _as_can_reexec;
-+    # We cannot yet assume a decent shell, so we have to provide a
-+# neutralization value for shells without unset; and this also
-+# works around shells that cannot unset nonexistent variables.
-+# Preserve -v and -x to the replacement shell.
-+BASH_ENV=/dev/null
-+ENV=/dev/null
-+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-+case $- in # ((((
-+  *v*x* | *x*v* ) as_opts=-vx ;;
-+  *v* ) as_opts=-v ;;
-+  *x* ) as_opts=-x ;;
-+  * ) as_opts= ;;
-+esac
-+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-+# Admittedly, this is quite paranoid, since all the known shells bail
-+# out after a failed `exec'.
-+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-+as_fn_exit 255
-+  fi
-+  # We don't want this to propagate to other subprocesses.
-+          { _as_can_reexec=; unset _as_can_reexec;}
- if test "x$CONFIG_SHELL" = x; then
-   as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
-   emulate sh
-@@ -169,7 +192,8 @@ if ( set x; as_fn_ret_success y && test
- else
-   exitcode=1; echo positional parameters were not saved.
- fi
--test x\$exitcode = x0 || exit 1"
-+test x\$exitcode = x0 || exit 1
-+test -x / || exit 1"
-   as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
-   as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
-   eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
-@@ -214,21 +238,25 @@ IFS=$as_save_IFS
- 
- 
-       if test "x$CONFIG_SHELL" != x; then :
--  # We cannot yet assume a decent shell, so we have to provide a
--	# neutralization value for shells without unset; and this also
--	# works around shells that cannot unset nonexistent variables.
--	# Preserve -v and -x to the replacement shell.
--	BASH_ENV=/dev/null
--	ENV=/dev/null
--	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
--	export CONFIG_SHELL
--	case $- in # ((((
--	  *v*x* | *x*v* ) as_opts=-vx ;;
--	  *v* ) as_opts=-v ;;
--	  *x* ) as_opts=-x ;;
--	  * ) as_opts= ;;
--	esac
--	exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
-+  export CONFIG_SHELL
-+             # We cannot yet assume a decent shell, so we have to provide a
-+# neutralization value for shells without unset; and this also
-+# works around shells that cannot unset nonexistent variables.
-+# Preserve -v and -x to the replacement shell.
-+BASH_ENV=/dev/null
-+ENV=/dev/null
-+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-+case $- in # ((((
-+  *v*x* | *x*v* ) as_opts=-vx ;;
-+  *v* ) as_opts=-v ;;
-+  *x* ) as_opts=-x ;;
-+  * ) as_opts= ;;
-+esac
-+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-+# Admittedly, this is quite paranoid, since all the known shells bail
-+# out after a failed `exec'.
-+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-+exit 255
- fi
- 
-     if test x$as_have_required = xno; then :
-@@ -331,6 +359,14 @@ $as_echo X"$as_dir" |
- 
- 
- } # as_fn_mkdir_p
-+
-+# as_fn_executable_p FILE
-+# -----------------------
-+# Test if FILE is an executable regular file.
-+as_fn_executable_p ()
-+{
-+  test -f "$1" && test -x "$1"
-+} # as_fn_executable_p
- # as_fn_append VAR VALUE
- # ----------------------
- # Append the text in VALUE to the end of the definition contained in VAR. Take
-@@ -452,6 +488,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
-   chmod +x "$as_me.lineno" ||
-     { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
- 
-+  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
-+  # already done that, so ensure we don't try to do so again and fall
-+  # in an infinite loop.  This has already happened in practice.
-+  _as_can_reexec=no; export _as_can_reexec
-   # Don't try to exec as it changes $[0], causing all sort of problems
-   # (the dirname of $[0] is not the place where we might find the
-   # original and so on.  Autoconf is especially sensitive to this).
-@@ -486,16 +526,16 @@ if (echo >conf$$.file) 2>/dev/null; then
-     # ... but there are two gotchas:
-     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
--    # In both cases, we have to default to `cp -p'.
-+    # In both cases, we have to default to `cp -pR'.
-     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
--      as_ln_s='cp -p'
-+      as_ln_s='cp -pR'
-   elif ln conf$$.file conf$$ 2>/dev/null; then
-     as_ln_s=ln
-   else
--    as_ln_s='cp -p'
-+    as_ln_s='cp -pR'
-   fi
- else
--  as_ln_s='cp -p'
-+  as_ln_s='cp -pR'
- fi
- rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
- rmdir conf$$.dir 2>/dev/null
-@@ -507,28 +547,8 @@ else
-   as_mkdir_p=false
- fi
- 
--if test -x / >/dev/null 2>&1; then
--  as_test_x='test -x'
--else
--  if ls -dL / >/dev/null 2>&1; then
--    as_ls_L_option=L
--  else
--    as_ls_L_option=
--  fi
--  as_test_x='
--    eval sh -c '\''
--      if test -d "$1"; then
--	test -d "$1/.";
--      else
--	case $1 in #(
--	-*)set "./$1";;
--	esac;
--	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
--	???[sx]*):;;*)false;;esac;fi
--    '\'' sh
--  '
--fi
--as_executable_p=$as_test_x
-+as_test_x='test -x'
-+as_executable_p=as_fn_executable_p
- 
- # Sed expression to map a string onto a valid CPP name.
- as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-@@ -742,6 +762,7 @@ infodir
- docdir
- oldincludedir
- includedir
-+runstatedir
- localstatedir
- sharedstatedir
- sysconfdir
-@@ -841,6 +862,7 @@ datadir='${datarootdir}'
- sysconfdir='${prefix}/etc'
- sharedstatedir='${prefix}/com'
- localstatedir='${prefix}/var'
-+runstatedir='${localstatedir}/run'
- includedir='${prefix}/include'
- oldincludedir='/usr/include'
- docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
-@@ -1093,6 +1115,15 @@ do
-   | -silent | --silent | --silen | --sile | --sil)
-     silent=yes ;;
- 
-+  -runstatedir | --runstatedir | --runstatedi | --runstated \
-+  | --runstate | --runstat | --runsta | --runst | --runs \
-+  | --run | --ru | --r)
-+    ac_prev=runstatedir ;;
-+  -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
-+  | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
-+  | --run=* | --ru=* | --r=*)
-+    runstatedir=$ac_optarg ;;
-+
-   -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
-     ac_prev=sbindir ;;
-   -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
-@@ -1230,7 +1261,7 @@ fi
- for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
- 		datadir sysconfdir sharedstatedir localstatedir includedir \
- 		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
--		libdir localedir mandir
-+		libdir localedir mandir runstatedir
- do
-   eval ac_val=\$$ac_var
-   # Remove trailing slashes.
-@@ -1258,8 +1289,6 @@ target=$target_alias
- if test "x$host_alias" != x; then
-   if test "x$build_alias" = x; then
-     cross_compiling=maybe
--    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
--    If a cross compiler is detected then cross compile mode will be used" >&2
-   elif test "x$build_alias" != "x$host_alias"; then
-     cross_compiling=yes
-   fi
-@@ -1385,6 +1414,7 @@ Fine tuning of the installation director
-   --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
-   --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
-   --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
-+  --runstatedir=DIR       modifiable per-process data [LOCALSTATEDIR/run]
-   --libdir=DIR            object code libraries [EPREFIX/lib]
-   --includedir=DIR        C header files [PREFIX/include]
-   --oldincludedir=DIR     C header files for non-gcc [/usr/include]
-@@ -1548,9 +1578,9 @@ test -n "$ac_init_help" && exit $ac_stat
- if $ac_init_version; then
-   cat <<\_ACEOF
- fetchmail configure 6.3.26
--generated by GNU Autoconf 2.68
-+generated by GNU Autoconf 2.69
- 
--Copyright (C) 2010 Free Software Foundation, Inc.
-+Copyright (C) 2012 Free Software Foundation, Inc.
- This configure script is free software; the Free Software Foundation
- gives unlimited permission to copy, distribute and modify it.
- _ACEOF
-@@ -1827,7 +1857,7 @@ $as_echo "$ac_try_echo"; } >&5
- 	 test ! -s conftest.err
-        } && test -s conftest$ac_exeext && {
- 	 test "$cross_compiling" = yes ||
--	 $as_test_x conftest$ac_exeext
-+	 test -x conftest$ac_exeext
-        }; then :
-   ac_retval=0
- else
-@@ -2030,7 +2060,8 @@ int
- main ()
- {
- static int test_array [1 - 2 * !(($2) >= 0)];
--test_array [0] = 0
-+test_array [0] = 0;
-+return test_array [0];
- 
-   ;
-   return 0;
-@@ -2046,7 +2077,8 @@ int
- main ()
- {
- static int test_array [1 - 2 * !(($2) <= $ac_mid)];
--test_array [0] = 0
-+test_array [0] = 0;
-+return test_array [0];
- 
-   ;
-   return 0;
-@@ -2072,7 +2104,8 @@ int
- main ()
- {
- static int test_array [1 - 2 * !(($2) < 0)];
--test_array [0] = 0
-+test_array [0] = 0;
-+return test_array [0];
- 
-   ;
-   return 0;
-@@ -2088,7 +2121,8 @@ int
- main ()
- {
- static int test_array [1 - 2 * !(($2) >= $ac_mid)];
--test_array [0] = 0
-+test_array [0] = 0;
-+return test_array [0];
- 
-   ;
-   return 0;
-@@ -2122,7 +2156,8 @@ int
- main ()
- {
- static int test_array [1 - 2 * !(($2) <= $ac_mid)];
--test_array [0] = 0
-+test_array [0] = 0;
-+return test_array [0];
- 
-   ;
-   return 0;
-@@ -2195,7 +2230,7 @@ This file contains any messages produced
- running configure, to aid debugging if configure makes a mistake.
- 
- It was created by fetchmail $as_me 6.3.26, which was
--generated by GNU Autoconf 2.68.  Invocation command line was
-+generated by GNU Autoconf 2.69.  Invocation command line was
- 
-   $ $0 $@
- 
-@@ -2689,7 +2724,7 @@ case $as_dir/ in #((
-     # by default.
-     for ac_prog in ginstall scoinst install; do
-       for ac_exec_ext in '' $ac_executable_extensions; do
--	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-+	if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
- 	  if test $ac_prog = install &&
- 	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- 	    # AIX install.  It has an incompatible calling convention.
-@@ -2858,7 +2893,7 @@ do
-   IFS=$as_save_IFS
-   test -z "$as_dir" && as_dir=.
-     for ac_exec_ext in '' $ac_executable_extensions; do
--  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
-     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-     break 2
-@@ -2898,7 +2933,7 @@ do
-   IFS=$as_save_IFS
-   test -z "$as_dir" && as_dir=.
-     for ac_exec_ext in '' $ac_executable_extensions; do
--  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-     ac_cv_prog_ac_ct_STRIP="strip"
-     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-     break 2
-@@ -2949,7 +2984,7 @@ do
-   test -z "$as_dir" && as_dir=.
-     for ac_prog in mkdir gmkdir; do
- 	 for ac_exec_ext in '' $ac_executable_extensions; do
--	   { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
-+	   as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
- 	   case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
- 	     'mkdir (GNU coreutils) '* | \
- 	     'mkdir (coreutils) '* | \
-@@ -3002,7 +3037,7 @@ do
-   IFS=$as_save_IFS
-   test -z "$as_dir" && as_dir=.
-     for ac_exec_ext in '' $ac_executable_extensions; do
--  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-     ac_cv_prog_AWK="$ac_prog"
-     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-     break 2
-@@ -3295,7 +3330,7 @@ do
-   IFS=$as_save_IFS
-   test -z "$as_dir" && as_dir=.
-     for ac_exec_ext in '' $ac_executable_extensions; do
--  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-     ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext"
-     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-     break 2
-@@ -3466,7 +3501,7 @@ do
-   IFS=$as_save_IFS
-   test -z "$as_dir" && as_dir=.
-     for ac_exec_ext in '' $ac_executable_extensions; do
--  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-     ac_cv_prog_AWK="$ac_prog"
-     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-     break 2
-@@ -3512,7 +3547,7 @@ do
-   IFS=$as_save_IFS
-   test -z "$as_dir" && as_dir=.
-     for ac_exec_ext in '' $ac_executable_extensions; do
--  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-     ac_cv_prog_CC="${ac_tool_prefix}gcc"
-     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-     break 2
-@@ -3552,7 +3587,7 @@ do
-   IFS=$as_save_IFS
-   test -z "$as_dir" && as_dir=.
-     for ac_exec_ext in '' $ac_executable_extensions; do
--  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-     ac_cv_prog_ac_ct_CC="gcc"
-     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-     break 2
-@@ -3605,7 +3640,7 @@ do
-   IFS=$as_save_IFS
-   test -z "$as_dir" && as_dir=.
-     for ac_exec_ext in '' $ac_executable_extensions; do
--  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-     ac_cv_prog_CC="${ac_tool_prefix}cc"
-     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-     break 2
-@@ -3646,7 +3681,7 @@ do
-   IFS=$as_save_IFS
-   test -z "$as_dir" && as_dir=.
-     for ac_exec_ext in '' $ac_executable_extensions; do
--  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
-        ac_prog_rejected=yes
-        continue
-@@ -3704,7 +3739,7 @@ do
-   IFS=$as_save_IFS
-   test -z "$as_dir" && as_dir=.
-     for ac_exec_ext in '' $ac_executable_extensions; do
--  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-     break 2
-@@ -3748,7 +3783,7 @@ do
-   IFS=$as_save_IFS
-   test -z "$as_dir" && as_dir=.
-     for ac_exec_ext in '' $ac_executable_extensions; do
--  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-     ac_cv_prog_ac_ct_CC="$ac_prog"
-     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-     break 2
-@@ -4194,8 +4229,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_
- /* end confdefs.h.  */
- #include <stdarg.h>
- #include <stdio.h>
--#include <sys/types.h>
--#include <sys/stat.h>
-+struct stat;
- /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
- struct buf { int x; };
- FILE * (*rcsopen) (struct buf *, struct stat *, int);
-@@ -4751,7 +4785,7 @@ do
-   IFS=$as_save_IFS
-   test -z "$as_dir" && as_dir=.
-     for ac_exec_ext in '' $ac_executable_extensions; do
--  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
-     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-     break 2
-@@ -4791,7 +4825,7 @@ do
-   IFS=$as_save_IFS
-   test -z "$as_dir" && as_dir=.
-     for ac_exec_ext in '' $ac_executable_extensions; do
--  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-     ac_cv_prog_ac_ct_RANLIB="ranlib"
-     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-     break 2
-@@ -4859,7 +4893,7 @@ do
-     for ac_prog in grep ggrep; do
-     for ac_exec_ext in '' $ac_executable_extensions; do
-       ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
--      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
-+      as_fn_executable_p "$ac_path_GREP" || continue
- # Check for GNU ac_path_GREP and select it if it is found.
-   # Check for GNU $ac_path_GREP
- case `"$ac_path_GREP" --version 2>&1` in
-@@ -4925,7 +4959,7 @@ do
-     for ac_prog in egrep; do
-     for ac_exec_ext in '' $ac_executable_extensions; do
-       ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
--      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
-+      as_fn_executable_p "$ac_path_EGREP" || continue
- # Check for GNU ac_path_EGREP and select it if it is found.
-   # Check for GNU $ac_path_EGREP
- case `"$ac_path_EGREP" --version 2>&1` in
-@@ -5132,8 +5166,8 @@ else
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
- 
--#	  define __EXTENSIONS__ 1
--	  $ac_includes_default
-+#         define __EXTENSIONS__ 1
-+          $ac_includes_default
- int
- main ()
- {
-@@ -5513,11 +5547,11 @@ else
- int
- main ()
- {
--/* FIXME: Include the comments suggested by Paul. */
-+
- #ifndef __cplusplus
--  /* Ultrix mips cc rejects this.  */
-+  /* Ultrix mips cc rejects this sort of thing.  */
-   typedef int charset[2];
--  const charset cs;
-+  const charset cs = { 0, 0 };
-   /* SunOS 4.1.1 cc rejects this.  */
-   char const *const *pcpcc;
-   char **ppc;
-@@ -5534,8 +5568,9 @@ main ()
-   ++pcpcc;
-   ppc = (char**) pcpcc;
-   pcpcc = (char const *const *) ppc;
--  { /* SCO 3.2v4 cc rejects this.  */
--    char *t;
-+  { /* SCO 3.2v4 cc rejects this sort of thing.  */
-+    char tx;
-+    char *t = &tx;
-     char const *s = 0 ? (char *) 0 : (char const *) 0;
- 
-     *t++ = 0;
-@@ -5551,10 +5586,10 @@ main ()
-     iptr p = 0;
-     ++p;
-   }
--  { /* AIX XL C 1.02.0.0 rejects this saying
-+  { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying
-        "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
--    struct s { int j; const int *ap[3]; };
--    struct s *b; b->j = 5;
-+    struct s { int j; const int *ap[3]; } bx;
-+    struct s *b = &bx; b->j = 5;
-   }
-   { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
-     const int foo = 10;
-@@ -5600,7 +5635,7 @@ do
-   IFS=$as_save_IFS
-   test -z "$as_dir" && as_dir=.
-     for ac_exec_ext in '' $ac_executable_extensions; do
--  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-     ac_cv_prog_LEX="$ac_prog"
-     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-     break 2
-@@ -5632,7 +5667,8 @@ a { ECHO; }
- b { REJECT; }
- c { yymore (); }
- d { yyless (1); }
--e { yyless (input () != 0); }
-+e { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument.  */
-+    yyless ((input () != 0)); }
- f { unput (yytext[0]); }
- . { BEGIN INITIAL; }
- %%
-@@ -5792,7 +5828,7 @@ do
-   IFS=$as_save_IFS
-   test -z "$as_dir" && as_dir=.
-     for ac_exec_ext in '' $ac_executable_extensions; do
--  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-     ac_cv_prog_YACC="$ac_prog"
-     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-     break 2
-@@ -6044,7 +6080,7 @@ do
-   IFS=$as_save_IFS
-   test -z "$as_dir" && as_dir=.
-     for ac_exec_ext in '' $ac_executable_extensions; do
--  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-     ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
-     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-     break 2
-@@ -8548,7 +8584,7 @@ do
-   IFS=$as_save_IFS
-   test -z "$as_dir" && as_dir=.
-     for ac_exec_ext in '' $ac_executable_extensions; do
--  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-     ac_cv_path_procmail="$as_dir/$ac_word$ac_exec_ext"
-     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-     break 2
-@@ -8590,7 +8626,7 @@ do
-   IFS=$as_save_IFS
-   test -z "$as_dir" && as_dir=.
-     for ac_exec_ext in '' $ac_executable_extensions; do
--  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-     ac_cv_path_sendmail="$as_dir/$ac_word$ac_exec_ext"
-     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-     break 2
-@@ -8632,7 +8668,7 @@ do
-   IFS=$as_save_IFS
-   test -z "$as_dir" && as_dir=.
-     for ac_exec_ext in '' $ac_executable_extensions; do
--  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-     ac_cv_path_maildrop="$as_dir/$ac_word$ac_exec_ext"
-     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-     break 2
-@@ -10121,16 +10157,16 @@ $as_echo "$as_me: WARNING: Consider re-r
- fi
- 
- case "$LIBS" in *-lssl*)
--	ac_fn_c_check_decl "$LINENO" "SSLv2_client_method" "ac_cv_have_decl_SSLv2_client_method" "#include <openssl/ssl.h>
-+	ac_fn_c_check_decl "$LINENO" "SSLv3_client_method" "ac_cv_have_decl_SSLv3_client_method" "#include <openssl/ssl.h>
- "
--if test "x$ac_cv_have_decl_SSLv2_client_method" = xyes; then :
-+if test "x$ac_cv_have_decl_SSLv3_client_method" = xyes; then :
-   ac_have_decl=1
- else
-   ac_have_decl=0
- fi
- 
- cat >>confdefs.h <<_ACEOF
--#define HAVE_DECL_SSLV2_CLIENT_METHOD $ac_have_decl
-+#define HAVE_DECL_SSLV3_CLIENT_METHOD $ac_have_decl
- _ACEOF
- 
- 	;;
-@@ -11334,16 +11370,16 @@ if (echo >conf$$.file) 2>/dev/null; then
-     # ... but there are two gotchas:
-     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
--    # In both cases, we have to default to `cp -p'.
-+    # In both cases, we have to default to `cp -pR'.
-     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
--      as_ln_s='cp -p'
-+      as_ln_s='cp -pR'
-   elif ln conf$$.file conf$$ 2>/dev/null; then
-     as_ln_s=ln
-   else
--    as_ln_s='cp -p'
-+    as_ln_s='cp -pR'
-   fi
- else
--  as_ln_s='cp -p'
-+  as_ln_s='cp -pR'
- fi
- rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
- rmdir conf$$.dir 2>/dev/null
-@@ -11403,28 +11439,16 @@ else
-   as_mkdir_p=false
- fi
- 
--if test -x / >/dev/null 2>&1; then
--  as_test_x='test -x'
--else
--  if ls -dL / >/dev/null 2>&1; then
--    as_ls_L_option=L
--  else
--    as_ls_L_option=
--  fi
--  as_test_x='
--    eval sh -c '\''
--      if test -d "$1"; then
--	test -d "$1/.";
--      else
--	case $1 in #(
--	-*)set "./$1";;
--	esac;
--	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
--	???[sx]*):;;*)false;;esac;fi
--    '\'' sh
--  '
--fi
--as_executable_p=$as_test_x
-+
-+# as_fn_executable_p FILE
-+# -----------------------
-+# Test if FILE is an executable regular file.
-+as_fn_executable_p ()
-+{
-+  test -f "$1" && test -x "$1"
-+} # as_fn_executable_p
-+as_test_x='test -x'
-+as_executable_p=as_fn_executable_p
- 
- # Sed expression to map a string onto a valid CPP name.
- as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-@@ -11446,7 +11470,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_wri
- # values after options handling.
- ac_log="
- This file was extended by fetchmail $as_me 6.3.26, which was
--generated by GNU Autoconf 2.68.  Invocation command line was
-+generated by GNU Autoconf 2.69.  Invocation command line was
- 
-   CONFIG_FILES    = $CONFIG_FILES
-   CONFIG_HEADERS  = $CONFIG_HEADERS
-@@ -11512,10 +11536,10 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_writ
- ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
- ac_cs_version="\\
- fetchmail config.status 6.3.26
--configured by $0, generated by GNU Autoconf 2.68,
-+configured by $0, generated by GNU Autoconf 2.69,
-   with options \\"\$ac_cs_config\\"
- 
--Copyright (C) 2010 Free Software Foundation, Inc.
-+Copyright (C) 2012 Free Software Foundation, Inc.
- This config.status script is free software; the Free Software Foundation
- gives unlimited permission to copy, distribute and modify it."
- 
-@@ -11606,7 +11630,7 @@ fi
- _ACEOF
- cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- if \$ac_cs_recheck; then
--  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-+  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-   shift
-   \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
-   CONFIG_SHELL='$SHELL'
---- fetchmail-6.3.26.orig/configure.ac
-+++ fetchmail-6.3.26/configure.ac
-@@ -802,7 +802,7 @@ else
- fi
- 
- case "$LIBS" in *-lssl*)
--	AC_CHECK_DECLS([SSLv2_client_method],,,[#include <openssl/ssl.h>])
-+	AC_CHECK_DECLS([SSLv3_client_method],,,[#include <openssl/ssl.h>])
- 	;;
- esac
- 
---- fetchmail-6.3.26.orig/fetchmail-FAQ.html
-+++ fetchmail-6.3.26/fetchmail-FAQ.html
-@@ -667,8 +667,8 @@ because there is not currently a standar
- also uses this method, so the two will interoperate happily. They
- better, because this is how Craig gets his mail ;-)</p>
- 
--<p>Finally, you can use <a href="#K5">SSL</a> for complete
--end-to-end encryption if you have an SSL-enabled mailserver.</p>
-+<p>Finally, you can use <a href="#K5">SSL or TLS</a> for complete
-+end-to-end encryption if you have a TLS-enabled mailserver.</p>
- 
- <h2><a id="G11" name="G11">G11. Is any special configuration needed
- to use a dynamic IP address?</a></h2>
-@@ -2120,7 +2120,7 @@ SSL?</a></h2>
- 
- <p>You'll need to have the <a
- href="http://www.openssl.org/">OpenSSL</a> libraries installed, and they
--should at least be version 0.9.7.
-+should at least be version 0.9.8, with 1.0.1 preferred.
- Configure with --with-ssl. If you have the OpenSSL libraries
- installed in commonly-used default locations, this will
- suffice. If you have them installed in a non-default location,
-@@ -2130,7 +2130,7 @@ to --with-ssl after an equal sign.</p>
- <p>Fetchmail binaries built this way support <code>ssl</code>,
- <code>sslkey</code>, and <code>sslcert</code> options that control
- SSL encryption, and will automatically use <code>tls</code> if the
--server offers it. You will need to have an SSL-enabled mailserver to
-+server offers it. You will need to have an SSL/TLS-enabled mailserver to
- use these options. See the manual page for details and some words
- of care on the limited security provided.</p>
- 
-@@ -2155,13 +2155,14 @@ poll MYSERVER port 993 plugin "openssl s
-         protocol imap username MYUSERNAME password MYPASSWORD
- </pre>
- 
--<p>You should note that SSL is only secure against a "man-in-the-middle"
--attack if the client is able to verify that the peer's public key is the
--correct one, and has not been substituted by an attacker. fetchmail can do
--this in one of two ways: by verifying the SSL certificate, or by checking
--the fingerprint of the peer's public key.</p>
-+<p>You should note that SSL or TLS are only secure against a
-+"man-in-the-middle" attack if the client is able to verify that the
-+peer's public key is the correct one, and has not been substituted by an
-+attacker. fetchmail can do this in one of two ways: by verifying the SSL
-+certificate, or by checking the fingerprint of the peer's public
-+key.</p>
- 
--<p>There are three parts to SSL certificate verification: checking that the
-+<p>There are three parts to TLS certificate verification: checking that the
- domain name in the certificate matches the hostname you asked to connect to;
- checking that the certificate expiry date has not passed; and checking that
- the certificate has been signed by a known Certificate Authority (CA). This
-@@ -2227,8 +2228,12 @@ will automatically attempt TLS negotiati
- time.  This can however cause problems if the upstream didn't configure
- his certificates properly.</p>
- 
--<p>In order to prevent fetchmail from trying TLS (STLS, STARTTLS)
--negotiation, add this option:</p>
-+<p>In order to prevent fetchmail 6.4.0 and newer versions from trying
-+STLS or STARTTLS negotiation, add this option:</p>
-+<pre>sslproto ''</pre>
-+
-+<p>In order to prevent older fetchmail versions from trying TLS (STLS, STARTTLS)
-+negotiation where the above does not work, try this option:</p>
- 
- <pre>sslproto ssl23</pre>
- 
-@@ -2876,15 +2881,22 @@ need to say something like '<code>envelo
- 
- <pre>
- Received: from send103.yahoomail.com (send103.yahoomail.com [205.180.60.92])
--    by iserv.ttns.net (8.8.5/8.8.5) with SMTP id RAA10088
--    for &lt;ksturgeon@fbceg.org&gt;; Wed, 9 Sep 1998 17:01:59 -0700
-+    by iserv.example.net (8.8.5/8.8.5) with SMTP id RAA10088
-+    for &lt;ksturgeon@fbceg.example.org&gt;; Wed, 9 Sep 1998 17:01:59 -0700
- </pre>
- 
--<p>it checks to see if 'iserv.ttns.net' is a DNS alias of your
--mailserver before accepting 'ksturgeon@fbceg.org' as an envelope
-+<p>it checks to see if 'iserv.example.net' is a DNS alias of your
-+mailserver before accepting 'ksturgeon@fbceg.example.org' as an envelope
- address. This check might fail if your DNS were misconfigured, or
--if you were using 'no dns' and had failed to declare iserv.ttns.net
--as an alias of your server.</p>
-+if you were using 'no dns' and had failed to declare iserv.example.net
-+as an alias of your server. The typical hint is logging similar to:
-+<code>line rejected, iserv.example.net is not an alias of the mailserver</code>,
-+if you use fetchmail in verbose mode.</p>
-+
-+<p><strong>Workaround:</strong> You can specify the alias explicitly, with <code>aka
-+    <em>iserv.example.net</em></code> statements in the rcfile. Replace
-+<em>iserv.example.net</em> by the name you find in <strong>your</strong>
-+'by' part of the 'Received:' line.</p>
- 
- <h2><a id="M8" name="M8">M8. Users are getting multiple copies of
- messages.</a></h2>
-@@ -3237,6 +3249,8 @@ Hayes mode escape "+++".</p>
- <h2><a id="X8" name="X8">X8. A spurious ) is being appended to my
- messages.</a></h2>
- 
-+<p><em>Fetchmail 6.3.5 and newer releases are supposed to fix this.</em></p>
-+
- <p>Due to the problem described in <a href="#S2">S2</a>, the
- IMAP support in fetchmail cannot follow the IMAP protocol 100&nbsp;%.
- Most of the time it doesn't matter, but if you combine it with an
-@@ -3279,8 +3293,6 @@ it at the end of the message it forwards
- on, you'll get a message about actual != expected.</li>
- </ol>
- 
--<p>There is no fix for this.</p>
--
- <h2><a id="X9" name="X9">X9. Missing "Content-Transfer-Encoding" header
- 	with Domino IMAP</a></h2>
- 
---- fetchmail-6.3.26.orig/fetchmail.c
-+++ fetchmail-6.3.26/fetchmail.c
-@@ -54,6 +54,10 @@
- #define ENETUNREACH   128       /* Interactive doesn't know this */
- #endif /* ENETUNREACH */
- 
-+#ifdef SSL_ENABLE
-+#include <openssl/ssl.h>	/* for OPENSSL_NO_SSL2 and ..._SSL3 checks */
-+#endif
-+
- /* prototypes for internal functions */
- static int load_params(int, char **, int);
- static void dump_params (struct runctl *runp, struct query *, flag implicit);
-@@ -138,7 +142,7 @@ static void printcopyright(FILE *fp) {
- 		   "Copyright (C) 2004 Matthias Andree, Eric S. Raymond,\n"
- 		   "                   Robert M. Funk, Graham Wilson\n"
- 		   "Copyright (C) 2005 - 2012 Sunil Shetye\n"
--		   "Copyright (C) 2005 - 2013 Matthias Andree\n"
-+		   "Copyright (C) 2005 - 2015 Matthias Andree\n"
- 		   ));
- 	fprintf(fp, GT_("Fetchmail comes with ABSOLUTELY NO WARRANTY. This is free software, and you\n"
- 		   "are welcome to redistribute it under certain conditions. For details,\n"
-@@ -262,6 +266,9 @@ int main(int argc, char **argv)
- #endif /* ODMR_ENABLE */
- #ifdef SSL_ENABLE
- 	"+SSL"
-+#if (HAVE_DECL_SSLV3_CLIENT_METHOD + 0 == 0) || defined(OPENSSL_NO_SSL3)
-+	"-SSLv3"
-+#endif
- #endif
- #ifdef OPIE_ENABLE
- 	"+OPIE"
---- fetchmail-6.3.26.orig/fetchmail.h
-+++ fetchmail-6.3.26/fetchmail.h
-@@ -771,9 +771,9 @@ int servport(const char *service);
- int fm_getaddrinfo(const char *node, const char *serv, const struct addrinfo *hints, struct addrinfo **res);
- void fm_freeaddrinfo(struct addrinfo *ai);
- 
--/* prototypes from tls.c */
--int maybe_tls(struct query *ctl);
--int must_tls(struct query *ctl);
-+/* prototypes from starttls.c */
-+int maybe_starttls(struct query *ctl);
-+int must_starttls(struct query *ctl);
- 
- /* prototype from rfc822valid.c */
- int rfc822_valid_msgid(const unsigned char *);
---- fetchmail-6.3.26.orig/fetchmail.man
-+++ fetchmail-6.3.26/fetchmail.man
-@@ -412,23 +412,22 @@ from. The folder information is written
- .B \-\-ssl
- (Keyword: ssl)
- .br
--Causes the connection to the mail server to be encrypted
--via SSL.  Connect to the server using the specified base protocol over a
--connection secured by SSL. This option defeats opportunistic starttls
--negotiation. It is highly recommended to use \-\-sslproto 'SSL3'
--\-\-sslcertck to validate the certificates presented by the server and
--defeat the obsolete SSLv2 negotiation. More information is available in
--the \fIREADME.SSL\fP file that ships with fetchmail.
--.IP
--Note that fetchmail may still try to negotiate SSL through starttls even
--if this option is omitted. You can use the \-\-sslproto option to defeat
--this behavior or tell fetchmail to negotiate a particular SSL protocol.
-+Causes the connection to the mail server to be encrypted via SSL, by
-+negotiating SSL directly after connecting (SSL-wrapped mode).  It is
-+highly recommended to use \-\-sslcertck to validate the certificates
-+presented by the server.  Please see the description of \-\-sslproto
-+below!  More information is available in the \fIREADME.SSL\fP file that
-+ships with fetchmail.
-+.IP
-+Note that even if this option is omitted, fetchmail may still negotiate
-+SSL in-band for POP3 or IMAP, through the STLS or STARTTLS feature.  You
-+can use the \-\-sslproto option to modify that behavior.
- .IP
- If no port is specified, the connection is attempted to the well known
- port of the SSL version of the base protocol.  This is generally a
- different port than the port used by the base protocol.  For IMAP, this
- is port 143 for the clear protocol and port 993 for the SSL secured
--protocol, for POP3, it is port 110 for the clear text and port 995 for
-+protocol; for POP3, it is port 110 for the clear text and port 995 for
- the encrypted variant.
- .IP
- If your system lacks the corresponding entries from /etc/services, see
-@@ -470,39 +469,73 @@ cause some complications in daemon mode.
- .IP
- Also see \-\-sslcert above.
- .TP
--.B \-\-sslproto <name>
--(Keyword: sslproto)
-+.B \-\-sslproto <value>
-+(Keyword: sslproto, NOTE: semantic changes since v6.4.0)
- .br
--Forces an SSL/TLS protocol. Possible values are \fB''\fP,
--\&'\fBSSL2\fP' (not supported on all systems),
--\&'\fBSSL23\fP', (use of these two values is discouraged
--and should only be used as a last resort) \&'\fBSSL3\fP', and
--\&'\fBTLS1\fP'.  The default behaviour if this option is unset is: for
--connections without \-\-ssl, use \&'\fBTLS1\fP' so that fetchmail will
--opportunistically try STARTTLS negotiation with TLS1. You can configure
--this option explicitly if the default handshake (TLS1 if \-\-ssl is not
--used) does not work for your server.
--.IP
--Use this option with '\fBTLS1\fP' value to enforce a STARTTLS
--connection. In this mode, it is highly recommended to also use
--\-\-sslcertck (see below).  Note that this will then cause fetchmail
--v6.3.19 to force STARTTLS negotiation even if it is not advertised by
--the server.
--.IP
--To defeat opportunistic TLSv1 negotiation when the server advertises
--STARTTLS or STLS, and use a cleartext connection use \fB''\fP.  This
--option, even if the argument is the empty string, will also suppress the
--diagnostic 'SERVER: opportunistic upgrade to TLS.' message in verbose
--mode. The default is to try appropriate protocols depending on context.
-+This option has a dual use, out of historic fetchmail behaviour. It
-+controls both the SSL/TLS protocol version and, if \-\-ssl is not
-+specified, the STARTTLS behaviour (upgrading the protocol to an SSL or
-+TLS connection in-band). Some other options may however make TLS
-+mandatory.
-+.PP
-+Only if this option and \-\-ssl are both missing for a poll, there will
-+be opportunistic TLS for POP3 and IMAP, where fetchmail will attempt to
-+upgrade to TLSv1 or newer.
-+.PP
-+Recognized values for \-\-sslproto are given below. You should normally
-+chose one of the auto-negotiating options, i. e. '\fBauto\fP' or one of
-+the options ending in a plus (\fB+\fP) character. Note that depending
-+on OpenSSL library version and configuration, some options cause
-+run-time errors because the requested SSL or TLS versions are not
-+supported by the particular installed OpenSSL library.
-+.RS
-+.IP "\fB''\fP, the empty string"
-+Disable STARTTLS. If \-\-ssl is given for the same server, log an error
-+and pretend that '\fBauto\fP' had been used instead.
-+.IP '\fBauto\fP'
-+(default). Since v6.4.0. Require TLS. Auto-negotiate TLSv1 or newer, disable SSLv3 downgrade.
-+(fetchmail 6.3.26 and older have auto-negotiated all protocols that
-+their OpenSSL library supported, including the broken SSLv3).
-+.IP "\&'\fBSSL23\fP'
-+see '\fBauto\fP'.
-+.IP \&'\fBSSL3\fP'
-+Require SSLv3 exactly. SSLv3 is broken, not supported on all systems, avoid it
-+if possible.  This will make fetchmail negotiate SSLv3 only, and is the
-+only way besides '\fBSSL3+\fP' to have fetchmail 6.4.0 or newer permit SSLv3.
-+.IP \&'\fBSSL3+\fP'
-+same as '\fBauto\fP', but permit SSLv3 as well. This is the only way
-+besides '\fBSSL3\fP' to have fetchmail 6.4.0 or newer permit SSLv3.
-+.IP \&'\fBTLS1\fP'
-+Require TLSv1. This does not negotiate TLSv1.1 or newer, and is
-+discouraged. Replace by TLS1+ unless the latter chokes your server.
-+.IP \&'\fBTLS1+\fP'
-+Since v6.4.0. See 'fBauto\fP'.
-+.IP \&'\fBTLS1.1\fP'
-+Since v6.4.0. Require TLS v1.1 exactly.
-+.IP \&'\fBTLS1.1+\fP'
-+Since v6.4.0. Require TLS. Auto-negotiate TLSv1.1 or newer.
-+.IP \&'\fBTLS1.2\fP'
-+Since v6.4.0. Require TLS v1.2 exactly.
-+.IP '\fBTLS1.2+\fP'
-+Since v6.4.0. Require TLS. Auto-negotiate TLSv1.2 or newer.
-+.IP "Unrecognized parameters"
-+are treated the same as '\fBauto\fP'.
-+.RE
-+.IP
-+NOTE: you should hardly ever need to use anything other than '' (to
-+force an unencrypted connection) or 'auto' (to enforce TLS).
- .TP
- .B \-\-sslcertck
- (Keyword: sslcertck)
- .br
--Causes fetchmail to strictly check the server certificate against a set of
--local trusted certificates (see the \fBsslcertfile\fP and \fBsslcertpath\fP
--options). If the server certificate cannot be obtained or is not signed by one
--of the trusted ones (directly or indirectly), the SSL connection will fail,
--regardless of the \fBsslfingerprint\fP option.
-+Causes fetchmail to require that SSL/TLS be used and disconnect if it
-+can not successfully negotiate SSL or TLS, or if it cannot successfully
-+verify and validate the certificate and follow it to a trust anchor (or
-+trusted root certificate). The trust anchors are given as a set of local
-+trusted certificates (see the \fBsslcertfile\fP and \fBsslcertpath\fP
-+options). If the server certificate cannot be obtained or is not signed
-+by one of the trusted ones (directly or indirectly), fetchmail will
-+disconnect, regardless of the \fBsslfingerprint\fP option.
- .IP
- Note that CRL (certificate revocation lists) are only supported in
- OpenSSL 0.9.7 and newer! Your system clock should also be reasonably
-@@ -1202,31 +1235,33 @@ capability response. Specify a user opti
- username and the part to the right as the NTLM domain.
- 
- .SS Secure Socket Layers (SSL) and Transport Layer Security (TLS)
-+.PP All retrieval protocols can use SSL or TLS wrapping for the
-+transport. Additionally, POP3 and IMAP retrival can also negotiate
-+SSL/TLS by means of STARTTLS (or STLS).
- .PP
- Note that fetchmail currently uses the OpenSSL library, which is
- severely underdocumented, so failures may occur just because the
- programmers are not aware of OpenSSL's requirement of the day.
- For instance, since v6.3.16, fetchmail calls
- OpenSSL_add_all_algorithms(), which is necessary to support certificates
--using SHA256 on OpenSSL 0.9.8 -- this information is deeply hidden in the
--documentation and not at all obvious.  Please do not hesitate to report
--subtle SSL failures.
--.PP
--You can access SSL encrypted services by specifying the \-\-ssl option.
--You can also do this using the "ssl" user option in the .fetchmailrc
--file. With SSL encryption enabled, queries are initiated over a
--connection after negotiating an SSL session, and the connection fails if
--SSL cannot be negotiated.  Some services, such as POP3 and IMAP, have
-+using SHA256 on OpenSSL 0.9.8 -- this information is deeply hidden in
-+the documentation and not at all obvious.  Please do not hesitate to
-+report subtle SSL failures.
-+.PP
-+You can access SSL encrypted services by specifying the options starting
-+with \-\-ssl, such as \-\-ssl, \-\-sslproto, \-\-sslcertck, and others.
-+You can also do this using the corresponding user options in the .fetchmailrc
-+file.  Some services, such as POP3 and IMAP, have
- different well known ports defined for the SSL encrypted services.  The
- encrypted ports will be selected automatically when SSL is enabled and
--no explicit port is specified. The \-\-sslproto 'SSL3' option should be
--used to select the SSLv3 protocol (default if unset: v2 or v3).  Also,
--the \-\-sslcertck command line or sslcertck run control file option
--should be used to force strict certificate checking - see below.
-+no explicit port is specified.   Also, the \-\-sslcertck command line or
-+sslcertck run control file option should be used to force strict
-+certificate checking - see below.
- .PP
- If SSL is not configured, fetchmail will usually opportunistically try to use
--STARTTLS. STARTTLS can be enforced by using \-\-sslproto "TLS1". TLS
--connections use the same port as the unencrypted version of the
-+STARTTLS. STARTTLS can be enforced by using \-\-sslproto\~auto and
-+defeated by using \-\-sslproto\~''.
-+TLS connections use the same port as the unencrypted version of the
- protocol and negotiate TLS via special command. The \-\-sslcertck
- command line or sslcertck run control file option should be used to
- force strict certificate checking - see below.
---- fetchmail-6.3.26.orig/imap.c
-+++ fetchmail-6.3.26/imap.c
-@@ -405,6 +405,8 @@ static int imap_getauth(int sock, struct
- /* apply for connection authorization */
- {
-     int ok = 0;
-+    char *commonname;
-+
-     (void)greeting;
- 
-     /*
-@@ -429,25 +431,21 @@ static int imap_getauth(int sock, struct
-         return(PS_SUCCESS);
-     }
- 
--#ifdef SSL_ENABLE
--    if (maybe_tls(ctl)) {
--	char *commonname;
--
--	commonname = ctl->server.pollname;
--	if (ctl->server.via)
--	    commonname = ctl->server.via;
--	if (ctl->sslcommonname)
--	    commonname = ctl->sslcommonname;
-+    commonname = ctl->server.pollname;
-+    if (ctl->server.via)
-+	commonname = ctl->server.via;
-+    if (ctl->sslcommonname)
-+	commonname = ctl->sslcommonname;
- 
--	if (strstr(capabilities, "STARTTLS")
--		|| must_tls(ctl)) /* if TLS is mandatory, ignore capabilities */
-+#ifdef SSL_ENABLE
-+    if (maybe_starttls(ctl)) {
-+	if ((strstr(capabilities, "STARTTLS") && maybe_starttls(ctl))
-+		|| must_starttls(ctl)) /* if TLS is mandatory, ignore capabilities */
- 	{
--	    /* Use "tls1" rather than ctl->sslproto because tls1 is the only
--	     * protocol that will work with STARTTLS.  Don't need to worry
--	     * whether TLS is mandatory or opportunistic unless SSLOpen() fails
--	     * (see below). */
-+	    /* Don't need to worry whether TLS is mandatory or
-+	     * opportunistic unless SSLOpen() fails (see below). */
- 	    if (gen_transact(sock, "STARTTLS") == PS_SUCCESS
--		    && (set_timeout(mytimeout), SSLOpen(sock, ctl->sslcert, ctl->sslkey, "tls1", ctl->sslcertck,
-+		    && (set_timeout(mytimeout), SSLOpen(sock, ctl->sslcert, ctl->sslkey, ctl->sslproto, ctl->sslcertck,
- 			ctl->sslcertfile, ctl->sslcertpath, ctl->sslfingerprint, commonname,
- 			ctl->server.pollname, &ctl->remotename)) != -1)
- 	    {
-@@ -470,7 +468,7 @@ static int imap_getauth(int sock, struct
- 		{
- 		    report(stdout, GT_("%s: upgrade to TLS succeeded.\n"), commonname);
- 		}
--	    } else if (must_tls(ctl)) {
-+	    } else if (must_starttls(ctl)) {
- 		/* Config required TLS but we couldn't guarantee it, so we must
- 		 * stop. */
- 		set_timeout(0);
-@@ -492,6 +490,10 @@ static int imap_getauth(int sock, struct
- 		/* Usable.  Proceed with authenticating insecurely. */
- 	    }
- 	}
-+    } else {
-+	if (strstr(capabilities, "STARTTLS") && outlevel >= O_VERBOSE) {
-+	    report(stdout, GT_("%s: WARNING: server offered STARTTLS but sslproto '' given.\n"), commonname);
-+	}
-     }
- #endif /* SSL_ENABLE */
- 
---- fetchmail-6.3.26.orig/po/Makevars
-+++ fetchmail-6.3.26/po/Makevars
-@@ -46,3 +46,15 @@ MSGID_BUGS_ADDRESS = fetchmail-devel@lis
- # This is the list of locale categories, beyond LC_MESSAGES, for which the
- # message catalogs shall be used.  It is usually empty.
- EXTRA_LOCALE_CATEGORIES =
-+
-+# This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt'
-+# context.  Possible values are "yes" and "no".  Set this to yes if the
-+# package uses functions taking also a message context, like pgettext(), or
-+# if in $(XGETTEXT_OPTIONS) you define keywords with a context argument.
-+USE_MSGCTXT = no
-+
-+# These options get passed to msgmerge.
-+# Useful options are in particular:
-+#   --previous            to keep previous msgids of translated messages,
-+#   --quiet               to reduce the verbosity.
-+MSGMERGE_OPTIONS =
---- fetchmail-6.3.26.orig/pop3.c
-+++ fetchmail-6.3.26/pop3.c
-@@ -281,6 +281,7 @@ static int pop3_getauth(int sock, struct
- #endif /* OPIE_ENABLE */
- #ifdef SSL_ENABLE
-     flag connection_may_have_tls_errors = FALSE;
-+    char *commonname;
- #endif /* SSL_ENABLE */
- 
-     done_capa = FALSE;
-@@ -393,7 +394,7 @@ static int pop3_getauth(int sock, struct
- 		(ctl->server.authenticate == A_KERBEROS_V5) ||
- 		(ctl->server.authenticate == A_OTP) ||
- 		(ctl->server.authenticate == A_CRAM_MD5) ||
--		maybe_tls(ctl))
-+		maybe_starttls(ctl))
- 	{
- 	    if ((ok = capa_probe(sock)) != PS_SUCCESS)
- 		/* we are in STAGE_GETAUTH => failure is PS_AUTHFAIL! */
-@@ -406,12 +407,12 @@ static int pop3_getauth(int sock, struct
- 		    (ok == PS_SOCKET && !ctl->wehaveauthed))
- 		{
- #ifdef SSL_ENABLE
--		    if (must_tls(ctl)) {
-+		    if (must_starttls(ctl)) {
- 			/* fail with mandatory STLS without repoll */
- 			report(stderr, GT_("TLS is mandatory for this session, but server refused CAPA command.\n"));
- 			report(stderr, GT_("The CAPA command is however necessary for TLS.\n"));
- 			return ok;
--		    } else if (maybe_tls(ctl)) {
-+		    } else if (maybe_starttls(ctl)) {
- 			/* defeat opportunistic STLS */
- 			xfree(ctl->sslproto);
- 			ctl->sslproto = xstrdup("");
-@@ -431,24 +432,19 @@ static int pop3_getauth(int sock, struct
- 	}
- 
- #ifdef SSL_ENABLE
--	if (maybe_tls(ctl)) {
--	    char *commonname;
-+	commonname = ctl->server.pollname;
-+	if (ctl->server.via)
-+	    commonname = ctl->server.via;
-+	if (ctl->sslcommonname)
-+	    commonname = ctl->sslcommonname;
- 
--	    commonname = ctl->server.pollname;
--	    if (ctl->server.via)
--		commonname = ctl->server.via;
--	    if (ctl->sslcommonname)
--		commonname = ctl->sslcommonname;
--
--	   if (has_stls
--		   || must_tls(ctl)) /* if TLS is mandatory, ignore capabilities */
-+	if (maybe_starttls(ctl)) {
-+	   if (has_stls || must_starttls(ctl)) /* if TLS is mandatory, ignore capabilities */
- 	   {
--	       /* Use "tls1" rather than ctl->sslproto because tls1 is the only
--		* protocol that will work with STARTTLS.  Don't need to worry
--		* whether TLS is mandatory or opportunistic unless SSLOpen() fails
--		* (see below). */
-+	       /* Don't need to worry whether TLS is mandatory or
-+		* opportunistic unless SSLOpen() fails (see below). */
- 	       if (gen_transact(sock, "STLS") == PS_SUCCESS
--		       && (set_timeout(mytimeout), SSLOpen(sock, ctl->sslcert, ctl->sslkey, "tls1", ctl->sslcertck,
-+		       && (set_timeout(mytimeout), SSLOpen(sock, ctl->sslcert, ctl->sslkey, ctl->sslproto, ctl->sslcertck,
- 			   ctl->sslcertfile, ctl->sslcertpath, ctl->sslfingerprint, commonname,
- 			   ctl->server.pollname, &ctl->remotename)) != -1)
- 	       {
-@@ -475,7 +471,7 @@ static int pop3_getauth(int sock, struct
- 		   {
- 		       report(stdout, GT_("%s: upgrade to TLS succeeded.\n"), commonname);
- 		   }
--	       } else if (must_tls(ctl)) {
-+	       } else if (must_starttls(ctl)) {
- 		   /* Config required TLS but we couldn't guarantee it, so we must
- 		    * stop. */
- 		   set_timeout(0);
-@@ -495,7 +491,11 @@ static int pop3_getauth(int sock, struct
- 		   }
- 	       }
- 	   }
--	} /* maybe_tls() */
-+	} else { /* maybe_starttls() */
-+	    if (has_stls && outlevel >= O_VERBOSE) {
-+		report(stdout, GT_("%s: WARNING: server offered STLS, but sslproto '' given.\n"), commonname);
-+	    }
-+	} /* maybe_starttls() */
- #endif /* SSL_ENABLE */
- 
- 	/*
---- fetchmail-6.3.26.orig/socket.c
-+++ fetchmail-6.3.26/socket.c
-@@ -876,7 +876,9 @@ int SSLOpen(int sock, char *mycert, char
- {
-         struct stat randstat;
-         int i;
-+	int avoid_ssl_versions = SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3;
- 	long sslopts = SSL_OP_ALL;
-+	int ssle_connect = 0;
- 
- 	SSL_load_error_strings();
- 	SSL_library_init();
-@@ -906,25 +908,57 @@ int SSLOpen(int sock, char *mycert, char
- 	/* Make sure a connection referring to an older context is not left */
- 	_ssl_context[sock] = NULL;
- 	if(myproto) {
--		if(!strcasecmp("ssl2",myproto)) {
--#if HAVE_DECL_SSLV2_CLIENT_METHOD + 0 > 0
--			_ctx[sock] = SSL_CTX_new(SSLv2_client_method());
-+		if(!strcasecmp("ssl3",myproto)) {
-+#if (HAVE_DECL_SSLV3_CLIENT_METHOD > 0) && (0 == OPENSSL_NO_SSL3 + 0)
-+			_ctx[sock] = SSL_CTX_new(SSLv3_client_method());
-+			avoid_ssl_versions &= ~SSL_OP_NO_SSLv3;
- #else
--			report(stderr, GT_("Your operating system does not support SSLv2.\n"));
-+			report(stderr, GT_("Your OpenSSL version does not support SSLv3.\n"));
- 			return -1;
- #endif
--		} else if(!strcasecmp("ssl3",myproto)) {
--			_ctx[sock] = SSL_CTX_new(SSLv3_client_method());
-+		} else if(!strcasecmp("ssl3+",myproto)) {
-+			avoid_ssl_versions &= ~SSL_OP_NO_SSLv3;
-+			myproto = NULL;
- 		} else if(!strcasecmp("tls1",myproto)) {
- 			_ctx[sock] = SSL_CTX_new(TLSv1_client_method());
--		} else if (!strcasecmp("ssl23",myproto)) {
-+		} else if(!strcasecmp("tls1+",myproto)) {
-+			myproto = NULL;
-+#if defined(TLS1_1_VERSION) && TLS_MAX_VERSION >= TLS1_1_VERSION
-+		} else if(!strcasecmp("tls1.1",myproto)) {
-+			_ctx[sock] = SSL_CTX_new(TLSv1_1_client_method());
-+		} else if(!strcasecmp("tls1.1+",myproto)) {
-+			myproto = NULL;
-+			avoid_ssl_versions |= SSL_OP_NO_TLSv1;
-+#else
-+		} else if(!strcasecmp("tls1.1",myproto) || !strcasecmp("tls1.1+", myproto)) {
-+			report(stderr, GT_("Your OpenSSL version does not support TLS v1.1.\n"));
-+			return -1;
-+#endif
-+#if defined(TLS1_2_VERSION) && TLS_MAX_VERSION >= TLS1_2_VERSION
-+		} else if(!strcasecmp("tls1.2",myproto)) {
-+			_ctx[sock] = SSL_CTX_new(TLSv1_2_client_method());
-+		} else if(!strcasecmp("tls1.2+",myproto)) {
-+			myproto = NULL;
-+			avoid_ssl_versions |= SSL_OP_NO_TLSv1;
-+			avoid_ssl_versions |= SSL_OP_NO_TLSv1_1;
-+#else
-+		} else if(!strcasecmp("tls1.2",myproto) || !strcasecmp("tls1.2+", myproto)) {
-+			report(stderr, GT_("Your OpenSSL version does not support TLS v1.2.\n"));
-+			return -1;
-+#endif
-+		} else if (!strcasecmp("ssl23",myproto) || 0 == strcasecmp("auto",myproto)) {
- 			myproto = NULL;
- 		} else {
--			report(stderr,GT_("Invalid SSL protocol '%s' specified, using default (SSLv23).\n"), myproto);
-+			report(stderr,GT_("Invalid SSL protocol '%s' specified, using default autoselect (SSL23).\n"), myproto);
- 			myproto = NULL;
- 		}
- 	}
--	if(!myproto) {
-+	// do not combine into an else { } as myproto may be nulled
-+	// above!
-+	if (!myproto) {
-+		// SSLv23 is a misnomer and will in fact use the best
-+		// available protocol, subject to SSL_OP_NO*
-+		// constraints.
- 		_ctx[sock] = SSL_CTX_new(SSLv23_client_method());
- 	}
- 	if(_ctx[sock] == NULL) {
-@@ -938,7 +972,7 @@ int SSLOpen(int sock, char *mycert, char
- 		sslopts &= ~ SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS;
- 	}
- 
--	SSL_CTX_set_options(_ctx[sock], sslopts);
-+	SSL_CTX_set_options(_ctx[sock], sslopts | avoid_ssl_versions);
- 
- 	if (certck) {
- 		SSL_CTX_set_verify(_ctx[sock], SSL_VERIFY_PEER, SSL_ck_verify_callback);
-@@ -1008,8 +1042,18 @@ int SSLOpen(int sock, char *mycert, char
- 	}
- 
- 	if (SSL_set_fd(_ssl_context[sock], sock) == 0 
--	    || SSL_connect(_ssl_context[sock]) < 1) {
-+	    || (ssle_connect = SSL_connect(_ssl_context[sock])) < 1) {
-+		int e = errno;
-+		unsigned long ssle_err_from_queue = ERR_peek_error();
-+		unsigned long ssle_err_from_get_error = SSL_get_error(_ssl_context[sock], ssle_connect);
- 		ERR_print_errors_fp(stderr);
-+		if (SSL_ERROR_SYSCALL == ssle_err_from_get_error && 0 == ssle_err_from_queue) {
-+		    if (0 == ssle_connect) {
-+			report(stderr, GT_("Server shut down connection prematurely during SSL_connect().\n"));
-+		    } else if (ssle_connect < 0) {
-+			report(stderr, GT_("System error during SSL_connect(): %s\n"), strerror(e));
-+		    }
-+		}
- 		SSL_free( _ssl_context[sock] );
- 		_ssl_context[sock] = NULL;
- 		SSL_CTX_free(_ctx[sock]);
-@@ -1017,6 +1061,24 @@ int SSLOpen(int sock, char *mycert, char
- 		return(-1);
- 	}
- 
-+	if (outlevel >= O_VERBOSE) {
-+	    SSL_CIPHER const *sc;
-+	    int bitsmax, bitsused;
-+
-+	    const char *ver;
-+
-+	    ver = SSL_get_version(_ssl_context[sock]);
-+
-+	    sc = SSL_get_current_cipher(_ssl_context[sock]);
-+	    if (!sc) {
-+		report (stderr, GT_("Cannot obtain current SSL/TLS cipher - no session established?\n"));
-+	    } else {
-+		bitsused = SSL_CIPHER_get_bits(sc, &bitsmax);
-+		report(stdout, GT_("SSL/TLS: using protocol %s, cipher %s, %d/%d secret/processed bits\n"),
-+			ver, SSL_CIPHER_get_name(sc), bitsused, bitsmax);
-+	    }
-+	}
-+
- 	/* Paranoia: was the callback not called as we expected? */
- 	if (!_depth0ck) {
- 		report(stderr, GT_("Certificate/fingerprint verification was somehow skipped!\n"));
---- /dev/null
-+++ fetchmail-6.3.26/starttls.c
-@@ -0,0 +1,37 @@
-+/** \file tls.c - collect common TLS functionality 
-+ * \author Matthias Andree
-+ * \date 2006
-+ */
-+
-+#include "fetchmail.h"
-+
-+#include <string.h>
-+
-+#ifdef HAVE_STRINGS_H
-+#include <strings.h>
-+#endif
-+
-+/** return true if user allowed opportunistic STARTTLS/STLS */
-+int maybe_starttls(struct query *ctl) {
-+#ifdef SSL_ENABLE
-+         /* opportunistic  or forced TLS */
-+    return (!ctl->sslproto || strlen(ctl->sslproto))
-+	&& !ctl->use_ssl;
-+#else
-+    (void)ctl;
-+    return 0;
-+#endif
-+}
-+
-+/** return true if user requires STARTTLS/STLS, note though that this
-+ * code must always use a logical AND with maybe_tls(). */
-+int must_starttls(struct query *ctl) {
-+#ifdef SSL_ENABLE
-+    return maybe_starttls(ctl)
-+	&& (ctl->sslfingerprint || ctl->sslcertck
-+		|| (ctl->sslproto && !strcasecmp(ctl->sslproto, "tls1")));
-+#else
-+    (void)ctl;
-+    return 0;
-+#endif
-+}
diff --git a/fetchmail.changes b/fetchmail.changes
index 0481158..5f2691d 100644
--- a/fetchmail.changes
+++ b/fetchmail.changes
@@ -1,3 +1,139 @@
+-------------------------------------------------------------------
+Fri Oct  4 12:41:35 UTC 2019 - Pedro Monreal Gonzalez <pmonrealgonzalez@suse.com>
+
+- Update to 6.4.1 [bsc#1152964]
+  ## REGRESSION FIXES:
+  * The bug fix Debian Bug#941129 was incomplete and caused
+    - a regression in the default file locations, so that fetchmail was
+      no longer able to find its configuration files in some situations.
+    - a regression under _FORTIFY_SOURCE where PATH_MAX > minimal _POSIX_PATH_MAX.
+
+- Update to 6.4.0
+  ## SECURITY FIXES THAT AFFECT BEHAVIOUR AND MAY REQUIRE RECONFIGURATION
+  * Fetchmail no longer supports SSLv2.
+  * Fetchmail no longer attempts to negotiate SSLv3 by default,
+    even with --sslproto ssl23. Fetchmail can now use SSLv3, or TLSv1.1 or a newer
+    TLS version, with STLS/STARTTLS (it would previously force TLSv1.0 with
+    STARTTLS).  If the OpenSSL version used at build and run-time supports these
+    versions, --sslproto ssl3 and --sslproto ssl3+ can be used to re-enable SSLv3.
+    Doing so is discouraged because the SSLv3 protocol is broken.
+    While this change is supposed to be compatible with common configurations,
+    users may have to and are advised to change all explicit --sslproto ssl2
+    (change to newer protocols required), --sslproto ssl3, --sslproto tls1 to
+    --sslproto auto, so that they can benefit from TLSv1.1 and TLSv1.2 where
+    supported by the server.
+    The --sslproto option now understands the values auto, ssl3+, tls1+, tls1.1,
+    tls1.1+, tls1.2, tls1.2+, tls1.3, tls1.3+ (case insensitively), see CHANGES
+    below for details.
+  * Fetchmail defaults to --sslcertck behaviour. A new option --nosslcertck to
+    override this has been added, but may be removed in future fetchmail versions
+    in favour of another configuration option that makes the insecurity in using
+    this option clearer.
+  ## SECURITY FIXES
+  * Fetchmail prevents buffer overruns in GSSAPI authentication with user names
+    beyond c. 6000 characters in length. Reported by Greg Hudson.
+  ## CHANGED REQUIREMENTS
+  * fetchmail 6.4.0 is written in C99 and requires a SUSv3 (Single Unix
+    Specification v3, a superset of POSIX.1-2001 aka. IEEE Std 1003.1-2001 with
+    XSI extension) compliant system. For now, a C89 compiler should also work
+    if the system is SUSv3 compliant.
+    In particular, older fetchmail versions had workaround for several functions
+    standardized in the Single Unix Specification v3, these have been removed.
+    The trio/ library has been removed from the distribution.
+  ## CHANGES
+  * fetchmail 6.3.X is unsupported.
+  * fetchmail now configures OpenSSL support by default.
+  * fetchmail now requires OpenSSL v1.0.2 or newer.
+  * Fetchmail now supports --sslproto auto and --sslproto tls1+ (same as ssl23).
+  * --sslproto tls1.1+, tls1.2+, and tls1.3+ are now supported for
+    auto-negotiation with a minimum specified TLS protocol version, and --sslproto
+    tls1.1, --sslproto tls1.2 and --sslproto tls1.3 to force the specified TLS
+    protocol version. Note that tls1.3 requires OpenSSL v1.1.1 or newer.
+  * Fetchmail now detects if the server hangs up prematurely during SSL_connect()
+    and reports this condition as such, and not just as SSL connection failure.
+    (OpenSSL 1.0.2 reported incompatible with pop3.live.com by Jerry Seibert).
+  * A foreground fetchmail can now accept a few more options while another copy is
+    running in the background.
+  * fetchmail now handles POP3 --keep UID lists more efficiently, by using Rainer
+    Weikusat's P-Tree implementation. This reduces the complexity for handling
+    a large UIDL from O(n^2) to O(n log n) and becomes noticably faster with
+    thousands of kept messages. (IMAP does not currently track UIDs and is unaffected.)
+    At the same time, the UIDL emulation code for deficient servers has been
+    removed. It never worked really well.  Servers that do not implement the
+    optional UIDL command only work with --fetchall option set, which in itself is
+    incompatible with the --keep option (it would cause message duplication).
+  * fetchmail, when setting up TLS connections, now uses SSL_set_tlsext_host_name()
+    to set up the SNI (Server Name Indication). Some servers (for instance
+    googlemail) require SNI when using newer SSL protocols.
+  * Fetchmail now sets the expected hostname through OpenSSL 1.0.2's new 
+    X509_VERIFY_PARAM_set1_host() function to enable OpenSSL's native certificate
+    verification features.
+  * fetchmail will drop the connection when fetching with IMAP and receiving an
+    unexpected untagged "* BYE" response, to work around certain faulty servers.
+  * The FETCHMAIL_POP3_FORCE_RETR environment variable is now documented,
+    it forces fetchmail, when talking POP3, to always use the RETR command,
+    even if it would otherwise use the TOP command.
+  * Fetchmail's configure stage will try to query pkg-config or pkgconf for libssl
+    and libcrypto, in case other system use .pc files to document specific library dependencies.
+  * The gethostbyname() API calls and compatibility functions have been removed.
+  * These translations are shipped but not installed by default because
+    they have less than 500 translated messages out of 714: el fi gl pt_BR sk tr
+    -> Greek, Finnish, Galician, Brazilian Portuguese, Slovak, Turkish.
+  * Fetchmail now refuses delivery if the MDA option contains single-quoted expansions.
+  ## FIXES
+  * Do not translate header tags such as "Subject:".
+  * Convert most links from berlios.de to sourceforge.net.
+  * Report error to stderr, and exit, if --idle is combined with multiple  accounts.
+  * Point to --idle from GENERAL OPERATION to clarify --idle and multiple  mailboxes do not mix.
+  * Fix SSL-enabled build on systems that do not declare SSLv3_client_method(),
+    or that #define OPENSSL_NO_SSL3 inside #include <openssl/ssl.h>
+  * Version report lists -SSLv3 on SSL-enabled no-ssl3 builds.
+  * Fetchmail no longer adds a NUL byte to the username in GSSAPI authentication.
+    This was reported to break Kerberos-based authentication with Microsoft Exchange 2013
+  * Set umask properly before writing the .fetchids file, to avoid failing the
+    security check on the next run.
+  * When forwarding by LMTP, also check antispam response code when collecting
+    the responses after the CR LF . CR LF sequence at the end of the DATA phase.
+  * fetchmail will not try other protocols after a socket error. This avoids mismatches
+    of how different prococols see messages as "seen" and re-fetches of known mail.
+  * fetchmail no longer reports "System error during SSL_connect(): Success."
+  * fetchmailconf would ignore Edit or Delete actions on the first (topmost)
+    item in a list (no matter if server list, user list, ...).
+  * The mimedecode feature now properly detects multipart/mixed-type matches, so
+    that quoted-printable-encoded multipart messages can get decoded.
+    (Regression in 5.0.0 on 1999-03-27, as a side effect of a PGP-mimedecode fix
+    attributed to Henrik Storner.)
+  * FETCHMAILHOME can now safely be a relative path, which will be qualified
+    through realpath(). Previously, it had to be absolute in daemon mode.
+  ## KNOWN BUGS AND WORKAROUNDS
+    (This section floats upwards through the NEWS file so it stays with the
+    current release information)
+  * Fetchmail does not handle messages without Message-ID header well
+    (See sourceforge.net bug #780933)
+  * Fetchmail currently uses 31-bit signed integers in several places
+    where unsigned and/or wider types should have been used, for instance,
+    for mailbox sizes, and misreports sizes of 2 GibiB and beyond. 
+    Fixing this requires C89 compatibility to be relinquished.
+  * BSMTP is mostly untested and errors can cause corrupt output.
+  * Sun Workshop 6 (SPARC) is known to miscompile the configuration file lexer in
+    64-bit mode.  Either compile 32-bit code or use GCC to compile 64-bit fetchmail.
+  * Fetchmail does not track pending deletes across crashes.
+  * The command line interface is sometimes a bit stubborn, for instance,
+    fetchmail -s doesn't work with a daemon running.
+  * Linux systems may return duplicates of an IP address in some circumstances if
+    no or no global IPv6 addresses are configured.
+    (No workaround. Ubuntu Bug#582585, Novell Bug#606980.)
+  * Kerberos 5 may be broken, particularly on Heimdal, and provide bogus error
+    messages. This will not be fixed, because the maintainer has no Kerberos 5
+    server to test against. Use GSSAPI.
+
+- Remove patches merged upstream:
+  * fetchmail-openssl11.patch
+  * fetchmail-fetchmailconf-python3-1of3.patch
+  * fetchmail-fetchmailconf-python3-2of3.patch
+  * fetchmail-fetchmailconf-python3-3of3.patch
+- Rebase fetchmail-6.3.8-smtp_errors.patch
+
 -------------------------------------------------------------------
 Fri May 31 08:05:50 UTC 2019 - Pedro Monreal Gonzalez <pmonrealgonzalez@suse.com>
 
diff --git a/fetchmail.spec b/fetchmail.spec
index bc758aa..322c37d 100644
--- a/fetchmail.spec
+++ b/fetchmail.spec
@@ -22,26 +22,21 @@
 %endif
 
 Name:           fetchmail
-Version:        6.3.26
+Version:        6.4.1
 Release:        0
 Summary:        Full-Featured POP and IMAP Mail Retrieval Daemon
 License:        GPL-2.0-or-later
 Group:          Productivity/Networking/Email/Utilities
 Url:            http://www.fetchmail.info/
-Source:         http://sourceforge.net/projects/fetchmail/files/branch_6.3/%{name}-%{version}.tar.xz
+Source:         https://sourceforge.net/projects/fetchmail/files/branch_6.4/%{name}-%{version}.tar.xz
+#Source1:        https://sourceforge.net/projects/fetchmail/files/branch_6.4/%%{name}-%%{version}.tar.xz.asc
 Source2:        %{name}.logrotate
 Source3:        sysconfig.%{name}
-Source4:        http://sourceforge.net/projects/fetchmail/files/branch_6.3/%{name}-%{version}.tar.xz.asc
 Source5:        %{name}.keyring
 Source6:        %{name}.service
 Source7:        %{name}.tmpfiles
 Source8:        %{name}.exec
 Patch0:         fetchmail-6.3.8-smtp_errors.patch
-Patch1:         fetchmail-openssl11.patch
-# PATCH-FIX-UPSTREAM bsc#1082694 Fix fetchmailconf to be able to compile with python{2,3}
-Patch2:         fetchmail-fetchmailconf-python3-1of3.patch
-Patch3:         fetchmail-fetchmailconf-python3-2of3.patch
-Patch4:         fetchmail-fetchmailconf-python3-3of3.patch
 BuildRequires:  automake
 BuildRequires:  krb5-devel
 BuildRequires:  openssl-devel
@@ -88,10 +83,6 @@ files (.fetchmailrc).
 %prep
 %setup -q
 %patch0 -p1
-%patch1 -p1
-%patch2 -p1
-%patch3 -p1
-%patch4 -p1
 cp -a %{SOURCE2} %{SOURCE3} .
 
 ACLOCAL="aclocal -I m4 -I m4-local" autoreconf -fvi
@@ -159,13 +150,17 @@ if [ $1 = 0 ]; then
     rm -rf var/lib/fetchmail
 fi
 
+%check
+make %{?_smp_mflags} check
+
 %files -f %{name}.lang
 %defattr(-, root, root)
+%license COPYING
+%doc FAQ FEATURES NEWS NOTES OLDNEWS README README.NTLM README.SSL README.SSL-SERVER TODO contrib *.html *.txt *.pdf
 %{_bindir}/fetchmail
 %dir %attr(0700, fetchmail, root) %{_localstatedir}/lib/fetchmail
 %ghost %attr(0600, fetchmail, root) %{_localstatedir}/log/fetchmail
 %{_mandir}/man1/fetchmail.1.gz
-%doc COPYING FAQ FEATURES NEWS NOTES OLDNEWS README README.NTLM README.SSL README.SSL-SERVER TODO contrib *.html *.txt *.pdf
 %ghost %config(noreplace) %attr(0600, fetchmail, root) %{_sysconfdir}/fetchmailrc
 %config(noreplace) %{_sysconfdir}/logrotate.d/fetchmail
 %{_unitdir}/%{name}.service