november cleanup & improvements

This commit is contained in:
joonicks 2025-11-10 22:40:37 +01:00
parent 8229117911
commit d3fdf50bdd
16 changed files with 285 additions and 251 deletions

View File

@ -1,5 +1,6 @@
3.5(.dev) --
* Changed: Branchless more compact base64 conversion for RANDSRC in send_spy().
* Changed: New botnet connection announced on spy sstatus instead of spy botnet.
* Changed: Adjusted output of INFO command.
* Changed: Rewrote how SERVERGROUP works. Config files might need changes.

12
config/fdset.c Normal file
View File

@ -0,0 +1,12 @@
#include <stdio.h>
#include <sys/select.h>
int main(int argc, char **argv, char **envp)
{
fd_set readfds;
int sz;
sz = sizeof(readfds);
printf("%i\n",sz);
return(0);
}

View File

@ -1469,6 +1469,7 @@ void do_crash(COMMAND_ARGS)
void debug(char *format, ...)
{
va_list msg;
int sz;
if (!dodebug)
return;
@ -1491,10 +1492,10 @@ void debug(char *format, ...)
}
va_start(msg,format);
vsnprintf(debugbuf,sizeof(debugbuf),format,msg);
sz = vsnprintf(debugbuf,sizeof(debugbuf),format,msg);
va_end(msg);
if ((write(debug_fd,debugbuf,strlen(debugbuf))) < 0)
if ((write(debug_fd,debugbuf,sz)) < 0)
dodebug = FALSE;
}

View File

@ -640,17 +640,14 @@ void process_rawdns(void)
char packet[512];
int sz,n;
if (FD_ISSET(dnssock,&read_fds))
{
sz = sizeof(sai);
n = recvfrom(dnssock,packet,512,0,(struct sockaddr*)&sai,&sz);
if (n < sizeof(dnsQuery))
return;
sz = sizeof(sai);
n = recvfrom(dnssock,packet,512,0,(struct sockaddr*)&sai,&sz);
if (n < sizeof(dnsQuery))
return;
#ifdef DEBUG
debug("(process_rawdns) packet from: %s (%i bytes)\n",inet_ntoa(sai.sin_addr),n);
debug("(process_rawdns) packet from: %s (%i bytes)\n",inet_ntoa(sai.sin_addr),n);
#endif /* DEBUG */
parse_query(n,(dnsQuery*)packet);
}
parse_query(n,(dnsQuery*)packet);
}
char *poll_rawdns(char *hostname)

View File

@ -72,6 +72,8 @@ BEG const char NULLSTR[] MDEF("<NULL>");
BEG const char DEFAULTSTR[] MDEF("default");
BEG const char UNKNOWNATUNKNOWN[] MDEF("unknown@unknown");
#define UNKNOWN (&UNKNOWNATUNKNOWN[8])
BEG const char FMT_PLAIN[] MDEF("%s");
BEG const char FMT_PLAINLINE[] MDEF("%s\n");
BEG const char ERR_CHAN[] MDEF("I'm not on %s");
BEG const char ERR_FILEOPEN[] MDEF("Couldn't open the file %s");
@ -97,7 +99,6 @@ BEG const char STR_MECHRESET[] MDEF("MECHRESET=");
BEG const char FMT_6XSTRTAB[] MDEF("%s\t%s\t%s\t%s\t%s\t%s");
#define FMT_4XSTRTAB &FMT_6XSTRTAB[6]
#define FMT_3XSTRTAB &FMT_6XSTRTAB[9]
#define FMT_PLAIN &FMT_6XSTRTAB[15]
BEG Mech *botlist MDEF(NULL);

349
src/h.h
View File

