]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/irc-info.c
Proc_Close(): Only close socket if it is still valid
[ngircd-alex.git] / src / ngircd / irc-info.c
index dfc67b9b7660151da04b1e4fc9559bccef829c67..42b22643c63405a0f4a16d43f324636a3fd9584e 100644 (file)
@@ -254,7 +254,8 @@ IRC_LINKS(CLIENT *Client, REQUEST *Req)
 
        c = Client_First();
        while (c) {
-               if (Client_Type(c) == CLIENT_SERVER) {
+               if (Client_Type(c) == CLIENT_SERVER
+                   && MatchCaseInsensitive(mask, Client_ID(c))) {
                        if (!IRC_WriteStrClient(from, RPL_LINKS_MSG,
                                        Client_ID(from), Client_ID(c),
                                        Client_ID(Client_TopServer(c)
@@ -1108,8 +1109,7 @@ IRC_WHOIS_SendReply(CLIENT *Client, CLIENT *from, CLIENT *c)
                                    Client_Away(c)))
                        return DISCONNECTED;
 
-       return IRC_WriteStrClient(from, RPL_ENDOFWHOIS_MSG,
-                                 Client_ID(from), Client_ID(c));
+       return CONNECTED;
 } /* IRC_WHOIS_SendReply */
 
 
@@ -1129,7 +1129,7 @@ IRC_WHOIS( CLIENT *Client, REQUEST *Req )
        unsigned int match_count = 0, found = 0;
        bool has_wildcards, is_remote;
        bool got_wildcard = false;
-       const char *query;
+       char mask[COMMAND_LEN], *query;
 
        assert( Client != NULL );
        assert( Req != NULL );
@@ -1170,7 +1170,8 @@ IRC_WHOIS( CLIENT *Client, REQUEST *Req )
                                                Req->argv[0], Req->argv[1]);
 
        is_remote = Client_Conn(from) < 0;
-       for (query = strtok(Req->argv[Req->argc - 1], ",");
+       strlcpy(mask, Req->argv[Req->argc - 1], sizeof(mask));
+       for (query = strtok(ngt_LowerStr(mask), ",");
                        query && found < 3;
                        query = strtok(NULL, ","), found++)
        {
@@ -1185,7 +1186,7 @@ IRC_WHOIS( CLIENT *Client, REQUEST *Req )
                 */
                if (!has_wildcards || is_remote) {
                        c = Client_Search(query);
-                       if (c) {
+                       if (c && Client_Type(c) == CLIENT_USER) {
                                if (!IRC_WHOIS_SendReply(Client, from, c))
                                        return DISCONNECTED;
                        } else {
@@ -1218,10 +1219,12 @@ IRC_WHOIS( CLIENT *Client, REQUEST *Req )
                }
 
                if (match_count == 0)
-                       return IRC_WriteStrClient(Client, ERR_NOSUCHNICK_MSG,
-                               Client_ID(Client), Req->argv[Req->argc - 1]);
+                       IRC_WriteStrClient(Client, ERR_NOSUCHNICK_MSG,
+                                          Client_ID(Client),
+                                          Req->argv[Req->argc - 1]);
        }
-       return CONNECTED;
+       return IRC_WriteStrClient(from, RPL_ENDOFWHOIS_MSG,
+                                 Client_ID(from), Req->argv[Req->argc - 1]);
 } /* IRC_WHOIS */