Exemplo n.º 1
0
int				execute_simple_command(t_tree *tree, t_shell **shell)
{
	int			flag;
	int			statut;
	pid_t		pid;

	statut = 0;
	if (is_builtin(tree->argv[0]))
		return (builtins_center(shell, tree));
	if (tree && (flag = prepare_command(tree, *shell)) != EXIT_SUCCESS)
		return (flag);
	if ((pid = fork()) == 0)
	{
		dup2(tree->fd[0], STDIN_FILENO);
		dup2(tree->fd[1], STDOUT_FILENO);
		if ((execve(tree->argv[0], tree->argv, (*shell)->envc)) == -1)
			perror(strerror(errno));
		exit(0);
	}
	else if (pid > 0)
	{
		if (waitpid(pid, &statut, 0) == -1)
			perror("Waitpid");
		return (write_statut(statut));
	}
	return (FATAL_ERROR);
}
Exemplo n.º 2
0
object queue_server_command(tuple args, dict kwargs)
{
	std::string szCommand;
	ConCommand* pCommand;
	prepare_command(args, kwargs, &pCommand, &szCommand);
	szCommand += ";";
	engine->ServerCommand(szCommand.c_str());
	return object();
}
Exemplo n.º 3
0
object execute_server_command(tuple args, dict kwargs)
{
	std::string szCommand;
	ConCommand* pCommand;
	prepare_command(args, kwargs, &pCommand, &szCommand);

	CCommand c;
	if (!c.Tokenize(szCommand.c_str()))
		BOOST_RAISE_EXCEPTION(PyExc_ValueError, "Failed to tokenize '%s'.", szCommand.c_str())

	pCommand->Dispatch(c);
	return object();
}
Exemplo n.º 4
0
Arquivo: main.c Projeto: shalvin/itsh
parse_status parse_command_string(char *cmdString, char **cmdArgs) {
    int nTokens;
    parse_status status;
    exec_error error;
    char **tokens = NULL;

    // Tokenize command string.
    nTokens = command_tokens(cmdString, &tokens);
    
    if (nTokens <= 0) {
        // Ignore if no commands
        status = IGNORE;
    } else if (strcmp(tokens[0], "cd") == 0) {
        // Command is 'cd'. Change directory to first argument or HOME if none.
        status = CMD_CD;
        if (nTokens == 1) {
            chdir(getenv("HOME"));
        } else {
            chdir(tokens[1]);
        }
    } else if (strcmp(tokens[0], "exit") == 0) {
        // Command is 'exit'. Prepare for exit.
        status = CMD_EXIT;
    } else {
        status = CMD_EXEC;
        error = prepare_command(nTokens, tokens);
        
        if (error == FILE_NOT_FOUND) {
            status = CMD_NOTFOUND;
        } else if (error == COMMAND_NOT_FOUND) {
            status = CMD_NOCMD;
        } else if (error != NONE) {
            status = CMD_EXEC_ERR;
        }
    }

    free_token_array(&tokens, nTokens);
    return status;
}
Exemplo n.º 5
0
int delay_kick (void *arg, char *sub)
{
char * args = (char *)arg;
char * from = NULL;
char * channel = NULL;	
char * serv_num = NULL;
int this_server = from_server;
int server;
ChannelList *chan;
char *p = (char *) arg; /* original args unmodified  so we can free them */

	if (protected)
	{
		from = next_arg(args, &args);
		channel = next_arg(args, &args);
		if ((serv_num = next_arg(args, &args)))
			this_server = my_atol(serv_num);
		if ((chan = prepare_command(&server, channel, 3)))
			my_send_to_server(this_server, "KICK %s %s :\002%s\002 Kick/ban me will ya", channel, from, _VERSION_);
		new_free(&protected);
	}
	new_free(&p); new_free(&sub);
	return 0;
}
Exemplo n.º 6
0
void userhost_unban(UserhostItem *stuff, char *nick1, char *args)
{
char *tmp;
ChannelList *chan;
char *channel = NULL;
BanList *bans;

char *host = NULL;
char *ip_str = NULL;
WhowasList *whowas = NULL;
NickList *n = NULL;
int count = 0;
int old_server = from_server;

	
	if (!stuff || !stuff->nick || !nick1 || 
		!strcmp(stuff->user, "<UNKNOWN>") || 
		my_stricmp(stuff->nick, nick1))
	{
		if (nick1 && (whowas = check_whowas_nick_buffer(nick1, args, 0)))
		{
			malloc_sprintf(&host, "%s!%s", whowas->nicklist->nick, whowas->nicklist->host);
			bitchsay("Using WhoWas info for unban of %s ", nick1);
			n = whowas->nicklist;
		}
		else if (nick1)
		{
			bitchsay("No match for the unban of %s on %s", nick1, args);
			return;
		}
		if (!nick1)
			return;
	}
	else
	{
		tmp = clear_server_flags(stuff->user);
		malloc_sprintf(&host, "%s!%s@%s",stuff->nick, tmp, stuff->host); 
	}

	channel = next_arg(args, &args);
	if (args && *args)
		from_server = atoi(args);
	if (!(chan = prepare_command(&from_server, channel, NEED_OP)))
	{
		new_free(&host);
		return;
	}
	if (!n)
		n = find_nicklist_in_channellist(stuff->nick, chan, 0);

	if (n && n->ip)
	{
		size_t len = strlen(n->nick)+strlen(n->host)+strlen(n->ip)+10;
		ip_str = alloca(len); 
		*ip_str = 0;
		strmopencat(ip_str, len, stuff->nick, "!", stuff->user, "@", n->ip, NULL);
	}
	for (bans = chan->bans; bans; bans = bans->next)
	{
		if (!bans->sent_unban && (wild_match(bans->ban, host) || (ip_str && wild_match(bans->ban, ip_str))) )
		{
			add_mode(chan, "b", 0, bans->ban, NULL, get_int_var(NUM_BANMODES_VAR));
			bans->sent_unban++;
			count++;
		}			
	}	

	flush_mode_all(chan);
	if (!count)
		bitchsay("No match for Unban of %s on %s", nick1, args);
	new_free(&host);
	from_server = old_server;
}
Exemplo n.º 7
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;
}
Exemplo n.º 8
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);
}