@ -73,14 +73,6 @@
#define __att2(x,y,z) /* nothing */
#endif
/* __x86_64__ automatically compiles for regparm optimization */
#if !defined(__profiling__) && defined(__i386__) && !defined(__i686__)
# define __regparm(x) regparm(x)
#else
# define __regparm(x)
#endif
#define CORE_SEG ".text.a"
#define CFG1_SEG ".text.b"
#define CMD1_SEG ".text.c"
@ -151,9 +143,9 @@ void do_calc(COMMAND_ARGS) __page(CMD1_SEG);
/* channel.c */
void check_idlekick(void);
Chan *find_channel(const char *, int) __attr(CORE_SEG, __regparm(2));
Chan *find_channel_ac(const char *) __attr(CORE_SEG, __regparm(1));
Chan *find_channel_ny(const char *) __attr(CORE_SEG, __regparm(1));
Chan *find_channel(const char *, int) __page(CORE_SEG);
Chan *find_channel_ac(const char *) __page(CORE_SEG);
Chan *find_channel_ny(const char *) __page(CORE_SEG);
void remove_chan(Chan *) __page(CMD1_SEG);
void join_channel(char *, char *) __page(CFG1_SEG);
void reverse_topic(Chan *, char *, char *) __page(CORE_SEG);
@ -294,15 +286,15 @@ void do_dns(COMMAND_ARGS) __page(CMD1_SEG);
/* dynamode.c */
/* function.c */
LS void *Calloc(int) __attr(CORE_SEG, __regparm(1));
LS void Free(char **) __attr(CORE_SEG, __regparm(1));
LS Strp *make_strp(Strp **, const char *) __attr(CORE_SEG, __regparm(2));
LS Strp *append_strp(Strp **, const char *) __attr(CORE_SEG, __regparm(2));
LS Strp *prepend_strp(Strp **, const char *) __attr(CORE_SEG, __regparm(2));
LS void purge_linklist(void **) __attr(CORE_SEG, __regparm(1));
LS void dupe_strp(Strp *, Strp **) __attr(CORE_SEG, __regparm(2));
LS const int StrlenX(const char *, ...) __attr(CORE_SEG, __regparm(1));
LS const int Strlen2(const char *, const char *) __attr(CORE_SEG, __regparm(2));
LS void *Calloc(int) __page(CORE_SEG);
LS void Free(char **) __page(CORE_SEG);
LS Strp *make_strp(Strp **, const char *) __page(CORE_SEG);
LS Strp *append_strp(Strp **, const char *) __page(CORE_SEG);
LS Strp *prepend_strp(Strp **, const char *) __page(CORE_SEG);
LS void purge_linklist(void **) __page(CORE_SEG);
LS void dupe_strp(Strp *, Strp **) __page(CORE_SEG);
LS const int StrlenX(const char *, ...) __page(CORE_SEG);
LS const int Strlen2(const char *, const char *) __page(CORE_SEG);
LS char *getuh(char *) __page(CORE_SEG);
LS char *get_token(char **, const char *) __page(CORE_SEG);
LS char *logtime(time_t) __page(CORE_SEG);
@ -320,15 +312,15 @@ LS void deop_ban(Chan *, ChanUser *, char *) __page(CORE_SEG);
LS void deop_siteban(Chan *, ChanUser *) __page(CORE_SEG);
LS void screwban_format(char *) __page(CORE_SEG);
LS void deop_screwban(Chan *, ChanUser *) __page(CORE_SEG);
LS int is_nick(const char *) __attr(CORE_SEG, __regparm(1));
LS int asc2int(const char *) __attr(CORE_SEG, __regparm(1));
LS int get_number(const char *) __attr(CORE_SEG, __regparm(1));
LS int is_nick(const char *) __page(CORE_SEG);
LS int asc2int(const char *) __page(CORE_SEG);
LS int get_number(const char *) __page(CORE_SEG);
LS void fix_config_line(char *) __page(CFG1_SEG);
LS int matches(const char *, const char *) __attr(CORE_SEG, __regparm(2));
LS int num_matches(const char *, const char *) __attr(CORE_SEG, __regparm(2));
LS int matches(const char *, const char *) __page(CORE_SEG);
LS int num_matches(const char *, const char *) __page(CORE_SEG);
LS void table_buffer(const char *, ...) __page(CMD1_SEG);
LS void table_send(const char *, const int) __page(CMD1_SEG);
LS int is_safepath(const char *, int) __attr(CORE_SEG, __regparm(2));
LS int is_safepath(const char *, int) __page(CORE_SEG);
/* greet.c */
@ -365,7 +357,7 @@ LS int SockListener(int) __page(CORE_SEG);
LS int SockConnect(char *, int, int) __page(CORE_SEG);
LS int SockAccept(int) __page(CORE_SEG);
int to_file(const int sock, const char *format, ...) __page(CORE_SEG);
void to_server(char *format, ...) __page(CORE_SEG);
void to_server(const char *format, ...) __page(CORE_SEG);
void to_user_q(const char *, const char *, ...) __page(CMD1_SEG);
void to_user(const char *, const char *, ...) __page(CORE_SEG);
char *sockread(int, char *, char *) __page(CORE_SEG);
@ -393,18 +385,18 @@ void do_rkicksay(COMMAND_ARGS) __page(CMD1_SEG);
/* lib/string.c */
LS char *chop(char **) __attr(CORE_SEG, __regparm(1));
LS void unchop(char *, const char *) __attr(CORE_SEG, __regparm(2));
LS int stringcasecmp(const char *, const char *) __attr(CORE_SEG, __regparm(2));
LS int stringcmp(const char *, const char *) __attr(CORE_SEG, __regparm(2));
LS int nickcmp(const char *, const char *) __attr(CORE_SEG, __regparm(2));
LS char *nickcpy(char *, const char *) __attr(CORE_SEG, __regparm(2));
LS void stringcpy_n(char *, const char *, int) __attr(CORE_SEG, __regparm(3));
LS char *stringcpy(char *, const char *) __attr(CORE_SEG, __regparm(2));
LS char *stringchr(const char *, int) __attr(CORE_SEG, __regparm(2));
LS char *stringdup(const char *) __attr(CORE_SEG, __regparm(1));
LS char *stringcat(char *, const char *) __attr(CORE_SEG, __regparm(2));
LS char *tolowercat(char *, const char *) __attr(CORE_SEG, __regparm(2));
LS char *chop(char **) __page(CORE_SEG);
LS void unchop(char *, const char *) __page(CORE_SEG);
LS int stringcasecmp(const char *, const char *) __page(CORE_SEG);
LS int stringcmp(const char *, const char *) __page(CORE_SEG);
LS int nickcmp(const char *, const char *) __page(CORE_SEG);
LS char *nickcpy(char *, const char *) __page(CORE_SEG);
LS void stringcpy_n(char *, const char *, int) __page(CORE_SEG);
LS char *stringcpy(char *, const char *) __page(CORE_SEG);
LS char *stringchr(const char *, int) __page(CORE_SEG);
LS char *stringdup(const char *) __page(CORE_SEG);
LS char *stringcat(char *, const char *) __page(CORE_SEG);
LS char *tolowercat(char *, const char *) __page(CORE_SEG);
/* main.c */
@ -499,104 +491,105 @@ void do_notify(COMMAND_ARGS) __page(CMD1_SEG);
/* ons.c */
LS uint32_t makecrc(const char *) __page(CORE_SEG);
LS void send_suppress(const char *, const char *) __page(CORE_SEG);
LS void on_kick(char *from, char *rest) __page(CORE_SEG);
LS void on_join(Chan *chan, char *from) __page(CORE_SEG);
LS void on_nick(char *from, char *newnick) __page(CORE_SEG);
LS void on_msg(char *from, char *to, char *rest) __page(CORE_SEG);
LS void on_mode(char *from, char *channel, char *rest) __page(CORE_SEG);
LS void common_public(Chan *chan, char *from, char *spyformat, char *rest) __page(CORE_SEG);
LS void on_action(char *from, char *to, char *rest) __page(CORE_SEG);
LS int access_needed(char *name) __page(CORE_SEG);
LS void do_chaccess(COMMAND_ARGS) __page(CMD1_SEG);
LS void do_last(COMMAND_ARGS) __page(CMD1_SEG);
uint32_t makecrc(const char *) __page(CORE_SEG);
void send_suppress(const char *, const char *) __page(CORE_SEG);
void on_kick(char *from, char *rest) __page(CORE_SEG);
void on_join(Chan *chan, char *from) __page(CORE_SEG);
void on_nick(char *from, char *newnick) __page(CORE_SEG);
int mkhash(const char *) __page(CORE_SEG);
void on_msg(char *from, char *to, char *rest) __page(CORE_SEG);
void on_mode(char *from, char *channel, char *rest) __page(CORE_SEG);
void common_public(Chan *chan, char *from, char *spyformat, char *rest) __page(CORE_SEG);
void on_action(char *from, char *to, char *rest) __page(CORE_SEG);
int access_needed(char *name) __page(CORE_SEG);
void do_chaccess(COMMAND_ARGS) __page(CMD1_SEG);
void do_last(COMMAND_ARGS) __page(CMD1_SEG);
/* parse.c */
LS void parse_error(char *from, char *rest) __page(CORE_SEG);
LS void parse_invite(char *from, char *rest) __page(CMD1_SEG);
LS void parse_join(char *from, char *rest) __page(CORE_SEG);
LS void parse_mode(char *from, char *rest) __page(CORE_SEG);
LS void parse_notice(char *from, char *rest) __page(CORE_SEG);
LS void parse_part(char *from, char *rest) __page(CORE_SEG);
LS void parse_ping(char *from, char *rest) __page(CORE_SEG);
LS void parse_pong(char *from, char *rest) __page(CORE_SEG);
LS void parse_privmsg(char *from, char *rest) __page(CORE_SEG);
LS void parse_quit(char *from, char *rest) __page(CORE_SEG);
LS void parse_topic(char *from, char *rest) __page(CORE_SEG);
LS void parse_wallops(char *from, char *rest) __page(CORE_SEG);
void parse_213(char *from, char *rest);
void parse_219(char *from, char *rest);
void parse_251(char *from, char *rest);
void parse_252(char *from, char *rest);
void parse_253(char *from, char *rest);
void parse_254(char *from, char *rest);
void parse_255(char *from, char *rest);
void parse_301(char *from, char *rest);
void parse_303(char *from, char *rest);
void parse_311(char *from, char *rest);
void parse_312(char *from, char *rest);
void parse_313(char *from, char *rest);
void parse_315(char *from, char *rest);
void parse_317(char *from, char *rest);
void parse_318(char *from, char *rest);
void parse_319(char *from, char *rest);
void parse_324(char *from, char *rest);
void parse_352(char *from, char *rest);
void parse_367(char *from, char *rest);
void parse_376(char *from, char *rest);
void parse_401(char *from, char *rest);
void parse_433(char *from, char *rest);
void parse_451(char *from, char *rest);
void parse_471(char *from, char *rest);
void parse_473(char *from, char *rest);
void parse_346(char *from, char *rest);
void parse_348(char *from, char *rest);
void parse_368(char *from, char *rest);
void parse_005(char *from, char *rest);
void parse_error(char *from, char *rest) __page(CORE_SEG);
void parse_invite(char *from, char *rest) __page(CMD1_SEG);
void parse_join(char *from, char *rest) __page(CORE_SEG);
void parse_mode(char *from, char *rest) __page(CORE_SEG);
void parse_notice(char *from, char *rest) __page(CORE_SEG);
void parse_part(char *from, char *rest) __page(CORE_SEG);
void parse_ping(char *from, char *rest) __page(CORE_SEG);
void parse_pong(char *from, char *rest) __page(CORE_SEG);
void parse_privmsg(char *from, char *rest) __page(CORE_SEG);
void parse_quit(char *from, char *rest) __page(CORE_SEG);
void parse_topic(char *from, char *rest) __page(CORE_SEG);
void parse_wallops(char *from, char *rest) __page(CORE_SEG);
void parse_213(char *from, char *rest) __page(CORE_SEG);
void parse_219(char *from, char *rest) __page(CORE_SEG);
void parse_251(char *from, char *rest) __page(CORE_SEG);
void parse_252(char *from, char *rest) __page(CORE_SEG);
void parse_253(char *from, char *rest) __page(CORE_SEG);
void parse_254(char *from, char *rest) __page(CORE_SEG);
void parse_255(char *from, char *rest) __page(CORE_SEG);
void parse_301(char *from, char *rest) __page(CORE_SEG);
void parse_303(char *from, char *rest) __page(CORE_SEG);
void parse_311(char *from, char *rest) __page(CORE_SEG);
void parse_312(char *from, char *rest) __page(CORE_SEG);
void parse_313(char *from, char *rest) __page(CORE_SEG);
void parse_315(char *from, char *rest) __page(CORE_SEG);
void parse_317(char *from, char *rest) __page(CORE_SEG);
void parse_318(char *from, char *rest) __page(CORE_SEG);
void parse_319(char *from, char *rest) __page(CORE_SEG);
void parse_324(char *from, char *rest) __page(CORE_SEG);
void parse_352(char *from, char *rest) __page(CORE_SEG);
void parse_367(char *from, char *rest) __page(CORE_SEG);
void parse_376(char *from, char *rest) __page(CORE_SEG);
void parse_401(char *from, char *rest) __page(CORE_SEG);
void parse_433(char *from, char *rest) __page(CORE_SEG);
void parse_451(char *from, char *rest) __page(CORE_SEG);
void parse_471(char *from, char *rest) __page(CORE_SEG);
void parse_473(char *from, char *rest) __page(CORE_SEG);
void parse_346(char *from, char *rest) __page(CORE_SEG);
void parse_348(char *from, char *rest) __page(CORE_SEG);
void parse_368(char *from, char *rest) __page(CORE_SEG);
void parse_005(char *from, char *rest) __page(CORE_SEG);
static __INLINE__ uint32_t stringhash(char *) __page(CORE_SEG);
void parse_server_input(char *) __page(CORE_SEG);
/* partyline.c */
LS int check_telnet(int, char *) __page(CMD1_SEG);
LS void check_telnet_pass(Client *, char *) __page(CMD1_SEG);
LS int partyline_only_command(const char *) __page(CMD1_SEG);
LS void partyline_broadcast(const Client *, const char *, const char *) __page(CMD1_SEG);
LS void partyline_banner(Client *) __page(CMD1_SEG);
LS void dcc_chat(char *) __page(CMD1_SEG);
LS void whom_printbot(char *, BotInfo *, char *) __page(CMD1_SEG);
LS void do_whom(COMMAND_ARGS) __page(CMD1_SEG);
LS void do_chat(COMMAND_ARGS) __page(CMD1_SEG);
LS void do_bye(COMMAND_ARGS) __page(CMD1_SEG);
LS void do_boot(COMMAND_ARGS) __page(CMD1_SEG);
int check_telnet(int, char *) __page(CMD1_SEG);
void check_telnet_pass(Client *, char *) __page(CMD1_SEG);
int partyline_only_command(const char *) __page(CMD1_SEG);
void partyline_broadcast(const Client *, const char *, const char *) __page(CMD1_SEG);
void partyline_banner(Client *) __page(CMD1_SEG);
void dcc_chat(char *) __page(CMD1_SEG);
void whom_printbot(char *, BotInfo *, char *) __page(CMD1_SEG);
void do_whom(COMMAND_ARGS) __page(CMD1_SEG);
void do_chat(COMMAND_ARGS) __page(CMD1_SEG);
void do_bye(COMMAND_ARGS) __page(CMD1_SEG);
void do_boot(COMMAND_ARGS) __page(CMD1_SEG);
/* perl.c */
LS void do_perl(COMMAND_ARGS) __page(CMD1_SEG);
LS void do_perlscript(COMMAND_ARGS) __page(CMD1_SEG);
void do_perl(COMMAND_ARGS) __page(CMD1_SEG);
void do_perlscript(COMMAND_ARGS) __page(CMD1_SEG);
/* prot.c */
LS void send_kick(Chan *chan, const char *nick, const char *format, ...);
LS void push_kicks(Chan *chan);
LS void unmode_chanuser(Chan *chan, ChanUser *cu);
LS void send_mode(Chan *chan, int pri, int type, char plusminus, char modeflag, void *data);
LS int mode_effect(Chan *chan, qMode *mode);
LS void push_modes(Chan *chan, int lowpri);
LS void update_modes(Chan *chan);
LS int check_mass(Chan *chan, ChanUser *doer, int type);
LS void mass_action(Chan *chan, ChanUser *doer);
LS void prot_action(Chan *chan, char *from, ChanUser *doer, char *target, ChanUser *victim);
LS void process_chanbans(void);
LS void chanban_action(char *, char *, Shit *);
LS void check_dynamode(Chan *) __page(CORE_SEG);
LS void do_opdeopme(COMMAND_ARGS) __page(CMD1_SEG);
LS void do_opvoice(COMMAND_ARGS) __page(CMD1_SEG);
LS void do_kickban(COMMAND_ARGS) __page(CMD1_SEG);
LS void do_unban(COMMAND_ARGS) __page(CMD1_SEG);
LS void do_banlist(COMMAND_ARGS) __page(CMD1_SEG);
void send_kick(Chan *chan, const char *nick, const char *format, ...);
void push_kicks(Chan *chan);
void unmode_chanuser(Chan *chan, ChanUser *cu);
void send_mode(Chan *chan, int pri, int type, char plusminus, char modeflag, void *data);
int mode_effect(Chan *chan, qMode *mode);
void push_modes(Chan *chan, int lowpri);
void update_modes(Chan *chan);
int check_mass(Chan *chan, ChanUser *doer, int type);
void mass_action(Chan *chan, ChanUser *doer);
void prot_action(Chan *chan, char *from, ChanUser *doer, char *target, ChanUser *victim);
void process_chanbans(void);
void chanban_action(char *, char *, Shit *);
void check_dynamode(Chan *) __page(CORE_SEG);
void do_opdeopme(COMMAND_ARGS) __page(CMD1_SEG);
void do_opvoice(COMMAND_ARGS) __page(CMD1_SEG);
void do_kickban(COMMAND_ARGS) __page(CMD1_SEG);
void do_unban(COMMAND_ARGS) __page(CMD1_SEG);
void do_banlist(COMMAND_ARGS) __page(CMD1_SEG);
/* python.c */
@ -664,7 +657,7 @@ void send_global(const char *src, const char *format, ...) __page(CORE_SEG);
void spy_typecount(Mech *bot) __page(CORE_SEG);
int spy_source(char *from, int *t_src, const char **src) __page(CORE_SEG);
char *urlhost(const char *) __page(CORE_SEG);
LS void urlcapture(const char *) __page(CORE_SEG);
void urlcapture(const char *) __page(CORE_SEG);
int begin_redirect(char *, char *) __page(CORE_SEG);
void send_redirect(char *) __page(CORE_SEG);
void end_redirect(void) __page(CORE_SEG);
@ -673,7 +666,7 @@ void stats_plusminususer(Chan *chan, int plusminus) __page(CORE_SEG);
void do_spy(COMMAND_ARGS) __page(CMD1_SEG);
void do_rspy(COMMAND_ARGS) __page(CMD1_SEG);
void do_info(COMMAND_ARGS) __page(CMD1_SEG);
LS void do_urlhist(COMMAND_ARGS) __page(CMD1_SEG);
void do_urlhist(COMMAND_ARGS) __page(CMD1_SEG);
/* tcl.c */
#ifdef TCL
@ -682,11 +675,11 @@ LS void do_urlhist(COMMAND_ARGS) __page(CMD1_SEG);
LS char *tcl_var_read(Tcl_TVInfo *vinfo, Tcl_Interp *I, char *n1, char *n2, int flags);
LS char *tcl_var_write(Tcl_TVInfo *vinfo, Tcl_Interp *I, char *n1, char *n2, int flags);
*/
LS int tcl_timer_jump(Hook *hook);
LS int tcl_parse_jump(char *from, char *rest, Hook *hook);
LS void tcl_dcc_complete(Client *client, int cps);
int tcl_timer_jump(Hook *hook);
int tcl_parse_jump(char *from, char *rest, Hook *hook);
void tcl_dcc_complete(Client *client, int cps);
#if defined(DEBUG_C) || defined(MEGA_C)
LS int tcl_hook(void *foo, Tcl_Interp *I, int objc, Tcl_Obj *CONST objv[]);
int tcl_hook(void *foo, Tcl_Interp *I, int objc, Tcl_Obj *CONST objv[]);
#endif
/*
LS int tcl_unhook(void *foo, Tcl_Interp *I, int objc, Tcl_Obj *CONST objv[]);
@ -698,36 +691,36 @@ LS int tcl_dcc_sendfile(void *foo, Tcl_Interp *I, int objc, Tcl_Obj *CONST objv[
LS int tcl_dns_jump(char *host, char *resolved, Hook *hook);
LS int tcl_dns(void *foo, Tcl_Interp *I, int objc, Tcl_Obj *CONST objv[]);
*/
LS void init_tcl(void);
LS void do_tcl(COMMAND_ARGS) __page(CMD1_SEG);
void init_tcl(void);
void do_tcl(COMMAND_ARGS) __page(CMD1_SEG);
#endif /* TCL */
/* toybox.c */
LS int read_charset_callback(char *) __page(CMD1_SEG);
LS int read_bigcharset(char *) __page(CMD1_SEG);
LS int read_ascii(char *) __page(CMD1_SEG);
LS void trivia_week_toppers(void) __page(CMD1_SEG);
LS void hint_one(void) __page(CMD1_SEG);
LS void hint_two(void) __page(CMD1_SEG);
LS void hint_three(void) __page(CMD1_SEG);
LS void trivia_cleanup(void) __page(CMD1_SEG);
LS void trivia_check(Chan *, char *) __page(CMD1_SEG);
LS void trivia_no_answer(void) __page(CMD1_SEG);
LS char *random_question(char *) __page(CMD1_SEG);
LS void trivia_question(void) __page(CMD1_SEG);
LS void trivia_tick(void) __page(CMD1_SEG);
LS void write_triviascore(void) __page(CMD1_SEG);
LS int trivia_score_callback(char *) __page(CMD1_SEG);
LS void read_triviascore(void) __page(CMD1_SEG);
LS void do_bigsay(COMMAND_ARGS) __page(CMD1_SEG);
LS void do_random_msg(COMMAND_ARGS) __page(CMD1_SEG);
LS void do_randtopic(COMMAND_ARGS) __page(CMD1_SEG);
LS void do_8ball(COMMAND_ARGS) __page(CMD1_SEG);
LS void do_ascii(COMMAND_ARGS) __page(CMD1_SEG);
LS void do_rand(COMMAND_ARGS) __page(CMD1_SEG);
LS void do_trivia(COMMAND_ARGS) __page(CMD1_SEG);
int read_charset_callback(char *) __page(CMD1_SEG);
int read_bigcharset(char *) __page(CMD1_SEG);
int read_ascii(char *) __page(CMD1_SEG);
void trivia_week_toppers(void) __page(CMD1_SEG);
void hint_one(void) __page(CMD1_SEG);
void hint_two(void) __page(CMD1_SEG);
void hint_three(void) __page(CMD1_SEG);
void trivia_cleanup(void) __page(CMD1_SEG);
void trivia_check(Chan *, char *) __page(CMD1_SEG);
void trivia_no_answer(void) __page(CMD1_SEG);
char *random_question(char *) __page(CMD1_SEG);
void trivia_question(void) __page(CMD1_SEG);
void trivia_tick(void) __page(CMD1_SEG);
void write_triviascore(void) __page(CMD1_SEG);
int trivia_score_callback(char *) __page(CMD1_SEG);
void read_triviascore(void) __page(CMD1_SEG);
void do_bigsay(COMMAND_ARGS) __page(CMD1_SEG);
void do_randmsg(COMMAND_ARGS) __page(CMD1_SEG);
void do_randtopic(COMMAND_ARGS) __page(CMD1_SEG);
void do_8ball(COMMAND_ARGS) __page(CMD1_SEG);
void do_ascii(COMMAND_ARGS) __page(CMD1_SEG);
void do_rand(COMMAND_ARGS) __page(CMD1_SEG);
void do_trivia(COMMAND_ARGS) __page(CMD1_SEG);
/* uptime.c */
@ -740,36 +733,36 @@ void do_upsend(COMMAND_ARGS) __page(CMD1_SEG);
/* user.c */
LS void cfg_user(char *) __page(CFG1_SEG);
void cfg_modcount(char *);
LS void cfg_pass(char *) __page(CFG1_SEG);
LS void cfg_mask(char *) __page(CFG1_SEG);
LS void cfg_chan(char *) __page(CFG1_SEG);
LS void cfg_opt(char *) __page(CFG1_SEG);
LS void cfg_shit(char *) __page(CFG1_SEG);
void cfg_kicksay(char *);
LS void cfg_greet(char *) __page(CFG1_SEG);
LS void cfg_note(char *) __page(CFG1_SEG);
void user_sync(void);
int read_userlist_callback(char *);
int read_userlist(char *);
int write_userlist(char *);
void rehash_chanusers(void);
LS void addtouser(Strp **, const char *, int) __attr(CORE_SEG, __regparm(3));
LS int remfromuser(Strp **, const char *) __attr(CORE_SEG, __regparm(2));
void cfg_user(char *) __page(CFG1_SEG);
void cfg_modcount(char *) __page(CFG1_SEG);
void cfg_pass(char *) __page(CFG1_SEG);
void cfg_mask(char *) __page(CFG1_SEG);
void cfg_chan(char *) __page(CFG1_SEG);
void cfg_opt(char *) __page(CFG1_SEG);
void cfg_shit(char *) __page(CFG1_SEG);
void cfg_kicksay(char *) __page(CFG1_SEG);
void cfg_greet(char *) __page(CFG1_SEG);
void cfg_note(char *) __page(CFG1_SEG);
void user_sync(void) __page(CFG1_SEG);
int read_userlist_callback(char *) __page(CFG1_SEG);
int read_userlist(char *) __page(CFG1_SEG);
int write_userlist(char *) __page(CMD1_SEG);
void rehash_chanusers(void) __page(CORE_SEG);
void addtouser(Strp **, const char *, int) __page(CORE_SEG);
int remfromuser(Strp **, const char *) __page(CORE_SEG);
void mirror_user(User *) __page(CORE_SEG);
void mirror_userlist(void) __page(CORE_SEG);
void reset_userlink(User *, User *);
void remove_user(User *);
User *add_user(char *, char *, int);
User *find_handle(const char *);
int userhaschannel(const User *, const char *);
void reset_userlink(User *, User *) __page(CORE_SEG);
void remove_user(User *) __page(CFG1_SEG);
User *add_user(char *, char *, int) __page(CFG1_SEG);
User *find_handle(const char *) __page(CORE_SEG);
int userhaschannel(const User *, const char *) __page(CORE_SEG);
User *get_user(const char *, const char *) __page(CORE_SEG);
int get_useraccess(const char *, const char *) __page(CORE_SEG);
int get_maxaccess(const char *) __page(CORE_SEG);
int is_bot(const char *) __page(CORE_SEG);
int get_protaction(Chan *, char *) __page(CORE_SEG);
int usercanmodify(const char *, const User *);
int usercanmodify(const char *, const User *) __page(CMD1_SEG);
void change_pass(User *, char *) __page(CMD1_SEG);
void do_access(COMMAND_ARGS) __page(CMD1_SEG);
void do_userlist(COMMAND_ARGS) __page(CMD1_SEG);
@ -787,7 +780,7 @@ int find_setting(const char *) __page(CORE_SEG);
void copy_vars(UniVar *, UniVar *) __page(CFG1_SEG);
void set_binarydefault(UniVar *) __page(CFG1_SEG);
void delete_vars(UniVar *, int) __page(CMD1_SEG);
void var_resolve_host(const struct Setting *);
void var_resolve_host(const struct Setting *) __page(CMD1_SEG);
void nobo_strcpy(const char *) __page(CMD1_SEG);
void ec_access(char *, const char *) __page(CMD1_SEG);
void ec_capabilities(char *, const char *) __page(CMD1_SEG);

