[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE_3_2_BRANCH: kdebase/kioslave/smtp
From: Marc Mutz <Marc.Mutz () uni-bielefeld ! de>
Date: 2004-02-07 12:26:24
Message-ID: 20040207122624.23DEA9907 () office ! kde ! org
[Download RAW message or body]
CVS commit by mutz:
Patch by Thiago to fix RFC (2)821 violation: Numeric hostnames must be \
domain-literals (enclosed in brackets). Took me a while to understand how the patch \
works (i.e. a grep -R /usr/include NI_NAMEREQD), so I've added a verbose comment \
explaining it.
M +15 -1 smtp.cc 1.139.2.1
--- kdebase/kioslave/smtp/smtp.cc #1.139:1.139.2.1
@@ -75,4 +75,11 @@ using std::auto_ptr;
# include <sys/socket.h>
#endif
+#include <netdb.h>
+
+#ifndef NI_NAMEREQD
+// FIXME for KDE 3.3: fake defintion
+// API design flaw in KExtendedSocket::resolve
+# define NI_NAMEREQD 0
+#endif
extern "C" {
@@ -502,5 +509,12 @@ bool SMTPProtocol::smtp_open(const QStri
QString tmpPort;
KSocketAddress* addr = KExtendedSocket::localAddress(m_iSock);
- KExtendedSocket::resolve(addr, m_hostname, tmpPort);
+ // perform name lookup. NI_NAMEREQD means: don't return a numeric
+ // value (we need to know when we get have the IP address, so we
+ // can enclose it in sqaure brackets (domain-literal). Failure to
+ // do so is normally harmless with IPv4, but fails for IPv6:
+ if (KExtendedSocket::resolve(addr, m_hostname, tmpPort, NI_NAMEREQD) != 0)
+ // FQDN resolution failed
+ // use the IP address as domain-literal
+ m_hostname = '[' + addr->nodeName() + ']';
delete addr;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic