Index: kidna.cpp
===================================================================
RCS file: /home/kde/kdelibs/kdecore/kidna.cpp,v
retrieving revision 1.9.4.1
diff -u -p -r1.9.4.1 kidna.cpp
--- kidna.cpp   4 Feb 2004 11:43:34 -0000       1.9.4.1
+++ kidna.cpp   3 Mar 2005 13:18:56 -0000
@@ -21,6 +21,7 @@

#include "kidna.h"

+#include <qstringlist.h>
#include <kdebug.h>

#include "ltdl.h"
@@ -65,6 +66,22 @@ static void KIDNA_load_lib()
   KIDNA_lib_load_failed = false; // Succes
}

+static QStringList *KIDNA_idnDomains = 0;
+
+static bool idnSupportForHost(const QString &host)
+{
+   if (!KIDNA_idnDomains)
+   {
+      const char *kde_use_idn = getenv("KDE_USE_IDN");
+      if (!kde_use_idn)
+         kde_use_idn = "at:ch:cn:de:dk:kr:jp:li:no:se:tw";
+      KIDNA_idnDomains = new QStringList(QStringList::split(':', QString::fromLatin1(kde_use_idn).lower()));
+   }
+
+   QString tld = host.mid(host.findRev('.')+1).lower();
+   return KIDNA_idnDomains->contains(tld);
+}
+
QCString KIDNA::toAsciiCString(const QString &idna)
{
   int l = idna.length();
@@ -86,7 +103,7 @@ QCString KIDNA::toAsciiCString(const QSt
      KIDNA_load_lib();
   }

-   if (KIDNA_lib_load_failed)
+   if (KIDNA_lib_load_failed || !idnSupportForHost(idna))
   {
      return 0; // Can't convert
   }
@@ -132,7 +149,7 @@ QString KIDNA::toAscii(const QString &id
      KIDNA_load_lib();
   }

-   if (KIDNA_lib_load_failed)
+   if (KIDNA_lib_load_failed || !idnSupportForHost(idna))
   {
      return QString::null; // Can't convert
   }
@@ -164,7 +181,7 @@ QString KIDNA::toUnicode(const QString &
      KIDNA_load_lib();
   }

-   if (KIDNA_lib_load_failed)
+   if (KIDNA_lib_load_failed || !idnSupportForHost(idna))
   {
      return idna.lower(); // Return as is
   }
Index: kssl/ksslpeerinfo.cc
===================================================================
RCS file: /home/kde/kdelibs/kio/kssl/ksslpeerinfo.cc,v
retrieving revision 1.44
diff -u -p -r1.44 ksslpeerinfo.cc
--- kssl/ksslpeerinfo.cc        29 May 2003 16:50:21 -0000      1.44
+++ kssl/ksslpeerinfo.cc        4 Mar 2005 12:12:17 -0000
@@ -30,6 +30,7 @@
#include <ksockaddr.h>
#include <kextsock.h>
#include <netsupp.h>
+#include "kidna.h"

#include "ksslx509map.h"

@@ -59,7 +60,7 @@ void KSSLPeerInfo::setPeerHost(QString r
       while(d->peerHost.endsWith("."))
               d->peerHost.truncate(d->peerHost.length()-1);

-       d->peerHost = d->peerHost.lower();
+       d->peerHost = KIDNA::toAscii(d->peerHost);
}

bool KSSLPeerInfo::certMatchesAddress() {