]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/irc-login.c
SECURITY: Fixed a message handling bug which could crash the daemon.
[ngircd-alex.git] / src / ngircd / irc-login.c
index dd436192caa888c395572b91ea47d2aa10e30921..362a133c858518b7ee0640d1cc3ac96addaf1026 100644 (file)
@@ -256,13 +256,13 @@ IRC_NICK( CLIENT *Client, REQUEST *Req )
                else
                {
                        /* Nickname change */
-                       if( Client_Conn( target ) > NONE )
-                       {
+                       if (Client_Conn(target) > NONE) {
                                /* Local client */
-                               Log( LOG_INFO,
-                                    "User \"%s\" changed nick (connection %d): \"%s\" -> \"%s\".",
-                                    Client_Mask( target ), Client_Conn( target ),
-                                    Client_ID( target ), Req->argv[0] );
+                               Log(LOG_INFO,
+                                   "User \"%s\" changed nick (connection %d): \"%s\" -> \"%s\".",
+                                   Client_Mask(target), Client_Conn(target),
+                                   Client_ID(target), Req->argv[0]);
+                               Conn_UpdateIdle(Client_Conn(target));
                        }
                        else
                        {
@@ -393,6 +393,30 @@ IRC_USER( CLIENT *Client, REQUEST *Req )
 } /* IRC_USER */
 
 
+/**
+ * Service registration.
+ * ngIRCd does not support services at the moment, so this function is a
+ * dummy that returns ERR_ERRONEUSNICKNAME on each call.
+ */
+GLOBAL bool
+IRC_SERVICE(CLIENT *Client, REQUEST *Req)
+{
+       assert(Client != NULL);
+       assert(Req != NULL);
+
+       if (Client_Type(Client) != CLIENT_GOTPASS)
+               return IRC_WriteStrClient(Client, ERR_ALREADYREGISTRED_MSG,
+                                         Client_ID(Client));
+
+       if (Req->argc != 6)
+               return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG,
+                                         Client_ID(Client), Req->command);
+
+       return IRC_WriteStrClient(Client, ERR_ERRONEUSNICKNAME_MSG,
+                                 Client_ID(Client), Req->argv[0]);
+} /* IRC_SERVICE */
+
+
 GLOBAL bool
 IRC_QUIT( CLIENT *Client, REQUEST *Req )
 {