w8tvi / dircproxy

dircproxy is an IRC proxy server ("bouncer") designed for people who use IRC from lots of different workstations or clients, but wish to remain connected and see what they missed while they were away. You connect to IRC through dircproxy, and it keeps you connected to the server, even after you detach your client from it. While you're detached, it logs channel and private messages as well as important events, and when you re-attach it'll let you know what you missed. This can be used to give you roughly the same functionality as using ircII and screen together, except you can use whatever IRC client you like, including X ones!
GNU General Public License v2.0
11 stars 4 forks source link

dircproxy handling of umodes screws up for umodes with a parameter (i.e. snomask) #65

Open GoogleCodeExporter opened 8 years ago

GoogleCodeExporter commented 8 years ago
On network that use an umode with a parameter dircproxy does not handle 
these correctly.

For instance when setting: "-ix+IWsn +kKlodxtfgj" (here "+kKlodxtfgj" is a 
parameter to +n (InspIRCd)).

Dircprocy does not understand the parameter and just proceeds to try and 
add the parameter to the list of umodes. As I understand the code it is 
actually specifically instructed to do this for every parameter (why!?). 
This results in a stored umode of something like "+IWsnkKlodxtfgj" which 
is then sent to the client upon reattach.

I think ideally dircproxy should support parameters to umodes and store 
the umodes as a list of umodes+their parameter instead of a string.

Quick fix (makes dircproxy ignore parameters to umodes):

--- ./dircproxy-1.2.0-RC1/src/irc_server.c      2009-01-15 
21:27:28.000000000 +0100
+++ ./dircproxy-1.2.0-RC1+raphmod-0.2/src/irc_server.c  2009-03-19 
14:45:42.000000000 +0100
@@ -912,13 +940,13 @@

       if (!irc_strcasecmp(p->nickname, msg.params[0])) {
         /* Personal mode change */
-        int param;
+        //int param;

         irclog_log(p, IRC_LOG_MODE, IRC_LOGFILE_SERVER, p->servername,
                    "Your mode was changed: %s", msg.paramstarts[1]);  

-        for (param = 1; param < msg.numparams; param++)
-          ircclient_change_mode(p, msg.params[param]); 
+//        for (param = 1; param < msg.numparams; param++)
+          ircclient_change_mode(p, msg.params[1]);

         /* Check for refuse modes */
         if (p->modes && p->conn_class->refuse_modes &&

Original issue reported on code.google.com by raphidae on 19 Mar 2009 at 1:50

GoogleCodeExporter commented 8 years ago
I registered another account for googlecode (this one).

Original comment by r...@mediamonks.net on 19 Mar 2009 at 2:31