Exemple #1
0
void ec_access(char *from, char *to)
{
	char	num[20];

	sprintf(num,"%i",get_useraccess(from,to));
	nobo_strcpy(num);
}
Exemple #2
0
void do_rshit(COMMAND_ARGS)
{
	/*
	 *  on_msg checks: CARGS
	 */
	Shit	*shit;
	char	*chan,*nick,*nuh;
	int	uaccess;

	chan = chop(&rest);
	if (!chan || !*chan || (!ischannel(chan) && *chan != '*'))
	{
		usage(from);	/* usage for CurrentCmd->name */
		return;
	}

	if ((uaccess = get_useraccess(from,chan)) < cmdaccess)
		return;

	if ((nick = chop(&rest)) == NULL)
	{
		to_user(from,"No nick or userhost specified");
		return;
	}
	if ((nuh = nick2uh(from,nick)) == NULL)
		return;
	if ((shit = find_shit(nuh,chan)) == NULL)
	{
		to_user(from,"%s is not in my shit list on that channel",nuh);
		return;
	}
	if ((get_useraccess(shit->from,chan)) > uaccess)
	{
		to_user(from,"The person who did this shitlist has a higher level than you");
		return;
	}
	remove_shit(shit);
	to_user(from,"User %s is no longer being s*****d on %s",nuh,chan);
}
Exemple #3
0
int spy_source(char *from, int *t_src, const char **src)
{
	int	i;

#ifdef DEBUG
	debug("(spy_source) t_src %i, src %s\n",*t_src,*src);
#endif /* ifdef DEBUG */

	for(i=0;spy_source_list[i].idstring;i++)
	{
		if (!stringcasecmp(*src,spy_source_list[i].idstring))
		{
			*src = spy_source_list[i].idstring;
			*t_src = spy_source_list[i].typenum;
			return(200);
		}
	}
	*t_src = SPY_CHANNEL;
	if (!ischannel(*src))
		return(-1);
	return(get_useraccess(from,*src));
}
Exemple #4
0
void do_kicksay(COMMAND_ARGS)
{
	/*
	 *  on_msg checks: CARGS
	 */
	KickSay *kick;
	char	*channel,*mask;
	int	inum;

	channel = chop(&rest);
	if (!channel)
	{
		if (!current->kicklist)
		{
			to_user(from,"Kicksay list is empty");
			return;
		}

		if (dcc_only_command(from))
			return;

		table_buffer("\037channel\037\t\037action\037\t\037string\037\t\037kick reason\037");
		for(kick=current->kicklist;kick;kick=kick->next)
		{
			table_buffer("%s\t%s\t%s\t%s",kick->chan,ks_actions[kick->action],kick->mask,kick->reason);
		}
		table_send(from,2);
		return;
	}

	if (ischannel(channel) || *channel == '*')
	{

		if (get_useraccess(from,channel) < cmdaccess)
			return;

		inum = DEFAULT_KS_LEVEL;
		if (*rest != '"')
		{
			inum = a2i(chop(&rest));
			if (errno || inum < 0 || inum > MAX_KS_LEVEL)
				return;
		}

		mask = get_token(&rest,"\"");

		if (!mask || !*mask)
			goto usage;

		/*
		 *  check for previously existing kicks
		 */
		if ((kick = find_kicksay(mask,channel)) != NULL)
		{
			to_user(from,"I'm already kicking on \"%s\"",kick->mask);
			return;
		}

		/*
		 *  dig out the reason (the rest)
		 */
		while(rest && *rest == ' ')
			rest++;
		if (!*rest)
			goto usage;

		/*
		 *  add it to the list
		 */
		set_mallocdoer(do_kicksay);
		kick = (KickSay*)Calloc(sizeof(KickSay) + Strlen(channel,mask,rest,NULL));

		kick->next = current->kicklist;
		current->kicklist = kick;
		kick->action = inum;

		if (!matches("\\*?*\\*",mask))
			kick->chan = Strcpy(kick->mask,mask) + 1;
		else
		{
			kick->mask[0] = '*';
			Strcpy(kick->mask+1,mask);
			kick->chan = Strcat(kick->mask,MATCH_ALL) + 1;
		}
		kick->reason = Strcpy(kick->chan,channel) + 1;
				Strcpy(kick->reason,rest);

		to_user(from,"Now kicking on \"%s\" on %s",mask,channel);
		current->ul_save++;
		return;
	}
usage:
	usage(from);	/* usage for CurrentCmd->name */
}
Exemple #5
0
/*
 *  SHIT <channel|*> <nick|mask> <action> [expire] <reason>
 */
