Bug 130588

Summary: Ambiguous meaning of 320 numerical causing erroneous WHOIS display
Product: [Applications] konversation Reporter: Eike Hein <hein>
Component: protocolAssignee: Konversation Developers <konversation-devel>
Status: CONFIRMED ---    
Severity: normal    
Priority: NOR    
Version: 1.5-rc1   
Target Milestone: ---   
Platform: unspecified   
OS: Linux   
Latest Commit: Version Fixed In:
Sentry Crash Report:

Description Eike Hein 2006-07-11 02:06:49 UTC
Version:           SVN (using KDE KDE 3.5.3)
Installed from:    000

The meaning of the 320 protocol numerical is ambiguous, which can cause erroneous WHOIS data to be displayed to users. At least one server (Dancer, Freenode network) uses it to indicate whether a user has identified with services, while at least one other server (UnrealIRCD) uses it to indicate a "Secure Connection" (most likely SSL).

Example Dancer RAW log:
:kornbluth.freenode.net 320 Sho_ Hurga :is identified to services

Example UnrealIRCD RAW log:
:panther.furnet.org 320 Hurga Hurga :is a Secure Connection


It should be noted that UnrealIRCD uses the 307 numerical to indicate whether a user has identified for the nick they're using (note the semantic difference between this and Dancer's 320). Example RAW log:
:panther.furnet.org 307 Hurga Hurga :is a registered nick


The numerical catalogue website http://www.alien.net.au/irc/irc2numerics.html calls the 307 numerical "RPL_WHOISREGNICK", consistent with the UnrealIRC RAW log. The 320 numerical is known as "RPL_WHOISSPECIAL", with the meaning of special left undefined.


We have the following options going forward:

(a) Stop trying to make IRC nice for non-English speakers and merely display what the server sends us instead of using our own messages. This appears to be X-Chat's solution. 

(b) Decide to only support one of the competing meanings.

(c) Toggle between two translatable messages based on keywords in the server message, relying on the stability of their strings.

(d) Considering our history of special exceptions for UnrealIRCD, attempt to find reliable ways to tell whether we're on UnrealIRCD and switch into a special mode from thereon, to display the appropriate message.


All of these options are undesirable, but such is the life of an IRC client developer. (c) would be the quick and ugly fix, (d) the more elaborate and clean one - but (d) would also represent the epic decision to give in and recognize IRC as a fragmented protocol in the source base.
Comment 1 Eike Hein 2006-07-11 02:09:11 UTC
Addendum: We presently implement (b) and display what holds true on Dancer/Freenode, i.e. "[WHOIS] <user> is an identified user.")
Comment 2 Peter Simonsson 2007-07-22 12:50:03 UTC
SVN commit 690835 by psn:

Let's treat 307 and 320 equally until we decide what to do with 320
CCBUG:130588


 M  +1 -12     inputfilter.cpp  
 M  +1 -1      ircview.h  


--- branches/extragear/kde3/network/konversation/src/inputfilter.cpp #690834:690835
@@ -1210,6 +1210,7 @@
             }
             // From a WHOIS.
             //[19:11] :zahn.freenode.net 320 PhantomsDad psn :is an identified user
+            case RPL_WHOISIDENTIFY:
             case RPL_IDENTIFIED:
             {
                 NickInfo* nickInfo = server->getNickInfo(parameterList[1]);
@@ -1423,18 +1424,6 @@
                 }
                 break;
             }
-            case RPL_WHOISIDENTIFY:
-            {
-                // Display message only if this was not an automatic request.
-                if(getAutomaticRequest("WHOIS",parameterList[1])==0)
-                {
-                    server->appendMessageToFrontmost(i18n("Whois"),
-                        i18n("%1 has identified for this nick.")
-                        .arg(parameterList[1])
-                        );
-                }
-                break;
-            }
             case RPL_WHOISHELPER:
             {
                 // Display message only if this was not an automatic request.
--- branches/extragear/kde3/network/konversation/src/ircview.h #690834:690835
@@ -73,7 +73,7 @@
 
         void setNickAndChannelContextMenusEnabled(bool enable);
 
-        signals:
+    signals:
         // Notify container of new text and highlight state
         void updateTabNotification(Konversation::TabNotifyType type);
         void gotFocus();                          // So we can set focus to input line
Comment 3 Eike Hein 2010-07-10 13:05:02 UTC
commit 7725f9034b0d2f0276ceff8e4ceac24ccdcf66a0
Author: Eike Hein <hein@kde.org>
Date:   Sat Jul 10 13:02:28 2010 +0200

    Add support for UnrealIRCd's 671 numeric.
    CCBUG:130588

diff --git a/ChangeLog b/ChangeLog
index 78d6085..d0baf51 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Changes since 1.3.1:
+* Added support for UnrealIRCd's 671 numeric.
+
+
 Changes from 1.3 to 1.3.1:
 Konversation 1.3.1 is a maintenance release that improves program behavior
 and fixes defects, the most serious of which is a regression that unfortu-
diff --git a/src/irc/inputfilter.cpp b/src/irc/inputfilter.cpp
index ec3ae8a..00e3261 100644
--- a/src/irc/inputfilter.cpp
+++ b/src/irc/inputfilter.cpp
@@ -1464,6 +1464,15 @@ void InputFilter::parseServerCommand(const QString &prefix, const QString &comma
                 }
                 break;
             }
+            case RPL_WHOISSECURE:
+            {
+                if (plHas(2))
+                {
+                    if (getAutomaticRequest("WHOIS", parameterList.value(1)) == 0)
+                        server->appendMessageToFrontmost(i18n("Whois"), i18n("%1 is using a secure connection.", parameterList.value(1)));
+                }
+                break;
+            }
             // Sample WHO response
             //"/WHO #lounge"
             //[21:39] [352] #lounge jasmine bots.worldforge.org irc.worldforge.org jasmine H 0 jasmine
diff --git a/src/irc/replycodes.h b/src/irc/replycodes.h
index 9b8fd6c..bd4b63e 100644
--- a/src/irc/replycodes.h
+++ b/src/irc/replycodes.h
@@ -157,5 +157,7 @@
 #define ERR_UMODEUNKNOWNFLAG   501
 #define ERR_USERSDONTMATCH     502
 
+#define RPL_WHOISSECURE        671 // used by UnrealIRCd to denote SSL in WHOIS response
+
 #endif // REPLYCODES_H
Comment 5 Myriam Schweingruber 2013-04-14 09:15:43 UTC
Is this still valid for 1.4 or 1.5 RC1?
Comment 6 Eike Hein 2013-04-14 17:32:53 UTC
Yes; Eli is working on solving this with his ipf2 work.