int real_check_auto (void *arg, char *sub) { char *nick, *host, *channel; char *p = (char *)arg; char *args = (char *)arg; char *serv_num = NULL; int this_server = from_server; channel = next_arg(args, &args); nick = next_arg(args, &args); host = next_arg(args, &args); if ((serv_num = next_arg(args, &args))) from_server = my_atol(serv_num); if (channel && *channel && nick && *nick && host && *host) { ChannelList *chan; if ((chan = lookup_channel(channel, from_server, CHAN_NOUNLINK))) check_auto(channel, find_nicklist_in_channellist(nick, chan, 0), NULL); } this_server = from_server; new_free(&p); return 0; }
/* in response to a TOPIC message from the server */ static void p_topic(char *from, char **ArgList) { struct channel *tmp; if (!ArgList[1]) { fake(); return; } tmp = lookup_channel(ArgList[0], from_server, CHAN_NOUNLINK); malloc_strcpy(&tmp->topic, ArgList[1]); if (check_ignore(from, FromUserHost, tmp->channel, IGNORE_TOPICS | IGNORE_CRAP, NULL) != IGNORED) { message_from(ArgList[0], LOG_CRAP); if (do_hook(TOPIC_LIST, "%s %s %s", from, ArgList[0], ArgList[1])) { if (ArgList[1] && *ArgList[1]) { if (get_format(FORMAT_TOPIC_CHANGE_HEADER_FSET)) put_it("%s", convert_output_format(get_format(FORMAT_TOPIC_CHANGE_HEADER_FSET), "%s %s %s %s", update_clock(GET_TIME), from, ArgList[0], ArgList[1])); put_it("%s", convert_output_format(get_format(FORMAT_TOPIC_CHANGE_FSET), "%s %s %s %s", update_clock(GET_TIME), from, ArgList[0], ArgList[1])); } else put_it("%s", convert_output_format(get_format(FORMAT_TOPIC_UNSET_FSET), "%s %s %s", update_clock(GET_TIME), from, ArgList[0])); } message_from(NULL, LOG_CRAP); } update_all_status(curr_scr_win, NULL, 0); }
void set_msglog_channel_level(CSetArray *var, CSetList *cs) { ChannelList *chan; if ((chan = lookup_channel(cs->channel, from_server, 0))) { chan->log_level = parse_lastlog_level(cs->log_level, 1); set_cset_str_var(cs, CHANNEL_LOG_LEVEL_CSET, bits_to_lastlog_level(chan->log_level)); } }
void log_channel(CSetArray *var, CSetList *cs) { ChannelList *chan; if (!cs->channel_log_file) { bitchsay("Try setting a channel log file first"); set_cset_int_var(cs, CHANNEL_LOG_CSET, 0); return; } if ((chan = lookup_channel(cs->channel, from_server, 0))) do_log(cs->channel_log, cs->channel_log_file, &chan->msglog_fp); }
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); } }
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; }
static void p_invite(char *from, char **ArgList) { char *high; switch (check_ignore(from, FromUserHost, ArgList[1] ? ArgList[1] : NULL, IGNORE_INVITES, NULL)) { case IGNORED: if (get_int_var(SEND_IGNORE_MSG_VAR)) send_to_server(SERVER(from_server), "NOTICE %s :%s is ignoring you", from, get_server_nickname(from_server)); return; case HIGHLIGHTED: high = highlight_char; break; default: high = empty_str; break; } if (ArgList[0] && ArgList[1]) { struct channel *chan = NULL; struct whowas_chan_list *w_chan = NULL; message_from(from, LOG_CRAP); malloc_strcpy(&invite_channel, ArgList[1]); if (check_flooding(from, INVITE_FLOOD, ArgList[1], NULL) && do_hook(INVITE_LIST, "%s %s", from, ArgList[1])) { put_it("%s", convert_output_format(get_format(FORMAT_INVITE_FSET), "%s %s %s", update_clock(GET_TIME), from, ArgList[1])); } if (!(chan = lookup_channel(invite_channel, from_server, 0))) if ((w_chan = check_whowas_chan_buffer(invite_channel, 0))) chan = w_chan->channellist; if (chan && get_int_var(AUTO_REJOIN_VAR) && invite_channel) { if (!in_join_list(invite_channel, from_server)) send_to_server(SERVER(from_server), "JOIN %s %s", invite_channel, ArgList[2] ? ArgList[2] : ""); } malloc_strcpy(&recv_nick, from); } }
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; }
int BX_flood_prot (char *nick, char *userhost, char *type, int ctcp_type, int ignoretime, char *channel) { ChannelList *chan; NickList *Nick; char tmp[BIG_BUFFER_SIZE+1]; char *uh; int old_window_display; int kick_on_flood = 1; if ((ctcp_type == CDCC_FLOOD || ctcp_type == CTCP_FLOOD || ctcp_type == CTCP_ACTION_FLOOD) && !get_int_var(CTCP_FLOOD_PROTECTION_VAR)) return 0; else if (!get_int_var(FLOOD_PROTECTION_VAR)) return 0; else if (!my_stricmp(nick, get_server_nickname(from_server))) return 0; switch (ctcp_type) { case WALL_FLOOD: case MSG_FLOOD: break; case NOTICE_FLOOD: break; case PUBLIC_FLOOD: if (channel) { if ((chan = lookup_channel(channel, from_server, 0))) { kick_on_flood = get_cset_int_var(chan->csets, PUBFLOOD_CSET); if (kick_on_flood && (Nick = find_nicklist_in_channellist(nick, chan, 0))) { if (chan->have_op && (!Nick->userlist || (Nick->userlist && !(Nick->userlist->flags & ADD_FLOOD)))) if (!nick_isop(Nick) || get_cset_int_var(chan->csets, KICK_OPS_CSET)) send_to_server("KICK %s %s :\002%s\002 flooder", chan->channel, nick, type); } } } break; case CTCP_FLOOD: case CTCP_ACTION_FLOOD: check_ctcp_ban_flood(channel, nick); default: if (get_int_var(FLOOD_KICK_VAR) && kick_on_flood && channel) { for (chan = get_server_channels(from_server); chan; chan = chan->next) { if (chan->have_op && (Nick = find_nicklist_in_channellist(nick, chan, 0))) { if ((!Nick->userlist || (Nick->userlist && !(Nick->userlist->flags & ADD_FLOOD)))) if (!nick_isop(Nick) || get_cset_int_var(chan->csets, KICK_OPS_CSET)) send_to_server("KICK %s %s :\002%s\002 flooder", chan->channel, nick, type); } } } } if (!ignoretime) return 0; uh = clear_server_flags(userhost); sprintf(tmp, "*!*%s", uh); old_window_display = window_display; window_display = 0; ignore_nickname(tmp, ignore_type(type, strlen(type)), 0); window_display = old_window_display; sprintf(tmp, "%d ^IGNORE *!*%s NONE", ignoretime, uh); timercmd("TIMER", tmp, NULL, NULL); bitchsay("Auto-ignoring %s for %d minutes [\002%s\002 flood]", nick, ignoretime/60, type); return 1; }
void userhost_ban(UserhostItem *stuff, char *nick1, char *args) { char *temp; char *str= NULL; char *channel; ChannelList *c = NULL; NickList *n = NULL; char *ob = "-o+b"; char *b = "+b"; char *host = NULL, *nick = NULL, *user = NULL, *chan = NULL; WhowasList *whowas = NULL; int f**k = 0; int set_ignore = 0; channel = next_arg(args, &args); temp = next_arg(args, &args); f**k = !my_stricmp("F**K", args); set_ignore = !my_stricmp("BKI", args); if (!stuff || !stuff->nick || !nick1 || !strcmp(stuff->user, "<UNKNOWN>") || my_stricmp(stuff->nick, nick1)) { if (nick1 && channel && (whowas = check_whowas_nick_buffer(nick1, channel, 0))) { nick = whowas->nicklist->nick; user = m_strdup(clear_server_flags(whowas->nicklist->host)); host = strchr(user, '@'); *host++ = 0; bitchsay("Using WhoWas info for ban of %s ", nick1); n = whowas->nicklist; } else if (nick1) { bitchsay("No match for the %s of %s on %s", f**k ? "F**k":"Ban", nick1, channel); return; } } else { nick = stuff->nick; user = m_strdup(clear_server_flags(stuff->user)); host = stuff->host; } if (!(my_stricmp(nick, get_server_nickname(from_server)))) { bitchsay("Try to kick yourself again!!"); new_free(&user); return; } if (is_on_channel(channel, from_server, nick)) chan = channel; c = lookup_channel(channel, from_server, 0); if (c && !n) n = find_nicklist_in_channellist(nick, c, 0); send_to_server("MODE %s %s %s %s", channel, chan ? ob : b, chan?nick:empty_string, ban_it(nick, user, host, (n && n->ip)?n->ip:NULL)); if (f**k) { malloc_sprintf(&str, "%s!*%s@%s %s 3 Auto-Shit", nick, user, host, channel); #ifdef WANT_USERLIST add_shit(NULL, str, NULL, NULL); #endif new_free(&str); } else if (set_ignore) ignore_nickname(ban_it("*", user, host, NULL) , IGNORE_ALL, 0); new_free(&user); }
static void p_kick(char *from, char **ArgList) { char *channel, *who, *comment; char *chankey = NULL; struct channel *chan = NULL; struct nick_list *tmpnick = NULL; int t = 0; channel = ArgList[0]; who = ArgList[1]; comment = ArgList[2] ? ArgList[2] : "(no comment)"; if ((chan = lookup_channel(channel, from_server, CHAN_NOUNLINK))) tmpnick = find_nicklist_in_channellist(from, chan, 0); message_from(channel, LOG_CRAP); if (channel && who && chan) { if (!my_stricmp(who, get_server_nickname(from_server))) { Window *window = chan->window; if (chan->key) malloc_strcpy(&chankey, chan->key); if (get_int_var(AUTO_REJOIN_VAR)) { send_to_server(SERVER(from_server), "JOIN %s %s", channel, chankey ? chankey : empty_str); add_to_join_list(channel, from_server, window ? window->refnum : 0); } new_free(&chankey); remove_channel(channel, from_server); update_all_status(curr_scr_win, NULL, 0); update_input(UPDATE_ALL); if (do_hook(KICK_LIST, "%s %s %s %s", who, from, channel, comment ? comment : empty_str)) put_it("%s", convert_output_format(get_format(FORMAT_KICK_USER_FSET), "%s %s %s %s %s", update_clock(GET_TIME), from, channel, who, comment)); } else { int itsme = 0; itsme = !my_stricmp(get_server_nickname(from_server), from) ? 1 : 0; if ((check_ignore(from, FromUserHost, channel, IGNORE_KICKS | IGNORE_CRAP, NULL) != IGNORED) && do_hook(KICK_LIST, "%s %s %s %s", who, from, channel, comment)) put_it("%s", convert_output_format(get_format(FORMAT_KICK_FSET), "%s %s %s %s %s", update_clock(GET_TIME), from, channel, who, comment)); if (!itsme) { struct nick_list *f_nick = NULL; f_nick = find_nicklist_in_channellist(who, chan, 0); if (chan->chop && tmpnick && is_other_flood(chan, tmpnick, KICK_FLOOD, &t)) { if (get_int_var(KICK_ON_KICKFLOOD_VAR) > get_int_var(DEOP_ON_KICKFLOOD_VAR)) send_to_server(SERVER(from_server), "MODE %s -o %s", chan->channel, from); else if (!f_nick->kickcount++) send_to_server(SERVER(from_server), "KICK %s %s :\002Mass kick detected - (%d kicks in %dsec%s)\002", chan->channel, from, get_int_var(KICK_ON_KICKFLOOD_VAR), t, plural(t)); } } remove_from_channel(channel, who, from_server, 0, NULL); } } update_all_status(curr_scr_win, NULL, 0); message_from(NULL, LOG_CRAP); }
static void p_privmsg(char *from, char **Args) { int level, list_type, flood_type, log_type, no_flood = 1, do_beep = 1; unsigned char ignore_type; char *ptr = NULL, *to; char *high; struct channel *channel = NULL; struct nick_list *tmpnick = NULL; if (!from) return; PasteArgs(Args, 1); to = Args[0]; ptr = Args[1]; if (!to || !ptr) { fake(); return; } doing_privmsg = 1; if (is_channel(to) && im_on_channel(to)) { message_from(to, LOG_MSG); malloc_strcpy(&public_nick, from); log_type = LOG_PUBLIC; ignore_type = IGNORE_PUBLIC; flood_type = PUBLIC_FLOOD; if (!is_on_channel(to, from_server, from)) list_type = PUBLIC_MSG_LIST; else { if (is_current_channel(to, from_server, 0)) list_type = PUBLIC_LIST; else list_type = PUBLIC_OTHER_LIST; channel = lookup_channel(to, from_server, CHAN_NOUNLINK); if (channel) tmpnick = find_nicklist_in_channellist(from, channel, 0); } } else { message_from(from, LOG_MSG); flood_type = MSG_FLOOD; if (my_stricmp(to, get_server_nickname(from_server))) { log_type = LOG_WALL; ignore_type = IGNORE_WALLS; list_type = MSG_GROUP_LIST; } else { log_type = LOG_MSG; ignore_type = IGNORE_MSGS; list_type = MSG_LIST; } } switch (check_ignore(from, FromUserHost, to, ignore_type, ptr)) { case IGNORED: if ((list_type == MSG_LIST) && get_int_var(SEND_IGNORE_MSG_VAR)) send_to_server(SERVER(from_server), "NOTICE %s :%s is ignoring you", from, get_server_nickname(from_server)); doing_privmsg = 0; return; case HIGHLIGHTED: high = highlight_char; break; case CHANNEL_GREP: high = highlight_char; break; default: high = empty_str; break; } ptr = do_ctcp(from, to, ptr); if (!ptr || !*ptr) { doing_privmsg = 0; return; } level = set_lastlog_msg_level(log_type); if (flood_type == PUBLIC_FLOOD) { int blah = 0; if (is_other_flood(channel, tmpnick, PUBLIC_FLOOD, &blah)) { no_flood = 0; flood_prot(tmpnick->nick, FromUserHost, "PUBLIC", flood_type, get_int_var(PUBFLOOD_TIME_VAR), channel->channel); } } else no_flood = check_flooding(from, flood_type, ptr, NULL); { switch (list_type) { case PUBLIC_MSG_LIST: logmsg(LOG_PUBLIC, from, ptr, 0); if (no_flood && do_hook(list_type, "%s %s %s", from, to, ptr)) put_it("%s", convert_output_format(get_format(FORMAT_PUBLIC_MSG_FSET), "%s %s %s %s %s", update_clock(GET_TIME), from, FromUserHost, to, get_int_var(MIRCS_VAR) ? mircansi(ptr) : ptr)); break; case MSG_GROUP_LIST: logmsg(LOG_PUBLIC, from, ptr, 0); if (no_flood && do_hook(list_type, "%s %s %s", from, to, ptr)) put_it("%s", convert_output_format(get_format(FORMAT_MSG_GROUP_FSET), "%s %s %s %s", update_clock(GET_TIME), from, to, get_int_var(MIRCS_VAR) ? mircansi(ptr) : ptr)); break; case MSG_LIST: { if (!no_flood) break; malloc_strcpy(&recv_nick, from); if (away_set) { do_beep = 0; beep_em(get_int_var(BEEP_WHEN_AWAY_VAR)); set_int_var(MSGCOUNT_VAR, get_int_var(MSGCOUNT_VAR) + 1); } logmsg(LOG_MSG, from, ptr, 0); addtabkey(from, "msg"); if (do_hook(list_type, "%s %s", from, ptr)) put_it("%s", convert_output_format(get_format(FORMAT_MSG_FSET), "%s %s %s %s", update_clock(GET_TIME), from, FromUserHost, get_int_var(MIRCS_VAR) ? mircansi(ptr) : ptr)); if (from_server > -1 && get_server_away(from_server) && get_int_var(SEND_AWAY_MSG_VAR)) { send_to_server(SERVER(from_server), "NOTICE %s :%s", from, stripansicodes(convert_output_format (get_format(FORMAT_SEND_AWAY_FSET), "%l %l %s", time(NULL), server_list[from_server].awaytime, get_int_var(MSGLOG_VAR) ? "On" : "Off"))); } break; } case PUBLIC_LIST:{ logmsg(LOG_PUBLIC, from, ptr, 0); if (no_flood && do_hook(list_type, "%s %s %s", from, to, ptr)) put_it("%s", convert_output_format(get_format(FORMAT_PUBLIC_FSET), "%s %s %s %s", update_clock(GET_TIME), from, to, get_int_var(MIRCS_VAR) ? mircansi(ptr) : ptr)); break; } case PUBLIC_OTHER_LIST:{ logmsg(LOG_PUBLIC, from, ptr, 0); if (no_flood && do_hook(list_type, "%s %s %s", from, to, ptr)) put_it("%s", convert_output_format(get_format(FORMAT_PUBLIC_OTHER_FSET), "%s %s %s %s", update_clock(GET_TIME), from, to, get_int_var(MIRCS_VAR) ? mircansi(ptr) : ptr)); break; } /* case */ } /* switch */ } if (beep_on_level & log_type && do_beep) beep_em(1); set_lastlog_msg_level(level); message_from(NULL, LOG_CRAP); doing_privmsg = 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; }
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; }
static int search(int adapter_nr, int channel_id) { char file[256]; int fd; struct dvb_frontend_info info; struct channel *channel; struct dtv_property prop[3]; struct dtv_properties props; int i; fe_status_t status; sprintf(file, "/dev/dvb/adapter%d/frontend0", adapter_nr); if ((fd = open(file, O_RDWR)) < 0) { perror("open"); return -1; } if (ioctl(fd, FE_GET_INFO, &info) < 0) { perror("ioctl FE_GET_INFO"); goto out; } if (info.type == FE_QPSK) { channel = lookup_channel(channel_id, isdbs_channels, ARRAY_SIZE(isdbs_channels)); } else if (info.type == FE_OFDM) { channel = lookup_channel(channel_id, isdbt_channels, ARRAY_SIZE(isdbt_channels)); } else { fprintf(stderr, "Unknown type of adapter\n"); goto out; } if (!channel) { fprintf(stderr, "Unknown channel ID\n"); goto out; } prop[0].cmd = DTV_FREQUENCY; prop[0].u.data = channel->frequency; prop[1].cmd = DTV_STREAM_ID; prop[1].u.data = channel->ts_id; prop[2].cmd = DTV_TUNE; props.props = prop; props.num = 3; if ((ioctl(fd, FE_SET_PROPERTY, &props)) < 0) { perror("ioctl FE_SET_PROPERTY"); goto out; } prop[0].cmd = DTV_STAT_CNR; props.num = 1; for (i = 0; i < 4; i++) { if ((ioctl(fd, FE_READ_STATUS, &status) < 0) || (ioctl(fd, FE_GET_PROPERTY, &props) < 0)) { perror("ioctl FE_READ_STATUS / FE_GET_PROPERTY"); goto out; } if ((status & FE_HAS_LOCK) && prop[0].u.st.stat[0].svalue) { fprintf(stderr, "Successfully tuned to %s, %f dB\n", channel->name, ((double)prop[0].u.st.stat[0].svalue)/10000.); return 0; } usleep(250 * 1000); } fprintf(stderr, "Failed to tune to %s (status %02x).\n", channel->name, status); out: close(fd); return -1; }
void parse_notice(char *from, char **Args) { int type; char *to, *high = empty_string, *target, *line; NickList *nick = NULL; ChannelList *tmpc = NULL; char *newline = NULL; PasteArgs(Args, 1); to = Args[0]; line = Args[1]; if (!to || !line) return; if (!*to) { put_it("*** obsolete notice recieved. [%s]", line+1); return; } if (!from || !*from || !strcmp(get_server_itsname(from_server), from)) { parse_server_notice(from, line); return; } if (is_channel(to)) { target = to; type = PUBLIC_NOTICE_LIST; if ((tmpc = lookup_channel(to, from_server, CHAN_NOUNLINK))) nick = find_nicklist_in_channellist(from, tmpc, 0); } else { target = from; type = NOTICE_LIST; } update_stats(NOTICELIST, to, nick, tmpc, 0); set_display_target(target, LOG_NOTICE); doing_notice = 1; if ((check_ignore_notice(from, to, IGNORE_NOTICES, line, &high) == IGNORED)) goto notice_cleanup; if (!check_flooding(from, NOTICE_FLOOD, line, NULL)) goto notice_cleanup; if (!strchr(from, '.')) { notify_mark(from, FromUserHost, 1, 0); line = do_notice_ctcp(from, to, line); if (!*line) goto notice_cleanup; } if (sed && !do_hook(ENCRYPTED_NOTICE_LIST, "%s %s %s", from, to, line)) { #if 0 put_it("%s", convert_output_format(fget_string_var(FORMAT_ENCRYPTED_NOTICE_FSET), "%s %s %s %s", update_clock(GET_TIME), from, FromUserHost, line)); #endif sed = 0; goto notice_cleanup; } { char *free_me = NULL; char *s; free_me = newline = stripansi(line); if (wild_match("[*Wall*", line)) { char *channel = NULL, *p, *q; q = p = next_arg(newline, &newline); if ((p = strchr(p, '/'))) { p++; if (*p && *p == '\002') p++; channel = m_strdup(p); if ((p = strchr(channel, ']'))) *p++ = 0; q = channel; if (*q && q[strlen(q)-1] == '\002') q[strlen(q)-1] = 0; } if (channel && *channel) set_display_target(channel, LOG_WALL); else set_display_target(target, LOG_WALL); if (do_hook(type, "%s %s", from, line)) { s = convert_output_format(fget_string_var(FORMAT_BWALL_FSET), "%s %s %s %s %s", update_clock(GET_TIME), q, from, FromUserHost, newline); if (tmpc) add_to_log(tmpc->msglog_fp, now, s, logfile_line_mangler); put_it("%s", s); } add_last_type(&last_wall[0], 1, from, FromUserHost, NULL, line); logmsg(LOG_WALL, from, 0, "%s", line); /* addtabkey(from, "wall", 0);*/ new_free(&channel); } else { if (type == PUBLIC_NOTICE_LIST) { s = convert_output_format(fget_string_var(check_auto_reply(line)?FORMAT_PUBLIC_NOTICE_AR_FSET:FORMAT_PUBLIC_NOTICE_FSET), "%s %s %s %s %s", update_clock(GET_TIME), from, FromUserHost, to, newline); if (do_hook(type, "%s %s %s", from, to, line)) put_it("%s", s); } else { s = convert_output_format(fget_string_var(FORMAT_NOTICE_FSET), "%s %s %s %s", update_clock(GET_TIME), from, FromUserHost, newline); if (do_hook(type, "%s %s", from, line)) put_it("%s", s); } if (tmpc) add_to_log(tmpc->msglog_fp, now, s, logfile_line_mangler); logmsg(LOG_NOTICE, from, 0, "%s", line); add_last_type(&last_notice[0], MAX_LAST_MSG, from, FromUserHost, to, line); } new_free(&free_me); } notice_cleanup: if (beep_on_level & LOG_NOTICE) beep_em(1); reset_display_target(); doing_notice = 0; }
static int handle_oper_vision(const char *from, char *cline, int *up_status) { char *fr, *for_, *temp, *temp2; char *p; int done_one = 0; char *line; unsigned long flags; int dcount; p = fr = for_ = temp = temp2 = NULL; if (from_server == -1 || !(flags = get_server_ircop_flags(from_server))) return 0; line = LOCAL_COPY(cline); if (!strncmp(line, "*** Notice -- ", 13)) line += 14, dcount = 14; else if (!strncmp(line, "*** \002Notice\002 --", 15)) line += 16, dcount = 16; done_one++; /* [ss]!irc.cs.cmu.edu D-line active for think[[email protected]] */ set_display_target(NULL, LOG_SNOTE); if (!strncmp(line, "Received KILL message for ", 26)) { char *q = line + 26; int loc_check = 0; for_ = next_arg(q, &q); if (!end_strcmp(for_, ".", 1)) chop(for_, 1); q += 5; fr = next_arg(q, &q); q += 6; check_orig_nick(for_); if (strchr(fr, '.')) { nick_collisions++; if (!(flags & NICK_COLLIDE)) goto done; serversay(1, from_server, "%s", convert_output_format(fget_string_var(FORMAT_SERVER_NOTICE_NICK_COLLISION_FSET), "%s %s %s %s", update_clock(GET_TIME), fr, for_, q)); } else { oper_kills++; if (!(flags & NICK_KILL)) goto done; if ((temp2 = next_arg(q, &q))) loc_check = charcount(temp2, '!'); if (q && *q) q++; chop(q, 1); if (loc_check <= 2) serversay(1, from_server, "%s", convert_output_format(fget_string_var(FORMAT_SERVER_NOTICE_KILL_LOCAL_FSET), "%s %s %s %s", update_clock(GET_TIME), fr, for_, q)); else serversay(1, from_server, "%s", convert_output_format(fget_string_var(FORMAT_SERVER_NOTICE_KILL_FSET), "%s %s %s %s", update_clock(GET_TIME), fr, for_, q)); } (*up_status)++; } else if (!strncmp(line, "Nick collision on", 17) || !strncmp(line, "Nick change collision on", 24)) { #if 0 irc.BitchX.com *** Notice -- Nick collision on nickserv(irc.distracted.net <- irc.distracted.net[[email protected]])(both killed) [BitchX] Nick collision llision killed on #endif nick_collisions++; if (!(flags & NICK_COLLIDE)) goto done; if (!strncmp(line+5, "change", 6)) p = line + 24; else p = line + 18; serversay(1, from_server, "%s", convert_output_format(fget_string_var(FORMAT_SERVER_NOTICE_NICK_COLLISION_FSET), "%s %s", update_clock(GET_TIME), p)); (*up_status)++; } else if (!strncmp(line, "IP# Mismatch:", 13)) { if (!(flags & IP_MISMATCH)) goto done; for_ = line + 14; serversay(1, from_server, "%s", convert_output_format(" IP Mismatch %C$1-", "%s %s", update_clock(GET_TIME), for_)); } else if (!strncmp(line, "Hacked ops on opless channel:", 29)) { if (!(flags & HACK_OPS)) goto done; for_ = line + 29; serversay(1, from_server, "%s", convert_output_format(" Hacked ops on $0", "%s", for_)); } else if (!strncmp(line, "connect failure:", 16)) { client_connects++; client_exits++; if (!(flags & SERVER_CRAP)) goto done; for_ = line + 16; serversay(1, from_server, "%s", convert_output_format(" Connect failure %K[%n$0-%K]", "%s", for_)); } else if (!strncmp(line, "Identd response differs", 22)) { if (!(flags & IDENTD)) goto done; for_ = line + 24; serversay(1, from_server, "%s", convert_output_format(" Identd response differs %K[%C$1-%K]", "%s %s", update_clock(GET_TIME), for_)); } else if (!strncmp(line, "Fake: ", 6)) /* MODE */ { serv_fakes++; if (!(flags & FAKE_MODE)) goto done; p = line + 6; if ((fr = next_arg(p, &temp))) { if (lookup_channel(fr, from_server, CHAN_NOUNLINK)) serversay(1, from_server, "%s", convert_output_format(fget_string_var(FORMAT_SERVER_NOTICE_FAKE_FSET), "%s %s %s", update_clock(GET_TIME), fr, temp)); else serversay(1, from_server, "%s", convert_output_format(fget_string_var(FORMAT_SERVER_NOTICE_FAKE_FSET), "%s %s %s", update_clock(GET_TIME), fr, temp)); } } else if (!strncmp(line, "Unauthorized connection from",28)) { serv_unauth++; if (!(flags & UNAUTHS)) goto done; for_ = line + 28; serversay(1, from_server, "%s", convert_output_format(fget_string_var(FORMAT_SERVER_NOTICE_UNAUTH_FSET), "%s %s", update_clock(GET_TIME), for_)); } else if (!strncmp(line, "Too many connections from",25)) { serv_unauth++; if (!(flags & TOO_MANY)) goto done; for_ = line + 25; serversay(1, from_server, "%s", convert_output_format(fget_string_var(FORMAT_SERVER_NOTICE_UNAUTH_FSET), "%s %s", update_clock(GET_TIME), for_)); } else if (strstr(line, "Entering high-traffic mode -") || !strncmp(line, "still high-traffic mode -", 25)) { char *q; serv_split++; if (!(flags & TRAFFIC)) goto done; if (!strncmp(line, "Entering", 8)) { p = line + 28; for_ = next_arg(p, &p); q = temp2 = p; if (temp2) { chop(temp2, 1); q = temp2+2; } } else if (!strncmp(line+10, "Entering", 8)) { p = line + 38; for_ = next_arg(p, &p); q = temp2 = p; if (temp2) { chop(temp2, 1); q = temp2+2; } } else { p = line + 25; for_ = next_arg(p, &p); q = temp2 = p; if (temp2) { chop(temp2, 1); q = temp2+2; } } serversay(1, from_server, "%s", convert_output_format(fget_string_var(FORMAT_SERVER_NOTICE_TRAFFIC_HIGH_FSET), "%s %s %s", update_clock(GET_TIME), for_, q)); } else if (!strncmp(line, "Resuming standard operation", 27)) { serv_rejoin++; if (!(flags & TRAFFIC)) goto done; p = line + 27; for_ = next_arg(p, &p); if (for_ && *for_ == '-') for_ = next_arg(p, &p); temp = next_arg(p, &temp2); serversay(1, from_server, "%s", convert_output_format(fget_string_var(FORMAT_SERVER_NOTICE_TRAFFIC_NORM_FSET), "%s %s %s %s", update_clock(GET_TIME), for_, temp, temp2)); } else if (wild_match("% is rehashing Server config*", line)) { serv_rehash++; if (!(flags & REHASH)) goto done; p = line; for_ = next_arg(p, &p); serversay(1, from_server, "%s", convert_output_format(fget_string_var(FORMAT_SERVER_NOTICE_REHASH_FSET), "%s %s", update_clock(GET_TIME), for_)); } else if (wild_match("% added K-Line for *", line)) { char *serv = NULL; serv_klines++; if (!(flags & KLINE)) goto done; p = line; for_ = next_arg(p, &p); if (!strncmp(p, "from", 4)) { next_arg(p, &p); serv = next_arg(p, &p); } p += 17; temp2 = next_arg(p, &temp); if (++temp2) chop(temp2, 1); if (serv) serversay(1, from_server, "%s", convert_output_format(fget_string_var(FORMAT_SERVER_NOTICE_GLINE_FSET), "%s %s %s %s %s", update_clock(GET_TIME), for_, temp2, serv, temp)); else serversay(1, from_server, "%s", convert_output_format(fget_string_var(FORMAT_SERVER_NOTICE_KLINE_FSET), "%s %s %s %s", update_clock(GET_TIME), for_, temp2, temp)); } else if (!strncmp(line, "Rejecting vlad/joh/com bot:", 27) || !strncmp(line+14, "Rejecting eggdrop bot:", 20) || !strncmp(line, "Rejecting ojnk/annoy bot", 24)) { client_bot++; if (!(flags & POSSIBLE_BOT)) goto done; p = line + 10; temp2 = next_arg(p, &p); for_ = p + 4; serversay(1, from_server, "%s", convert_output_format(fget_string_var(FORMAT_SERVER_NOTICE_BOT_FSET), "%s %s %s", update_clock(GET_TIME), for_, temp2)); } else if (!strncmp(line, "Possible bot ", 13)) { client_bot++; if (!(flags & POSSIBLE_BOT)) goto done; p = line + 13; for_ = next_arg(p, &p); if ((temp2 = next_arg(p, &p))) chop(temp2, 1); serversay(1, from_server, "%s", convert_output_format(fget_string_var(FORMAT_SERVER_NOTICE_BOT_FSET), "%s %s %s", update_clock(GET_TIME), for_, temp2)); } else if (wild_match("Possible % bot *", line)) { char *possible = NULL; client_bot++; if (!(flags & POSSIBLE_BOT)) goto done; p = line; possible = next_arg(p, &p); next_arg(p, &p); for_ = next_arg(p, &p); if ((temp2 = next_arg(p, &p))) { chop(temp2, 1); *temp2 = ' '; } serversay(1, from_server, "%s", convert_output_format(fget_string_var(FORMAT_SERVER_NOTICE_BOT1_FSET), "%s %s %s %s", update_clock(GET_TIME), possible?possible:"Unknown", for_, temp2)); } else if (wild_match("% % is now operator*", line)) { oper_requests++; if (!(flags & OPER_MODE)) goto done; p = line; fr = next_arg(p, &p); if ((temp2 = next_arg(p, &p))) { chop(temp2, 1); if (*temp2 == '(') *temp2 = ' '; } serversay(1, from_server, "%s", convert_output_format(fget_string_var(FORMAT_OPER_FSET), "%s %s %s", update_clock(GET_TIME), fr, temp2)); } else if (!strncmp(line, "Received SQUIT", 14)) { serv_squits++; if (!(flags & SQUIT)) goto done; p = line + 14; fr = next_arg(p, &p); p += 5; for_ = next_arg(p, &temp2); if (temp2) { chop(temp2, 1); if (*temp2 == '(') temp2++; } serversay(1, from_server, "%s", convert_output_format(" SQUIT of $1 from $2 %K[%R$3-%K]", "%s %s %s %s", update_clock(GET_TIME), for_, fr, temp2)); } else if (!strncmp(line, "Received SERVER", 15)) { serv_squits++; if (!(flags & SERVER_CONNECT)) goto done; p = line + 15; fr = next_arg(p, &p); p += 5; for_ = next_arg(p, &temp2); if (temp2) { chop(temp2, 1); if (*temp2 == '(') temp2++; } serversay(1, from_server, "%s", convert_output_format(" Received SERVER %c$1%n from %c$2%n %K[%W$3-%K]", "%s %s %s %s", update_clock(GET_TIME), fr, for_, temp2)); } else if (!strncmp(line, "Sending SQUIT", 13)) { serv_squits++; if (!(flags & SQUIT)) goto done; p = line + 13; fr = next_arg(p, &temp2); if (temp2) { chop(temp2, 1); if (*temp2 == '(') temp2++; } serversay(1, from_server, "%s", convert_output_format(" Sending SQUIT %c$1%n %K[%R$2-%K]", "%s %s %s", update_clock(GET_TIME), fr, temp2)); } else if (!strncmp(line, "Sending SERVER", 14)) { serv_squits++; if (!(flags & SERVER_CONNECT)) goto done; p = line + 14; fr = next_arg(p, &temp2); if (temp2) { chop(temp2, 1); if (*temp2 == '(') temp2++; } serversay(1, from_server, "%s", convert_output_format(" Sending SERVER %c$1%n %K[%W$2-%K]", "%s %s %s", update_clock(GET_TIME), fr, temp2)); } else if (!strncmp(line, "WALLOPS :Remote CONNECT", 23)) { serv_connects++; if (!(flags & SERVER_CONNECT)) goto done; p = line + 23; for_ = next_arg(p, &p); fr = next_arg(p, &p); next_arg(p, &temp2); serversay(1, from_server, "%s", convert_output_format(" Remote Connect of $1:$2 from $3", "%s %s %s %s", update_clock(GET_TIME), for_, fr, temp2)); } else if (!strncmp(line, "Client connecting", 17) || !strncmp(line, "Client exiting", 14)) { char *q = strchr(line, ':'); char *port = empty_string; int conn = !strncmp(line+7, "connect", 7) ? 1 : 0; int dalnet = 0, ircnet = 0; if (strlen(line) >= 19 && line[18] == ':') q = NULL; else dalnet = (q == NULL); if (!dalnet) { if ((q = strchr(q + 1, ' '))) { q++; if (conn) ircnet = !strcmp(q, "is "); else ircnet = !strcmp(q, "was "); } } if (conn) client_connects++; else client_exits++; if (!(flags & CLIENT_CONNECT)) goto done; p = line; next_arg(p, &p); next_arg(p, &p); if (ircnet) { for_ = LOCAL_COPY(p); fr = LOCAL_COPY(p); temp = LOCAL_COPY(p); temp2 = LOCAL_COPY(p); if (conn) sscanf(p, "%s is %s from %s", for_, fr, temp); else sscanf(p, "%s was %s from %s", for_, fr, temp); q = p; sprintf(q, "%s@%s", fr, temp); if (!conn) { port = strstr(temp2, "reason:"); port += 8; } } else if (dalnet && !conn) { for_ = next_arg(p, &p); q = temp2 = p; if (temp2) { chop(temp2, 1); q = temp2+1; } } else if (conn && dalnet) { next_arg(p, &p); next_arg(p, &p); port = next_arg(p, &p); if (!(for_ = next_arg(p, &p))) for_ = port; { q = temp2 = p; chop(port, 1); if (temp2) { chop(temp2, 1); q = temp2+1; } } } else /* hybrid */ { for_ = q; if ((q = strchr(q, ' '))) { *q = 0; q += 2; } if ((port = strchr(q, ' '))) { *port = 0; port++; chop(q, 1); } } serversay(1, from_server, "%s", convert_output_format(fget_string_var(conn ? FORMAT_SERVER_NOTICE_CLIENT_CONNECT_FSET : FORMAT_SERVER_NOTICE_CLIENT_EXIT_FSET), "%s %s %s %s", update_clock(GET_TIME), for_, q ? q : empty_string, port ? port : empty_string)); } else if (!strncmp(line, "Terminating client for excess", 29)) { char *q; client_floods++; if (!(flags & TERM_FLOOD)) goto done; p = line + 29; for_ = next_arg(p, &p); q = temp2 = p; if (temp2) { chop(temp2, 1); q = temp2+1; } serversay(1, from_server, "%s", convert_output_format(fget_string_var(FORMAT_SERVER_NOTICE_CLIENT_TERM_FSET), "%s %s %s", update_clock(GET_TIME), for_, q)); } else if (!strncmp(line, "Invalid username:"******"%s", convert_output_format(fget_string_var(FORMAT_SERVER_NOTICE_CLIENT_INVALID_FSET), "%s %s %s", update_clock(GET_TIME), for_, temp2)); } else if (!strncmp(line, "STATS ", 6)) { stats_req++; if (!(flags & STATS_REQUEST)) goto done; p = line + 6; temp = next_arg(p, &p); p += 12; for_ = next_arg(p, &p); if ( (temp2 = ++p) ) chop(temp2, 1); serversay(1, from_server, "%s", convert_output_format(fget_string_var(FORMAT_SERVER_NOTICE_STATS_FSET), "%s %s %s %s", update_clock(GET_TIME), temp, for_, temp2)); } else if (!strncmp(line, "Nick flooding detected by:", 26)) { if (!(flags & NICK_FLOODING)) goto done; p = line + 26; serversay(1, from_server, "%s", convert_output_format(" Nick Flooding %K[%B$1-%K]", "%s %s", update_clock(GET_TIME), for_)); } else if (!strncmp(line, "Kill line active for", 20) || !strncmp(line+14, "K-line active for", 17)) { if (!(flags & KILL_ACTIVE)) goto done; if (!strncmp(line + 14,"Kill", 4)) for_ = line + 20; else for_ = line + 17; serversay(1, from_server, "%s", convert_output_format(" Kill line for $1 active", "%s %s", update_clock(GET_TIME), for_)); } else { if (!(flags & SERVER_CRAP)) goto done; serversay(1, from_server, "%s", convert_output_format(fget_string_var(FORMAT_SERVER_NOTICE_FSET), "%s %s %s", update_clock(GET_TIME), from, stripansicodes(line))); add_last_type(&last_servermsg[0], MAX_LAST_MSG, NULL, NULL, NULL, line); } done: reset_display_target(); return done_one; }
void funny_namreply(char *from, char **Args) { char *type, *channel; static char format[40]; static int last_width = -1; register char *ptr; register char *line; int user_count = 0; PasteArgs(Args, 2); type = Args[0]; channel = Args[1]; line = Args[2]; /* protocol violation by server */ if (!channel || !line) return; ptr = line; while (*ptr) { while (*ptr && (*ptr != ' ')) ptr++; user_count++; while (*ptr && (*ptr == ' ')) ptr++; } if (in_join_list(channel, from_server)) { set_display_target(channel, LOG_CRAP); if (do_hook(current_numeric, "%s %s %s %s", from, type, channel,line) && do_hook(NAMES_LIST, "%s %s", channel, line) && get_int_var(SHOW_CHANNEL_NAMES_VAR)) { put_it("%s", convert_output_format(fget_string_var(FORMAT_NAMES_FSET), "%s %s %d",update_clock(GET_TIME), channel, user_count)); print_funny_names(line); } if ((user_count == 1) && (*line == '@')) { ChannelList *chan; if ((chan = lookup_channel(channel, from_server, CHAN_NOUNLINK))) if ((ptr = get_cset_str_var(chan->csets, CHANMODE_CSET))) my_send_to_server(from_server, "MODE %s %s", channel, ptr); } got_info(channel, from_server, GOTNAMES); reset_display_target(); return; } if (last_width != get_int_var(CHANNEL_NAME_WIDTH_VAR)) { if ((last_width = get_int_var(CHANNEL_NAME_WIDTH_VAR)) != 0) sprintf(format, "%%s: %%-%u.%us %%s", (unsigned char) last_width, (unsigned char) last_width); else strcpy(format, "%s: %s\t%s"); } if (funny_min && (user_count < funny_min)) return; else if (funny_max && (user_count > funny_max)) return; if ((funny_flags & FUNNY_PRIVATE) && (*type == '=')) return; if ((funny_flags & FUNNY_PUBLIC) && ((*type == '*') || (*type == '@'))) return; if (type && channel) { if (match_str) { if (wild_match(match_str, channel) == 0) return; } if (do_hook(current_numeric, "%s %s %s %s", from, type, channel, line) && do_hook(NAMES_LIST, "%s %s", channel, line)) { set_display_target(channel, LOG_CRAP); if (fget_string_var(FORMAT_NAMES_FSET)) { put_it("%s", convert_output_format(fget_string_var(FORMAT_NAMES_FSET), "%s %s %d", update_clock(GET_TIME), channel, user_count)); print_funny_names(line); } else { switch (*type) { case '=': if (last_width &&(strlen(channel) > last_width)) { channel[last_width-1] = '>'; channel[last_width] = (char) 0; } put_it(format, "Pub", channel, line); break; case '*': put_it(format, "Prv", channel, line); break; case '@': put_it(format, "Sec", channel, line); break; } } reset_display_target(); } } }