From 790324228fd90c98d89c668fe8987f419e14afb7bfc0e7ffc5fa4e6b9b5e2c08 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Chv=C3=A1tal?=
Date: Thu, 10 Oct 2019 17:30:47 +0000
Subject: [PATCH] Accepting request 737166 from
home:pmonrealgonzalez:branches:server:mail
- 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.
OBS-URL: https://build.opensuse.org/request/show/737166
OBS-URL: https://build.opensuse.org/package/show/server:mail/fetchmail?expand=0&rev=88
---
fetchmail-6.3.26.tar.xz | 3 -
fetchmail-6.3.26.tar.xz.asc | 7 -
fetchmail-6.3.8-smtp_errors.patch | 12 +-
fetchmail-6.4.1.tar.xz | 3 +
fetchmail-fetchmailconf-python3-1of3.patch | 3074 --------------------
fetchmail-fetchmailconf-python3-2of3.patch | 280 --
fetchmail-fetchmailconf-python3-3of3.patch | 86 -
fetchmail-openssl11.patch | 1576 ----------
fetchmail.changes | 136 +
fetchmail.spec | 21 +-
10 files changed, 153 insertions(+), 5045 deletions(-)
delete mode 100644 fetchmail-6.3.26.tar.xz
delete mode 100644 fetchmail-6.3.26.tar.xz.asc
create mode 100644 fetchmail-6.4.1.tar.xz
delete mode 100644 fetchmail-fetchmailconf-python3-1of3.patch
delete mode 100644 fetchmail-fetchmailconf-python3-2of3.patch
delete mode 100644 fetchmail-fetchmailconf-python3-3of3.patch
delete mode 100644 fetchmail-openssl11.patch
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
-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
-Signed-off-by: Matthias Andree
----
- 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('', self.handleNew)
-- newwin.bind('', 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('', self.handleList);
-- self.listwidget.bind('', 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('', self.handleNew)
-+ newwin.bind('', 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('', self.handleList);
-+ self.listwidget.bind('', 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.
-
- """
-- 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 &1 " + tmpfile
-+ cmd = "umask 077 && fetchmail " + tmpfile
- else:
-- cmd = "umask 077 && fetchmail " + tmpfile
-+ cmd = "umask 077 && fetchmail " + 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
-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
-Signed-off-by: Matthias Andree
----
- 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
- # 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
-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
- # 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:
- 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)
-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: ,
-Bug:
-Bug-Debian: https://bugs.debian.org/
-Bug-Ubuntu: https://launchpad.net/bugs/
-Forwarded:
-Reviewed-By:
-Last-Update:
-
---- 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 .
- #
- #
--# 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
- #include
--#include
--#include
-+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
-+ ac_fn_c_check_decl "$LINENO" "SSLv3_client_method" "ac_cv_have_decl_SSLv3_client_method" "#include
- "
--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 ])
-+ AC_CHECK_DECLS([SSLv3_client_method],,,[#include ])
- ;;
- 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 ;-)
-
--Finally, you can use SSL for complete
--end-to-end encryption if you have an SSL-enabled mailserver.
-+Finally, you can use SSL or TLS for complete
-+end-to-end encryption if you have a TLS-enabled mailserver.
-
-
-@@ -2120,7 +2120,7 @@ SSL?
-
- You'll need to have the OpenSSL 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.
- Fetchmail binaries built this way support ssl
,
- sslkey
, and sslcert
options that control
- SSL encryption, and will automatically use tls
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.
-
-@@ -2155,13 +2155,14 @@ poll MYSERVER port 993 plugin "openssl s
- protocol imap username MYUSERNAME password MYPASSWORD
-
-
--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.
-+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.
-
--There are three parts to SSL certificate verification: checking that the
-+
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.
-
--In order to prevent fetchmail from trying TLS (STLS, STARTTLS)
--negotiation, add this option:
-+In order to prevent fetchmail 6.4.0 and newer versions from trying
-+STLS or STARTTLS negotiation, add this option:
-+sslproto ''
-+
-+In order to prevent older fetchmail versions from trying TLS (STLS, STARTTLS)
-+negotiation where the above does not work, try this option:
-
- sslproto ssl23
-
-@@ -2876,15 +2881,22 @@ need to say something like 'envelo
-
-
- 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 <ksturgeon@fbceg.org>; Wed, 9 Sep 1998 17:01:59 -0700
-+ by iserv.example.net (8.8.5/8.8.5) with SMTP id RAA10088
-+ for <ksturgeon@fbceg.example.org>; Wed, 9 Sep 1998 17:01:59 -0700
-
-
--it checks to see if 'iserv.ttns.net' is a DNS alias of your
--mailserver before accepting 'ksturgeon@fbceg.org' as an envelope
-+
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.
-+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:
-+line rejected, iserv.example.net is not an alias of the mailserver
,
-+if you use fetchmail in verbose mode.
-+
-+Workaround: You can specify the alias explicitly, with aka
-+ iserv.example.net
statements in the rcfile. Replace
-+iserv.example.net by the name you find in your
-+'by' part of the 'Received:' line.
-
-
-@@ -3237,6 +3249,8 @@ Hayes mode escape "+++".
-
-
-+Fetchmail 6.3.5 and newer releases are supposed to fix this.
-+
- Due to the problem described in S2, the
- IMAP support in fetchmail cannot follow the IMAP protocol 100 %.
- 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.
-
-
--
There is no fix for this.
--
-
-
---- 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 /* 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
--(Keyword: sslproto)
-+.B \-\-sslproto
-+(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
-+
-+#ifdef HAVE_STRINGS_H
-+#include
-+#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
+
+- 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
+ * 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
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