void do_shit(COMMAND_ARGS)
{
	/*
	 *  on_msg checks CARGS
	 */
	char	*channel,*nick,*nuh;
	int	shitlevel,days,uaccess,shitaccess;

	if (CurrentCmd->name == C_QSHIT)
	{
		channel = MATCH_ALL;
	}
	else
	{
		channel = chop(&rest);
		if (!ischannel(channel) && *channel != '*')
		{
		usage:
			usage(from);	/* usage for CurrentCmd->name */
			return;
		}
	}

	if ((uaccess = get_useraccess(from,channel)) < cmdaccess)
		return;

	if ((nick = chop(&rest)) == NULL)
		goto usage;

	if (CurrentCmd->name == C_QSHIT)
	{
		shitlevel = DEFAULTSHITLEVEL;
		days = 86400 * DEFAULTSHITLENGTH;
		if (*rest == 0)
			rest = TEXT_DEFAULTSHIT;
	}
	else
	{
		shitlevel = asc2int(chop(&rest));
		if (errno)
			goto usage;

		if (shitlevel < 1 || shitlevel > MAXSHITLEVEL)
		{
			to_user(from,"Valid levels are from 1 thru " MAXSHITLEVELSTRING);
			return;
		}

		/*
		 *  option: expire in XXX days
		 */
		days = 86400 * 30;
		if (*rest >= '1' && *rest <= '9')
		{
			days = 86400 * asc2int(chop(&rest));
			if (errno)
				goto usage;
		}

		if (*rest == 0)
			goto usage;
	}


#ifdef CHANBAN
	if (shitlevel == SHIT_CHANBAN)
	{
		nuh = nick;
	}
	else
#endif /* CHANBAN */
	{
		if ((nuh = nick2uh(from,nick)) == NULL)
			return;

		if (find_shit(nuh,channel))
		{
			to_user(from,TEXT_ALREADYSHITTED,nuh);
			return;
		}

		if (uaccess != OWNERLEVEL)
		{
			shitaccess = get_useraccess(nuh,channel);
			if (shitaccess > uaccess)
			{
				to_user(from,TEXT_SHITLOWACCESS,nuh);
				return;
			}
		}

		format_uh(nuh,FUH_USERHOST);
	}

#ifdef DEBUG
	debug("(do_shit) adding %s to %s (Level %i)\n",nuh,channel,shitlevel);
#endif /* DEBUG */
	add_shit(from,channel,nuh,rest,shitlevel,now + days);

	to_user(from,TEXT_HASSHITTED,nuh,channel);
	to_user(from,TEXT_SHITEXPIRES,time2str(now + days));

	check_shit();
}
Exemple #6
0
void do_set(COMMAND_ARGS)
{
	/*
	 *  on_msg checks:
	 */
	Chan	*chan;
	UniVar	*univar,*varval;
	char	tmp[MSGLEN];
	char	*pp,*channel,*name;
	int	n,which,i,sz,limit,uaccess;

	/*
	 *
	 */
	channel = get_channel2(to,&rest);
	chan = find_channel_ny(channel);
	name = chop(&rest);

	/*
	 *  empty args, its "set" or "set #channel"
	 */
	if (!name)
	{
		if (!chan)
		{
			to_user(from,ERR_CHAN,channel);
			return;
		}

		if (!CurrentDCC)
			return;

		i = CHANSET_SIZE;
		limit = SIZE_VARS - 1;
		univar = current->setting;
		*tmp = 0;
		if ((uaccess = get_useraccess(from,GLOBAL_CHANNEL)))
			to_user(from,str_underline("Global settings"));
second_pass:
		for(;i<limit;i++)
		{
			if (uaccess < VarName[i].uaccess)
				continue;

			varval = (IsProc(i)) ? current->setting[i].proc_var : &univar[i];

			sz = Strlen2(tmp,VarName[i].name);

			if (IsStr(i))
			{
				sz += (varval->str_var) ? strlen(varval->str_var) : 7;
			}

			if (sz > 58)
			{
				to_user(from,FMT_PLAIN,tmp);
				*tmp = 0;
			}

			if (IsInt(i))
			{
				pp = tolowercat(tmp,VarName[i].name);
				sprintf(pp,(IsChar(i)) ? "=`%c' " : "=%i ",varval->int_var);
			}
			else
			if (IsStr(i))
			{
				pp = tolowercat(tmp,VarName[i].name);
				sprintf(pp,(varval->str_var) ? "=\"%s\" " : "=(unset) ",varval->str_var);
			}
			else
			if (IsTog(i))
			{
				pp = Strcat(tmp,(varval->int_var) ? "+" : "-");
				pp = tolowercat(pp,VarName[i].name);
				pp[0] = ' ';
				pp[1] = 0;
			}
		}
		if (*tmp && tmp[1])
			to_user(from,FMT_PLAIN,tmp);

		if (limit != CHANSET_SIZE)
		{
			to_user(from,"\037Channel settings: %s\037",(chan) ? chan->name : rest);
			i = 0;
			limit = CHANSET_SIZE;
			univar = chan->setting;
			*tmp = 0;
			uaccess = get_useraccess(from,(chan) ? chan->name : rest);
			goto second_pass;
		}
		return;
	}

	/*
	 *  alter a setting
	 */
	if ((which = find_setting(name)) == -1)
	{
set_usage:
		usage(from);	/* usage for CurrentCmd->name */
		return;
	}

	if ((which < CHANSET_SIZE) && *channel != '*')
	{
		if (!chan)
		{
			to_user(from,ERR_CHAN,channel);
			return;
		}
		/*
		 *  its a channel setting
		 */
		channel = chan->name;
		varval = &chan->setting[which];
	}
	else
	{
		/*
		 *  its a global setting
		 */
		channel = MATCH_ALL;
		varval = &current->setting[which];
	}

	if (VarName[which].uaccess > get_authaccess(from,channel))
		return;

	/*
	 *  Check each type and process `rest' if needed.
	 */
	n = 0;
	if (IsChar(which))
	{
		if (rest[1])
			goto set_usage;
	}
	else
	if (IsNum(which))
	{
		if (IsTog(which))
		{
			if (!Strcasecmp(rest,"ON"))
			{
				n = 1;
				goto num_data_ok;
			}
			else
			if (!Strcasecmp(rest,"OFF"))
			{
				/* n is 0 by default */
				goto num_data_ok;
			}
		}
		n = a2i((rest = chop(&rest)));
		if (errno || n < VarName[which].min || n > VarName[which].max)
		{
			to_user(from,"Possible values are %i through %i",VarName[which].min,VarName[which].max);
			return;
		}
	}
num_data_ok:
	/*
	 *
	 */
	if ((which < CHANSET_SIZE) && *channel == '*')
	{
		for(chan=current->chanlist;chan;chan=chan->next)
		{
			if (IsNum(which))
			{
				chan->setting[which].int_var = n;
			}
			else
			if (IsStr(which))
			{
				Free((char**)&chan->setting[which].str_var);
				if (*rest)
				{
					set_mallocdoer(do_set);
					chan->setting[which].str_var = Strdup(rest);
				}
			}
		}
		channel = "(all channels)";
	}
	else
	{
		if (IsProc(which))
			varval = varval->proc_var;

		if (IsChar(which))
			varval->char_var = *rest;
		else
		if (IsNum(which))
			varval->int_var = n;
		else
		{
			if (varval->str_var)
				Free((char**)&varval->str_var);
			if (*rest)
			{
				set_mallocdoer(do_set);
				varval->str_var = Strdup(rest);
			}
		}
	}
	to_user(from,"Var: %s   On: %s   Set to: %s",VarName[which].name,
		(which >= CHANSET_SIZE) ? "(global)" : channel,(*rest) ? rest : NULLSTR);
	if (VarName[which].func)
		VarName[which].func(&VarName[which]);
}
Exemple #7
0
void ec_set(char *from, char *to)
{
	Chan	*chan;
	UniVar	*varval;
	char	num[20];
	char	*src;
	int	which,uaccess;

	src = ec_src;
	while(*src && *src != ')')
		src++;
	if (*src != ')')
		return;
	*(src++) = 0;

	if ((which = find_setting(ec_src)) >= 0)
	{
		if (which >= CHANSET_SIZE)
		{
			uaccess = get_useraccess(from,ANY_CHANNEL);
			varval = &current->setting[which];
		}
		else
		if ((chan = find_channel_ny(to)))
		{
			uaccess = get_useraccess(from,to);
			varval = &chan->setting[which];
		}
		else
		{
			nobo_strcpy("(unknown channel)");
			return;
		}
		if (uaccess < VarName[which].uaccess)
			return;

		if (IsProc(which))
			varval = varval->proc_var;

		if (IsChar(which))
		{
			num[0] = varval->char_var;
			num[1] = 0;
			nobo_strcpy(num);
		}
		else
		if (IsInt(which))
		{
			sprintf(num,"%i",varval->int_var);
			nobo_strcpy(num);
		}
		else
		if (IsTog(which))
		{
			nobo_strcpy((varval->int_var) ? "on" : "off");
		}
		else
		if (IsStr(which))
		{
			nobo_strcpy(nullstr(varval->str_var));
		}
	}
	else
	{
		nobo_strcpy("(unknown setting)");
	}
	ec_src = src;
}