summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/xline.h7
-rw-r--r--src/commands.cpp8
-rw-r--r--src/message.cpp2
-rw-r--r--src/userprocess.cpp6
-rw-r--r--src/xline.cpp20
5 files changed, 24 insertions, 19 deletions
diff --git a/include/xline.h b/include/xline.h
index 9ba1358aa..dad0ed238 100644
--- a/include/xline.h
+++ b/include/xline.h
@@ -28,6 +28,11 @@
#include "users.h"
#include "channels.h"
+const int APPLY_GLINES = 1;
+const int APPLY_KLINES = 2;
+const int APPLY_QLINES = 4;
+const int APPLY_ZLINES = 8;
+const int APPLY_ALL = APPLY_GLINES | APPLY_KLINES | APPLY_QLINES | APPLY_ZLINES;
/** XLine is the base class for ban lines such as G lines and K lines.
*/
@@ -139,7 +144,7 @@ char* matches_kline(const char* host);
char* matches_exception(const char* host);
void expire_lines();
-void apply_lines();
+void apply_lines(const int What);
void stats_k(userrec* user);
void stats_g(userrec* user);
diff --git a/src/commands.cpp b/src/commands.cpp
index 2c351868c..df02b67c9 100644
--- a/src/commands.cpp
+++ b/src/commands.cpp
@@ -1950,6 +1950,7 @@ void handle_kline(char **parameters, int pcnt, userrec *user)
{
WriteOpers("*** %s added timed K-line for %s, expires in %d seconds.",user->nick,parameters[0],duration(parameters[1]));
}
+ apply_lines(APPLY_KLINES);
}
else
{
@@ -1963,7 +1964,6 @@ void handle_kline(char **parameters, int pcnt, userrec *user)
WriteServ(user->fd,"NOTICE %s :*** K-Line %s not found in list, try /stats k.",user->nick,parameters[0]);
}
}
- apply_lines();
}
void handle_eline(char **parameters, int pcnt, userrec *user)
@@ -2014,6 +2014,7 @@ void handle_gline(char **parameters, int pcnt, userrec *user)
{
WriteOpers("*** %s added timed G-line for %s, expires in %d seconds.",user->nick,parameters[0],duration(parameters[1]));
}
+ apply_lines(APPLY_GLINES);
}
else
{
@@ -2027,7 +2028,6 @@ void handle_gline(char **parameters, int pcnt, userrec *user)
WriteServ(user->fd,"NOTICE %s :*** G-Line %s not found in list, try /stats g.",user->nick,parameters[0]);
}
}
- apply_lines();
}
void handle_zline(char **parameters, int pcnt, userrec *user)
@@ -2051,6 +2051,7 @@ void handle_zline(char **parameters, int pcnt, userrec *user)
{
WriteOpers("*** %s added timed Z-line for %s, expires in %d seconds.",user->nick,parameters[0],duration(parameters[1]));
}
+ apply_lines(APPLY_ZLINES);
}
else
{
@@ -2064,7 +2065,6 @@ void handle_zline(char **parameters, int pcnt, userrec *user)
WriteServ(user->fd,"NOTICE %s :*** Z-Line %s not found in list, try /stats Z.",user->nick,parameters[0]);
}
}
- apply_lines();
}
void handle_qline(char **parameters, int pcnt, userrec *user)
@@ -2083,6 +2083,7 @@ void handle_qline(char **parameters, int pcnt, userrec *user)
{
WriteOpers("*** %s added timed Q-line for %s, expires in %d seconds.",user->nick,parameters[0],duration(parameters[1]));
}
+ apply_lines(APPLY_QLINES);
}
else
{
@@ -2096,7 +2097,6 @@ void handle_qline(char **parameters, int pcnt, userrec *user)
WriteServ(user->fd,"NOTICE %s :*** Q-Line %s not found in list, try /stats k.",user->nick,parameters[0]);
}
}
- apply_lines();
}
diff --git a/src/message.cpp b/src/message.cpp
index 8adf50793..ce51f8c87 100644
--- a/src/message.cpp
+++ b/src/message.cpp
@@ -104,7 +104,7 @@ void tidystring(char* str)
while (go_again)
{
bool noparse = false;
- unsigned int t = 0, a = 0;
+ int t = 0, a = 0;
go_again = false;
const int lenofstr = strlen(str);
diff --git a/src/userprocess.cpp b/src/userprocess.cpp
index 551573fed..d82e3ddd5 100644
--- a/src/userprocess.cpp
+++ b/src/userprocess.cpp
@@ -175,7 +175,7 @@ void ProcessUser(userrec* cu)
WriteOpers("*** Excess flood from %s",current->ip);
log(DEFAULT,"Excess flood from: %s",current->ip);
add_zline(120,ServerName,"Flood from unregistered connection",current->ip);
- apply_lines();
+ apply_lines(APPLY_ZLINES);
}
return;
}
@@ -190,7 +190,7 @@ void ProcessUser(userrec* cu)
WriteOpers("*** Excess flood from %s",current->ip);
log(DEFAULT,"Excess flood from: %s",current->ip);
add_zline(120,ServerName,"Flood from unregistered connection",current->ip);
- apply_lines();
+ apply_lines(APPLY_ZLINES);
}
return;
}
@@ -222,7 +222,7 @@ void ProcessUser(userrec* cu)
else
{
add_zline(120,ServerName,"Flood from unregistered connection",current->ip);
- apply_lines();
+ apply_lines(APPLY_ZLINES);
}
return;
}
diff --git a/src/xline.cpp b/src/xline.cpp
index c06d977fa..0815f3c61 100644
--- a/src/xline.cpp
+++ b/src/xline.cpp
@@ -457,7 +457,7 @@ bool del_kline(const char* hostmask)
char* matches_qline(const char* nick)
{
- if (qlines.empty())
+ if ((qlines.empty()) && (pqlines.empty()))
return NULL;
for (std::vector<QLine>::iterator i = qlines.begin(); i != qlines.end(); i++)
if (match(nick,i->nick))
@@ -472,7 +472,7 @@ char* matches_qline(const char* nick)
char* matches_gline(const char* host)
{
- if (glines.empty())
+ if ((glines.empty()) && (pglines.empty()))
return NULL;
for (std::vector<GLine>::iterator i = glines.begin(); i != glines.end(); i++)
if (match(host,i->hostmask))
@@ -485,7 +485,7 @@ char* matches_gline(const char* host)
char* matches_exception(const char* host)
{
- if (elines.empty())
+ if ((elines.empty()) && (pelines.empty()))
return NULL;
char host2[MAXBUF];
snprintf(host2,MAXBUF,"*@%s",host);
@@ -587,7 +587,7 @@ void zline_set_creation_time(char* ip, time_t create_time)
char* matches_zline(const char* ipaddr)
{
- if (zlines.empty())
+ if ((zlines.empty()) && (pzlines.empty()))
return NULL;
for (std::vector<ZLine>::iterator i = zlines.begin(); i != zlines.end(); i++)
if (match(ipaddr,i->ipaddr))
@@ -602,7 +602,7 @@ char* matches_zline(const char* ipaddr)
char* matches_kline(const char* host)
{
- if (klines.empty())
+ if ((klines.empty()) && (pklines.empty()))
return NULL;
for (std::vector<KLine>::iterator i = klines.begin(); i != klines.end(); i++)
if (match(host,i->hostmask))
@@ -688,7 +688,7 @@ void expire_lines()
// applies lines, removing clients and changing nicks etc as applicable
-void apply_lines()
+void apply_lines(const int What)
{
bool go_again = true;
char reason[MAXBUF];
@@ -711,7 +711,7 @@ void apply_lines()
if (matches_exception(host))
continue;
}
- if (glines.size() || pglines.size())
+ if ((What & APPLY_GLINES) && (glines.size() || pglines.size()))
{
char* check = matches_gline(host);
if (check)
@@ -723,7 +723,7 @@ void apply_lines()
break;
}
}
- if (klines.size() || pklines.size())
+ if ((What & APPLY_KLINES) && (klines.size() || pklines.size()))
{
char* check = matches_kline(host);
if (check)
@@ -735,7 +735,7 @@ void apply_lines()
break;
}
}
- if (qlines.size() || pqlines.size())
+ if ((What & APPLY_QLINES) && (qlines.size() || pqlines.size()))
{
char* check = matches_qline(u->second->nick);
if (check)
@@ -747,7 +747,7 @@ void apply_lines()
break;
}
}
- if (zlines.size() || pzlines.size())
+ if ((What & APPLY_ZLINES) && (zlines.size() || pzlines.size()))
{
char* check = matches_zline(u->second->ip);
if (check)