summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@arm.linux.org.uk>2016-06-05 14:16:36 +0100
committerRussell King <rmk+kernel@armlinux.org.uk>2016-06-12 22:29:23 +0100
commit7a438c17063b92a23f9ab133a88097861a6f4527 (patch)
treebfe30e790be92d6c70bfd3eb8edd87134d028dbf /src
parent900d62df078e136d108edce85f6ce2b0c852c6ac (diff)
Add support for configurable initial channel modes
Diffstat (limited to 'src')
-rw-r--r--src/conf.c1
-rw-r--r--src/conf_lexer.l7
-rw-r--r--src/conf_parser.y37
3 files changed, 44 insertions, 1 deletions
diff --git a/src/conf.c b/src/conf.c
index 5850ffb..6f21b24 100644
--- a/src/conf.c
+++ b/src/conf.c
@@ -1118,6 +1118,7 @@ set_default_conf(void)
ConfigChannel.default_split_server_count = 0;
ConfigChannel.no_join_on_split = 0;
ConfigChannel.no_create_on_split = 0;
+ ConfigChannel.default_modes = MODE_NOPRIVMSGS | MODE_TOPICLIMIT;
ConfigServerHide.flatten_links = 0;
ConfigServerHide.links_delay = 300;
diff --git a/src/conf_lexer.l b/src/conf_lexer.l
index 875959d..466e827 100644
--- a/src/conf_lexer.l
+++ b/src/conf_lexer.l
@@ -158,6 +158,7 @@ cycle_on_host_change { return CYCLE_ON_HOST_CHANGE; }
deaf { return T_DEAF; }
debug { return T_DEBUG; }
default_floodcount { return DEFAULT_FLOODCOUNT; }
+default_modes { return DEFAULT_MODES; }
default_split_server_count { return DEFAULT_SPLIT_SERVER_COUNT; }
default_split_user_count { return DEFAULT_SPLIT_USER_COUNT; }
deny { return DENY; }
@@ -206,6 +207,7 @@ hub_mask { return HUB_MASK; }
ignore_bogus_ts { return IGNORE_BOGUS_TS; }
invisible { return T_INVISIBLE; }
invisible_on_connect { return INVISIBLE_ON_CONNECT; }
+inviteonly { return T_INVITEONLY; }
ip { return IP; }
ipv4 { return T_IPV4; }
ipv6 { return T_IPV6; }
@@ -243,6 +245,7 @@ max_watch { return MAX_WATCH; }
min_idle { return MIN_IDLE; }
min_nonwildcard { return MIN_NONWILDCARD; }
min_nonwildcard_simple { return MIN_NONWILDCARD_SIMPLE; }
+moderated { return T_MODERATED; }
module { return MODULE; }
modules { return MODULES; }
motd { return MOTD; }
@@ -258,6 +261,7 @@ no_join_on_split { return NO_JOIN_ON_SPLIT; }
no_oper_flood { return NO_OPER_FLOOD; }
no_tilde { return NO_TILDE; }
nononreg { return T_NONONREG; }
+noprivmsgs { return T_NOPRIVMSGS; }
number_per_cidr { return NUMBER_PER_CIDR; }
number_per_ip { return NUMBER_PER_IP; }
oper { return OPERATOR; }
@@ -275,6 +279,7 @@ path { return PATH; }
ping_cookie { return PING_COOKIE; }
ping_time { return PING_TIME; }
port { return PORT; }
+private { return T_PRIVATE; }
quarantine { return RESV; }
random_idle { return RANDOM_IDLE; }
reason { return REASON; }
@@ -290,6 +295,7 @@ resv { return RESV; }
resv_exempt { return RESV_EXEMPT; }
rsa_private_key_file { return RSA_PRIVATE_KEY_FILE; }
rsa_public_key_file { return RSA_PUBLIC_KEY_FILE; }
+secret { return T_SECRET; }
send_password { return SEND_PASSWORD; }
sendq { return SENDQ; }
server { return T_SERVER; }
@@ -327,6 +333,7 @@ stats_u_oper_only { return STATS_U_OPER_ONLY; }
throttle_time { return THROTTLE_TIME; }
tkline_expire_notices { return TKLINE_EXPIRE_NOTICES; }
tlsv1 { return T_TLSV1; }
+topiclimit { return T_TOPICLIMIT; }
true_no_oper_flood { return TRUE_NO_OPER_FLOOD; }
ts_max_delta { return TS_MAX_DELTA; }
ts_warn_delta { return TS_WARN_DELTA; }
diff --git a/src/conf_parser.y b/src/conf_parser.y
index 92e092e..303c66d 100644
--- a/src/conf_parser.y
+++ b/src/conf_parser.y
@@ -51,6 +51,7 @@
#include "numeric.h"
#include "s_user.h"
#include "motd.h"
+#include "channel_mode.h"
#ifdef HAVE_LIBCRYPTO
#include <openssl/rsa.h>
@@ -162,6 +163,7 @@ reset_block_state(void)
%token CONNECTFREQ
%token CYCLE_ON_HOST_CHANGE
%token DEFAULT_FLOODCOUNT
+%token DEFAULT_MODES
%token DEFAULT_SPLIT_SERVER_COUNT
%token DEFAULT_SPLIT_USER_COUNT
%token DENY
@@ -308,17 +310,22 @@ reset_block_state(void)
%token T_FULL
%token T_GLOBOPS
%token T_INVISIBLE
+%token T_INVITEONLY
%token T_IPV4
%token T_IPV6
%token T_LOCOPS
%token T_LOG
%token T_MAX_CLIENTS
+%token T_MODERATED
%token T_NCHANGE
%token T_NONONREG
+%token T_NOPRIVMSGS
%token T_OPERWALL
+%token T_PRIVATE
%token T_RECVQ
%token T_REJ
%token T_RESTART
+%token T_SECRET
%token T_SERVER
%token T_SERVICE
%token T_SERVICES_NAME
@@ -335,6 +342,7 @@ reset_block_state(void)
%token T_SSL_SERVER_METHOD
%token T_SSLV3
%token T_TLSV1
+%token T_TOPICLIMIT
%token T_UMODES
%token T_UNAUTH
%token T_UNDLINE
@@ -2870,7 +2878,8 @@ channel_item: channel_max_bans |
channel_no_create_on_split |
channel_no_join_on_split |
channel_jflood_count | channel_jflood_time |
- channel_disable_fake_channels | error;
+ channel_disable_fake_channels | channel_default_modes |
+ error;
channel_disable_fake_channels: DISABLE_FAKE_CHANNELS '=' TBOOL ';'
{
@@ -2932,6 +2941,32 @@ channel_jflood_time: JOIN_FLOOD_TIME '=' timespec ';'
GlobalSetOptions.joinfloodtime = $3;
};
+channel_default_modes: DEFAULT_MODES
+{
+ ConfigChannel.default_modes = 0;
+} '=' channel_default_mode_items ';' ;
+
+channel_default_mode_items: channel_default_mode_items ',' channel_default_mode_item | channel_default_mode_item;
+channel_default_mode_item: T_PRIVATE
+{
+ ConfigChannel.default_modes |= MODE_PRIVATE;
+} | T_SECRET
+{
+ ConfigChannel.default_modes |= MODE_SECRET;
+} | T_MODERATED
+{
+ ConfigChannel.default_modes |= MODE_MODERATED;
+} | T_TOPICLIMIT
+{
+ ConfigChannel.default_modes |= MODE_TOPICLIMIT;
+} | T_INVITEONLY
+{
+ ConfigChannel.default_modes |= MODE_INVITEONLY;
+} | T_NOPRIVMSGS
+{
+ ConfigChannel.default_modes |= MODE_NOPRIVMSGS;
+};
+
/***************************************************************************
* section serverhide
***************************************************************************/