]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/irc-login.c
const'ify command name variable in _COMMAND strcuture
[ngircd-alex.git] / src / ngircd / irc-login.c
index 16d1641b5cea8cb875daa7077f91ae2dc9d5e1bc..8e77e7fe34ddcefde11788fd00a5e15c0c7e77f9 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2008 Alexander Barton (alex@barton.de)
+ * Copyright (c)2001-2010 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
@@ -148,7 +148,6 @@ IRC_PASS( CLIENT *Client, REQUEST *Req )
                } else {
                        /* The peer seems to be a server supporting the
                         * "original" IRC protocol (RFC 2813). */
-                       serverver = "";
                        if (strchr(orig_flags, 'Z'))
                                flags = "Z";
                        else
@@ -357,7 +356,7 @@ IRC_NICK( CLIENT *Client, REQUEST *Req )
                 * RFC 1459: announce the new client only after receiving the
                 * USER command, first we need more information! */
                if (Req->argc < 7) {
-                       LogDebug("Client \"%s\" is beeing registered (RFC 1459) ...",
+                       LogDebug("Client \"%s\" is being registered (RFC 1459) ...",
                                 Client_Mask(c));
                        Client_SetType(c, CLIENT_GOTNICK);
                } else
@@ -558,6 +557,31 @@ IRC_SERVICE(CLIENT *Client, REQUEST *Req)
 } /* IRC_SERVICE */
 
 
+/**
+ * Handler for the IRC command "WEBIRC".
+ * Syntax: WEBIRC <password> <username> <real-hostname> <real-IP-address>
+ */
+GLOBAL bool
+IRC_WEBIRC(CLIENT *Client, REQUEST *Req)
+{
+       /* Exactly 4 parameters are requited */
+       if (Req->argc != 4)
+               return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG,
+                                         Client_ID(Client), Req->command);
+
+       if (!Conf_WebircPwd[0] || strcmp(Req->argv[0], Conf_WebircPwd) != 0)
+               return IRC_WriteStrClient(Client, ERR_PASSWDMISMATCH_MSG,
+                                         Client_ID(Client));
+
+       LogDebug("Connection %d: got valid WEBIRC command: user=%s, host=%s, ip=%s",
+                Client_Conn(Client), Req->argv[1], Req->argv[2], Req->argv[3]);
+
+       Client_SetUser(Client, Req->argv[1], true);
+       Client_SetHostname(Client, Req->argv[2]);
+       return CONNECTED;
+} /* IRC_WEBIRC */
+
+
 GLOBAL bool
 IRC_QUIT( CLIENT *Client, REQUEST *Req )
 {
@@ -816,10 +840,16 @@ Introduce_Client(CLIENT *From, CLIENT *Client, int Type)
                         Client_Modes(Client), Client_ID(From),
                         Client_ID(Client_Introducer(Client)),
                         Client_Hops(Client), Client_Hops(Client) > 1 ? "s": "");
-       } else
+       } else {
                Log(LOG_NOTICE, "%s \"%s\" registered (connection %d).",
                    Client_TypeText(Client), Client_Mask(Client),
                    Client_Conn(Client));
+               Log_ServerNotice('c', "Client connecting: %s (%s@%s) [%s] - %s",
+                                Client_ID(Client), Client_User(Client),
+                                Client_Hostname(Client),
+                                Conn_IPA(Client_Conn(Client)),
+                                Client_TypeText(Client));
+       }
 
        /* Inform other servers */
        IRC_WriteStrServersPrefixFlag_CB(From,