Commit Diff


commit - a5735f68d7dd8cc7b106e0183b44002785dd8425
commit + 6bc2d3d06e9cb4da68ea4b63d9b6b219d88ab927
blob - cbfcc8f1735dea657b2d635ad617bfc716a3241f
blob + 08f6dde01766040d4cdd0b333de1a39be80ac273
--- src/ngircd/conn.h
+++ src/ngircd/conn.h
@@ -1,6 +1,6 @@
 /*
  * ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001,2002 by Alexander Barton (alex@barton.de)
+ * Copyright (c)2001-2008 by Alexander Barton (alex@barton.de)
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -8,8 +8,6 @@
  * (at your option) any later version.
  * Please read the file COPYING, README and AUTHORS for more information.
  *
- * $Id: conn.h,v 1.46 2008/02/26 22:04:17 fw Exp $
- *
  * Connection management (header)
  */
 
@@ -23,9 +21,9 @@
 
 #define CONN_ISCLOSING		1	/* Conn_Close() already called */
 #define CONN_ISCONNECTING	2	/* connect() in progress */
-
+#define CONN_RFC1459		4	/* RFC 1459 compatibility mode */
 #ifdef ZLIB
-#define CONN_ZIP		4	/* zlib compressed link */
+#define CONN_ZIP		8	/* zlib compressed link */
 #endif
 
 #include "conf-ssl.h"
blob - 4a2ebe226f446501bbdb88c8e9d87f586bca40f5
blob + 82e3482a0916715e1c2614466f3f2ddfbe99d81c
--- src/ngircd/irc-login.c
+++ src/ngircd/irc-login.c
@@ -168,6 +168,7 @@ GLOBAL bool
 IRC_NICK( CLIENT *Client, REQUEST *Req )
 {
 	CLIENT *intr_c, *target, *c;
+	CONN_ID conn;
 	char *nick, *user, *hostname, *modes, *info;
 	int token, hops;
 
@@ -305,6 +306,7 @@ IRC_NICK( CLIENT *Client, REQUEST *Req )
 						  Client_ID(Client), Req->command);
 
 		if (Req->argc >= 7) {
+			/* RFC 2813 compatible syntax */
 			nick = Req->argv[0];
 			hops = atoi(Req->argv[1]);
 			user = Req->argv[2];
@@ -313,6 +315,7 @@ IRC_NICK( CLIENT *Client, REQUEST *Req )
 			modes = Req->argv[5] + 1;
 			info = Req->argv[6];
 		} else {
+			/* RFC 1459 compatible syntax */
 			nick = Req->argv[0];
 			hops = 1;
 			user = Req->argv[0];
@@ -320,6 +323,15 @@ IRC_NICK( CLIENT *Client, REQUEST *Req )
 			token = atoi(Req->argv[1]);
 			modes = "";
 			info = Req->argv[0];
+
+			conn = Client_Conn(Client);
+			if (conn != NONE &&
+			    !(Conn_Options(conn) & CONN_RFC1459)) {
+				Log(LOG_INFO,
+				    "Switching connection %d (\"%s\") to RFC 1459 compatibility mode.",
+				    conn, Client_ID(Client));
+				Conn_SetOption(conn, CONN_RFC1459);
+			}
 		}
 
 		/* Nick ueberpruefen */