summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--doc/Modes.txt3
-rw-r--r--src/ngircd/conn.c11
-rw-r--r--src/ngircd/defines.h4
-rw-r--r--src/ngircd/irc-mode.c1
4 files changed, 15 insertions, 4 deletions
diff --git a/doc/Modes.txt b/doc/Modes.txt
index aee7491c..a9317873 100644
--- a/doc/Modes.txt
+++ b/doc/Modes.txt
@@ -2,7 +2,7 @@
                      ngIRCd - Next Generation IRC Server
                            http://ngircd.barton.de/
 
-               (c)2001-2012 Alexander Barton and Contributors.
+               (c)2001-2014 Alexander Barton and Contributors.
                ngIRCd is free software and published under the
                    terms of the GNU General Public License.
 
@@ -26,6 +26,7 @@ channels he is using at the moment.
   B	20	User is flagged as a "bot".
   c	17	IRC operator wants to receive connect/disconnect NOTICEs.
   C	19	Only users that share a channel are allowed to send messages.
+  F	22	Relaxed flood protection (only settable by IRC Operators).
   i	0.0.1	User is "invisible".
   o	0.0.1	User is IRC operator.
   q	20	User is protected, can not be kicked from a channel.
diff --git a/src/ngircd/conn.c b/src/ngircd/conn.c
index 77c8cd8a..5c175dfd 100644
--- a/src/ngircd/conn.c
+++ b/src/ngircd/conn.c
@@ -1693,7 +1693,12 @@ Handle_Buffer(CONN_ID Idx)
 			maxcmd *= 5;
 		break;
 	    case CLIENT_SERVICE:
-		maxcmd = MAX_COMMANDS_SERVICE; break;
+		maxcmd = MAX_COMMANDS_SERVICE;
+		break;
+	    case CLIENT_USER:
+		if (Client_HasMode(c, 'F'))
+			maxcmd = MAX_COMMANDS_SERVICE;
+		break;
 	}
 
 	for (i=0; i < maxcmd; i++) {
@@ -2427,6 +2432,10 @@ Throttle_Connection(const CONN_ID Idx, CLIENT *Client, const int Reason,
 	    || Client_Type(Client) == CLIENT_SERVICE)
 		return;
 
+	/* Don't throttle clients with user mode 'F' set */
+	if (Client_HasMode(Client, 'F'))
+		return;
+
 	LogDebug("Throttling connection %d: code %d, value %d!", Idx,
 		 Reason, Value);
 	Conn_SetPenalty(Idx, 1);
diff --git a/src/ngircd/defines.h b/src/ngircd/defines.h
index 361564f0..4acdc477 100644
--- a/src/ngircd/defines.h
+++ b/src/ngircd/defines.h
@@ -1,6 +1,6 @@
 /*
  * ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
+ * Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -173,7 +173,7 @@
 #endif
 
 /** Supported user modes. */
-#define USERMODES "abBcCioqrRswx"
+#define USERMODES "abBcCFioqrRswx"
 
 /** Supported channel modes. */
 #define CHANMODES "abehiIklmMnoOPqQrRstvVz"
diff --git a/src/ngircd/irc-mode.c b/src/ngircd/irc-mode.c
index 6a670079..fe981213 100644
--- a/src/ngircd/irc-mode.c
+++ b/src/ngircd/irc-mode.c
@@ -222,6 +222,7 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
 			break;
 		case 'c': /* Receive connect notices */
 		case 'q': /* KICK-protected user */
+		case 'F': /* disable flood protection */
 			  /* (only settable by IRC operators!) */
 			if (!set || Client_Type(Client) == CLIENT_SERVER
 			    || Client_HasMode(Origin, 'o'))