Пример #1
0
void sync_nicklist(UserList *added, int type)
{
ChannelList *chan;
NickList *nick;
int i;
char *check;
	check = clear_server_flags(added->host);	
	for (i = 0; i < server_list_size(); i ++)
	{
		for (chan = get_server_channels(i); chan; chan = chan->next)
		{
			for (nick = next_nicklist(chan, NULL); nick; nick = next_nicklist(chan, nick))
			{
				if (wild_match(check, nick->host))
				{
					if (type) 
					{
						nick->userlist = added;
						check_auto(chan->channel, nick, chan);
					}
					else 
						nick->userlist = NULL;	
				}
			}
		}
	}
}
Пример #2
0
void remove_all(int type)
{
UserList *tmp;
ShitList *tmp_s, *next_s;
ChannelList *chan;
NickList *nick;
void *location = NULL;
int i = 0;
	
	if (type == -1 || type == USERLIST_REMOVE)
	{
		int size = -1;
		while ((tmp = next_userlist(NULL, &size, &location)))
		{
			if ((tmp = find_userlist(tmp->host, tmp->channels, 1)))
			{
				new_free(&tmp->nick);
				new_free(&tmp->host);
				new_free(&tmp->channels);
				new_free(&tmp->password);
				new_free(&tmp->comment);
				new_free((char **)&tmp);
			}
		}

		user_count  = 0;
		user_list = NULL;
		for (i = 0; i < server_list_size(); i ++)
		{
			for (chan = get_server_channels(i); chan; chan = chan->next)
			{
				for(nick = next_nicklist(chan,NULL); nick; nick = next_nicklist(chan, nick))
					nick->userlist = NULL;	
			}
		}
	}
	if (type == -1 || type == SHITLIST_REMOVE)
	{
		for (tmp_s = shitlist_list; tmp_s; tmp_s = next_s)
		{
			next_s = tmp_s->next;
			sync_shitlist(tmp_s, 0);
			new_free(&tmp_s->filter);
			new_free(&tmp_s->channels);
			new_free(&tmp_s->reason);
			new_free((char **)&tmp_s);
		}
		for (i = 0; i < server_list_size(); i ++)
		{
			for (chan = get_server_channels(i); chan; chan = chan->next)
			{
				for(nick = next_nicklist(chan,NULL); nick; nick = next_nicklist(chan, nick))
						nick->shitlist = NULL;	
			}
		}
		shit_count = 0;
		shitlist_list = NULL;
	}
}
Пример #3
0
void check_channel_limit(ChannelList *chan)
{
	if (chan && chan->csets && chan->csets->set_auto_limit && chan->chop)
	{
		int count = 0;
		NickList *nick;
		for (nick = next_nicklist(chan, NULL); nick; nick = next_nicklist(chan, nick))
			count++;
		set_channel_limit(chan, chan->limit, chan->csets->set_auto_limit, count);
	}
}
Пример #4
0
void limit_channel(CSetArray *var, CSetList *cs)
{
ChannelList *chan;
	if ((chan = lookup_channel(cs->channel, from_server, 0)))
	{
		if (cs->set_auto_limit)
		{
			int count = 0;
			NickList *nick;
			for (nick = next_nicklist(chan, NULL); nick; nick = next_nicklist(chan, nick))
				count++;
			set_channel_limit(chan, chan->limit, cs->set_auto_limit, count);
		} else
			set_channel_limit(chan, chan->limit, 0, 0);
	}
}
Пример #5
0
int delay_opz (void *arg, char *sub)
{
char * args = (char *)arg;
char * from = NULL;
char * host = NULL;
char * channel = NULL;	
char * mode = NULL;
char * serv_num = NULL;
ChannelList *chan = NULL;
int	this_server = from_server;
char *p = (char *) arg; /* original args unmodified  so we can free them */
	

	channel = next_arg(args, &args);
	from = next_arg(args, &args);
	host = next_arg(args, &args);
	mode = next_arg(args, &args);

	if ((serv_num = next_arg(args, &args)))
		this_server = my_atol(serv_num);
	chan = lookup_channel(channel, this_server, 0);
	if (chan && is_on_channel(channel, this_server, from) && chan->chop) 
	{
		NickList *nick;
		for (nick = next_nicklist(chan, NULL); nick; nick = next_nicklist(chan, nick))
		{
			if (!my_stricmp(nick->nick, from))
			{
				if (!my_stricmp(host, nick->host))
					break;
				else
				{
					new_free(&p); new_free(&sub);
					return 0;
				}
			}
		}
		if (nick && ((!nick_isop(nick) && *mode == 'o') || (!nick_isvoice(nick) && *mode == 'v')))
		{
			my_send_to_server(this_server, "MODE %s +%s %s", channel, mode, from); 
			if (get_int_var(SEND_OP_MSG_VAR))
				my_send_to_server(this_server, "NOTICE %s :You have been delay Auto-%s'd", from, *mode == 'o'? "op":"voice");
		}
	}
	new_free(&p); new_free(&sub);
	return 0;
}
Пример #6
0
NickList *BX_sorted_nicklist(ChannelList *chan, int sort)
{
	NickList *tmp, *l = NULL, *list = NULL, *last = NULL;
	for (tmp = next_nicklist(chan, NULL); tmp; tmp = next_nicklist(chan, tmp))
	{
		l = (NickList *)new_malloc(sizeof(NickList));
		memcpy(l, tmp, sizeof(NickList));
		l->next = NULL;
		switch(sort)
		{
			case NICKSORT_HOST:
				add_to_list_ext((List **)&list, (List *)l, cmp_host);
				break;
			case NICKSORT_STAT:
				add_to_list_ext((List **)&list, (List *)l, cmp_stat);
				break;
			case NICKSORT_TIME:
				add_to_list_ext((List **)&list, (List *)l, cmp_time);
				break;
			case NICKSORT_IP:
				add_to_list_ext((List **)&list, (List *)l, cmp_ip);
				break;
			case NICKSORT_NONE:
				if (last)
					last->next = l;
				else
					list = l;
				break;
			default:
			case NICKSORT_NICK:
			case NICKSORT_NORMAL:
				add_to_list((List **)&list, (List *)l);
				break;
		}
		last = l;
	}
	return list;
}
Пример #7
0
int delay_check_auto (char *channel)
{
	ChannelList *chan = NULL;
	char *buffer = NULL;
	NickList *possible;	

	
	if (!channel || !*channel)
		return -1;
		
	if ((chan = lookup_channel(channel, from_server, CHAN_NOUNLINK)) == NULL)	
		return -1;

	for (possible = next_nicklist(chan, NULL); possible; possible = next_nicklist(chan, possible))
	{
		if ((possible->shitlist || possible->userlist) && (!(possible->sent_reop < 4) || !(possible->sent_deop < 4)))
		{
			malloc_sprintf(&buffer, "%s %s %s %d", channel, possible->nick, possible->host, from_server);
			add_timer(0, empty_string, 3 * 1000, 1, real_check_auto, buffer, NULL, -1, "check-auto");
		}
	}
	add_timer(0, empty_string, 5 * 1000, 1, delay_flush_all, m_sprintf("%s %d", channel, from_server), NULL, -1, "check-auto");
	return 0;
}
Пример #8
0
void sync_shitlist(ShitList *added, int type)
{
ChannelList *chan;
NickList *nick;
int i;
char tmp[BIG_BUFFER_SIZE+1];
char *check;
	
	for (i = 0; i < server_list_size(); i ++)
	{
		for (chan = get_server_channels(i); chan; chan = chan->next)
		{
			for (nick = next_nicklist(chan, NULL); nick; nick = next_nicklist(chan, nick))
			{
				check = clear_server_flags(nick->host);
				sprintf(tmp, "%s!%s", nick->nick, check);
				if (wild_match(added->filter, tmp))
				{
					if (type) 
					{
						nick->shitlist = added;
						check_auto(chan->channel, nick, chan);
					}
					else
					{
						BanList *b = NULL;
						nick->shitlist = NULL;
						if ((b = ban_is_on_channel(tmp, chan)) && !eban_is_on_channel(tmp, chan))
							add_mode(chan, "b", 0, b->ban, NULL, get_int_var(NUM_BANMODES_VAR));
					}
				}
			}
			flush_mode_all(chan);
		}
	}
}
Пример #9
0
void send_line(char dumb, char *dumber)
{
    int server;
    WaitPrompt *OldPrompt;

    server = from_server;
    from_server = get_window_server(0);
    unhold_a_window(curr_scr_win);
    if (current_screen->promptlist && current_screen->promptlist->type == WAIT_PROMPT_LINE) {
	OldPrompt = current_screen->promptlist;
	(*OldPrompt->func) (OldPrompt->data, get_input());
	set_input(empty_str);
	current_screen->promptlist = OldPrompt->next;
	new_free(&OldPrompt->data);
	new_free(&OldPrompt->prompt);
	new_free(&OldPrompt);
	change_input_prompt(-1);
    } else {
	char *line, *tmp = NULL;

	line = get_input();
	if (line && (*line != get_int_var(CMDCHARS_VAR)) && get_int_var(NICK_COMPLETION_VAR)) {
	    char auto_comp_char = ':';

	    if (!(auto_comp_char = (char) get_int_var(NICK_COMPLETION_CHAR_VAR)))
		auto_comp_char = ':';

	    /* possible nick completion */
	    if (strchr(line, auto_comp_char)) {
		char *p;
		struct channel *chan;
		struct nick_list *nick;
		char *channel;

		malloc_strcpy(&tmp, line);
		p = strchr(tmp, auto_comp_char);
		*p++ = 0;
		if (*tmp && *p && (channel = get_current_channel_by_refnum(0))) {
		    chan = lookup_channel(channel, from_server, 0);
		    for (nick = next_nicklist(chan, NULL); nick; nick = next_nicklist(chan, nick))
			if (!my_strnicmp(tmp, nick->nick, strlen(tmp)))
			    break;
		    if (nick) {
			if (get_fset_var(FORMAT_NICK_COMP_FSET))
			    malloc_strcpy(&tmp,
					  stripansicodes(convert_output_format
							 (get_fset_var(FORMAT_NICK_COMP_FSET), "%s %s", nick->nick, p)));
			else
			    malloc_sprintf(&tmp, "%s%c %s", nick->nick, auto_comp_char, p);
		    } else
			malloc_strcpy(&tmp, line);
		} else
		    malloc_strcpy(&tmp, line);
	    } else
		malloc_strcpy(&tmp, line);
	} else
	    malloc_strcpy(&tmp, line);
	if (do_hook(INPUT_LIST, "%s", tmp)) {
	    if (get_int_var(INPUT_ALIASES_VAR))
		parse_line(NULL, tmp, empty_str, 1, 0);
	    else
		parse_line(NULL, tmp, NULL, 1, 0);
	}
	update_input(UPDATE_ALL);
	new_free(&tmp);
    }
    new_free(&input_lastmsg);
    *new_nick = 0;
    in_completion = STATE_NORMAL;
    from_server = server;
}
Пример #10
0
static NickTab *getnextnick(char *input_nick, char *oldnick, char *nick)
{
    struct channel *chan;
    struct nick_list *cnick = NULL;
    NickTab *tmp = tabkey_array;
    int server = from_server;
    static NickTab sucks = { NULL };

    if (tmp && (in_completion == STATE_NORMAL || in_completion == STATE_TABKEY)) {

	if (!oldnick && !nick && tmp) {
	    in_completion = STATE_TABKEY;
	    return tmp;
	}
	if (oldnick) {
	    for (; tmp; tmp = tmp->next) {
		if (!my_strnicmp(oldnick, tmp->nick, strlen(oldnick)))
		    break;
	    }
	    /* nick was not in the list. oops didn't come from here */
	    if (!tmp && in_completion == STATE_TABKEY)
		tmp = tabkey_array;
	    else if (tmp)
		tmp = tmp->next;
	}
	if (nick && in_completion != STATE_TABKEY) {
	    if (tmp && tmp->next) {
		for (; tmp; tmp = tmp->next)
		    if (!my_strnicmp(nick, tmp->nick, strlen(nick)))
			break;
	    }
	}
	if (tmp) {
	    in_completion = STATE_TABKEY;
	    return tmp;
	}
    }

    if ((chan = prepare_command(&server, NULL, 3))) {
	cnick = next_nicklist(chan, NULL);
	/* 
	 * we've never been here before so return first nick 
	 * user hasn't entered anything on the line.
	 */
	if (!oldnick && !nick && cnick) {
	    in_completion = STATE_CNICK;
	    sucks.nick = cnick->nick;
	    return &sucks;
	}
	/* 
	 * user has been here before so we attempt to find the correct
	 * first nick to start from.
	 */
	if (oldnick) {
	    /* find the old nick so we have a frame of reference */
	    for (; cnick; cnick = next_nicklist(chan, cnick)) {
		if (!my_strnicmp(cnick->nick, oldnick, strlen(oldnick))) {
		    cnick = next_nicklist(chan, cnick);
		    break;
		}
	    }
	}
	/* 
	 * if the user has put something on the line
	 * we attempt to pattern match here.
	 */
	if (input_nick) {
	    /* 
	     * if oldnick was the last one in the channel 
	     * cnick will be NULL;
	     */
	    if (!cnick && oldnick)
		cnick = next_nicklist(chan, NULL);
	    /* we have a new nick */
	    else if (cnick) {
		/* 
		 * if there's more than one nick, start 
		 * scanning.
		 */
		for (; cnick; cnick = next_nicklist(chan, cnick)) {
		    if (!my_strnicmp(cnick->nick, input_nick, strlen(input_nick)) || !strcasecmp(cnick->nick, input_nick))
			break;
		}
	    }
	}
    }
    if (!cnick)
	in_completion = STATE_NORMAL;
    else
	in_completion = STATE_CNICK;
    if (cnick)
	sucks.nick = cnick->nick;
    return sucks.nick ? &sucks : NULL;
}
Пример #11
0
static char *getchannick(char *oldnick, char *nick)
{
    struct channel *chan;
    char *channel, *tnick = NULL;
    struct nick_list *cnick;

    channel = get_current_channel_by_refnum(0);
    if (channel) {
	if (!(chan = lookup_channel(channel, from_server, 0)) || !(cnick = next_nicklist(chan, NULL))) {
	    in_completion = STATE_NORMAL;
	    return NULL;
	}
	/* 
	 * we've never been here before so return first nick 
	 * user hasn't entered anything on the line.
	 */
	if (!oldnick && !nick && cnick) {
	    in_completion = STATE_CNICK;
	    return cnick->nick;
	}
	/* 
	 * user has been here before so we attempt to find the correct
	 * first nick to start from.
	 */
	if (oldnick) {
	    /* find the old nick so we have a frame of reference */
	    for (cnick = next_nicklist(chan, NULL); cnick; cnick = next_nicklist(chan, cnick)) {
		if (!my_strnicmp(cnick->nick, oldnick, strlen(oldnick))) {
		    tnick = cnick->nick;
		    if ((cnick = next_nicklist(chan, cnick)))
			tnick = cnick->nick;
		    break;

		}

	    }
	}
	/* 
	 * if the user has put something on the line
	 * we attempt to pattern match here.
	 */
	if (nick && in_completion == STATE_NORMAL) {
	    /* 
	     * if oldnick was the last one in the channel 
	     * cnick will be NULL;
	     */
	    if (!cnick) {
		cnick = next_nicklist(chan, NULL);
		tnick = cnick->nick;
	    }
	    /* we have a new nick */
	    else if (next_nicklist(chan, cnick)) {
		/* 
		 * if there's more than one nick, start 
		 * scanning.
		 */
		for (; cnick; cnick = next_nicklist(chan, cnick)) {
		    if (!my_strnicmp(cnick->nick, nick, strlen(nick))) {
			tnick = cnick->nick;
			break;
		    }
		}
	    } else
		tnick = cnick->nick;
	} else if (in_completion == STATE_CNICK) {
	    /* 
	     * else we've been here before so
	     * attempt to continue through the nicks 
	     */
	    if (!cnick)
		cnick = next_nicklist(chan, NULL);
	    tnick = cnick->nick;
	}
    }
    if (tnick)
	in_completion = STATE_CNICK;

    return tnick;
}
Пример #12
0
void sort_scan (IrcCommandDll *this_not_used, char *called, char *args, char *subargs)
{
	int numberofpeople = 0, server = -1;
	char *channel = NULL, *qbert = NULL;
	ChannelList *chanlist;
	NickList *anick, *ops = NULL, *nops = NULL, *voice = NULL, *tmp = NULL;
	
	if (!(chanlist = prepare_command (&server, channel, NO_OP)) )
		return;

	for (anick = next_nicklist (chanlist, NULL); anick; anick = next_nicklist (chanlist, anick))
	{
		if (!nick_isop(anick) && !nick_isvoice(anick))
		{
			tmp = (NickList *)new_malloc (sizeof (NickList));
			memcpy (tmp, anick, sizeof (NickList));
			tmp -> next = NULL;
			add_to_list ((List **)&nops, (List *)tmp);
		}
		else if (nick_isvoice(anick) && !nick_isop(anick))
		{
			tmp = (NickList *)new_malloc (sizeof (NickList));
			memcpy (tmp, anick, sizeof (NickList));
			tmp -> next = NULL;
			add_to_list ((List **)&voice, (List *)tmp);
		}
		else if (nick_isop(anick))
		{
			tmp = (NickList *)new_malloc (sizeof (NickList));
			memcpy (tmp, anick, sizeof (NickList));
			tmp -> next = NULL;
			add_to_list ((List **)&ops, (List *)tmp);
		}
		numberofpeople++;
	}

	put_it ("%s", convert_output_format (fget_string_var (FORMAT_NAMES_FSET), "%s %s %d %s", update_clock (GET_TIME), chanlist -> channel, numberofpeople, space));
	
	numberofpeople = 0;
	for (anick = ops; anick; anick = anick -> next)
	{
		malloc_strcat (&qbert, convert_output_format (fget_string_var (FORMAT_NAMES_OPCOLOR_FSET), "@ %s", anick -> nick));
		malloc_strcat (&qbert, space);
		if (numberofpeople++ == 4)
		{
			if (fget_string_var (FORMAT_NAMES_BANNER_FSET))
				put_it ("%s%s", convert_output_format (fget_string_var(FORMAT_NAMES_BANNER_FSET), NULL, NULL), qbert);
			else
				put_it ("%s", qbert);
			new_free (&qbert);
			numberofpeople = 0;
		}
	}
	for (anick = voice; anick; anick = anick -> next)
	{
		malloc_strcat (&qbert, convert_output_format (fget_string_var(FORMAT_NAMES_VOICECOLOR_FSET), "+ %s", anick -> nick));
		malloc_strcat (&qbert, space);
		if (numberofpeople++ == 4)
		{
			if (fget_string_var (FORMAT_NAMES_BANNER_FSET))
				put_it ("%s%s", convert_output_format (fget_string_var(FORMAT_NAMES_BANNER_FSET), NULL, NULL), qbert);
			else
				put_it ("%s", qbert);
			new_free (&qbert);
			numberofpeople = 0;
		}
	}
	for (anick = nops; anick; anick = anick -> next)
	{
		malloc_strcat (&qbert, convert_output_format (fget_string_var(FORMAT_NAMES_NICKCOLOR_FSET), "$ %s", anick -> nick));
		malloc_strcat (&qbert, space);
		if (numberofpeople++ == 4)
		{
			if (fget_string_var (FORMAT_NAMES_BANNER_FSET))
				put_it ("%s%s", convert_output_format (fget_string_var(FORMAT_NAMES_BANNER_FSET), NULL, NULL), qbert);
			else
				put_it ("%s", qbert);
			new_free (&qbert);
			numberofpeople = 0;
		}
	}
	if (numberofpeople && qbert)
	{
		if (fget_string_var (FORMAT_NAMES_BANNER_FSET))
			put_it ("%s%s", convert_output_format (fget_string_var (FORMAT_NAMES_BANNER_FSET), NULL, NULL), qbert);
		else
			put_it ("%s", qbert);
	}
	new_free (&qbert);

	if (fget_string_var (FORMAT_NAMES_FOOTER_FSET))
		put_it ("%s", convert_output_format (fget_string_var (FORMAT_NAMES_FOOTER_FSET), NULL, NULL));
	clear_sorted_nicklist (&ops);
	clear_sorted_nicklist (&nops);
	clear_sorted_nicklist (&voice);
}
Пример #13
0
/*
 *  Protection levels
 *  1 Reop if de-oped
 *  2 De-op offender
 *  3 Kick  offender
 *  4 KickBan offender
 */
