summary refs log tree commit diff stats
path: root/src/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/common')
-rw-r--r--src/common/proto-irc.c12
-rw-r--r--src/common/servlist.h1
2 files changed, 10 insertions, 3 deletions
diff --git a/src/common/proto-irc.c b/src/common/proto-irc.c
index a565dbb6..8e0d0ec1 100644
--- a/src/common/proto-irc.c
+++ b/src/common/proto-irc.c
@@ -1178,13 +1178,19 @@ process_named_msg (session *sess, char *type, char *word[], char *word_eol[],
 				}
 
 #ifdef USE_OPENSSL
-				if (!strncmp (text, "CHALLENGE ", 10))		/* QuakeNet CHALLENGE upon our request */
+				/* QuakeNet CHALLENGE upon our request */
+				if (serv->loginmethod == LOGIN_CHALLENGEAUTH && !serv->p_cmp (word[1], CHALLENGEAUTH_FULLHOST)
+				    && !strncmp (text, "CHALLENGE ", 10) && *serv->password)
 				{
-					char *response = challengeauth_response (((ircnet *)serv->network)->user ? ((ircnet *)serv->network)->user : prefs.hex_irc_user_name, serv->password, word[5]);
+					char *response;
+					ircnet *net = serv->network;
+					char *user = net && net->user ? net->user : prefs.hex_irc_user_name;
+
+					response = challengeauth_response (user, serv->password, word[5]);
 
 					tcp_sendf (serv, "PRIVMSG %s :CHALLENGEAUTH %s %s %s\r\n",
 						CHALLENGEAUTH_NICK,
-						((ircnet *)serv->network)->user ? ((ircnet *)serv->network)->user : prefs.hex_irc_user_name,
+						user,
 						response,
 						CHALLENGEAUTH_ALGO);
 
diff --git a/src/common/servlist.h b/src/common/servlist.h
index a305aede..ec885fef 100644
--- a/src/common/servlist.h
+++ b/src/common/servlist.h
@@ -82,6 +82,7 @@ extern GSList *network_list;
 
 #define CHALLENGEAUTH_ALGO		"HMAC-SHA-256"
 #define CHALLENGEAUTH_NICK		"Q@CServe.quakenet.org"
+#define CHALLENGEAUTH_FULLHOST		"Q!TheQBot@CServe.quakenet.org"
 
 /* DEFAULT_CHARSET is already defined in wingdi.h */
 #define IRC_DEFAULT_CHARSET		"UTF-8 (Unicode)"