about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlexander Barton <alex@barton.de>2012-03-31 16:37:31 +0200
committerAlexander Barton <alex@barton.de>2012-03-31 16:37:31 +0200
commitda4c1ebe81bbd1335356ef40c91741b953c9f8d8 (patch)
tree534351b7750c0891bfe4a342a106792e95240bbb
parentbd3a7ccb158c9f2eac1af77804529b76d99c3e79 (diff)
downloadngircd-da4c1ebe81bbd1335356ef40c91741b953c9f8d8.tar.gz
ngircd-da4c1ebe81bbd1335356ef40c91741b953c9f8d8.zip
Correctly handle "CAP END", new client type CLIENT_WAITCAPEND
-rw-r--r--src/ngircd/client.h1
-rw-r--r--src/ngircd/irc-cap.c2
-rw-r--r--src/ngircd/login.c5
-rw-r--r--src/ngircd/parse.c2
4 files changed, 7 insertions, 3 deletions
diff --git a/src/ngircd/client.h b/src/ngircd/client.h
index bdad9ce9..4dbcc7a0 100644
--- a/src/ngircd/client.h
+++ b/src/ngircd/client.h
@@ -29,6 +29,7 @@
 #ifndef STRICT_RFC
 # define CLIENT_WAITAUTHPING 512	/* waiting for AUTH PONG from client */
 #endif
+#define CLIENT_WAITCAPEND 1024		/* waiting for "CAP END" command */
 
 #define CLIENT_TYPE int
 
diff --git a/src/ngircd/irc-cap.c b/src/ngircd/irc-cap.c
index 926943c8..956b3599 100644
--- a/src/ngircd/irc-cap.c
+++ b/src/ngircd/irc-cap.c
@@ -180,7 +180,7 @@ Handle_CAP_END(CLIENT *Client)
 		/* User is still logging in ... */
 		Client_CapDel(Client, CLIENT_CAP_PENDING);
 
-		if (Client_Type(Client) == CLIENT_GOTUSER) {
+		if (Client_Type(Client) == CLIENT_WAITCAPEND) {
 			/* Only "CAP END" was missing: log in! */
 			return Login_User(Client);
 		}
diff --git a/src/ngircd/login.c b/src/ngircd/login.c
index ad45219e..38089976 100644
--- a/src/ngircd/login.c
+++ b/src/ngircd/login.c
@@ -80,8 +80,11 @@ Login_User(CLIENT * Client)
 #endif
 
 	/* Still waiting for "CAP END" command? */
-	if (Client_Cap(Client) & CLIENT_CAP_PENDING)
+	if (Client_Cap(Client) & CLIENT_CAP_PENDING) {
+		Client_SetType(Client, CLIENT_WAITCAPEND);
+		LogDebug("Connection %d: Waiting for CAP END ...", conn);
 		return CONNECTED;
+	}
 
 #ifdef PAM
 	if (!Conf_PAM) {
diff --git a/src/ngircd/parse.c b/src/ngircd/parse.c
index 41e3872f..66bfef53 100644
--- a/src/ngircd/parse.c
+++ b/src/ngircd/parse.c
@@ -114,7 +114,7 @@ static COMMAND My_Commands[] =
 	{ "CHANINFO", IRC_CHANINFO, CLIENT_SERVER, 0, 0, 0 },
 #endif
 #ifndef STRICT_RFC
-	{ "CAP", IRC_CAP, CLIENT_UNKNOWN|CLIENT_GOTNICK|CLIENT_GOTPASS|CLIENT_GOTUSER|CLIENT_USER, 0, 0, 0 },
+	{ "CAP", IRC_CAP, 0xFFFF, 0, 0, 0 },
 	{ "GET",  IRC_QUIT_HTTP, CLIENT_UNKNOWN, 0, 0, 0 },
 	{ "POST", IRC_QUIT_HTTP, CLIENT_UNKNOWN, 0, 0, 0 },
 #endif