int check_prot(char *from, char *person, ChannelList *chan, BanList *thisban, NickList *n)
{
NickList *tmp = NULL;
NickList *kicker;
char *tmp_ban = NULL;
char *nick = NULL, *userhost = NULL, *p;

	
	if (!from || !*from || !person || !*person || !chan)
		return 0;

	if (!my_stricmp(person, from))
		return 0;

	tmp_ban = LOCAL_COPY(person);
	if ((p = strchr(tmp_ban, '!')))
	{
		nick = tmp_ban;
		*p++ = 0;
		userhost  = p;
	} else nick = person;

	if (!n)
	{
		if (!(tmp = find_nicklist_in_channellist(person, chan, 0)))
		{
			for (tmp = next_nicklist(chan, NULL); tmp; tmp = next_nicklist(chan, tmp))
			{
				if (wild_match(nick, tmp->nick) && wild_match(userhost, tmp->host) && tmp->userlist)
				{
					n = tmp;
					break;
				}
			}
		}
	}

	if (get_cset_int_var(chan->csets, USERLIST_CSET) && chan->chop && ((n && n->userlist) || 
		(tmp && tmp->userlist)))
	{
		UserList *user = NULL;		
		time_t current = now;
		if (n)
			user = n->userlist;
		else
			user = tmp->userlist;
		if (!user || (user && !check_channel_match(user->channels, chan->channel)))
			return 0;
		if (!(kicker = find_nicklist_in_channellist(from, chan, 0)))
			return 0;
		if ((user->flags & (PROT_DEOP | PROT_INVITE | PROT_BAN | PROT_KICK | PROT_REOP)))
		{
			int do_reop = 0;
			if (user->flags & PROT_DEOP)
			{
				if (!kicker->sent_deop)
				{
					if (!kicker->userlist || 
						(kicker->userlist && !(kicker->userlist->flags & PROT_DEOP)))
						send_to_server("MODE %s -o %s", chan->channel, from);
					kicker->sent_deop++;
				}
				do_reop = 1;
			}

			if (user->flags & PROT_INVITE)
			{
				
				if (thisban && !thisban->sent_unban)
				{
					thisban->sent_unban++;
					thisban->sent_unban_time = current;
					send_to_server("MODE %s -b %s", chan->channel, thisban->ban);
					send_to_server("INVITE %s %s", n?n->nick:tmp->nick, chan->channel);  
				}
			}
			if (user->flags & PROT_BAN)
			{
/*				do_reop = 1; */
				if (kicker->userlist)
					send_to_server("MODE %s -o %s", chan->channel, from);
				else 
				{
					char *h, *u;
					u = LOCAL_COPY(kicker->host);
					h = strchr(u, '@');
					*h++ = 0;
					send_to_server("MODE %s -o+b %s %s", chan->channel, kicker->nick, ban_it(kicker->nick, u, h, kicker->ip));
					if (get_int_var(AUTO_UNBAN_VAR))
						add_timer(0, empty_string, get_int_var(AUTO_UNBAN_VAR) * 1000, 1, timer_unban, m_sprintf("%d %s %s", from_server, chan->channel, ban_it(kicker->nick, u, h, kicker->ip)), NULL, -1, "auto-unban");
				}
			}
			if (user->flags & PROT_KICK)
			{
				if (kicker && (!kicker->userlist || (kicker->userlist && !(kicker->userlist->flags & PROT_KICK))))
					send_to_server("KICK %s %s :\002BitchX\002 Protected User", chan->channel, kicker->nick);
			}
			if ((user->flags & PROT_REOP) || do_reop)
			{
				/* added by Sergs [email protected] */
			        if (thisban)
				{
					if (thisban->sent_unban_time - current > 30)
					{
						thisban->sent_unban++;
						thisban->sent_unban_time = current;
						send_to_server("MODE %s -b %s", chan->channel, thisban->ban);
					} 
					else if (thisban->sent_unban < 3)
					{
						thisban->sent_unban++;
						thisban->sent_unban_time = current;
						send_to_server("MODE %s -b %s", chan->channel, thisban->ban);
					}
				}
				if (n && (!n->sent_reop || (n->sent_reop_time && (current - n->sent_reop_time > 60))))
				{
					char *u = NULL;
					malloc_sprintf(&u, "%s %s %s %s %d", chan->channel, n->nick, n->host, "o", from_server);
					add_timer(0, empty_string, 10 * 1000, 1, delay_opz, u, NULL, -1, "delay-ops");
					n->sent_reop++;
					n->sent_reop_time = current;
				}
			}
		}
		if ((user->flags & USER_FLAG_PROT) && (p = get_string_var(USER_FLAG_PROT_VAR)))
			run_user_flag("USER_FLAG_PROT", p, n, kicker);
		return 1;
	}
	return 0;
}