summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2012-02-25 15:10:52 -0500
committerAdam <Adam@anope.org>2012-02-25 15:10:52 -0500
commit07fffb0b905cbf8e09d2235162ff3680cac12a2d (patch)
tree7b964c1abfba3aeb0d6aaf6698c1fdd0d52f819a /src
parent1d3ca36768a013e1a28a1e3db1b4ad9f47fc2157 (diff)
Bug #1380 - Do not allow akill masks to end in @.
This can be used to cause the IRCd to SQUIT us by adding invalid akills. The only known affected is Charybdis. Also fixed a crash caused by receiving a SQUIT for ourselves.
Diffstat (limited to 'src')
-rw-r--r--src/operserv.c8
-rw-r--r--src/protocol/charybdis.c3
-rw-r--r--src/servers.c2
3 files changed, 12 insertions, 1 deletions
diff --git a/src/operserv.c b/src/operserv.c
index 6e2e7ce33..74a2377dc 100644
--- a/src/operserv.c
+++ b/src/operserv.c
@@ -809,6 +809,14 @@ int add_akill(User * u, char *mask, const char *by, const time_t expires,
*host = 0;
host++;
+ if (!*host)
+ {
+ if (u)
+ notice_lang(s_OperServ, u, BAD_USERHOST_MASK);
+ free(mask2);
+ return -1;
+ }
+
entry = scalloc(sizeof(Akill), 1);
if (!entry) {
diff --git a/src/protocol/charybdis.c b/src/protocol/charybdis.c
index ad6256d29..6a4399be0 100644
--- a/src/protocol/charybdis.c
+++ b/src/protocol/charybdis.c
@@ -873,6 +873,9 @@ void charybdis_cmd_remove_akill(char *user, char *host)
{
Uid *ud;
+ if (!user || !*user || !host || !*host)
+ return;
+
ud = find_uid(s_OperServ);
send_cmd((UseTS6 ? (ud ? ud->uid : s_OperServ) : s_OperServ),
"UNKLINE * %s %s", user, host);
diff --git a/src/servers.c b/src/servers.c
index 282409bea..efe039a24 100644
--- a/src/servers.c
+++ b/src/servers.c
@@ -243,7 +243,7 @@ static void delete_server(Server * serv, const char *quitreason)
serv->prev->next = serv->next;
if (serv->next)
serv->next->prev = serv->prev;
- if (serv->uplink->links == serv)
+ if (serv->uplink && serv->uplink->links == serv)
serv->uplink->links = serv->next;
if (debug)