#include "channel.h"
#include "class.h"
#include "client.h"
-#include "common.h"
#include "match.h"
#include "ircd.h"
#include "hostmask.h"
static const char kline_desc[] = "Provides the KLINE facility to ban users via hostmask";
-static int mo_kline(struct MsgBuf *, struct Client *, struct Client *, int, const char **);
-static int ms_kline(struct MsgBuf *, struct Client *, struct Client *, int, const char **);
-static int me_kline(struct MsgBuf *, struct Client *, struct Client *, int, const char **);
-static int mo_unkline(struct MsgBuf *, struct Client *, struct Client *, int, const char **);
-static int ms_unkline(struct MsgBuf *, struct Client *, struct Client *, int, const char **);
-static int me_unkline(struct MsgBuf *, struct Client *, struct Client *, int, const char **);
+static void mo_kline(struct MsgBuf *, struct Client *, struct Client *, int, const char **);
+static void ms_kline(struct MsgBuf *, struct Client *, struct Client *, int, const char **);
+static void me_kline(struct MsgBuf *, struct Client *, struct Client *, int, const char **);
+static void mo_unkline(struct MsgBuf *, struct Client *, struct Client *, int, const char **);
+static void ms_unkline(struct MsgBuf *, struct Client *, struct Client *, int, const char **);
+static void me_unkline(struct MsgBuf *, struct Client *, struct Client *, int, const char **);
struct Message kline_msgtab = {
"KLINE", 0, 0, 0, 0,
DECLARE_MODULE_AV2(kline, NULL, NULL, kline_clist, NULL, NULL, NULL, NULL, kline_desc);
/* Local function prototypes */
-static int find_user_host(struct Client *source_p, const char *userhost, char *user, char *host);
-static int valid_user_host(struct Client *source_p, const char *user, const char *host);
+static bool find_user_host(struct Client *source_p, const char *userhost, char *user, char *host);
+static bool valid_user_host(struct Client *source_p, const char *user, const char *host);
static void handle_remote_kline(struct Client *source_p, int tkline_time,
const char *user, const char *host, const char *reason);
const char *, const char *, int);
static void apply_prop_kline(struct Client *source_p, struct ConfItem *aconf,
const char *, const char *, int);
-static int already_placed_kline(struct Client *, const char *, const char *, int);
+static bool already_placed_kline(struct Client *, const char *, const char *, int);
static void handle_remote_unkline(struct Client *source_p, const char *user, const char *host);
static void remove_permkline_match(struct Client *, struct ConfItem *);
-static int remove_temp_kline(struct Client *, struct ConfItem *);
+static bool remove_temp_kline(struct Client *, struct ConfItem *);
static void remove_prop_kline(struct Client *, struct ConfItem *);
/* mo_kline()
* parv[4] - server to target, or reason
* parv[5] - reason
*/
-static int
+static void
mo_kline(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p, int parc, const char **parv)
{
char def[] = "No Reason";
struct ConfItem *aconf;
int tkline_time = 0;
int loc = 1;
- int propagated = ConfigFileEntry.use_propagated_bans;
+ bool propagated = ConfigFileEntry.use_propagated_bans;
if(!IsOperK(source_p))
{
sendto_one(source_p, form_str(ERR_NOPRIVS), me.name, source_p->name, "kline");
- return 0;
+ return;
}
if((tkline_time = valid_temp_time(parv[loc])) >= 0)
tkline_time = 0;
if(find_user_host(source_p, parv[loc], user, host) == 0)
- return 0;
+ return;
loc++;
{
sendto_one(source_p, form_str(ERR_NOPRIVS),
me.name, source_p->name, "remoteban");
- return 0;
+ return;
}
target_server = parv[loc + 1];
{
sendto_one(source_p, form_str(ERR_NEEDMOREPARAMS),
me.name, source_p->name, "KLINE");
- return 0;
+ return;
}
reason = LOCAL_COPY(parv[loc]);
/* If we are sending it somewhere that doesnt include us, stop */
if(!match(target_server, me.name))
- return 0;
+ return;
/* Set as local-only. */
- propagated = 0;
+ propagated = false;
}
/* if we have cluster servers, send it to them.. */
else if(!propagated && rb_dlink_list_length(&cluster_conf_list) > 0)
"%lu %s %s :%s", tkline_time, user, host, reason);
if(!valid_user_host(source_p, user, host))
- return 0;
+ return;
if(!valid_wild_card(user, host))
{
":Please include at least %d non-wildcard "
"characters with the user@host",
ConfigFileEntry.min_nonwildcard);
- return 0;
+ return;
}
if(propagated && tkline_time == 0)
{
sendto_one_notice(source_p, ":Cannot set a permanent global ban");
- return 0;
+ return;
}
if(already_placed_kline(source_p, user, host, tkline_time))
- return 0;
+ return;
rb_set_time();
aconf = make_conf();
if(ConfigFileEntry.kline_delay)
{
- if(kline_queued == 0)
+ if(!kline_queued)
{
rb_event_addonce("check_klines", check_klines_event, NULL,
ConfigFileEntry.kline_delay);
- kline_queued = 1;
+ kline_queued = true;
}
}
else
check_klines();
-
- return 0;
}
/* ms_kline()
* parv[4] - host
* parv[5] - reason
*/
-static int
+static void
ms_kline(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
{
int tkline_time = atoi(parv[2]);
* but its not worth dropping the link over.. --anfl
*/
if(parc < 6 || EmptyString(parv[5]))
- return 0;
+ return;
propagate_generic(source_p, "KLINE", parv[1], CAP_KLN,
"%d %s %s :%s", tkline_time, parv[3], parv[4], parv[5]);
if(!match(parv[1], me.name))
- return 0;
+ return;
if(!IsPerson(source_p))
- return 0;
+ return;
handle_remote_kline(source_p, tkline_time, parv[3], parv[4], parv[5]);
- return 0;
}
-static int
+static void
me_kline(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
{
/* <tkline_time> <user> <host> :<reason> */
if(!IsPerson(source_p))
- return 0;
+ return;
handle_remote_kline(source_p, atoi(parv[1]), parv[2], parv[3], parv[4]);
- return 0;
}
static void
if(ConfigFileEntry.kline_delay)
{
- if(kline_queued == 0)
+ if(!kline_queued)
{
rb_event_addonce("check_klines", check_klines_event, NULL,
ConfigFileEntry.kline_delay);
- kline_queued = 1;
+ kline_queued = true;
}
}
else
check_klines();
-
- return;
}
/* mo_unkline()
* parv[2] - optional "ON"
* parv[3] - optional target server
*/
-static int
+static void
mo_unkline(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
{
const char *user;
char splat[] = "*";
char *h = LOCAL_COPY(parv[1]);
struct ConfItem *aconf;
- int propagated = 1;
+ bool propagated = true;
if(!IsOperUnkline(source_p))
{
sendto_one(source_p, form_str(ERR_NOPRIVS), me.name, source_p->name, "unkline");
- return 0;
+ return;
}
if((host = strchr(h, '@')) || *h == '*' || strchr(h, '.') || strchr(h, ':'))
else
{
sendto_one_notice(source_p, ":Invalid parameters");
- return 0;
+ return;
}
/* possible remote kline.. */
{
sendto_one(source_p, form_str(ERR_NOPRIVS),
me.name, source_p->name, "remoteban");
- return 0;
+ return;
}
propagate_generic(source_p, "UNKLINE", parv[3], CAP_UNKLN, "%s %s", user, host);
if(match(parv[3], me.name) == 0)
- return 0;
+ return;
- propagated = 0;
+ propagated = false;
}
aconf = find_exact_conf_by_address(host, CONF_KILL, user);
if(aconf == NULL)
{
sendto_one_notice(source_p, ":No K-Line for %s@%s", user, host);
- return 0;
+ return;
}
if(aconf->lifetime)
remove_prop_kline(source_p, aconf);
else
sendto_one_notice(source_p, ":Cannot remove global K-Line %s@%s on specific servers", user, host);
- return 0;
+ return;
}
if(remove_temp_kline(source_p, aconf))
- return 0;
+ return;
remove_permkline_match(source_p, aconf);
-
- return 0;
}
/* ms_unkline()
* parv[2] - user to unkline
* parv[3] - host to unkline
*/
-static int
+static void
ms_unkline(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
{
/* parv[0] parv[1] parv[2] parv[3]
propagate_generic(source_p, "UNKLINE", parv[1], CAP_UNKLN, "%s %s", parv[2], parv[3]);
if(!match(parv[1], me.name))
- return 0;
+ return;
if(!IsPerson(source_p))
- return 0;
+ return;
handle_remote_unkline(source_p, parv[2], parv[3]);
- return 0;
}
-static int
+static void
me_unkline(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
{
/* user host */
if(!IsPerson(source_p))
- return 0;
+ return;
handle_remote_unkline(source_p, parv[1], parv[2]);
- return 0;
}
static void
/* find_user_host()
*
* inputs - client placing kline, user@host, user buffer, host buffer
- * output - 0 if not ok to kline, 1 to kline i.e. if valid user host
+ * output - false if not ok to kline, true to kline i.e. if valid user host
* side effects -
*/
-static int
+static bool
find_user_host(struct Client *source_p, const char *userhost, char *luser, char *lhost)
{
char *hostp;
if(strchr(userhost, '.') == NULL && strchr(userhost, ':') == NULL)
{
sendto_one_notice(source_p, ":K-Line must be a user@host or host");
- return 0;
+ return false;
}
luser[0] = '*'; /* no @ found, assume its *@somehost */
if (*luser == ':' || *lhost == ':')
{
sendto_one_notice(source_p, ":Invalid K-Line");
- return 0;
+ return false;
}
- return 1;
+ return true;
}
/* valid_user_host()
*
* inputs - user buffer, host buffer
- * output - 0 if invalid, 1 if valid
+ * output - false if invalid, true if valid
* side effects -
*/
-static int
+static bool
valid_user_host(struct Client *source_p, const char *luser, const char *lhost)
{
/* # is invalid, as are '!' (n!u@h kline) and '@' (u@@h kline) */
if(strchr(lhost, '#') || strchr(luser, '#') || strchr(luser, '!') || strchr(lhost, '@'))
{
sendto_one_notice(source_p, ":Invalid K-Line");
- return 0;
+ return false;
}
- return 1;
+ return true;
}
/* already_placed_kline()
*
* inputs - source to notify, user@host to check, tkline time
- * outputs - 1 if a perm kline or a tkline when a tkline is being
- * set exists, else 0
+ * outputs - true if a perm kline or a tkline when a tkline is being
+ * set exists, else false
* side effects - notifies source_p kline exists
*/
/* Note: This currently works if the new K-line is a special case of an
* existing K-line, but not the other way round. To do that we would
* have to walk the hash and check every existing K-line. -A1kmm.
*/
-static int
+static bool
already_placed_kline(struct Client *source_p, const char *luser, const char *lhost, int tkline)
{
const char *reason, *p;
sendto_one_notice(source_p,
":[%s@%s] already K-Lined by [%s@%s] - %s",
luser, lhost, aconf->user, aconf->host, reason);
- return 1;
+ return true;
}
}
- return 0;
+ return false;
}
/* remove_permkline_match()
remove_reject_mask(aconf->user, aconf->host);
bandb_del(BANDB_KLINE, aconf->user, aconf->host);
delete_one_address_conf(aconf->host, aconf);
-
- return;
}
/* remove_temp_kline()
* outputs -
* side effects - tries to unkline anything that matches
*/
-static int
+static bool
remove_temp_kline(struct Client *source_p, struct ConfItem *aconf)
{
rb_dlink_node *ptr;
rb_dlinkDestroy(ptr, &temp_klines[i]);
remove_reject_mask(aconf->user, aconf->host);
delete_one_address_conf(aconf->host, aconf);
- return YES;
+ return true;
}
}
}
- return NO;
+ return false;
}
static void