#include "class.h"
#include "client.h"
#include "common.h"
-#include "irc_string.h"
+#include "match.h"
#include "ircd.h"
#include "hostmask.h"
#include "numeric.h"
mo_kline(struct Client *client_p, struct Client *source_p,
int parc, const char **parv)
{
- char def[] = "No Reason";
char user[USERLEN + 2];
char host[HOSTLEN + 2];
char buffer[IRCD_BUFSIZE];
- char *reason = def;
+ char *reason;
char *oper_reason;
const char *current_date;
const char *target_server = NULL;
static int
ms_unkline(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
{
- /* parv[0] parv[1] parv[2] parv[3]
- * oper target server user host */
+ /* source_p parv[1] parv[2] parv[3]
+ * oper target server user host */
propagate_generic(source_p, "UNKLINE", parv[1], CAP_UNKLN,
"%s %s", parv[2], parv[3]);
apply_kline(struct Client *source_p, struct ConfItem *aconf,
const char *reason, const char *oper_reason, const char *current_date)
{
- add_conf_by_address(aconf->host, CONF_KILL, aconf->user, aconf);
+ add_conf_by_address(aconf->host, CONF_KILL, aconf->user, NULL, aconf);
write_confitem(KLINE_TYPE, source_p, aconf->user, aconf->host,
reason, oper_reason, current_date, 0);
}
* its a nick, which support was removed for.
*/
if(strchr(userhost, '.') == NULL && strchr(userhost, ':') == NULL)
+ {
+ sendto_one_notice(source_p, ":K-Line must be a user@host or host");
return 0;
+ }
luser[0] = '*'; /* no @ found, assume its *@somehost */
luser[1] = '\0';
static int
valid_user_host(struct Client *source_p, const char *luser, const char *lhost)
{
- /* # is invalid, as is '!' (n!u@h kline) */
- if(strchr(lhost, '#') || strchr(luser, '#') || strchr(luser, '!'))
+ /* # and " are invalid, as are '!' (n!u@h kline) and '@' (u@@h kline) */
+ if(strchr(lhost, '#') || strchr(luser, '#') || strchr(lhost, '"') ||
+ strchr(luser, '"') || strchr(luser, '!') ||
+ strchr(lhost, '@'))
{
sendto_one_notice(source_p, ":Invalid K-Line");
return 0;
else
piphost = NULL;
- aconf = find_conf_by_address(lhost, NULL, NULL, (struct sockaddr *)piphost, CONF_KILL, t, luser);
+ aconf = find_conf_by_address(lhost, NULL, NULL, (struct sockaddr *)piphost, CONF_KILL, t, luser, NULL);
if (aconf != NULL)
{
/* The above was really a lookup of a single IP,