#include "imp.h"
#include "irc.h"
+#include "irc-cap.h"
#include "irc-channel.h"
#include "irc-info.h"
#include "irc-login.h"
{ "DIE", IRC_DIE, CLIENT_USER, 0, 0, 0 },
{ "DISCONNECT", IRC_DISCONNECT, CLIENT_USER, 0, 0, 0 },
{ "ERROR", IRC_ERROR, 0xFFFF, 0, 0, 0 },
+ { "GLINE", IRC_xLINE, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
{ "HELP", IRC_HELP, CLIENT_USER, 0, 0, 0 },
{ "INFO", IRC_INFO, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
{ "INVITE", IRC_INVITE, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
{ "JOIN", IRC_JOIN, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
{ "KICK", IRC_KICK, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
{ "KILL", IRC_KILL, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
+ { "KLINE", IRC_xLINE, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
{ "LINKS", IRC_LINKS, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
{ "LIST", IRC_LIST, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
{ "LUSERS", IRC_LUSERS, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
{ "CHANINFO", IRC_CHANINFO, CLIENT_SERVER, 0, 0, 0 },
#endif
#ifndef STRICT_RFC
+ { "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
/* check if the client named in the prefix is expected
* to come from that direction */
if (Client_NextHop(c) != client) {
- Log(LOG_ERR,
- "Spoofed prefix \"%s\" from \"%s\" (connection %d, command \"%s\")!",
- Req->prefix, Client_Mask(Conn_GetClient(Idx)), Idx,
- Req->command);
- Conn_Close(Idx, NULL, "Spoofed prefix", true);
- *Closed = true;
+ if (Client_Type(c) != CLIENT_SERVER) {
+ Log(LOG_ERR,
+ "Spoofed prefix \"%s\" from \"%s\" (connection %d, command \"%s\")!",
+ Req->prefix, Client_Mask(Conn_GetClient(Idx)), Idx,
+ Req->command);
+ Conn_Close(Idx, NULL, "Spoofed prefix", true);
+ *Closed = true;
+ } else {
+ Log(LOG_INFO,
+ "Ignoring spoofed prefix \"%s\" from \"%s\" (connection %d, command \"%s\").",
+ Req->prefix, Client_Mask(Conn_GetClient(Idx)), Idx,
+ Req->command);
+ }
return false;
+
}
return true;