Commit Diff


commit - 69803d6ff1ac8deb95e023bda6ad2aef435dc69a
commit + 8aac36680265124067994391e7efef4e241a0ffd
blob - 8f62279df460b838d9315a5a58105c15148ac6e8
blob + 8db59e892921efe47ba362e344fb3b16dfe54faf
--- src/ngircd/defines.h
+++ src/ngircd/defines.h
@@ -82,8 +82,8 @@
 #define RECONNECT_DELAY 3		/* Time to delay re-connect attempts
 					   in seconds. */
 
-#define USERMODES "aciorswx"		/* Supported user modes. */
-#define CHANMODES "biIklmnoOPstvz"	/* Supported channel modes. */
+#define USERMODES "aciorRswx"		/* Supported user modes. */
+#define CHANMODES "biIklmnoOPRstvz"	/* Supported channel modes. */
 
 #define CONNECTED true			/* Internal status codes. */
 #define DISCONNECTED false
blob - 66b3eeb24ed9677d4950709ac5fc06afe6c42b50
blob + 233e1731fa0e8b8124f0581e2dcb84429c5dbbc6
--- src/ngircd/irc-channel.c
+++ src/ngircd/irc-channel.c
@@ -137,6 +137,13 @@ join_allowed(CLIENT *Client, CHANNEL *chan, const char
 		return false;
 	}
 
+	if (strchr(channel_modes, 'R') && !strchr(Client_Modes(Client), 'R')) {
+		/* Only registered users are allowed! */
+		IRC_WriteStrClient(Client, ERR_REGONLYCHANNEL_MSG,
+				   Client_ID(Client), channame);
+		return false;
+	}
+
 	return true;
 } /* join_allowed */
 
blob - 3cceaeb898af3d90dd8df5b35daca4c438a00893
blob + ba44a3ba286f1e592058b2fced15e262183c747d
--- src/ngircd/irc-mode.c
+++ src/ngircd/irc-mode.c
@@ -479,6 +479,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Ori
 		case 'i': /* Invite only */
 		case 'm': /* Moderated */
 		case 'n': /* Only members can write */
+		case 'R': /* Registered users only */
 		case 's': /* Secret channel */
 		case 't': /* Topic locked */
 		case 'z': /* Secure connections only */
blob - 12791d23d3a4ed319e34910d27bc3a25cf333524
blob + 78ac06893c6347e4c0fe9871d314c9eb5e176ff8
--- src/ngircd/messages.h
+++ src/ngircd/messages.h
@@ -120,6 +120,7 @@
 #define ERR_CHANNELISFULL_MSG		"471 %s %s :Cannot join channel (+l)"
 #define ERR_SECURECHANNEL_MSG		"471 %s %s :Cannot join channel (+z)"
 #define ERR_OPONLYCHANNEL_MSG		"471 %s %s :Cannot join channel (+O)"
+#define ERR_REGONLYCHANNEL_MSG		"471 %s %s :Cannot join channel (+R)"
 #define ERR_UNKNOWNMODE_MSG		"472 %s: %c :is unknown mode char for %s"
 #define ERR_INVITEONLYCHAN_MSG		"473 %s %s :Cannot join channel (+i)"
 #define ERR_BANNEDFROMCHAN_MSG		"474 %s %s :Cannot join channel (+b)"