From 25b7d7ee7e1979bf244fa663b56f68c8b00f51b1 Mon Sep 17 00:00:00 2001 From: Martin Johansson Date: Sat, 25 Feb 2012 21:06:04 +0100 Subject: [PATCH] Add option to disallow text messages. --- src/conf.c | 17 +++++++++++++++++ src/conf.h | 2 ++ src/messagehandler.c | 6 ++++++ 3 files changed, 25 insertions(+) diff --git a/src/conf.c b/src/conf.c index adc0e1b..cf1677b 100644 --- a/src/conf.c +++ b/src/conf.c @@ -244,6 +244,23 @@ int getIntConf(param_t param) } } +bool_t getBoolConf(param_t param) +{ + config_setting_t *setting = NULL; + + switch (param) { + case ALLOW_TEXTMESSAGE: + setting = config_lookup(&configuration, "allow_textmessage"); + if (!setting) + return true; + else + return config_setting_get_bool(setting); + break; + default: + doAssert(false); + } +} + int Conf_getNextChannel(conf_channel_t *chdesc, int index) { config_setting_t *setting = NULL; diff --git a/src/conf.h b/src/conf.h index 100c73f..8eb84e2 100644 --- a/src/conf.h +++ b/src/conf.h @@ -50,6 +50,7 @@ typedef enum param { LOGFILE, ADMIN_PASSPHRASE, BAN_LENGTH, + ALLOW_TEXTMESSAGE, } param_t; typedef struct { @@ -71,6 +72,7 @@ bool_t Conf_ok(const char *conffile); const char *getStrConf(param_t param); int getIntConf(param_t param); +bool_t getBoolConf(param_t param); int Conf_getNextChannel(conf_channel_t *chdesc, int index); int Conf_getNextChannelLink(conf_channel_link_t *chlink, int index); diff --git a/src/messagehandler.c b/src/messagehandler.c index f8858c9..5a2269c 100644 --- a/src/messagehandler.c +++ b/src/messagehandler.c @@ -512,6 +512,8 @@ void Mh_handle_message(client_t *client, message_t *msg) break; case TextMessage: + if (!getBoolConf(ALLOW_TEXTMESSAGE)) + break; msg->payload.textMessage->has_actor = true; msg->payload.textMessage->actor = client->sessionId; @@ -617,11 +619,15 @@ void Mh_handle_message(client_t *client, message_t *msg) case PermissionQuery: Msg_inc_ref(msg); /* Re-use message */ msg->payload.permissionQuery->has_permissions = true; + if (client->isAdmin) msg->payload.permissionQuery->permissions = PERM_ADMIN; else msg->payload.permissionQuery->permissions = PERM_DEFAULT; + if (!getBoolConf(ALLOW_TEXTMESSAGE)) + msg->payload.permissionQuery->permissions &= ~PERM_TEXTMESSAGE; + Client_send_message(client, msg); break; case UDPTunnel: -- 2.30.2