[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