about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlexander Barton <alex@barton.de>2002-12-18 14:16:21 +0000
committerAlexander Barton <alex@barton.de>2002-12-18 14:16:21 +0000
commit8841d87365ae75fdc5aea398554a6f08cbb2ce79 (patch)
tree4ec6457e1f12c96fac09bc200cd93c10cca13568
parentd9e3f834d7fac9de948b311f833e0c7638e86a12 (diff)
downloadngircd-8841d87365ae75fdc5aea398554a6f08cbb2ce79.tar.gz
ngircd-8841d87365ae75fdc5aea398554a6f08cbb2ce79.zip
- fixed user mode propagation over server-links (IRC operator, away, ...)
-rw-r--r--src/ngircd/irc-mode.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/ngircd/irc-mode.c b/src/ngircd/irc-mode.c
index 148698ac..05664949 100644
--- a/src/ngircd/irc-mode.c
+++ b/src/ngircd/irc-mode.c
@@ -14,7 +14,7 @@
 
 #include "portab.h"
 
-static char UNUSED id[] = "$Id: irc-mode.c,v 1.23 2002/12/16 23:06:46 alex Exp $";
+static char UNUSED id[] = "$Id: irc-mode.c,v 1.24 2002/12/18 14:16:21 alex Exp $";
 
 #include "imp.h"
 #include <assert.h>
@@ -154,13 +154,18 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
 		x[0] = '\0';
 		switch( *mode_ptr )
 		{
+			case 'a':
+				/* Away */
+				if( Client_Type( Client ) == CLIENT_SERVER ) x[0] = 'a';
+				else ok = IRC_WriteStrClient( Origin, ERR_NOPRIVILEGES_MSG, Client_ID( Origin ));
+				break;
 			case 'i':
 				/* Invisible */
 				x[0] = 'i';
 				break;
 			case 'o':
 				/* IRC operator (only unsetable!) */
-				if( ! set )
+				if(( ! set ) || ( Client_Type( Client ) == CLIENT_SERVER ))
 				{
 					Client_SetOperByMe( Target, FALSE );
 					x[0] = 'o';
@@ -169,7 +174,7 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
 				break;
 			case 'r':
 				/* Restricted (only setable) */
-				if( set ) x[0] = 'r';
+				if(( set ) || ( Client_Type( Client ) == CLIENT_SERVER )) x[0] = 'r';
 				else ok = IRC_WriteStrClient( Origin, ERR_RESTRICTED_MSG, Client_ID( Origin ));
 				break;
 			case 's':