X-Git-Url: https://jfr.im/git/solanum.git/blobdiff_plain/5c2b9eaf48d9415af4951fb0529fceefc02de308..b2c208be091670e3c5259eba77187bae6ac6eece:/modules/m_kline.c diff --git a/modules/m_kline.c b/modules/m_kline.c index 46ff7304..f445ec6a 100644 --- a/modules/m_kline.c +++ b/modules/m_kline.c @@ -69,7 +69,6 @@ DECLARE_MODULE_AV1(kline, NULL, NULL, kline_clist, NULL, NULL, "$Revision$"); /* Local function prototypes */ static int find_user_host(struct Client *source_p, const char *userhost, char *user, char *host); -static int valid_comment(struct Client *source_p, char *comment); static int 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, @@ -107,7 +106,7 @@ mo_kline(struct Client *client_p, struct Client *source_p, int parc, const char struct ConfItem *aconf; int tkline_time = 0; int loc = 1; - int propagated = 1; + int propagated = ConfigFileEntry.use_propagated_bans; if(!IsOperK(source_p)) { @@ -166,8 +165,7 @@ mo_kline(struct Client *client_p, struct Client *source_p, int parc, const char (tkline_time > 0) ? SHARED_TKLINE : SHARED_PKLINE, CAP_KLN, "%lu %s %s :%s", tkline_time, user, host, reason); - if(!valid_user_host(source_p, user, host) || - !valid_comment(source_p, reason)) + if(!valid_user_host(source_p, user, host)) return 0; if(!valid_wild_card(user, host)) @@ -197,6 +195,9 @@ mo_kline(struct Client *client_p, struct Client *source_p, int parc, const char aconf->port = 0; aconf->info.oper = operhash_add(get_oper_name(source_p)); + if(strlen(reason) > BANREASONLEN) + reason[BANREASONLEN] = '\0'; + /* Look for an oper reason */ if((oper_reason = strchr(reason, '|')) != NULL) { @@ -287,8 +288,7 @@ handle_remote_kline(struct Client *source_p, int tkline_time, (tkline_time > 0) ? SHARED_TKLINE : SHARED_PKLINE)) return; - if(!valid_user_host(source_p, user, host) || - !valid_comment(source_p, reason)) + if(!valid_user_host(source_p, user, host)) return; if(!valid_wild_card(user, host)) @@ -297,7 +297,7 @@ handle_remote_kline(struct Client *source_p, int tkline_time, ":Please include at least %d non-wildcard " "characters with the user@host", ConfigFileEntry.min_nonwildcard); - return 0; + return; } if(already_placed_kline(source_p, user, host, tkline_time)) @@ -311,6 +311,9 @@ handle_remote_kline(struct Client *source_p, int tkline_time, aconf->host = rb_strdup(host); aconf->info.oper = operhash_add(get_oper_name(source_p)); + if(strlen(reason) > BANREASONLEN) + reason[BANREASONLEN] = '\0'; + /* Look for an oper reason */ if((oper_reason = strchr(reason, '|')) != NULL) { @@ -584,32 +587,11 @@ static void apply_prop_kline(struct Client *source_p, struct ConfItem *aconf, const char *reason, const char *oper_reason, int tkline_time) { - rb_dlink_node *ptr; - struct ConfItem *oldconf; - aconf->flags |= CONF_FLAGS_MYOPER | CONF_FLAGS_TEMPORARY; aconf->hold = rb_current_time() + tkline_time; aconf->lifetime = aconf->hold; - ptr = find_prop_ban(aconf->status, aconf->user, aconf->host); - if(ptr != NULL) - { - oldconf = ptr->data; - /* Remember at least as long as the old one. */ - if(oldconf->lifetime > aconf->lifetime) - aconf->lifetime = oldconf->lifetime; - /* Force creation time to increase. */ - if(oldconf->created >= aconf->created) - aconf->created = oldconf->created + 1; - /* Leave at least one second of validity. */ - if(aconf->hold <= aconf->created) - aconf->hold = aconf->created + 1; - if(aconf->lifetime < aconf->hold) - aconf->lifetime = aconf->hold; - /* Tell deactivate_conf() to destroy it. */ - oldconf->lifetime = rb_current_time(); - deactivate_conf(oldconf, ptr); - } + replace_old_ban(aconf); rb_dlinkAddAlloc(aconf, &prop_bans); add_conf_by_address(aconf->host, CONF_KILL, aconf->user, NULL, aconf); @@ -690,6 +672,13 @@ find_user_host(struct Client *source_p, const char *userhost, char *luser, char rb_strlcpy(lhost, userhost, HOSTLEN + 1); } + /* would break the protocol */ + if (*luser == ':' || *lhost == ':') + { + sendto_one_notice(source_p, ":Invalid K-Line"); + return 0; + } + return 1; } @@ -712,28 +701,6 @@ valid_user_host(struct Client *source_p, const char *luser, const char *lhost) return 1; } -/* - * valid_comment - * inputs - pointer to client - * - pointer to comment - * output - 0 if no valid comment, 1 if valid - * side effects - NONE - */ -static int -valid_comment(struct Client *source_p, char *comment) -{ - if(strchr(comment, '"')) - { - sendto_one_notice(source_p, ":Invalid character '\"' in comment"); - return 0; - } - - if(strlen(comment) > BANREASONLEN) - comment[BANREASONLEN] = '\0'; - - return 1; -} - /* already_placed_kline() * * inputs - source to notify, user@host to check, tkline time