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); }
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(); }
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(); }
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; }
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; }
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; }
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; }
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); }