View File

@ -229,6 +229,8 @@ void usage_command(char *to, const char *arg)
char *pt;
int i;
if (to == CoreUser.name) /* dont send usage notices to config file */
return;
for(i=0;ulist[i].command;i++)
{
if (!stringcasecmp(arg,ulist[i].command))

View File

@ -254,18 +254,19 @@ int to_file(const int sock, const char *format, ...)
* Format a message and send it to the current bots server
* to_server needs a newline (\n) it wont manufacture it itself.
*/
void to_server(char *format, ...)
void to_server(const char *format, ...)
{
va_list msg;
#ifdef DEBUG
char *line,*rest;
#endif /* DEBUG */
int sz;
if (current->sock == -1)
return;
va_start(msg,format);
vsprintf(globaldata,format,msg);
sz = vsprintf(globaldata,format,msg);
va_end(msg);
/*
@ -274,7 +275,7 @@ void to_server(char *format, ...)
*/
current->sendq_time += 2;
if (write(current->sock,globaldata,strlen(globaldata)) < 0)
if (write(current->sock,globaldata,sz) < 0)
{
#ifdef DEBUG
debug("[StS] {%i} errno = %i\n",current->sock,errno);

View File

@ -858,7 +858,10 @@ restart_die:
#endif /* CHANBAN */
#ifdef RAWDNS
if (dnssock != -1)
/*
* Only a single socket to check.
*/
if (dnssock != -1 && FD_ISSET(dnssock,&read_fds))
process_rawdns();
#endif /* RAWDNS */

View File

@ -159,21 +159,30 @@ NetCfg *find_netcfg(int guid)
BotInfo *make_botinfo(int guid, int hops, char *nuh, char *server, char *version)
{
BotInfo *new;
BotInfo *newbinfo;
int sn,vn;
set_mallocdoer(make_botinfo);
new = (BotInfo*)Calloc(sizeof(BotInfo) + StrlenX(nuh,server,version,NULL));
newbinfo = (BotInfo*)Calloc(sizeof(BotInfo) + StrlenX(nuh,server,version,NULL));
new->guid = guid;
new->hops = hops;
newbinfo->guid = guid;
newbinfo->hops = hops;
new->server = stringcat(new->nuh,nuh) + 1;
new->version = stringcat(new->server,server) + 1;
stringcpy(new->version,version);
/*
sprintf(newbinfo->nuh,"%s%c%n%s%c%n%s",nuh,0,&sn,server,0,&vn,version);
newbinfo->server = newbinfo->nuh + sn;
newbinfo->version = newbinfo->nuh + vn;
*/
newbinfo->server = stringcat(newbinfo->nuh,nuh) + 1;
newbinfo->version = stringcat(newbinfo->server,server) + 1;
stringcpy(newbinfo->version,version);
return(new);
return(newbinfo);
}
/*
* broadcast data to all except the source
*/
void botnet_relay(BotNet *source, char *format, ...)
{
BotNet *bn;
@ -188,9 +197,8 @@ void botnet_relay(BotNet *source, char *format, ...)
if (!sz)
{
va_start(msg,format);
vsprintf(globaldata,format,msg);
sz = vsprintf(globaldata,format,msg);
va_end(msg);
sz = strlen(globaldata);
}
if (write(bn->sock,globaldata,sz) < 0)
@ -201,6 +209,24 @@ void botnet_relay(BotNet *source, char *format, ...)
}
}
void botnet_binfo_relay(BotNet *source, BotInfo *binfo)
{
botnet_relay(source,
"BL%i %i %s %s %s\n",binfo->guid,(binfo->hops + 1),
(binfo->nuh) ? binfo->nuh : UNKNOWNATUNKNOWN,
(binfo->server) ? binfo->server : UNKNOWN,
(binfo->version) ? binfo->version : "-");
}
void botnet_binfo_tofile(int sock, BotInfo *binfo)
{
to_file(sock,
"BL%i %i %s %s %s\n",binfo->guid,(binfo->hops + 1),
(binfo->nuh) ? binfo->nuh : UNKNOWNATUNKNOWN,
(binfo->server) ? binfo->server : UNKNOWN,
(binfo->version) ? binfo->version : "-");
}
void botnet_refreshbotinfo(void)
{
Server *sv;
@ -215,22 +241,6 @@ void botnet_refreshbotinfo(void)
#endif /* DEBUG */
}
void botnet_binfo_relay(BotNet *source, BotInfo *binfo)
{
botnet_relay(source,"BL%i %i %s %s %s\n",binfo->guid,(binfo->hops + 1),
(binfo->nuh) ? binfo->nuh : UNKNOWNATUNKNOWN,
(binfo->server) ? binfo->server : UNKNOWN,
(binfo->version) ? binfo->version : "-");
}
void botnet_binfo_tofile(int sock, BotInfo *binfo)
{
to_file(sock,"BL%i %i %s %s %s\n",binfo->guid,(binfo->hops + 1),
(binfo->nuh) ? binfo->nuh : UNKNOWNATUNKNOWN,
(binfo->server) ? binfo->server : UNKNOWN,
(binfo->version) ? binfo->version : "-");
}
void botnet_dumplinklist(BotNet *bn)
{
BotInfo *binfo;
@ -255,7 +265,7 @@ void botnet_dumplinklist(BotNet *bn)
}
for(bn2=botnetlist;bn2;bn2=bn2->next)
{
if ((bn2 == bn) || (bn2->status != BN_LINKED) || !(bn2->list_complete))
if ((bn2 == bn) || (bn2->status != BN_LINKED) || (bn2->opt.links_complete == 0))
continue;
for(binfo=bn2->botinfo;binfo;binfo=binfo->next)
botnet_binfo_tofile(bn->sock,binfo);
@ -707,7 +717,7 @@ void basicBanner(BotNet *bn, char *rest)
void basicLink(BotNet *bn, char *version)
{
BotInfo *binfo,*delete,**pp;
BotInfo *binfo,**pp;
NetCfg *cfg;
char *nuh,*server;
int guid,hops;
@ -754,7 +764,7 @@ void basicLink(BotNet *bn, char *version)
continue;
cfg->linked = TRUE;
}
bn->list_complete = TRUE;
bn->opt.links_complete = TRUE;
return;
}
@ -780,23 +790,25 @@ void basicLink(BotNet *bn, char *version)
binfo = make_botinfo(guid,hops,nuh,server,version);
if (bn->botinfo == NULL)
send_global(SPYSTR_STATUS,"connecting to %s [guid %i]",nickcpy(NULL,nuh),bn->guid);
send_global(SPYSTR_STATUS,"Connected to %s [guid %i]",nickcpy(NULL,nuh),bn->guid);
pp = &bn->botinfo;
while(*pp)
{
delete = *pp;
if (guid == delete->guid)
BotInfo *trash;
if (guid == (*pp)->guid)
{
*pp = delete->next;
Free((char**)&delete);
trash = *pp;
*pp = trash->next;
Free((char**)&trash);
break;
}
pp = &delete->next;
pp = &(*pp)->next;
}
binfo->next = *pp;
*pp = binfo;
if (bn->list_complete)
if (bn->opt.links_complete)
{
if ((cfg = find_netcfg(guid)))
cfg->linked = TRUE;
@ -1617,7 +1629,7 @@ clean:
debug("(process_botnet) botnet quit: guid %i child of %i on socket %i\n",
binfo->guid,bn->guid,bn->sock);
#endif /* DEBUG */
if (bn->list_complete)
if (bn->opt.links_complete)
{
send_global(SPYSTR_BOTNET,"quit: guid %i (child of %i)",
binfo->guid,bn->guid);
@ -1626,7 +1638,7 @@ clean:
}
Free((char**)&binfo);
}
if (bn->list_complete)
if (bn->opt.links_complete)
{
botnet_relay(bn,"BQ%i\n",bn->guid);
}

View File

@ -1,3 +1,13 @@
/*
*
* This file is included in ons.c right before on_msg
* It is also used in gencmd.c where its used with different
* random hashdata in order to find a hashmap with no
* collisions. Unfortunatly there is no way of handling
* hasmaps with collisions currently so if it gets stuck
* trying hashdata forever you are out of luck.
*
*/
int mkhash(const char *cmd)
{
const char *s;
@ -14,8 +24,8 @@ int mkhash(const char *cmd)
h = (a - b) & HASHDATAMASK;
ki += a + hashdata[h];
#ifdef HEATMAP
/* used when refining the algorithm */
heatmap[ki & HASHDATAMASK] += 1;
//heatmap[(ki + h) & HASHDATAMASK] += 1;
#endif
kk ^= hashdata[ki & HASHDATAMASK] ^ (hashdata[(h + ki) & HASHDATAMASK] << 8);
s++;

View File

@ -33,7 +33,7 @@
#define INTPROC(x) .v.numptr=&x
#define STRPROC(x) .v.strptr=&x
LS const Setting VarName[SIZE_VARS] =
const Setting VarName[SIZE_VARS] =
{
/*
* all channel settings in the beginning

View File

@ -147,6 +147,7 @@ typedef struct Alias
{
struct Alias *next;
int hash;
char *format;
char alias[1];
@ -233,7 +234,7 @@ typedef struct Setting
char **strptr;
} v;
char *name;
char name[16];
int max;
void (*onchangefunc)(const struct Setting *);
@ -706,8 +707,8 @@ typedef struct BotNet
{
uint32_t pta:1, /* plain text auth */
sha:1, /* SHA */
md5:1; /* MD5 */
md5:1, /* MD5 */
links_complete; /* All links shared to this bot */
} opt;
Mech *controller;
@ -719,7 +720,6 @@ typedef struct BotNet
time_t when;
struct BotInfo *botinfo;
int list_complete;
char sockdata[MSGLEN];

View File

@ -25,14 +25,6 @@
* These are more or less globally used..
*/
/*
#define FMT_PLAIN "%s"
#define FMT_6XSTRTAB "%s\t%s\t%s\t%s\t%s\t%s"
#define FMT_4XSTRTAB "%s\t%s\t%s\t%s"
#define FMT_3XSTRTAB "%s\t%s\t%s"
*/
#define FMT_PLAINLINE "%s\n"
#define MATCH_ALL "*"
#define TEXT_NOTINSERVLIST "(not in serverlist)"

View File

@ -812,7 +812,7 @@ reuse_font:
}
}
void do_random_msg(COMMAND_ARGS)
void do_randmsg(COMMAND_ARGS)
{
const char *filename;
const char *message;

View File

@ -53,10 +53,12 @@ int find_setting(const char *name)
{
int i;
for(i=0;VarName[i].name;i++)
for(i=0;i<SIZE_VARS;i++)
{
if (!stringcasecmp(name,VarName[i].name))
return(i);
/* 223 = binary 11011111 -> convert lower case to upper */
if ((*name & 223) == *VarName[i].name)
if (stringcasecmp(name,VarName[i].name) == 0)
return(i);
}
return(-1);
}
@ -86,8 +88,10 @@ void set_binarydefault(UniVar *dst)
{
int i;
for(i=0;VarName[i].name;i++)
for(i=0;i<SIZE_VARS;i++)
{
dst[i].str_var = VarName[i].v.str;
}
}
void delete_vars(UniVar *vars, int which)
@ -403,6 +407,7 @@ void do_set(COMMAND_ARGS)
/*
* empty args, its "set" or "set #channel"
* list setting and values
*/
if (!name)
{
@ -484,6 +489,10 @@ second_pass:
if ((which = find_setting(name)) == -1)
{
set_usage:
#ifdef DEBUG
if (from == CoreUser.name)
debug("init: set error: %s\n",nullstr(name));
#endif
usage(from); /* usage for CurrentCmd->name */
return;
}