minor updates and bugfixes

This commit is contained in:
fishwaldo 2003-07-30 13:58:22 +00:00
parent ca7e8620b0
commit acbc8d4a3d
45 changed files with 7504 additions and 7799 deletions

2
.indent.pro vendored
View file

@ -1 +1 @@
-br -ce -ts8 -kr -i8 -ut -v -cdw -v -br -brs -cdw -ce -l200 -nbc -ut -ts8 -i8

394
Bahamut.c
View file

@ -20,7 +20,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: Bahamut.c,v 1.4 2003/07/23 12:45:51 fishwaldo Exp $ ** $Id: Bahamut.c,v 1.5 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
#include "stats.h" #include "stats.h"
@ -150,55 +150,60 @@ Oper_Modes usr_mds[] = {
{0, 0, 0} {0, 0, 0}
}; };
void init_ircd() void
init_ircd ()
{ {
/* count the number of commands */ /* count the number of commands */
ircd_srv.cmdcount = ((sizeof (cmd_list) / sizeof (cmd_list[0])) - 1); ircd_srv.cmdcount = ((sizeof (cmd_list) / sizeof (cmd_list[0])) - 1);
}; };
int sserver_cmd(const char *name, const int numeric, const char *infoline) int
sserver_cmd (const char *name, const int numeric, const char *infoline)
{ {
sts(":%s %s %s %d :%s", me.name, sts (":%s %s %s %d :%s", me.name, MSG_SERVER, name, numeric, infoline);
MSG_SERVER, name, numeric, infoline);
return 1; return 1;
} }
int slogin_cmd(const char *name, const int numeric, const char *infoline, int
const char *pass) slogin_cmd (const char *name, const int numeric, const char *infoline, const char *pass)
{ {
sts ("%s %s :TS", MSG_PASS, pass); sts ("%s %s :TS", MSG_PASS, pass);
sts ("CAPAB TS3 SSJOIN BURST NICKIP"); sts ("CAPAB TS3 SSJOIN BURST NICKIP");
sts("%s %s %d :%s", MSG_SERVER, name, sts ("%s %s %d :%s", MSG_SERVER, name, numeric, infoline);
numeric, infoline);
return 1; return 1;
} }
int ssquit_cmd(const char *server) int
ssquit_cmd (const char *server)
{ {
sts ("%s %s", MSG_SQUIT, server); sts ("%s %s", MSG_SQUIT, server);
return 1; return 1;
} }
int sprotocol_cmd(const char *option) int
sprotocol_cmd (const char *option)
{ {
return 1; return 1;
} }
int squit_cmd(const char *who, const char *quitmsg) int
squit_cmd (const char *who, const char *quitmsg)
{ {
sts (":%s %s :%s", who, MSG_QUIT, quitmsg); sts (":%s %s :%s", who, MSG_QUIT, quitmsg);
DelUser (who); DelUser (who);
return 1; return 1;
} }
int spart_cmd(const char *who, const char *chan) int
spart_cmd (const char *who, const char *chan)
{ {
sts (":%s %s %s", who, MSG_PART, chan); sts (":%s %s %s", who, MSG_PART, chan);
part_chan (finduser (who), (char *) chan); part_chan (finduser (who), (char *) chan);
return 1; return 1;
} }
int sjoin_cmd(const char *who, const char *chan, unsigned long chflag) int
sjoin_cmd (const char *who, const char *chan, unsigned long chflag)
{ {
char flag; char flag;
char mode[2]; char mode[2];
@ -236,16 +241,14 @@ int sjoin_cmd(const char *who, const char *chan, unsigned long chflag)
return 1; return 1;
} }
int schmode_cmd(const char *who, const char *chan, const char *mode, int
const char *args) schmode_cmd (const char *who, const char *chan, const char *mode, const char *args)
{ {
char **av; char **av;
int ac; int ac;
char tmp[512]; char tmp[512];
sts(":%s %s %s %s %s %lu", me.name, sts (":%s %s %s %s %s %lu", me.name, MSG_MODE, chan, mode, args, time (NULL));
MSG_MODE, chan, mode, args,
time(NULL));
snprintf (tmp, 512, "%s %s %s", chan, mode, args); snprintf (tmp, 512, "%s %s %s", chan, mode, args);
ac = split_buf (tmp, &av, 0); ac = split_buf (tmp, &av, 0);
ChanMode ("", av, ac); ChanMode ("", av, ac);
@ -253,8 +256,8 @@ int schmode_cmd(const char *who, const char *chan, const char *mode,
return 1; return 1;
} }
int snewnick_cmd(const char *nick, const char *ident, const char *host, int
const char *realname, long mode) snewnick_cmd (const char *nick, const char *ident, const char *host, const char *realname, long mode)
{ {
int i, j; int i, j;
char newmode[20]; char newmode[20];
@ -268,22 +271,21 @@ int snewnick_cmd(const char *nick, const char *ident, const char *host,
} }
newmode[j] = '\0'; newmode[j] = '\0';
sts("%s %s 1 %lu %s %s %s %s 0 %lu :%s", sts ("%s %s 1 %lu %s %s %s %s 0 %lu :%s", MSG_NICK, nick, time (NULL), newmode, ident, host, me.name, time (NULL), realname);
MSG_NICK, nick, time(NULL), newmode,
ident, host, me.name, time(NULL), realname);
AddUser (nick, ident, host, me.name, 0, time (NULL)); AddUser (nick, ident, host, me.name, 0, time (NULL));
UserMode (nick, newmode, 0); UserMode (nick, newmode, 0);
return 1; return 1;
} }
int sping_cmd(const char *from, const char *reply, const char *to) int
sping_cmd (const char *from, const char *reply, const char *to)
{ {
sts(":%s %s %s :%s", from, MSG_PING, reply, sts (":%s %s %s :%s", from, MSG_PING, reply, to);
to);
return 1; return 1;
} }
int sumode_cmd(const char *who, const char *target, long mode) int
sumode_cmd (const char *who, const char *target, long mode)
{ {
int i, j; int i, j;
char newmode[20]; char newmode[20];
@ -297,14 +299,13 @@ int sumode_cmd(const char *who, const char *target, long mode)
} }
newmode[j] = '\0'; newmode[j] = '\0';
sts(":%s %s %s :%s", who, MSG_MODE, target, sts (":%s %s %s :%s", who, MSG_MODE, target, newmode);
newmode);
UserMode (target, newmode, 0); UserMode (target, newmode, 0);
return 1; return 1;
} }
int snumeric_cmd(const int numeric, const char *target, const char *data, int
...) snumeric_cmd (const int numeric, const char *target, const char *data, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
@ -315,160 +316,150 @@ int snumeric_cmd(const int numeric, const char *target, const char *data,
return 1; return 1;
} }
int spong_cmd(const char *reply) int
spong_cmd (const char *reply)
{ {
sts ("%s %s", MSG_PONG, reply); sts ("%s %s", MSG_PONG, reply);
return 1; return 1;
} }
#if 0 #if 0
int snetinfo_cmd() int
snetinfo_cmd ()
{ {
sts(":%s %s 0 %d %d %s 0 0 0 :%s", me.name, MSG_SNETINFO, sts (":%s %s 0 %d %d %s 0 0 0 :%s", me.name, MSG_SNETINFO, time (NULL), ircd_srv.uprot, ircd_srv.cloak, me.netname);
time(NULL), ircd_srv.uprot, ircd_srv.cloak, me.netname);
return 1; return 1;
} }
#endif #endif
int skill_cmd(const char *from, const char *target, const char *reason, int
...) skill_cmd (const char *from, const char *target, const char *reason, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
va_start (ap, reason); va_start (ap, reason);
vsnprintf (buf, 512, reason, ap); vsnprintf (buf, 512, reason, ap);
sts(":%s %s %s :%s", from, MSG_KILL, sts (":%s %s %s :%s", from, MSG_KILL, target, buf);
target, buf);
va_end (ap); va_end (ap);
DelUser (target); DelUser (target);
return 1; return 1;
} }
int ssvskill_cmd(const char *who, const char *reason, ...) int
ssvskill_cmd (const char *who, const char *reason, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
va_start (ap, reason); va_start (ap, reason);
vsnprintf (buf, 512, reason, ap); vsnprintf (buf, 512, reason, ap);
sts(":%s %s %s :%s", me.name, MSG_SVSKILL, sts (":%s %s %s :%s", me.name, MSG_SVSKILL, who, buf);
who, buf);
va_end (ap); va_end (ap);
return 1; return 1;
} }
int ssmo_cmd(const char *from, const char *umodetarget, const char *msg) int
ssmo_cmd (const char *from, const char *umodetarget, const char *msg)
{ {
chanalert(s_Services, chanalert (s_Services, "Warning, Module %s tried to SMO, which is not supported in Bahamut", segvinmodule);
"Warning, Module %s tried to SMO, which is not supported in Bahamut", nlog (LOG_NOTICE, LOG_CORE, "Warning, Module %s tried to SMO, which is not supported in Bahamut", segvinmodule);
segvinmodule);
nlog(LOG_NOTICE, LOG_CORE,
"Warning, Module %s tried to SMO, which is not supported in Bahamut",
segvinmodule);
return 1; return 1;
} }
int snick_cmd(const char *oldnick, const char *newnick) int
snick_cmd (const char *oldnick, const char *newnick)
{ {
Change_User (finduser (oldnick), newnick); Change_User (finduser (oldnick), newnick);
sts(":%s %s %s %d", oldnick, MSG_NICK, sts (":%s %s %s %d", oldnick, MSG_NICK, newnick, time (NULL));
newnick, time(NULL));
return 1;
}
int sswhois_cmd(const char *target, const char *swhois)
{
chanalert(s_Services,
"Warning Module %s tried to SWHOIS, which is not supported in Bahamut",
segvinmodule);
nlog(LOG_NOTICE, LOG_CORE,
"Warning. Module %s tried to SWHOIS, which is not supported in Bahamut",
segvinmodule);
return 1;
}
int ssvsnick_cmd(const char *target, const char *newnick)
{
sts("%s %s %s :%d", MSG_SVSNICK, target,
newnick, time(NULL));
return 1; return 1;
} }
int ssvsjoin_cmd(const char *target, const char *chan) int
sswhois_cmd (const char *target, const char *swhois)
{ {
chanalert(s_Services, chanalert (s_Services, "Warning Module %s tried to SWHOIS, which is not supported in Bahamut", segvinmodule);
"Warning Module %s tried to SVSJOIN, which is not supported in Bahamut", nlog (LOG_NOTICE, LOG_CORE, "Warning. Module %s tried to SWHOIS, which is not supported in Bahamut", segvinmodule);
segvinmodule);
nlog(LOG_NOTICE, LOG_CORE,
"Warning. Module %s tried to SVSJOIN, which is not supported in Bahamut",
segvinmodule);
return 1; return 1;
} }
int ssvspart_cmd(const char *target, const char *chan) int
ssvsnick_cmd (const char *target, const char *newnick)
{ {
chanalert(s_Services, sts ("%s %s %s :%d", MSG_SVSNICK, target, newnick, time (NULL));
"Warning Module %s tried to SVSPART, which is not supported in Bahamut",
segvinmodule);
nlog(LOG_NOTICE, LOG_CORE,
"Warning. Module %s tried to SVSPART, which is not supported in Bahamut",
segvinmodule);
return 1; return 1;
} }
int skick_cmd(const char *who, const char *target, const char *chan, int
const char *reason) ssvsjoin_cmd (const char *target, const char *chan)
{ {
sts(":%s %s %s %s :%s", who, MSG_KICK, chanalert (s_Services, "Warning Module %s tried to SVSJOIN, which is not supported in Bahamut", segvinmodule);
chan, target, (reason ? reason : "No Reason Given")); nlog (LOG_NOTICE, LOG_CORE, "Warning. Module %s tried to SVSJOIN, which is not supported in Bahamut", segvinmodule);
return 1;
}
int
ssvspart_cmd (const char *target, const char *chan)
{
chanalert (s_Services, "Warning Module %s tried to SVSPART, which is not supported in Bahamut", segvinmodule);
nlog (LOG_NOTICE, LOG_CORE, "Warning. Module %s tried to SVSPART, which is not supported in Bahamut", segvinmodule);
return 1;
}
int
skick_cmd (const char *who, const char *target, const char *chan, const char *reason)
{
sts (":%s %s %s %s :%s", who, MSG_KICK, chan, target, (reason ? reason : "No Reason Given"));
part_chan (finduser (target), (char *) chan); part_chan (finduser (target), (char *) chan);
return 1; return 1;
} }
int swallops_cmd(const char *who, const char *msg, ...)
int
swallops_cmd (const char *who, const char *msg, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
va_start (ap, msg); va_start (ap, msg);
vsnprintf (buf, 512, msg, ap); vsnprintf (buf, 512, msg, ap);
sts(":%s %s :%s", who, MSG_WALLOPS, sts (":%s %s :%s", who, MSG_WALLOPS, buf);
buf);
va_end (ap); va_end (ap);
return 1; return 1;
} }
int ssvshost_cmd(const char *who, const char *vhost) int
ssvshost_cmd (const char *who, const char *vhost)
{ {
chanalert(s_Services, chanalert (s_Services, "Warning Module %s tried to SVSHOST, which is not supported in Bahamut", segvinmodule);
"Warning Module %s tried to SVSHOST, which is not supported in Bahamut", nlog (LOG_NOTICE, LOG_CORE, "Warning. Module %s tried to SVSHOST, which is not supported in Bahamut", segvinmodule);
segvinmodule);
nlog(LOG_NOTICE, LOG_CORE,
"Warning. Module %s tried to SVSHOST, which is not supported in Bahamut",
segvinmodule);
return 1; return 1;
} }
int sakill_cmd(const char *host, const char *ident, const char *setby,
const int length, const char *reason, ...) int
sakill_cmd (const char *host, const char *ident, const char *setby, const int length, const char *reason, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
va_start (ap, reason); va_start (ap, reason);
vsnprintf (buf, 512, reason, ap); vsnprintf (buf, 512, reason, ap);
sts(":%s %s %s %s %d %s %d :%s", me.name, sts (":%s %s %s %s %d %s %d :%s", me.name, MSG_AKILL, host, ident, length, setby, time (NULL), buf);
MSG_AKILL, host, ident, length, setby,
time(NULL), buf);
va_end (ap); va_end (ap);
return 1; return 1;
} }
int srakill_cmd(const char *host, const char *ident) int
srakill_cmd (const char *host, const char *ident)
{ {
sts(":%s %s %s %s", me.name, MSG_RAKILL, sts (":%s %s %s %s", me.name, MSG_RAKILL, host, ident);
host, ident);
return 1; return 1;
} }
int ssvinfo_cmd() int
ssvinfo_cmd ()
{ {
sts ("SVINFO 3 3 0 :%d", time (NULL)); sts ("SVINFO 3 3 0 :%d", time (NULL));
return 1; return 1;
} }
int sburst_cmd(int b)
int
sburst_cmd (int b)
{ {
if (b == 0) { if (b == 0) {
sts ("BURST 0"); sts ("BURST 0");
@ -480,7 +471,8 @@ int sburst_cmd(int b)
void chanalert(char *who, char *buf, ...) void
chanalert (char *who, char *buf, ...)
{ {
va_list ap; va_list ap;
char tmp[512]; char tmp[512];
@ -489,13 +481,14 @@ void chanalert(char *who, char *buf, ...)
vsnprintf (tmp, 512, buf, ap); vsnprintf (tmp, 512, buf, ap);
if (me.onchan) { if (me.onchan) {
snprintf(out, 512, ":%s PRIVMSG %s :%s", who, me.chan, snprintf (out, 512, ":%s PRIVMSG %s :%s", who, me.chan, tmp);
tmp);
sts ("%s", out); sts ("%s", out);
} }
va_end (ap); va_end (ap);
} }
void prefmsg(char *to, const char *from, char *fmt, ...)
void
prefmsg (char *to, const char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
@ -503,9 +496,7 @@ void prefmsg(char *to, const char *from, char *fmt, ...)
va_start (ap, fmt); va_start (ap, fmt);
vsnprintf (buf2, sizeof (buf2), fmt, ap); vsnprintf (buf2, sizeof (buf2), fmt, ap);
if (findbot (to)) { if (findbot (to)) {
chanalert(s_Services, chanalert (s_Services, "Message From our Bot(%s) to Our Bot(%s), Dropping Message", from, to);
"Message From our Bot(%s) to Our Bot(%s), Dropping Message",
from, to);
return; return;
} }
if (me.want_privmsg) { if (me.want_privmsg) {
@ -516,15 +507,15 @@ void prefmsg(char *to, const char *from, char *fmt, ...)
sts ("%s", buf); sts ("%s", buf);
va_end (ap); va_end (ap);
} }
void privmsg(char *to, const char *from, char *fmt, ...)
void
privmsg (char *to, const char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
if (findbot (to)) { if (findbot (to)) {
chanalert(s_Services, chanalert (s_Services, "Message From our Bot(%s) to Our Bot(%s), Dropping Message", from, to);
"Message From our Bot(%s) to Our Bot(%s), Dropping Message",
from, to);
return; return;
} }
@ -535,15 +526,14 @@ void privmsg(char *to, const char *from, char *fmt, ...)
va_end (ap); va_end (ap);
} }
void notice(char *to, const char *from, char *fmt, ...) void
notice (char *to, const char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
if (findbot (to)) { if (findbot (to)) {
chanalert(s_Services, chanalert (s_Services, "Message From our Bot(%s) to Our Bot(%s), Dropping Message", from, to);
"Message From our Bot(%s) to Our Bot(%s), Dropping Message",
from, to);
return; return;
} }
@ -555,7 +545,8 @@ void notice(char *to, const char *from, char *fmt, ...)
} }
void privmsg_list(char *to, char *from, const char **text) void
privmsg_list (char *to, char *from, const char **text)
{ {
while (*text) { while (*text) {
if (**text) if (**text)
@ -567,7 +558,8 @@ void privmsg_list(char *to, char *from, const char **text)
} }
void globops(char *from, char *fmt, ...) void
globops (char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
@ -588,7 +580,8 @@ void globops(char *from, char *fmt, ...)
} }
void Srv_Sjoin(char *origin, char **argv, int argc) void
Srv_Sjoin (char *origin, char **argv, int argc)
{ {
char nick[MAXNICK]; char nick[MAXNICK];
long mode = 0; long mode = 0;
@ -615,22 +608,17 @@ printf("%s\n", modes);
goto nomodes; goto nomodes;
} }
while (*modes) { while (*modes) {
for (i = 0; for (i = 0; i < ((sizeof (cFlagTab) / sizeof (cFlagTab[0])) - 1); i++) {
i < ((sizeof(cFlagTab) / sizeof(cFlagTab[0])) - 1);
i++) {
if (*modes == cFlagTab[i].flag) { if (*modes == cFlagTab[i].flag) {
if (cFlagTab[i].parameters) { if (cFlagTab[i].parameters) {
m = smalloc (sizeof (ModesParm)); m = smalloc (sizeof (ModesParm));
m->mode = cFlagTab[i].mode; m->mode = cFlagTab[i].mode;
strncpy(m->param, argv[j], strncpy (m->param, argv[j], PARAMSIZE);
PARAMSIZE);
mn = lnode_create (m); mn = lnode_create (m);
if (!list_isfull (tl)) { if (!list_isfull (tl)) {
list_append (tl, mn); list_append (tl, mn);
} else { } else {
nlog(LOG_CRITICAL, nlog (LOG_CRITICAL, LOG_CORE, "Eeeek, tl list is full in Svr_Sjoin(ircd.c)");
LOG_CORE,
"Eeeek, tl list is full in Svr_Sjoin(ircd.c)");
do_exit (0); do_exit (0);
} }
j++; j++;
@ -646,10 +634,7 @@ printf("%s\n", modes);
modes = argv[j]; modes = argv[j];
mode = 0; mode = 0;
while (ok == 1) { while (ok == 1) {
for (i = 0; for (i = 0; i < ((sizeof (cFlagTab) / sizeof (cFlagTab[0])) - 1); i++) {
i <
((sizeof(cFlagTab) / sizeof(cFlagTab[0])) -
1); i++) {
if (cFlagTab[i].sjoin != 0) { if (cFlagTab[i].sjoin != 0) {
if (*modes == cFlagTab[i].sjoin) { if (*modes == cFlagTab[i].sjoin) {
mode |= cFlagTab[i].mode; mode |= cFlagTab[i].mode;
@ -665,8 +650,7 @@ printf("%s\n", modes);
} }
} }
join_chan (finduser (nick), argv[1]); join_chan (finduser (nick), argv[1]);
ChangeChanUserMode(findchan(argv[1]), finduser(nick), 1, ChangeChanUserMode (findchan (argv[1]), finduser (nick), 1, mode);
mode);
j++; j++;
ok = 1; ok = 1;
} }
@ -679,15 +663,15 @@ printf("%s\n", modes);
list_transfer (c->modeparms, tl, list_first (tl)); list_transfer (c->modeparms, tl, list_first (tl));
} else { } else {
/* eeeeeeek, list is full! */ /* eeeeeeek, list is full! */
nlog(LOG_CRITICAL, LOG_CORE, nlog (LOG_CRITICAL, LOG_CORE, "Eeeek, c->modeparms list is full in Svr_Sjoin(ircd.c)");
"Eeeek, c->modeparms list is full in Svr_Sjoin(ircd.c)");
do_exit (0); do_exit (0);
} }
} }
list_destroy (tl); list_destroy (tl);
} }
void Srv_Burst(char *origin, char **argv, int argc) void
Srv_Burst (char *origin, char **argv, int argc)
{ {
if (argc > 0) { if (argc > 0) {
if (ircd_srv.burst == 1) { if (ircd_srv.burst == 1) {
@ -701,54 +685,68 @@ void Srv_Burst(char *origin, char **argv, int argc)
} }
} }
void Srv_Connect(char *origin, char **argv, int argc) void
Srv_Connect (char *origin, char **argv, int argc)
{ {
} }
void Usr_Stats(char *origin, char **argv, int argc) void
Usr_Stats (char *origin, char **argv, int argc)
{ {
User *u; User *u;
u = finduser (origin); u = finduser (origin);
if (!u) { if (!u) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Recieved a Message from a Unknown User! (%s)", origin);
"Recieved a Message from a Unknown User! (%s)",
origin);
return; return;
} }
ShowStats (argv[0], u); ShowStats (argv[0], u);
} }
void Usr_Version(char *origin, char **argv, int argc) void
Usr_Version (char *origin, char **argv, int argc)
{ {
snumeric_cmd(351, origin, "%d.%d.%d%s :%s -> %s %s", MAJOR, MINOR, snumeric_cmd (351, origin, "%d.%d.%d%s :%s -> %s %s", MAJOR, MINOR, REV, version, me.name, version_date, version_time);
REV, version, me.name, version_date, version_time);
} }
void Usr_ShowMOTD(char *origin, char **argv, int argc)
void
Usr_ShowMOTD (char *origin, char **argv, int argc)
{ {
ShowMOTD (origin); ShowMOTD (origin);
} }
void Usr_ShowADMIN(char *origin, char **argv, int argc)
void
Usr_ShowADMIN (char *origin, char **argv, int argc)
{ {
ShowADMIN (origin); ShowADMIN (origin);
} }
void Usr_Showcredits(char *origin, char **argv, int argc)
void
Usr_Showcredits (char *origin, char **argv, int argc)
{ {
Showcredits (origin); Showcredits (origin);
} }
void Usr_AddServer(char *origin, char **argv, int argc)
void
Usr_AddServer (char *origin, char **argv, int argc)
{ {
AddServer (argv[0], origin, atoi (argv[1])); AddServer (argv[0], origin, atoi (argv[1]));
} }
void Usr_DelServer(char *origin, char **argv, int argc)
void
Usr_DelServer (char *origin, char **argv, int argc)
{ {
DelServer (argv[0]); DelServer (argv[0]);
} }
void Usr_DelUser(char *origin, char **argv, int argc)
void
Usr_DelUser (char *origin, char **argv, int argc)
{ {
DelUser (origin); DelUser (origin);
} }
void Usr_Smode(char *origin, char **argv, int argc)
void
Usr_Smode (char *origin, char **argv, int argc)
{ {
if (!strchr (argv[0], '#')) { if (!strchr (argv[0], '#')) {
/* its user svsmode change */ /* its user svsmode change */
@ -758,7 +756,8 @@ void Usr_Smode(char *origin, char **argv, int argc)
ChanMode (origin, argv, argc); ChanMode (origin, argv, argc);
} }
} }
void Usr_Mode(char *origin, char **argv, int argc) void
Usr_Mode (char *origin, char **argv, int argc)
{ {
if (!strchr (argv[0], '#')) { if (!strchr (argv[0], '#')) {
nlog (LOG_DEBUG1, LOG_CORE, "Mode: UserMode: %s", argv[0]); nlog (LOG_DEBUG1, LOG_CORE, "Mode: UserMode: %s", argv[0]);
@ -767,29 +766,30 @@ void Usr_Mode(char *origin, char **argv, int argc)
ChanMode (origin, argv, argc); ChanMode (origin, argv, argc);
} }
} }
void Usr_Kill(char *origin, char **argv, int argc) void
Usr_Kill (char *origin, char **argv, int argc)
{ {
User *u; User *u;
u = finduser (argv[0]); u = finduser (argv[0]);
if (u) { if (u) {
KillUser (argv[0]); KillUser (argv[0]);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, "Can't find user %s for Kill", nlog (LOG_WARNING, LOG_CORE, "Can't find user %s for Kill", argv[0]);
argv[0]);
} }
} }
void Usr_Pong(char *origin, char **argv, int argc) void
Usr_Pong (char *origin, char **argv, int argc)
{ {
Server *s; Server *s;
s = findserver (argv[0]); s = findserver (argv[0]);
if (s) { if (s) {
dopong (s); dopong (s);
} else { } else {
nlog(LOG_NOTICE, LOG_CORE, nlog (LOG_NOTICE, LOG_CORE, "Received PONG from unknown server: %s", argv[0]);
"Received PONG from unknown server: %s", argv[0]);
} }
} }
void Usr_Away(char *origin, char **argv, int argc) void
Usr_Away (char *origin, char **argv, int argc)
{ {
char *Buf; char *Buf;
User *u = finduser (origin); User *u = finduser (origin);
@ -804,18 +804,19 @@ void Usr_Away(char *origin, char **argv, int argc)
free (Buf); free (Buf);
} }
} else { } else {
nlog(LOG_NOTICE, LOG_CORE, nlog (LOG_NOTICE, LOG_CORE, "Warning, Unable to find User %s for Away", origin);
"Warning, Unable to find User %s for Away", origin);
} }
} }
void Usr_Nick(char *origin, char **argv, int argc) void
Usr_Nick (char *origin, char **argv, int argc)
{ {
User *u = finduser (origin); User *u = finduser (origin);
if (u) { if (u) {
Change_User (u, argv[0]); Change_User (u, argv[0]);
} }
} }
void Usr_Topic(char *origin, char **argv, int argc) void
Usr_Topic (char *origin, char **argv, int argc)
{ {
char *buf; char *buf;
Chans *c; Chans *c;
@ -825,13 +826,13 @@ void Usr_Topic(char *origin, char **argv, int argc)
Change_Topic (argv[1], c, atoi (argv[2]), buf); Change_Topic (argv[1], c, atoi (argv[2]), buf);
free (buf); free (buf);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, "Ehhh, Can't find Channel %s", nlog (LOG_WARNING, LOG_CORE, "Ehhh, Can't find Channel %s", argv[0]);
argv[0]);
} }
} }
void Usr_Kick(char *origin, char **argv, int argc) void
Usr_Kick (char *origin, char **argv, int argc)
{ {
User *u, *k; User *u, *k;
u = finduser (argv[1]); u = finduser (argv[1]);
@ -839,12 +840,11 @@ void Usr_Kick(char *origin, char **argv, int argc)
if (u) { if (u) {
kick_chan (u, argv[0], k); kick_chan (u, argv[0], k);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Warning, Can't find user %s for kick %s", argv[1], argv[0]);
"Warning, Can't find user %s for kick %s", argv[1],
argv[0]);
} }
} }
void Usr_Join(char *origin, char **argv, int argc) void
Usr_Join (char *origin, char **argv, int argc)
{ {
char *s, *t; char *s, *t;
t = argv[0]; t = argv[0];
@ -855,11 +855,14 @@ void Usr_Join(char *origin, char **argv, int argc)
join_chan (finduser (origin), s); join_chan (finduser (origin), s);
} }
} }
void Usr_Part(char *origin, char **argv, int argc) void
Usr_Part (char *origin, char **argv, int argc)
{ {
part_chan (finduser (origin), argv[0]); part_chan (finduser (origin), argv[0]);
} }
void Srv_Ping(char *origin, char **argv, int argc)
void
Srv_Ping (char *origin, char **argv, int argc)
{ {
spong_cmd (argv[0]); spong_cmd (argv[0]);
if (ircd_srv.burst) { if (ircd_srv.burst) {
@ -867,16 +870,19 @@ void Srv_Ping(char *origin, char **argv, int argc)
} }
} }
void Srv_Svinfo(char *origin, char **argv, int argc) void
Srv_Svinfo (char *origin, char **argv, int argc)
{ {
ssvinfo_cmd (); ssvinfo_cmd ();
} }
void Srv_Pass(char *origin, char **argv, int argc) void
Srv_Pass (char *origin, char **argv, int argc)
{ {
} }
void Srv_Server(char *origin, char **argv, int argc) void
Srv_Server (char *origin, char **argv, int argc)
{ {
Server *s; Server *s;
if (*origin == 0) { if (*origin == 0) {
@ -887,26 +893,27 @@ void Srv_Server(char *origin, char **argv, int argc)
s = findserver (argv[0]); s = findserver (argv[0]);
me.s = s; me.s = s;
} }
void Srv_Squit(char *origin, char **argv, int argc)
void
Srv_Squit (char *origin, char **argv, int argc)
{ {
Server *s; Server *s;
s = findserver (argv[0]); s = findserver (argv[0]);
if (s) { if (s) {
DelServer (argv[0]); DelServer (argv[0]);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Waring, Squit from Unknown Server %s", argv[0]);
"Waring, Squit from Unknown Server %s", argv[0]);
} }
} }
/* BE REALLY CAREFULL ABOUT THE ORDER OF THESE ifdef's */ /* BE REALLY CAREFULL ABOUT THE ORDER OF THESE ifdef's */
void Srv_Nick(char *origin, char **argv, int argc) void
Srv_Nick (char *origin, char **argv, int argc)
{ {
char *realname; char *realname;
AddUser(argv[0], argv[4], argv[5], argv[6], AddUser (argv[0], argv[4], argv[5], argv[6], strtoul (argv[8], NULL, 10), strtoul (argv[2], NULL, 10));
strtoul(argv[8], NULL, 10), strtoul(argv[2], NULL, 10));
realname = joinbuf (argv, argc, 9); realname = joinbuf (argv, argc, 9);
AddRealName (argv[0], realname); AddRealName (argv[0], realname);
free (realname); free (realname);
@ -914,26 +921,27 @@ void Srv_Nick(char *origin, char **argv, int argc)
UserMode (argv[0], argv[3], 0); UserMode (argv[0], argv[3], 0);
} }
void Srv_Svsnick(char *origin, char **argv, int argc) void
Srv_Svsnick (char *origin, char **argv, int argc)
{ {
User *u; User *u;
u = finduser (argv[0]); u = finduser (argv[0]);
if (u) { if (u) {
Change_User (u, argv[1]); Change_User (u, argv[1]);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Warning, Can't find user %s for SVSNICK", argv[0]);
"Warning, Can't find user %s for SVSNICK", argv[0]);
} }
} }
void Srv_Kill(char *origin, char **argv, int argc) void
Srv_Kill (char *origin, char **argv, int argc)
{ {
} }
int SignOn_NewBot(const char *nick, const char *user, int
const char *host, const char *rname, long Umode) SignOn_NewBot (const char *nick, const char *user, const char *host, const char *rname, long Umode)
{ {
snewnick_cmd (nick, user, host, rname, Umode); snewnick_cmd (nick, user, host, rname, Umode);

View file

@ -20,7 +20,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: Bahamut.h,v 1.4 2003/07/23 12:45:51 fishwaldo Exp $ ** $Id: Bahamut.h,v 1.5 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
#ifndef BAHAMUT_H #ifndef BAHAMUT_H
#define BAHAMUT_H #define BAHAMUT_H

View file

@ -3,6 +3,8 @@ NeoStats ChangeLog - Anything we add/remove/fix/change is in here (even our rant
- Fixed a core with using strcasecmp instead of strcmp in the parse function. - Fixed a core with using strcasecmp instead of strcmp in the parse function.
- Moved is_pub_chan from SecureServ to NeoStats - Moved is_pub_chan from SecureServ to NeoStats
- Implemented Bahamut support and necessary functions - Implemented Bahamut support and necessary functions
- make the ping time configurable.
- Make Timers deletable from inside the timer function!
* NeoStats * Fish * Version 2.5.4 Pre2 * NeoStats * Fish * Version 2.5.4 Pre2
- Fixed a problem with statserv and the HTML settings - Fixed a problem with statserv and the HTML settings

373
Ircu.c
View file

@ -18,7 +18,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: Ircu.c,v 1.1 2003/06/30 15:18:23 fishwaldo Exp $ ** $Id: Ircu.c,v 1.2 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
#include "stats.h" #include "stats.h"
@ -165,28 +165,30 @@ Oper_Modes usr_mds[] = {
{0, 0, 0} {0, 0, 0}
}; };
void init_ircd() void
init_ircd ()
{ {
/* count the number of commands */ /* count the number of commands */
ircd_srv.cmdcount = ((sizeof (cmd_list) / sizeof (cmd_list[0])) - 1); ircd_srv.cmdcount = ((sizeof (cmd_list) / sizeof (cmd_list[0])) - 1);
}; };
int seob_cmd(const char *server) int
seob_cmd (const char *server)
{ {
sts (":%s %s", server, MSG_EOB); sts (":%s %s", server, MSG_EOB);
return 1; return 1;
} }
int sserver_cmd(const char *name, const int numeric, const char *infoline) int
sserver_cmd (const char *name, const int numeric, const char *infoline)
{ {
sts(":%s %s %s %d :%s", me.name, MSG_SERVER, name, numeric, sts (":%s %s %s %d :%s", me.name, MSG_SERVER, name, numeric, infoline);
infoline);
return 1; return 1;
} }
int slogin_cmd(const char *name, const int numeric, const char *infoline, int
const char *pass) slogin_cmd (const char *name, const int numeric, const char *infoline, const char *pass)
{ {
sts ("%s %s :TS", MSG_PASS, pass); sts ("%s %s :TS", MSG_PASS, pass);
sts ("CAPAB :TS EX CHW IE EOB KLN GLN KNOCK HOPS HUB AOPS MX"); sts ("CAPAB :TS EX CHW IE EOB KLN GLN KNOCK HOPS HUB AOPS MX");
@ -194,55 +196,60 @@ int slogin_cmd(const char *name, const int numeric, const char *infoline,
return 1; return 1;
} }
int ssquit_cmd(const char *server) int
ssquit_cmd (const char *server)
{ {
sts ("%s %s", MSG_SQUIT, server); sts ("%s %s", MSG_SQUIT, server);
return 1; return 1;
} }
int sprotocol_cmd(const char *option) int
sprotocol_cmd (const char *option)
{ {
return 1; return 1;
} }
int squit_cmd(const char *who, const char *quitmsg) int
squit_cmd (const char *who, const char *quitmsg)
{ {
sts (":%s %s :%s", who, MSG_QUIT, quitmsg); sts (":%s %s :%s", who, MSG_QUIT, quitmsg);
DelUser (who); DelUser (who);
return 1; return 1;
} }
int spart_cmd(const char *who, const char *chan) int
spart_cmd (const char *who, const char *chan)
{ {
sts (":%s %s %s", who, MSG_PART, chan); sts (":%s %s %s", who, MSG_PART, chan);
part_chan (finduser (who), (char *) chan); part_chan (finduser (who), (char *) chan);
return 1; return 1;
} }
int sjoin_cmd(const char *who, const char *chan) int
sjoin_cmd (const char *who, const char *chan)
{ {
sts (":%s %s 0 %s + :%s", me.name, MSG_SJOIN, chan, who); sts (":%s %s 0 %s + :%s", me.name, MSG_SJOIN, chan, who);
join_chan (finduser (who), (char *) chan); join_chan (finduser (who), (char *) chan);
return 1; return 1;
} }
int schmode_cmd(const char *who, const char *chan, const char *mode, int
const char *args) schmode_cmd (const char *who, const char *chan, const char *mode, const char *args)
{ {
char **av; char **av;
int ac; int ac;
char tmp[512]; char tmp[512];
sts(":%s %s %s %s %s %lu", who, MSG_MODE, chan, mode, args, sts (":%s %s %s %s %s %lu", who, MSG_MODE, chan, mode, args, time (NULL));
time(NULL));
snprintf (tmp, 512, "%s %s %s", chan, mode, args); snprintf (tmp, 512, "%s %s %s", chan, mode, args);
ac = split_buf (tmp, &av, 0); ac = split_buf (tmp, &av, 0);
ChanMode ("", av, ac); ChanMode ("", av, ac);
free (av); free (av);
return 1; return 1;
} }
int snewnick_cmd(const char *nick, const char *ident, const char *host,
const char *realname, long mode) int
snewnick_cmd (const char *nick, const char *ident, const char *host, const char *realname, long mode)
{ {
int i, j; int i, j;
char newmode[20]; char newmode[20];
@ -256,20 +263,21 @@ int snewnick_cmd(const char *nick, const char *ident, const char *host,
} }
newmode[j] = '\0'; newmode[j] = '\0';
sts("%s %s 1 %lu %s %s %s %s :%s", MSG_NICK, nick, time(NULL), sts ("%s %s 1 %lu %s %s %s %s :%s", MSG_NICK, nick, time (NULL), newmode, ident, host, me.name, realname);
newmode, ident, host, me.name, realname);
AddUser (nick, ident, host, me.name, 0, time (NULL)); AddUser (nick, ident, host, me.name, 0, time (NULL));
UserMode (nick, newmode, 0); UserMode (nick, newmode, 0);
return 1; return 1;
} }
int sping_cmd(const char *from, const char *reply, const char *to) int
sping_cmd (const char *from, const char *reply, const char *to)
{ {
sts (":%s %s %s :%s", from, MSG_PING, reply, to); sts (":%s %s %s :%s", from, MSG_PING, reply, to);
return 1; return 1;
} }
int sumode_cmd(const char *who, const char *target, long mode) int
sumode_cmd (const char *who, const char *target, long mode)
{ {
int i, j; int i, j;
char newmode[20]; char newmode[20];
@ -288,8 +296,8 @@ int sumode_cmd(const char *who, const char *target, long mode)
return 1; return 1;
} }
int snumeric_cmd(const int numeric, const char *target, const char *data, int
...) snumeric_cmd (const int numeric, const char *target, const char *data, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
@ -300,15 +308,16 @@ int snumeric_cmd(const int numeric, const char *target, const char *data,
return 1; return 1;
} }
int spong_cmd(const char *reply) int
spong_cmd (const char *reply)
{ {
sts ("%s %s", MSG_PONG, reply); sts ("%s %s", MSG_PONG, reply);
return 1; return 1;
} }
int skill_cmd(const char *from, const char *target, const char *reason, int
...) skill_cmd (const char *from, const char *target, const char *reason, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
@ -319,89 +328,79 @@ int skill_cmd(const char *from, const char *target, const char *reason,
DelUser (target); DelUser (target);
return 1; return 1;
} }
int ssvskill_cmd(const char *who, const char *reason, ...)
int
ssvskill_cmd (const char *who, const char *reason, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
va_start (ap, reason); va_start (ap, reason);
vsnprintf (buf, 512, reason, ap); vsnprintf (buf, 512, reason, ap);
sts(":%s %s %s :%s", me.name, MSG_KILL, sts (":%s %s %s :%s", me.name, MSG_KILL, who, buf);
who, buf);
va_end (ap); va_end (ap);
/* hybrid doesn't have svskill, so this is handled just like a normal kill */ /* hybrid doesn't have svskill, so this is handled just like a normal kill */
DelUser (who); DelUser (who);
return 1; return 1;
} }
int ssmo_cmd(const char *from, const char *umodetarget, const char *msg) int
ssmo_cmd (const char *from, const char *umodetarget, const char *msg)
{ {
notice(s_Services, notice (s_Services, "Warning, Module %s tried to SMO, which is not supported in Hybrid", segvinmodule);
"Warning, Module %s tried to SMO, which is not supported in Hybrid", nlog (LOG_NOTICE, LOG_CORE, "Warning, Module %s tried to SMO, which is not supported in Hybrid", segvinmodule);
segvinmodule);
nlog(LOG_NOTICE, LOG_CORE,
"Warning, Module %s tried to SMO, which is not supported in Hybrid",
segvinmodule);
return 1; return 1;
} }
int snick_cmd(const char *oldnick, const char *newnick) int
snick_cmd (const char *oldnick, const char *newnick)
{ {
Change_User (finduser (oldnick), newnick); Change_User (finduser (oldnick), newnick);
sts (":%s %s %s %d", oldnick, MSG_NICK, newnick, time (NULL)); sts (":%s %s %s %d", oldnick, MSG_NICK, newnick, time (NULL));
return 1; return 1;
} }
int sswhois_cmd(const char *target, const char *swhois)
int
sswhois_cmd (const char *target, const char *swhois)
{ {
notice(s_Services, notice (s_Services, "Warning Module %s tried to SWHOIS, which is not supported in Hybrid", segvinmodule);
"Warning Module %s tried to SWHOIS, which is not supported in Hybrid", nlog (LOG_NOTICE, LOG_CORE, "Warning. Module %s tried to SWHOIS, which is not supported in Hybrid", segvinmodule);
segvinmodule);
nlog(LOG_NOTICE, LOG_CORE,
"Warning. Module %s tried to SWHOIS, which is not supported in Hybrid",
segvinmodule);
return 1;
}
int ssvsnick_cmd(const char *target, const char *newnick)
{
notice(s_Services,
"Warning Module %s tried to SVSNICK, which is not supported in Hybrid",
segvinmodule);
nlog(LOG_NOTICE, LOG_CORE,
"Warning. Module %s tried to SVSNICK, which is not supported in Hybrid",
segvinmodule);
return 1; return 1;
} }
int ssvsjoin_cmd(const char *target, const char *chan) int
ssvsnick_cmd (const char *target, const char *newnick)
{ {
notice(s_Services, notice (s_Services, "Warning Module %s tried to SVSNICK, which is not supported in Hybrid", segvinmodule);
"Warning Module %s tried to SJOIN, which is not supported in Hybrid", nlog (LOG_NOTICE, LOG_CORE, "Warning. Module %s tried to SVSNICK, which is not supported in Hybrid", segvinmodule);
segvinmodule);
nlog(LOG_NOTICE, LOG_CORE,
"Warning. Module %s tried to SJOIN, which is not supported in Hybrid",
segvinmodule);
return 1; return 1;
} }
int ssvspart_cmd(const char *target, const char *chan) int
ssvsjoin_cmd (const char *target, const char *chan)
{ {
notice(s_Services, notice (s_Services, "Warning Module %s tried to SJOIN, which is not supported in Hybrid", segvinmodule);
"Warning Module %s tried to SVSPART, which is not supported in Hybrid", nlog (LOG_NOTICE, LOG_CORE, "Warning. Module %s tried to SJOIN, which is not supported in Hybrid", segvinmodule);
segvinmodule);
nlog(LOG_NOTICE, LOG_CORE,
"Warning. Module %s tried to SVSPART, which is not supported in Hybrid",
segvinmodule);
return 1; return 1;
} }
int skick_cmd(const char *who, const char *target, const char *chan, int
const char *reason) ssvspart_cmd (const char *target, const char *chan)
{ {
sts(":%s %s %s %s :%s", who, MSG_KICK, chan, target, notice (s_Services, "Warning Module %s tried to SVSPART, which is not supported in Hybrid", segvinmodule);
(reason ? reason : "No Reason Given")); nlog (LOG_NOTICE, LOG_CORE, "Warning. Module %s tried to SVSPART, which is not supported in Hybrid", segvinmodule);
return 1;
}
int
skick_cmd (const char *who, const char *target, const char *chan, const char *reason)
{
sts (":%s %s %s %s :%s", who, MSG_KICK, chan, target, (reason ? reason : "No Reason Given"));
part_chan (finduser (target), (char *) chan); part_chan (finduser (target), (char *) chan);
return 1; return 1;
} }
int swallops_cmd(const char *who, const char *msg, ...)
int
swallops_cmd (const char *who, const char *msg, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
@ -412,23 +411,23 @@ int swallops_cmd(const char *who, const char *msg, ...)
return 1; return 1;
} }
int ssvshost_cmd(const char *who, const char *vhost) int
ssvshost_cmd (const char *who, const char *vhost)
{ {
notice(s_Services, notice (s_Services, "Warning Module %s tried to SVSHOST, which is not supported in Hybrid", segvinmodule);
"Warning Module %s tried to SVSHOST, which is not supported in Hybrid", nlog (LOG_NOTICE, LOG_CORE, "Warning. Module %s tried to SVSHOST, which is not supported in Hybrid", segvinmodule);
segvinmodule);
nlog(LOG_NOTICE, LOG_CORE,
"Warning. Module %s tried to SVSHOST, which is not supported in Hybrid",
segvinmodule);
return 1; return 1;
} }
int ssvinfo_cmd() int
ssvinfo_cmd ()
{ {
sts ("SVINFO 5 3 0 :%d", time (NULL)); sts ("SVINFO 5 3 0 :%d", time (NULL));
return 1; return 1;
} }
int sburst_cmd(int b)
int
sburst_cmd (int b)
{ {
if (b == 0) { if (b == 0) {
sts ("BURST 0"); sts ("BURST 0");
@ -438,8 +437,8 @@ int sburst_cmd(int b)
return 1; return 1;
} }
int sakill_cmd(const char *host, const char *ident, const char *setby, int
const int length, const char *reason, ...) sakill_cmd (const char *host, const char *ident, const char *setby, const int length, const char *reason, ...)
{ {
/* there isn't a akill on Hybrid, so we send a kline to all servers! */ /* there isn't a akill on Hybrid, so we send a kline to all servers! */
hscan_t ss; hscan_t ss;
@ -454,21 +453,22 @@ int sakill_cmd(const char *host, const char *ident, const char *setby,
hash_scan_begin (&ss, sh); hash_scan_begin (&ss, sh);
while ((sn = hash_scan_next (&ss)) != NULL) { while ((sn = hash_scan_next (&ss)) != NULL) {
s = hnode_get (sn); s = hnode_get (sn);
sts(":%s %s %s %lu %s %s :%s", setby, MSG_KLINE, s->name, sts (":%s %s %s %lu %s %s :%s", setby, MSG_KLINE, s->name, length, ident, host, buf);
length, ident, host, buf);
} }
va_end (ap); va_end (ap);
return 1; return 1;
} }
int srakill_cmd(const char *host, const char *ident)
int
srakill_cmd (const char *host, const char *ident)
{ {
chanalert(s_Services, chanalert (s_Services, "Please Manually remove KLINES using /unkline on each server");
"Please Manually remove KLINES using /unkline on each server");
return 1; return 1;
} }
void chanalert(char *who, char *buf, ...) void
chanalert (char *who, char *buf, ...)
{ {
va_list ap; va_list ap;
char tmp[512]; char tmp[512];
@ -477,14 +477,15 @@ void chanalert(char *who, char *buf, ...)
vsnprintf (tmp, 512, buf, ap); vsnprintf (tmp, 512, buf, ap);
if (me.onchan) { if (me.onchan) {
snprintf(out, 512, ":%s PRIVMSG %s :%s", who, me.chan, snprintf (out, 512, ":%s PRIVMSG %s :%s", who, me.chan, tmp);
tmp);
nlog (LOG_DEBUG3, LOG_CORE, "SENT: %s", out); nlog (LOG_DEBUG3, LOG_CORE, "SENT: %s", out);
sts ("%s", out); sts ("%s", out);
} }
va_end (ap); va_end (ap);
} }
void prefmsg(char *to, const char *from, char *fmt, ...)
void
prefmsg (char *to, const char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
@ -492,9 +493,7 @@ void prefmsg(char *to, const char *from, char *fmt, ...)
va_start (ap, fmt); va_start (ap, fmt);
vsnprintf (buf2, sizeof (buf2), fmt, ap); vsnprintf (buf2, sizeof (buf2), fmt, ap);
if (findbot (to)) { if (findbot (to)) {
chanalert(s_Services, chanalert (s_Services, "Message From our Bot(%s) to Our Bot(%s), Dropping Message", from, to);
"Message From our Bot(%s) to Our Bot(%s), Dropping Message",
from, to);
return; return;
} }
if (me.want_privmsg) { if (me.want_privmsg) {
@ -505,15 +504,15 @@ void prefmsg(char *to, const char *from, char *fmt, ...)
sts ("%s", buf); sts ("%s", buf);
va_end (ap); va_end (ap);
} }
void privmsg(char *to, const char *from, char *fmt, ...)
void
privmsg (char *to, const char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
if (findbot (to)) { if (findbot (to)) {
chanalert(s_Services, chanalert (s_Services, "Message From our Bot(%s) to Our Bot(%s), Dropping Message", from, to);
"Message From our Bot(%s) to Our Bot(%s), Dropping Message",
from, to);
return; return;
} }
@ -524,15 +523,14 @@ void privmsg(char *to, const char *from, char *fmt, ...)
va_end (ap); va_end (ap);
} }
void notice(char *to, const char *from, char *fmt, ...) void
notice (char *to, const char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
if (findbot (to)) { if (findbot (to)) {
chanalert(s_Services, chanalert (s_Services, "Message From our Bot(%s) to Our Bot(%s), Dropping Message", from, to);
"Message From our Bot(%s) to Our Bot(%s), Dropping Message",
from, to);
return; return;
} }
@ -544,7 +542,8 @@ void notice(char *to, const char *from, char *fmt, ...)
} }
void privmsg_list(char *to, char *from, const char **text) void
privmsg_list (char *to, char *from, const char **text)
{ {
while (*text) { while (*text) {
if (**text) if (**text)
@ -556,7 +555,8 @@ void privmsg_list(char *to, char *from, const char **text)
} }
void globops(char *from, char *fmt, ...) void
globops (char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
@ -576,7 +576,8 @@ void globops(char *from, char *fmt, ...)
va_end (ap); va_end (ap);
} }
void Srv_Sjoin(char *origin, char **argv, int argc) void
Srv_Sjoin (char *origin, char **argv, int argc)
{ {
char nick[MAXNICK]; char nick[MAXNICK];
long mode = 0; long mode = 0;
@ -603,22 +604,17 @@ void Srv_Sjoin(char *origin, char **argv, int argc)
goto nomodes; goto nomodes;
} }
while (*modes) { while (*modes) {
for (i = 0; for (i = 0; i < ((sizeof (cFlagTab) / sizeof (cFlagTab[0])) - 1); i++) {
i < ((sizeof(cFlagTab) / sizeof(cFlagTab[0])) - 1);
i++) {
if (*modes == cFlagTab[i].flag) { if (*modes == cFlagTab[i].flag) {
if (cFlagTab[i].parameters) { if (cFlagTab[i].parameters) {
m = smalloc (sizeof (ModesParm)); m = smalloc (sizeof (ModesParm));
m->mode = cFlagTab[i].mode; m->mode = cFlagTab[i].mode;
strncpy(m->param, argv[j], strncpy (m->param, argv[j], PARAMSIZE);
PARAMSIZE);
mn = lnode_create (m); mn = lnode_create (m);
if (!list_isfull (tl)) { if (!list_isfull (tl)) {
list_append (tl, mn); list_append (tl, mn);
} else { } else {
nlog(LOG_CRITICAL, nlog (LOG_CRITICAL, LOG_CORE, "Eeeek, tl list is full in Svr_Sjoin(ircd.c)");
LOG_CORE,
"Eeeek, tl list is full in Svr_Sjoin(ircd.c)");
do_exit (0); do_exit (0);
} }
j++; j++;
@ -634,10 +630,7 @@ void Srv_Sjoin(char *origin, char **argv, int argc)
modes = argv[j]; modes = argv[j];
mode = 0; mode = 0;
while (ok == 1) { while (ok == 1) {
for (i = 0; for (i = 0; i < ((sizeof (cFlagTab) / sizeof (cFlagTab[0])) - 1); i++) {
i <
((sizeof(cFlagTab) / sizeof(cFlagTab[0])) -
1); i++) {
if (cFlagTab[i].sjoin != 0) { if (cFlagTab[i].sjoin != 0) {
if (*modes == cFlagTab[i].sjoin) { if (*modes == cFlagTab[i].sjoin) {
mode |= cFlagTab[i].mode; mode |= cFlagTab[i].mode;
@ -650,8 +643,7 @@ void Srv_Sjoin(char *origin, char **argv, int argc)
break; break;
} }
join_chan (finduser (nick), argv[1]); join_chan (finduser (nick), argv[1]);
ChangeChanUserMode(findchan(argv[1]), finduser(nick), 1, ChangeChanUserMode (findchan (argv[1]), finduser (nick), 1, mode);
mode);
j++; j++;
ok = 1; ok = 1;
} }
@ -662,15 +654,15 @@ void Srv_Sjoin(char *origin, char **argv, int argc)
list_transfer (c->modeparms, tl, list_first (tl)); list_transfer (c->modeparms, tl, list_first (tl));
} else { } else {
/* eeeeeeek, list is full! */ /* eeeeeeek, list is full! */
nlog(LOG_CRITICAL, LOG_CORE, nlog (LOG_CRITICAL, LOG_CORE, "Eeeek, c->modeparms list is full in Svr_Sjoin(ircd.c)");
"Eeeek, c->modeparms list is full in Svr_Sjoin(ircd.c)");
do_exit (0); do_exit (0);
} }
} }
list_destroy (tl); list_destroy (tl);
} }
void Srv_Burst(char *origin, char **argv, int argc) void
Srv_Burst (char *origin, char **argv, int argc)
{ {
if (argc > 0) { if (argc > 0) {
if (ircd_srv.burst == 1) { if (ircd_srv.burst == 1) {
@ -686,7 +678,8 @@ void Srv_Burst(char *origin, char **argv, int argc)
init_ServBot (); init_ServBot ();
} }
void Srv_Connect(char *origin, char **argv, int argc) void
Srv_Connect (char *origin, char **argv, int argc)
{ {
int i; int i;
@ -698,49 +691,62 @@ void Srv_Connect(char *origin, char **argv, int argc)
} }
void Usr_Stats(char *origin, char **argv, int argc) void
Usr_Stats (char *origin, char **argv, int argc)
{ {
User *u; User *u;
u = finduser (origin); u = finduser (origin);
if (!u) { if (!u) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Recieved a Message from a Unknown User! (%s)", origin);
"Recieved a Message from a Unknown User! (%s)",
origin);
} }
ShowStats (argv[0], u); ShowStats (argv[0], u);
} }
void Usr_Version(char *origin, char **argv, int argc) void
Usr_Version (char *origin, char **argv, int argc)
{ {
snumeric_cmd(351, origin, "%d.%d.%d%s :%s -> %s %s", MAJOR, MINOR, snumeric_cmd (351, origin, "%d.%d.%d%s :%s -> %s %s", MAJOR, MINOR, REV, version, me.name, version_date, version_time);
REV, version, me.name, version_date, version_time);
} }
void Usr_ShowMOTD(char *origin, char **argv, int argc)
void
Usr_ShowMOTD (char *origin, char **argv, int argc)
{ {
ShowMOTD (origin); ShowMOTD (origin);
} }
void Usr_ShowADMIN(char *origin, char **argv, int argc)
void
Usr_ShowADMIN (char *origin, char **argv, int argc)
{ {
ShowADMIN (origin); ShowADMIN (origin);
} }
void Usr_Showcredits(char *origin, char **argv, int argc)
void
Usr_Showcredits (char *origin, char **argv, int argc)
{ {
Showcredits (origin); Showcredits (origin);
} }
void Usr_AddServer(char *origin, char **argv, int argc)
void
Usr_AddServer (char *origin, char **argv, int argc)
{ {
AddServer (argv[0], origin, atoi (argv[1])); AddServer (argv[0], origin, atoi (argv[1]));
} }
void Usr_DelServer(char *origin, char **argv, int argc)
void
Usr_DelServer (char *origin, char **argv, int argc)
{ {
DelServer (argv[0]); DelServer (argv[0]);
} }
void Usr_DelUser(char *origin, char **argv, int argc)
void
Usr_DelUser (char *origin, char **argv, int argc)
{ {
DelUser (origin); DelUser (origin);
} }
void Usr_Smode(char *origin, char **argv, int argc)
void
Usr_Smode (char *origin, char **argv, int argc)
{ {
if (!strchr (argv[0], '#')) { if (!strchr (argv[0], '#')) {
/* its user svsmode change */ /* its user svsmode change */
@ -750,7 +756,8 @@ void Usr_Smode(char *origin, char **argv, int argc)
ChanMode (origin, argv, argc); ChanMode (origin, argv, argc);
} }
} }
void Usr_Mode(char *origin, char **argv, int argc) void
Usr_Mode (char *origin, char **argv, int argc)
{ {
if (!strchr (argv[0], '#')) { if (!strchr (argv[0], '#')) {
nlog (LOG_DEBUG1, LOG_CORE, "Mode: UserMode: %s", argv[0]); nlog (LOG_DEBUG1, LOG_CORE, "Mode: UserMode: %s", argv[0]);
@ -759,18 +766,19 @@ void Usr_Mode(char *origin, char **argv, int argc)
ChanMode (origin, argv, argc); ChanMode (origin, argv, argc);
} }
} }
void Usr_Kill(char *origin, char **argv, int argc) void
Usr_Kill (char *origin, char **argv, int argc)
{ {
User *u; User *u;
u = finduser (argv[0]); u = finduser (argv[0]);
if (u) { if (u) {
KillUser (argv[0]); KillUser (argv[0]);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, "Can't find user %s for Kill", nlog (LOG_WARNING, LOG_CORE, "Can't find user %s for Kill", argv[0]);
argv[0]);
} }
} }
void Usr_Vhost(char *origin, char **argv, int argc) void
Usr_Vhost (char *origin, char **argv, int argc)
{ {
User *u; User *u;
u = finduser (origin); u = finduser (origin);
@ -778,18 +786,19 @@ void Usr_Vhost(char *origin, char **argv, int argc)
strncpy (u->vhost, argv[0], MAXHOST); strncpy (u->vhost, argv[0], MAXHOST);
} }
} }
void Usr_Pong(char *origin, char **argv, int argc) void
Usr_Pong (char *origin, char **argv, int argc)
{ {
Server *s; Server *s;
s = findserver (argv[0]); s = findserver (argv[0]);
if (s) { if (s) {
dopong (s); dopong (s);
} else { } else {
nlog(LOG_NOTICE, LOG_CORE, nlog (LOG_NOTICE, LOG_CORE, "Received PONG from unknown server: %s", argv[0]);
"Received PONG from unknown server: %s", argv[0]);
} }
} }
void Usr_Away(char *origin, char **argv, int argc) void
Usr_Away (char *origin, char **argv, int argc)
{ {
User *u = finduser (origin); User *u = finduser (origin);
char *buf; char *buf;
@ -804,22 +813,22 @@ void Usr_Away(char *origin, char **argv, int argc)
free (buf); free (buf);
} }
} else { } else {
nlog(LOG_NOTICE, LOG_CORE, nlog (LOG_NOTICE, LOG_CORE, "Warning, Unable to find User %s for Away", origin);
"Warning, Unable to find User %s for Away", origin);
} }
} }
void Usr_Nick(char *origin, char **argv, int argc) void
Usr_Nick (char *origin, char **argv, int argc)
{ {
User *u = finduser (origin); User *u = finduser (origin);
if (u) { if (u) {
Change_User (u, argv[0]); Change_User (u, argv[0]);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Ehh, Can't find the user for %s", origin);
"Ehh, Can't find the user for %s", origin);
} }
} }
void Usr_Topic(char *origin, char **argv, int argc) void
Usr_Topic (char *origin, char **argv, int argc)
{ {
char *buf; char *buf;
Chans *c; Chans *c;
@ -829,25 +838,24 @@ void Usr_Topic(char *origin, char **argv, int argc)
Change_Topic (origin, c, time (NULL), buf); Change_Topic (origin, c, time (NULL), buf);
free (buf); free (buf);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, "Ehhh, Can't find Channel %s", nlog (LOG_WARNING, LOG_CORE, "Ehhh, Can't find Channel %s", argv[0]);
argv[0]);
} }
} }
void Usr_Kick(char *origin, char **argv, int argc) void
Usr_Kick (char *origin, char **argv, int argc)
{ {
User *u; User *u;
u = finduser (argv[1]); u = finduser (argv[1]);
if (u) { if (u) {
kick_chan (u, argv[0]); kick_chan (u, argv[0]);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Warning, Can't find user %s for kick %s", argv[1], argv[0]);
"Warning, Can't find user %s for kick %s", argv[1],
argv[0]);
} }
} }
void Usr_Join(char *origin, char **argv, int argc) void
Usr_Join (char *origin, char **argv, int argc)
{ {
char *s, *t; char *s, *t;
t = argv[0]; t = argv[0];
@ -858,21 +866,26 @@ void Usr_Join(char *origin, char **argv, int argc)
join_chan (finduser (origin), s); join_chan (finduser (origin), s);
} }
} }
void Usr_Part(char *origin, char **argv, int argc) void
Usr_Part (char *origin, char **argv, int argc)
{ {
part_chan (finduser (origin), argv[0]); part_chan (finduser (origin), argv[0]);
} }
void Srv_Ping(char *origin, char **argv, int argc)
void
Srv_Ping (char *origin, char **argv, int argc)
{ {
spong_cmd (argv[0]); spong_cmd (argv[0]);
} }
void Srv_Svinfo(char *origin, char **argv, int argc) void
Srv_Svinfo (char *origin, char **argv, int argc)
{ {
ssvinfo_cmd (); ssvinfo_cmd ();
} }
void Srv_Netinfo(char *origin, char **argv, int argc) void
Srv_Netinfo (char *origin, char **argv, int argc)
{ {
me.onchan = 1; me.onchan = 1;
ircd_srv.uprot = atoi (argv[2]); ircd_srv.uprot = atoi (argv[2]);
@ -887,10 +900,12 @@ void Srv_Netinfo(char *origin, char **argv, int argc)
me.synced = 1; me.synced = 1;
} }
void Srv_Pass(char *origin, char **argv, int argc) void
Srv_Pass (char *origin, char **argv, int argc)
{ {
} }
void Srv_Server(char *origin, char **argv, int argc) void
Srv_Server (char *origin, char **argv, int argc)
{ {
Server *s; Server *s;
if (*origin == 0) { if (*origin == 0) {
@ -901,27 +916,28 @@ void Srv_Server(char *origin, char **argv, int argc)
s = findserver (argv[0]); s = findserver (argv[0]);
me.s = s; me.s = s;
} }
void Srv_Squit(char *origin, char **argv, int argc)
void
Srv_Squit (char *origin, char **argv, int argc)
{ {
Server *s; Server *s;
s = findserver (argv[0]); s = findserver (argv[0]);
if (s) { if (s) {
DelServer (argv[0]); DelServer (argv[0]);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Waring, Squit from Unknown Server %s", argv[0]);
"Waring, Squit from Unknown Server %s", argv[0]);
} }
} }
/* BE REALLY CAREFULL ABOUT THE ORDER OF THESE ifdef's */ /* BE REALLY CAREFULL ABOUT THE ORDER OF THESE ifdef's */
void Srv_Nick(char *origin, char **argv, int argc) void
Srv_Nick (char *origin, char **argv, int argc)
{ {
char *realname; char *realname;
AddUser(argv[0], argv[4], argv[5], argv[6], 0, AddUser (argv[0], argv[4], argv[5], argv[6], 0, strtoul (argv[2], NULL, 10));
strtoul(argv[2], NULL, 10));
realname = joinbuf (argv, argc, 7); realname = joinbuf (argv, argc, 7);
AddRealName (argv[0], realname); AddRealName (argv[0], realname);
free (realname); free (realname);
@ -929,12 +945,13 @@ void Srv_Nick(char *origin, char **argv, int argc)
UserMode (argv[0], argv[3], 0); UserMode (argv[0], argv[3], 0);
} }
void Srv_Kill(char *origin, char **argv, int argc) void
Srv_Kill (char *origin, char **argv, int argc)
{ {
} }
int SignOn_NewBot(const char *nick, const char *user, const char *host, int
const char *rname, long Umode) SignOn_NewBot (const char *nick, const char *user, const char *host, const char *rname, long Umode)
{ {
snewnick_cmd (nick, user, host, rname, Umode); snewnick_cmd (nick, user, host, rname, Umode);

2
Ircu.h
View file

@ -18,7 +18,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: Ircu.h,v 1.1 2003/06/30 15:18:23 fishwaldo Exp $ ** $Id: Ircu.h,v 1.2 2003/07/30 13:58:22 fishwaldo Exp $
*/ */

View file

@ -20,7 +20,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: QuantumIRCd.c,v 1.2 2003/07/15 11:21:45 fishwaldo Exp $ ** $Id: QuantumIRCd.c,v 1.3 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
#include "stats.h" #include "stats.h"
@ -298,55 +298,60 @@ Oper_Modes susr_mds[] = {
}; };
void init_ircd() void
init_ircd ()
{ {
/* count the number of commands */ /* count the number of commands */
ircd_srv.cmdcount = ((sizeof (cmd_list) / sizeof (cmd_list[0])) - 1); ircd_srv.cmdcount = ((sizeof (cmd_list) / sizeof (cmd_list[0])) - 1);
}; };
int sserver_cmd(const char *name, const int numeric, const char *infoline) int
sserver_cmd (const char *name, const int numeric, const char *infoline)
{ {
sts(":%s %s %s %d :%s", me.name, sts (":%s %s %s %d :%s", me.name, (me.token ? TOK_SERVER : MSG_SERVER), name, numeric, infoline);
(me.token ? TOK_SERVER : MSG_SERVER), name, numeric, infoline);
return 1; return 1;
} }
int slogin_cmd(const char *name, const int numeric, const char *infoline, int
const char *pass) slogin_cmd (const char *name, const int numeric, const char *infoline, const char *pass)
{ {
sts ("%s %s :TS", (me.token ? TOK_PASS : MSG_PASS), pass); sts ("%s %s :TS", (me.token ? TOK_PASS : MSG_PASS), pass);
sts ("CAPAB TS5 BURST SSJ5 NICKIP CLIENT"); sts ("CAPAB TS5 BURST SSJ5 NICKIP CLIENT");
sts("%s %s %d :%s", (me.token ? TOK_SERVER : MSG_SERVER), name, sts ("%s %s %d :%s", (me.token ? TOK_SERVER : MSG_SERVER), name, numeric, infoline);
numeric, infoline);
return 1; return 1;
} }
int ssquit_cmd(const char *server) int
ssquit_cmd (const char *server)
{ {
sts ("%s %s", (me.token ? TOK_SQUIT : MSG_SQUIT), server); sts ("%s %s", (me.token ? TOK_SQUIT : MSG_SQUIT), server);
return 1; return 1;
} }
int sprotocol_cmd(const char *option) int
sprotocol_cmd (const char *option)
{ {
return 1; return 1;
} }
int squit_cmd(const char *who, const char *quitmsg) int
squit_cmd (const char *who, const char *quitmsg)
{ {
sts (":%s %s :%s", who, (me.token ? TOK_QUIT : MSG_QUIT), quitmsg); sts (":%s %s :%s", who, (me.token ? TOK_QUIT : MSG_QUIT), quitmsg);
DelUser (who); DelUser (who);
return 1; return 1;
} }
int spart_cmd(const char *who, const char *chan) int
spart_cmd (const char *who, const char *chan)
{ {
sts (":%s %s %s", who, (me.token ? TOK_PART : MSG_PART), chan); sts (":%s %s %s", who, (me.token ? TOK_PART : MSG_PART), chan);
part_chan (finduser (who), (char *) chan); part_chan (finduser (who), (char *) chan);
return 1; return 1;
} }
int sjoin_cmd(const char *who, const char *chan, unsigned long chflag) int
sjoin_cmd (const char *who, const char *chan, unsigned long chflag)
{ {
char flag; char flag;
char mode[2]; char mode[2];
@ -392,16 +397,14 @@ int sjoin_cmd(const char *who, const char *chan, unsigned long chflag)
return 1; return 1;
} }
int schmode_cmd(const char *who, const char *chan, const char *mode, int
const char *args) schmode_cmd (const char *who, const char *chan, const char *mode, const char *args)
{ {
char **av; char **av;
int ac; int ac;
char tmp[512]; char tmp[512];
sts(":%s %s %s %s %s %lu", me.name, sts (":%s %s %s %s %s %lu", me.name, (me.token ? TOK_MODE : MSG_MODE), chan, mode, args, time (NULL));
(me.token ? TOK_MODE : MSG_MODE), chan, mode, args,
time(NULL));
snprintf (tmp, 512, "%s %s %s", chan, mode, args); snprintf (tmp, 512, "%s %s %s", chan, mode, args);
ac = split_buf (tmp, &av, 0); ac = split_buf (tmp, &av, 0);
ChanMode ("", av, ac); ChanMode ("", av, ac);
@ -409,8 +412,8 @@ int schmode_cmd(const char *who, const char *chan, const char *mode,
return 1; return 1;
} }
int snewnick_cmd(const char *nick, const char *ident, const char *host, int
const char *realname, long mode) snewnick_cmd (const char *nick, const char *ident, const char *host, const char *realname, long mode)
{ {
int i, j; int i, j;
char newmode[20]; char newmode[20];
@ -424,22 +427,21 @@ int snewnick_cmd(const char *nick, const char *ident, const char *host,
} }
newmode[j] = '\0'; newmode[j] = '\0';
sts("%s %s 1 %lu %s %s %s %s 0 %lu :%s", sts ("%s %s 1 %lu %s %s %s %s 0 %lu :%s", (me.token ? TOK_NICK : MSG_NICK), nick, time (NULL), newmode, ident, host, me.name, time (NULL), realname);
(me.token ? TOK_NICK : MSG_NICK), nick, time(NULL), newmode,
ident, host, me.name, time(NULL), realname);
AddUser (nick, ident, host, me.name, 0, time (NULL)); AddUser (nick, ident, host, me.name, 0, time (NULL));
UserMode (nick, newmode, 0); UserMode (nick, newmode, 0);
return 1; return 1;
} }
int sping_cmd(const char *from, const char *reply, const char *to) int
sping_cmd (const char *from, const char *reply, const char *to)
{ {
sts(":%s %s %s :%s", from, (me.token ? TOK_PING : MSG_PING), reply, sts (":%s %s %s :%s", from, (me.token ? TOK_PING : MSG_PING), reply, to);
to);
return 1; return 1;
} }
int sumode_cmd(const char *who, const char *target, long mode) int
sumode_cmd (const char *who, const char *target, long mode)
{ {
int i, j; int i, j;
char newmode[20]; char newmode[20];
@ -453,14 +455,13 @@ int sumode_cmd(const char *who, const char *target, long mode)
} }
newmode[j] = '\0'; newmode[j] = '\0';
sts(":%s %s %s :%s", who, (me.token ? TOK_MODE : MSG_MODE), target, sts (":%s %s %s :%s", who, (me.token ? TOK_MODE : MSG_MODE), target, newmode);
newmode);
UserMode (target, newmode, 0); UserMode (target, newmode, 0);
return 1; return 1;
} }
int snumeric_cmd(const int numeric, const char *target, const char *data, int
...) snumeric_cmd (const int numeric, const char *target, const char *data, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
@ -471,164 +472,160 @@ int snumeric_cmd(const int numeric, const char *target, const char *data,
return 1; return 1;
} }
int spong_cmd(const char *reply) int
spong_cmd (const char *reply)
{ {
sts ("%s %s", (me.token ? TOK_PONG : MSG_PONG), reply); sts ("%s %s", (me.token ? TOK_PONG : MSG_PONG), reply);
return 1; return 1;
} }
int snetinfo_cmd() int
snetinfo_cmd ()
{ {
sts(":%s %s 0 %d %d %s 0 0 0 :%s", me.name, MSG_SNETINFO, sts (":%s %s 0 %d %d %s 0 0 0 :%s", me.name, MSG_SNETINFO, time (NULL), ircd_srv.uprot, ircd_srv.cloak, me.netname);
time(NULL), ircd_srv.uprot, ircd_srv.cloak, me.netname);
return 1; return 1;
} }
int vctrl_cmd() int
vctrl_cmd ()
{ {
sts("%s %d %d %d %d 0 0 0 0 0 0 0 0 0 0 :%s", MSG_VCTRL, sts ("%s %d %d %d %d 0 0 0 0 0 0 0 0 0 0 :%s", MSG_VCTRL, ircd_srv.uprot, ircd_srv.nicklg, ircd_srv.modex, ircd_srv.gc, me.netname);
ircd_srv.uprot, ircd_srv.nicklg, ircd_srv.modex, ircd_srv.gc,
me.netname);
return 1; return 1;
} }
int skill_cmd(const char *from, const char *target, const char *reason,
...) int
skill_cmd (const char *from, const char *target, const char *reason, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
va_start (ap, reason); va_start (ap, reason);
vsnprintf (buf, 512, reason, ap); vsnprintf (buf, 512, reason, ap);
sts(":%s %s %s :%s", from, (me.token ? TOK_KILL : MSG_KILL), sts (":%s %s %s :%s", from, (me.token ? TOK_KILL : MSG_KILL), target, buf);
target, buf);
va_end (ap); va_end (ap);
DelUser (target); DelUser (target);
return 1; return 1;
} }
int ssvskill_cmd(const char *who, const char *reason, ...) int
ssvskill_cmd (const char *who, const char *reason, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
va_start (ap, reason); va_start (ap, reason);
vsnprintf (buf, 512, reason, ap); vsnprintf (buf, 512, reason, ap);
sts(":%s %s %s :%s", me.name, MSG_SVSKILL, sts (":%s %s %s :%s", me.name, MSG_SVSKILL, who, buf);
who, buf);
va_end (ap); va_end (ap);
return 1; return 1;
} }
int ssmo_cmd(const char *from, const char *umodetarget, const char *msg) int
ssmo_cmd (const char *from, const char *umodetarget, const char *msg)
{ {
chanalert(s_Services, chanalert (s_Services, "Warning, Module %s tried to SMO, which is not supported in Ultimate", segvinmodule);
"Warning, Module %s tried to SMO, which is not supported in Ultimate", nlog (LOG_NOTICE, LOG_CORE, "Warning, Module %s tried to SMO, which is not supported in Ultimate", segvinmodule);
segvinmodule);
nlog(LOG_NOTICE, LOG_CORE,
"Warning, Module %s tried to SMO, which is not supported in Ultimate",
segvinmodule);
return 1; return 1;
} }
int snick_cmd(const char *oldnick, const char *newnick) int
snick_cmd (const char *oldnick, const char *newnick)
{ {
Change_User (finduser (oldnick), newnick); Change_User (finduser (oldnick), newnick);
sts(":%s %s %s %d", oldnick, (me.token ? TOK_NICK : MSG_NICK), sts (":%s %s %s %d", oldnick, (me.token ? TOK_NICK : MSG_NICK), newnick, time (NULL));
newnick, time(NULL));
return 1;
}
int sswhois_cmd(const char *target, const char *swhois)
{
chanalert(s_Services,
"Warning Module %s tried to SWHOIS, which is not supported in Ultimate",
segvinmodule);
nlog(LOG_NOTICE, LOG_CORE,
"Warning. Module %s tried to SWHOIS, which is not supported in Ultimate",
segvinmodule);
return 1;
}
int ssvsnick_cmd(const char *target, const char *newnick)
{
sts("%s %s %s :%d", (me.token ? TOK_SVSNICK : MSG_SVSNICK), target,
newnick, time(NULL));
return 1; return 1;
} }
int ssvsjoin_cmd(const char *target, const char *chan) int
sswhois_cmd (const char *target, const char *swhois)
{ {
sts("%s %s %s", (me.token ? TOK_SVSJOIN : MSG_SVSJOIN), target, chanalert (s_Services, "Warning Module %s tried to SWHOIS, which is not supported in Ultimate", segvinmodule);
chan); nlog (LOG_NOTICE, LOG_CORE, "Warning. Module %s tried to SWHOIS, which is not supported in Ultimate", segvinmodule);
return 1; return 1;
} }
int ssvspart_cmd(const char *target, const char *chan) int
ssvsnick_cmd (const char *target, const char *newnick)
{ {
sts("%s %s %s", (me.token ? TOK_SVSPART : MSG_SVSPART), target, sts ("%s %s %s :%d", (me.token ? TOK_SVSNICK : MSG_SVSNICK), target, newnick, time (NULL));
chan);
return 1; return 1;
} }
int skick_cmd(const char *who, const char *target, const char *chan, int
const char *reason) ssvsjoin_cmd (const char *target, const char *chan)
{ {
sts(":%s %s %s %s :%s", who, (me.token ? TOK_KICK : MSG_KICK), sts ("%s %s %s", (me.token ? TOK_SVSJOIN : MSG_SVSJOIN), target, chan);
chan, target, (reason ? reason : "No Reason Given")); return 1;
}
int
ssvspart_cmd (const char *target, const char *chan)
{
sts ("%s %s %s", (me.token ? TOK_SVSPART : MSG_SVSPART), target, chan);
return 1;
}
int
skick_cmd (const char *who, const char *target, const char *chan, const char *reason)
{
sts (":%s %s %s %s :%s", who, (me.token ? TOK_KICK : MSG_KICK), chan, target, (reason ? reason : "No Reason Given"));
part_chan (finduser (target), (char *) chan); part_chan (finduser (target), (char *) chan);
return 1; return 1;
} }
int swallops_cmd(const char *who, const char *msg, ...)
int
swallops_cmd (const char *who, const char *msg, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
va_start (ap, msg); va_start (ap, msg);
vsnprintf (buf, 512, msg, ap); vsnprintf (buf, 512, msg, ap);
sts(":%s %s :%s", who, (me.token ? TOK_WALLOPS : MSG_WALLOPS), sts (":%s %s :%s", who, (me.token ? TOK_WALLOPS : MSG_WALLOPS), buf);
buf);
va_end (ap); va_end (ap);
return 1; return 1;
} }
int ssvshost_cmd(const char *who, const char *vhost) int
ssvshost_cmd (const char *who, const char *vhost)
{ {
User *u; User *u;
u = finduser (who); u = finduser (who);
if (!u) { if (!u) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Can't Find user %s for ssvshost_cmd", who);
"Can't Find user %s for ssvshost_cmd", who);
return 0; return 0;
} else { } else {
strncpy (u->vhost, vhost, MAXHOST); strncpy (u->vhost, vhost, MAXHOST);
sts(":%s %s %s %s", me.name, sts (":%s %s %s %s", me.name, (me.token ? TOK_SETHOST : MSG_SETHOST), who, vhost);
(me.token ? TOK_SETHOST : MSG_SETHOST), who, vhost);
return 1; return 1;
} }
} }
int sakill_cmd(const char *host, const char *ident, const char *setby, int
const int length, const char *reason, ...) sakill_cmd (const char *host, const char *ident, const char *setby, const int length, const char *reason, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
va_start (ap, reason); va_start (ap, reason);
vsnprintf (buf, 512, reason, ap); vsnprintf (buf, 512, reason, ap);
sts(":%s %s %s %s %d %s %d :%s", me.name, sts (":%s %s %s %s %d %s %d :%s", me.name, (me.token ? TOK_AKILL : MSG_AKILL), host, ident, length, setby, time (NULL), buf);
(me.token ? TOK_AKILL : MSG_AKILL), host, ident, length, setby,
time(NULL), buf);
va_end (ap); va_end (ap);
return 1; return 1;
} }
int srakill_cmd(const char *host, const char *ident) int
srakill_cmd (const char *host, const char *ident)
{ {
sts(":%s %s %s %s", me.name, (me.token ? TOK_RAKILL : MSG_RAKILL), sts (":%s %s %s %s", me.name, (me.token ? TOK_RAKILL : MSG_RAKILL), host, ident);
host, ident);
return 1; return 1;
} }
int ssvinfo_cmd() int
ssvinfo_cmd ()
{ {
sts ("SVINFO 5 3 0 :%d", time (NULL)); sts ("SVINFO 5 3 0 :%d", time (NULL));
return 1; return 1;
} }
int sburst_cmd(int b)
int
sburst_cmd (int b)
{ {
if (b == 0) { if (b == 0) {
sts ("BURST 0"); sts ("BURST 0");
@ -640,7 +637,8 @@ int sburst_cmd(int b)
void chanalert(char *who, char *buf, ...) void
chanalert (char *who, char *buf, ...)
{ {
va_list ap; va_list ap;
char tmp[512]; char tmp[512];
@ -649,14 +647,15 @@ void chanalert(char *who, char *buf, ...)
vsnprintf (tmp, 512, buf, ap); vsnprintf (tmp, 512, buf, ap);
if (me.onchan) { if (me.onchan) {
snprintf(out, 512, ":%s PRIVMSG %s :%s", who, me.chan, snprintf (out, 512, ":%s PRIVMSG %s :%s", who, me.chan, tmp);
tmp);
nlog (LOG_DEBUG3, LOG_CORE, "SENT: %s", out); nlog (LOG_DEBUG3, LOG_CORE, "SENT: %s", out);
sts ("%s", out); sts ("%s", out);
} }
va_end (ap); va_end (ap);
} }
void prefmsg(char *to, const char *from, char *fmt, ...)
void
prefmsg (char *to, const char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
@ -664,9 +663,7 @@ void prefmsg(char *to, const char *from, char *fmt, ...)
va_start (ap, fmt); va_start (ap, fmt);
vsnprintf (buf2, sizeof (buf2), fmt, ap); vsnprintf (buf2, sizeof (buf2), fmt, ap);
if (findbot (to)) { if (findbot (to)) {
chanalert(s_Services, chanalert (s_Services, "Message From our Bot(%s) to Our Bot(%s), Dropping Message", from, to);
"Message From our Bot(%s) to Our Bot(%s), Dropping Message",
from, to);
return; return;
} }
if (me.want_privmsg) { if (me.want_privmsg) {
@ -677,15 +674,15 @@ void prefmsg(char *to, const char *from, char *fmt, ...)
sts ("%s", buf); sts ("%s", buf);
va_end (ap); va_end (ap);
} }
void privmsg(char *to, const char *from, char *fmt, ...)
void
privmsg (char *to, const char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
if (findbot (to)) { if (findbot (to)) {
chanalert(s_Services, chanalert (s_Services, "Message From our Bot(%s) to Our Bot(%s), Dropping Message", from, to);
"Message From our Bot(%s) to Our Bot(%s), Dropping Message",
from, to);
return; return;
} }
@ -696,15 +693,14 @@ void privmsg(char *to, const char *from, char *fmt, ...)
va_end (ap); va_end (ap);
} }
void notice(char *to, const char *from, char *fmt, ...) void
notice (char *to, const char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
if (findbot (to)) { if (findbot (to)) {
chanalert(s_Services, chanalert (s_Services, "Message From our Bot(%s) to Our Bot(%s), Dropping Message", from, to);
"Message From our Bot(%s) to Our Bot(%s), Dropping Message",
from, to);
return; return;
} }
@ -716,7 +712,8 @@ void notice(char *to, const char *from, char *fmt, ...)
} }
void privmsg_list(char *to, char *from, const char **text) void
privmsg_list (char *to, char *from, const char **text)
{ {
while (*text) { while (*text) {
if (**text) if (**text)
@ -728,7 +725,8 @@ void privmsg_list(char *to, char *from, const char **text)
} }
void globops(char *from, char *fmt, ...) void
globops (char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
@ -749,7 +747,8 @@ void globops(char *from, char *fmt, ...)
} }
void Srv_Sjoin(char *origin, char **argv, int argc) void
Srv_Sjoin (char *origin, char **argv, int argc)
{ {
char nick[MAXNICK]; char nick[MAXNICK];
long mode = 0; long mode = 0;
@ -776,22 +775,17 @@ void Srv_Sjoin(char *origin, char **argv, int argc)
goto nomodes; goto nomodes;
} }
while (*modes) { while (*modes) {
for (i = 0; for (i = 0; i < ((sizeof (cFlagTab) / sizeof (cFlagTab[0])) - 1); i++) {
i < ((sizeof(cFlagTab) / sizeof(cFlagTab[0])) - 1);
i++) {
if (*modes == cFlagTab[i].flag) { if (*modes == cFlagTab[i].flag) {
if (cFlagTab[i].parameters) { if (cFlagTab[i].parameters) {
m = smalloc (sizeof (ModesParm)); m = smalloc (sizeof (ModesParm));
m->mode = cFlagTab[i].mode; m->mode = cFlagTab[i].mode;
strncpy(m->param, argv[j], strncpy (m->param, argv[j], PARAMSIZE);
PARAMSIZE);
mn = lnode_create (m); mn = lnode_create (m);
if (!list_isfull (tl)) { if (!list_isfull (tl)) {
list_append (tl, mn); list_append (tl, mn);
} else { } else {
nlog(LOG_CRITICAL, nlog (LOG_CRITICAL, LOG_CORE, "Eeeek, tl list is full in Svr_Sjoin(ircd.c)");
LOG_CORE,
"Eeeek, tl list is full in Svr_Sjoin(ircd.c)");
do_exit (0); do_exit (0);
} }
j++; j++;
@ -807,10 +801,7 @@ void Srv_Sjoin(char *origin, char **argv, int argc)
modes = argv[j]; modes = argv[j];
mode = 0; mode = 0;
while (ok == 1) { while (ok == 1) {
for (i = 0; for (i = 0; i < ((sizeof (cFlagTab) / sizeof (cFlagTab[0])) - 1); i++) {
i <
((sizeof(cFlagTab) / sizeof(cFlagTab[0])) -
1); i++) {
if (cFlagTab[i].sjoin != 0) { if (cFlagTab[i].sjoin != 0) {
if (*modes == cFlagTab[i].sjoin) { if (*modes == cFlagTab[i].sjoin) {
mode |= cFlagTab[i].mode; mode |= cFlagTab[i].mode;
@ -826,8 +817,7 @@ void Srv_Sjoin(char *origin, char **argv, int argc)
} }
} }
join_chan (finduser (nick), argv[1]); join_chan (finduser (nick), argv[1]);
ChangeChanUserMode(findchan(argv[1]), finduser(nick), 1, ChangeChanUserMode (findchan (argv[1]), finduser (nick), 1, mode);
mode);
j++; j++;
ok = 1; ok = 1;
} }
@ -838,15 +828,15 @@ void Srv_Sjoin(char *origin, char **argv, int argc)
list_transfer (c->modeparms, tl, list_first (tl)); list_transfer (c->modeparms, tl, list_first (tl));
} else { } else {
/* eeeeeeek, list is full! */ /* eeeeeeek, list is full! */
nlog(LOG_CRITICAL, LOG_CORE, nlog (LOG_CRITICAL, LOG_CORE, "Eeeek, c->modeparms list is full in Svr_Sjoin(ircd.c)");
"Eeeek, c->modeparms list is full in Svr_Sjoin(ircd.c)");
do_exit (0); do_exit (0);
} }
} }
list_destroy (tl); list_destroy (tl);
} }
void Srv_Burst(char *origin, char **argv, int argc) void
Srv_Burst (char *origin, char **argv, int argc)
{ {
if (argc > 0) { if (argc > 0) {
if (ircd_srv.burst == 1) { if (ircd_srv.burst == 1) {
@ -860,7 +850,8 @@ void Srv_Burst(char *origin, char **argv, int argc)
} }
} }
void Srv_Connect(char *origin, char **argv, int argc) void
Srv_Connect (char *origin, char **argv, int argc)
{ {
int i; int i;
@ -875,49 +866,62 @@ void Srv_Connect(char *origin, char **argv, int argc)
} }
void Usr_Stats(char *origin, char **argv, int argc) void
Usr_Stats (char *origin, char **argv, int argc)
{ {
User *u; User *u;
u = finduser (origin); u = finduser (origin);
if (!u) { if (!u) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Recieved a Message from a Unknown User! (%s)", origin);
"Recieved a Message from a Unknown User! (%s)",
origin);
return; return;
} }
ShowStats (argv[0], u); ShowStats (argv[0], u);
} }
void Usr_Version(char *origin, char **argv, int argc) void
Usr_Version (char *origin, char **argv, int argc)
{ {
snumeric_cmd(351, origin, "%d.%d.%d%s :%s -> %s %s", MAJOR, MINOR, snumeric_cmd (351, origin, "%d.%d.%d%s :%s -> %s %s", MAJOR, MINOR, REV, version, me.name, version_date, version_time);
REV, version, me.name, version_date, version_time);
} }
void Usr_ShowMOTD(char *origin, char **argv, int argc)
void
Usr_ShowMOTD (char *origin, char **argv, int argc)
{ {
ShowMOTD (origin); ShowMOTD (origin);
} }
void Usr_ShowADMIN(char *origin, char **argv, int argc)
void
Usr_ShowADMIN (char *origin, char **argv, int argc)
{ {
ShowADMIN (origin); ShowADMIN (origin);
} }
void Usr_Showcredits(char *origin, char **argv, int argc)
void
Usr_Showcredits (char *origin, char **argv, int argc)
{ {
Showcredits (origin); Showcredits (origin);
} }
void Usr_AddServer(char *origin, char **argv, int argc)
void
Usr_AddServer (char *origin, char **argv, int argc)
{ {
AddServer (argv[0], origin, atoi (argv[1])); AddServer (argv[0], origin, atoi (argv[1]));
} }
void Usr_DelServer(char *origin, char **argv, int argc)
void
Usr_DelServer (char *origin, char **argv, int argc)
{ {
DelServer (argv[0]); DelServer (argv[0]);
} }
void Usr_DelUser(char *origin, char **argv, int argc)
void
Usr_DelUser (char *origin, char **argv, int argc)
{ {
DelUser (origin); DelUser (origin);
} }
void Usr_Smode(char *origin, char **argv, int argc)
void
Usr_Smode (char *origin, char **argv, int argc)
{ {
if (!strchr (argv[0], '#')) { if (!strchr (argv[0], '#')) {
/* its user svsmode change */ /* its user svsmode change */
@ -927,7 +931,8 @@ void Usr_Smode(char *origin, char **argv, int argc)
ChanMode (origin, argv, argc); ChanMode (origin, argv, argc);
} }
} }
void Usr_Mode(char *origin, char **argv, int argc) void
Usr_Mode (char *origin, char **argv, int argc)
{ {
if (!strchr (argv[0], '#')) { if (!strchr (argv[0], '#')) {
nlog (LOG_DEBUG1, LOG_CORE, "Mode: UserMode: %s %s", argv[0], argv[1]); nlog (LOG_DEBUG1, LOG_CORE, "Mode: UserMode: %s %s", argv[0], argv[1]);
@ -936,18 +941,19 @@ void Usr_Mode(char *origin, char **argv, int argc)
ChanMode (origin, argv, argc); ChanMode (origin, argv, argc);
} }
} }
void Usr_Kill(char *origin, char **argv, int argc) void
Usr_Kill (char *origin, char **argv, int argc)
{ {
User *u; User *u;
u = finduser (argv[0]); u = finduser (argv[0]);
if (u) { if (u) {
KillUser (argv[0]); KillUser (argv[0]);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, "Can't find user %s for Kill", nlog (LOG_WARNING, LOG_CORE, "Can't find user %s for Kill", argv[0]);
argv[0]);
} }
} }
void Usr_Vhost(char *origin, char **argv, int argc) void
Usr_Vhost (char *origin, char **argv, int argc)
{ {
User *u; User *u;
u = finduser (argv[0]); u = finduser (argv[0]);
@ -955,18 +961,19 @@ void Usr_Vhost(char *origin, char **argv, int argc)
strncpy (u->vhost, argv[1], MAXHOST); strncpy (u->vhost, argv[1], MAXHOST);
} }
} }
void Usr_Pong(char *origin, char **argv, int argc) void
Usr_Pong (char *origin, char **argv, int argc)
{ {
Server *s; Server *s;
s = findserver (argv[0]); s = findserver (argv[0]);
if (s) { if (s) {
dopong (s); dopong (s);
} else { } else {
nlog(LOG_NOTICE, LOG_CORE, nlog (LOG_NOTICE, LOG_CORE, "Received PONG from unknown server: %s", argv[0]);
"Received PONG from unknown server: %s", argv[0]);
} }
} }
void Usr_Away(char *origin, char **argv, int argc) void
Usr_Away (char *origin, char **argv, int argc)
{ {
char *Buf; char *Buf;
User *u = finduser (origin); User *u = finduser (origin);
@ -981,18 +988,19 @@ void Usr_Away(char *origin, char **argv, int argc)
free (Buf); free (Buf);
} }
} else { } else {
nlog(LOG_NOTICE, LOG_CORE, nlog (LOG_NOTICE, LOG_CORE, "Warning, Unable to find User %s for Away", origin);
"Warning, Unable to find User %s for Away", origin);
} }
} }
void Usr_Nick(char *origin, char **argv, int argc) void
Usr_Nick (char *origin, char **argv, int argc)
{ {
User *u = finduser (origin); User *u = finduser (origin);
if (u) { if (u) {
Change_User (u, argv[0]); Change_User (u, argv[0]);
} }
} }
void Usr_Topic(char *origin, char **argv, int argc) void
Usr_Topic (char *origin, char **argv, int argc)
{ {
char *buf; char *buf;
Chans *c; Chans *c;
@ -1002,13 +1010,13 @@ void Usr_Topic(char *origin, char **argv, int argc)
Change_Topic (argv[1], c, atoi (argv[2]), buf); Change_Topic (argv[1], c, atoi (argv[2]), buf);
free (buf); free (buf);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, "Ehhh, Can't find Channel %s", nlog (LOG_WARNING, LOG_CORE, "Ehhh, Can't find Channel %s", argv[0]);
argv[0]);
} }
} }
void Usr_Kick(char *origin, char **argv, int argc) void
Usr_Kick (char *origin, char **argv, int argc)
{ {
User *u, *k; User *u, *k;
u = finduser (argv[1]); u = finduser (argv[1]);
@ -1016,12 +1024,11 @@ void Usr_Kick(char *origin, char **argv, int argc)
if ((u) && (k)) { if ((u) && (k)) {
kick_chan (u, argv[0], k); kick_chan (u, argv[0], k);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Warning, Can't find user %s for kick %s", argv[1], argv[0]);
"Warning, Can't find user %s for kick %s", argv[1],
argv[0]);
} }
} }
void Usr_Join(char *origin, char **argv, int argc) void
Usr_Join (char *origin, char **argv, int argc)
{ {
char *s, *t; char *s, *t;
t = argv[0]; t = argv[0];
@ -1032,11 +1039,14 @@ void Usr_Join(char *origin, char **argv, int argc)
join_chan (finduser (origin), s); join_chan (finduser (origin), s);
} }
} }
void Usr_Part(char *origin, char **argv, int argc) void
Usr_Part (char *origin, char **argv, int argc)
{ {
part_chan (finduser (origin), argv[0]); part_chan (finduser (origin), argv[0]);
} }
void Srv_Ping(char *origin, char **argv, int argc)
void
Srv_Ping (char *origin, char **argv, int argc)
{ {
spong_cmd (argv[0]); spong_cmd (argv[0]);
if (ircd_srv.burst) { if (ircd_srv.burst) {
@ -1044,7 +1054,8 @@ void Srv_Ping(char *origin, char **argv, int argc)
} }
} }
void Srv_Vctrl(char *origin, char **argv, int argc) void
Srv_Vctrl (char *origin, char **argv, int argc)
{ {
ircd_srv.uprot = atoi (argv[0]); ircd_srv.uprot = atoi (argv[0]);
ircd_srv.nicklg = atoi (argv[1]); ircd_srv.nicklg = atoi (argv[1]);
@ -1054,16 +1065,19 @@ void Srv_Vctrl(char *origin, char **argv, int argc)
vctrl_cmd (); vctrl_cmd ();
} }
void Srv_Svinfo(char *origin, char **argv, int argc) void
Srv_Svinfo (char *origin, char **argv, int argc)
{ {
ssvinfo_cmd (); ssvinfo_cmd ();
} }
void Srv_Pass(char *origin, char **argv, int argc) void
Srv_Pass (char *origin, char **argv, int argc)
{ {
} }
void Srv_Server(char *origin, char **argv, int argc) void
Srv_Server (char *origin, char **argv, int argc)
{ {
Server *s; Server *s;
if (*origin == 0) { if (*origin == 0) {
@ -1074,26 +1088,27 @@ void Srv_Server(char *origin, char **argv, int argc)
s = findserver (argv[0]); s = findserver (argv[0]);
me.s = s; me.s = s;
} }
void Srv_Squit(char *origin, char **argv, int argc)
void
Srv_Squit (char *origin, char **argv, int argc)
{ {
Server *s; Server *s;
s = findserver (argv[0]); s = findserver (argv[0]);
if (s) { if (s) {
DelServer (argv[0]); DelServer (argv[0]);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Waring, Squit from Unknown Server %s", argv[0]);
"Waring, Squit from Unknown Server %s", argv[0]);
} }
} }
/* BE REALLY CAREFULL ABOUT THE ORDER OF THESE ifdef's */ /* BE REALLY CAREFULL ABOUT THE ORDER OF THESE ifdef's */
void Srv_Nick(char *origin, char **argv, int argc) void
Srv_Nick (char *origin, char **argv, int argc)
{ {
char *realname; char *realname;
AddUser(argv[0], argv[4], argv[5], argv[6], AddUser (argv[0], argv[4], argv[5], argv[6], strtoul (argv[8], NULL, 10), strtoul (argv[2], NULL, 10));
strtoul(argv[8], NULL, 10), strtoul(argv[2], NULL, 10));
realname = joinbuf (argv, argc, 9); realname = joinbuf (argv, argc, 9);
AddRealName (argv[0], realname); AddRealName (argv[0], realname);
free (realname); free (realname);
@ -1102,12 +1117,12 @@ void Srv_Nick(char *origin, char **argv, int argc)
} }
/* Ultimate3 Client Support */ /* Ultimate3 Client Support */
void Srv_Client(char *origin, char **argv, int argc) void
Srv_Client (char *origin, char **argv, int argc)
{ {
char *realname; char *realname;
AddUser(argv[0], argv[5], argv[6], argv[8], AddUser (argv[0], argv[5], argv[6], argv[8], strtoul (argv[10], NULL, 10), strtoul (argv[2], NULL, 10));
strtoul(argv[10], NULL, 10), strtoul(argv[2], NULL, 10));
realname = joinbuf (argv, argc, 11); realname = joinbuf (argv, argc, 11);
AddRealName (argv[0], realname); AddRealName (argv[0], realname);
free (realname); free (realname);
@ -1118,33 +1133,35 @@ void Srv_Client(char *origin, char **argv, int argc)
} }
void Srv_Smode(char *origin, char **argv, int argc) void
Srv_Smode (char *origin, char **argv, int argc)
{ {
UserMode (argv[0], argv[1], 1); UserMode (argv[0], argv[1], 1);
}; };
/* ultimate 3 */ /* ultimate 3 */
void Srv_Svsnick(char *origin, char **argv, int argc) void
Srv_Svsnick (char *origin, char **argv, int argc)
{ {
User *u; User *u;
u = finduser (argv[0]); u = finduser (argv[0]);
if (u) { if (u) {
Change_User (u, argv[1]); Change_User (u, argv[1]);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Warning, Can't find user %s for SVSNICK", argv[0]);
"Warning, Can't find user %s for SVSNICK", argv[0]);
} }
} }
void Srv_Kill(char *origin, char **argv, int argc) void
Srv_Kill (char *origin, char **argv, int argc)
{ {
} }
int SignOn_NewBot(const char *nick, const char *user, int
const char *host, const char *rname, long Umode) SignOn_NewBot (const char *nick, const char *user, const char *host, const char *rname, long Umode)
{ {
snewnick_cmd (nick, user, host, rname, Umode); snewnick_cmd (nick, user, host, rname, Umode);

View file

@ -20,7 +20,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: QuantumIRCd.h,v 1.3 2003/07/23 10:35:47 fishwaldo Exp $ ** $Id: QuantumIRCd.h,v 1.4 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
#ifndef QUANTUM_H #ifndef QUANTUM_H
#define QUANTUM_H #define QUANTUM_H

View file

@ -20,7 +20,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: Ultimate.c,v 1.57 2003/07/11 14:06:45 fishwaldo Exp $ ** $Id: Ultimate.c,v 1.58 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
#include "stats.h" #include "stats.h"
@ -354,21 +354,22 @@ Oper_Modes usr_mds[] = {
}; };
#endif #endif
void init_ircd() void
init_ircd ()
{ {
/* count the number of commands */ /* count the number of commands */
ircd_srv.cmdcount = ((sizeof (cmd_list) / sizeof (cmd_list[0])) - 1); ircd_srv.cmdcount = ((sizeof (cmd_list) / sizeof (cmd_list[0])) - 1);
}; };
int sserver_cmd(const char *name, const int numeric, const char *infoline) int
sserver_cmd (const char *name, const int numeric, const char *infoline)
{ {
sts(":%s %s %s %d :%s", me.name, sts (":%s %s %s %d :%s", me.name, (me.token ? TOK_SERVER : MSG_SERVER), name, numeric, infoline);
(me.token ? TOK_SERVER : MSG_SERVER), name, numeric, infoline);
return 1; return 1;
} }
int slogin_cmd(const char *name, const int numeric, const char *infoline, int
const char *pass) slogin_cmd (const char *name, const int numeric, const char *infoline, const char *pass)
{ {
#ifndef ULTIMATE3 #ifndef ULTIMATE3
sts ("%s %s", (me.token ? TOK_PASS : MSG_PASS), pass); sts ("%s %s", (me.token ? TOK_PASS : MSG_PASS), pass);
@ -376,18 +377,19 @@ int slogin_cmd(const char *name, const int numeric, const char *infoline,
sts ("%s %s :TS", (me.token ? TOK_PASS : MSG_PASS), pass); sts ("%s %s :TS", (me.token ? TOK_PASS : MSG_PASS), pass);
sts ("CAPAB TS5 BURST SSJ5 NICKIP CLIENT"); sts ("CAPAB TS5 BURST SSJ5 NICKIP CLIENT");
#endif #endif
sts("%s %s %d :%s", (me.token ? TOK_SERVER : MSG_SERVER), name, sts ("%s %s %d :%s", (me.token ? TOK_SERVER : MSG_SERVER), name, numeric, infoline);
numeric, infoline);
return 1; return 1;
} }
int ssquit_cmd(const char *server) int
ssquit_cmd (const char *server)
{ {
sts ("%s %s", (me.token ? TOK_SQUIT : MSG_SQUIT), server); sts ("%s %s", (me.token ? TOK_SQUIT : MSG_SQUIT), server);
return 1; return 1;
} }
int sprotocol_cmd(const char *option) int
sprotocol_cmd (const char *option)
{ {
#ifndef ULTIMATE3 #ifndef ULTIMATE3
sts ("%s %s", (me.token ? TOK_PROTOCTL : MSG_PROTOCTL), option); sts ("%s %s", (me.token ? TOK_PROTOCTL : MSG_PROTOCTL), option);
@ -395,14 +397,16 @@ int sprotocol_cmd(const char *option)
return 1; return 1;
} }
int squit_cmd(const char *who, const char *quitmsg) int
squit_cmd (const char *who, const char *quitmsg)
{ {
sts (":%s %s :%s", who, (me.token ? TOK_QUIT : MSG_QUIT), quitmsg); sts (":%s %s :%s", who, (me.token ? TOK_QUIT : MSG_QUIT), quitmsg);
DelUser (who); DelUser (who);
return 1; return 1;
} }
int spart_cmd(const char *who, const char *chan) int
spart_cmd (const char *who, const char *chan)
{ {
sts (":%s %s %s", who, (me.token ? TOK_PART : MSG_PART), chan); sts (":%s %s %s", who, (me.token ? TOK_PART : MSG_PART), chan);
part_chan (finduser (who), (char *) chan); part_chan (finduser (who), (char *) chan);
@ -410,7 +414,8 @@ int spart_cmd(const char *who, const char *chan)
} }
#ifdef ULTIMATE3 #ifdef ULTIMATE3
int sjoin_cmd(const char *who, const char *chan, unsigned long chflag) int
sjoin_cmd (const char *who, const char *chan, unsigned long chflag)
{ {
char flag; char flag;
char mode[2]; char mode[2];
@ -446,7 +451,8 @@ int sjoin_cmd(const char *who, const char *chan, unsigned long chflag)
free (av); free (av);
#else #else
int sjoin_cmd(const char *who, const char *chan) int
sjoin_cmd (const char *who, const char *chan)
{ {
sts (":%s %s %s", who, (me.token ? TOK_JOIN : MSG_JOIN), chan); sts (":%s %s %s", who, (me.token ? TOK_JOIN : MSG_JOIN), chan);
join_chan (finduser (who), (char *) chan); join_chan (finduser (who), (char *) chan);
@ -454,16 +460,14 @@ int sjoin_cmd(const char *who, const char *chan)
return 1; return 1;
} }
int schmode_cmd(const char *who, const char *chan, const char *mode, int
const char *args) schmode_cmd (const char *who, const char *chan, const char *mode, const char *args)
{ {
char **av; char **av;
int ac; int ac;
char tmp[512]; char tmp[512];
sts(":%s %s %s %s %s %lu", me.name, sts (":%s %s %s %s %s %lu", who, (me.token ? TOK_MODE : MSG_MODE), chan, mode, args, time (NULL));
(me.token ? TOK_MODE : MSG_MODE), chan, mode, args,
time(NULL));
snprintf (tmp, 512, "%s %s %s", chan, mode, args); snprintf (tmp, 512, "%s %s %s", chan, mode, args);
ac = split_buf (tmp, &av, 0); ac = split_buf (tmp, &av, 0);
ChanMode ("", av, ac); ChanMode ("", av, ac);
@ -472,15 +476,14 @@ int schmode_cmd(const char *who, const char *chan, const char *mode,
} }
#ifndef ULTIMATE3 #ifndef ULTIMATE3
int snewnick_cmd(const char *nick, const char *ident, const char *host, int
const char *realname) snewnick_cmd (const char *nick, const char *ident, const char *host, const char *realname)
{ {
sts("%s %s 1 %lu %s %s %s 0 :%s", (me.token ? TOK_NICK : MSG_NICK), sts ("%s %s 1 %lu %s %s %s 0 :%s", (me.token ? TOK_NICK : MSG_NICK), nick, time (NULL), ident, host, me.name, realname);
nick, time(NULL), ident, host, me.name, realname);
AddUser (nick, ident, host, me.name, 0, time (NULL)); AddUser (nick, ident, host, me.name, 0, time (NULL));
#else #else
int snewnick_cmd(const char *nick, const char *ident, const char *host, int
const char *realname, long mode) snewnick_cmd (const char *nick, const char *ident, const char *host, const char *realname, long mode)
{ {
int i, j; int i, j;
char newmode[20]; char newmode[20];
@ -494,23 +497,22 @@ int snewnick_cmd(const char *nick, const char *ident, const char *host,
} }
newmode[j] = '\0'; newmode[j] = '\0';
sts("%s %s 1 %lu %s %s %s %s 0 %lu :%s", sts ("%s %s 1 %lu %s %s %s %s 0 %lu :%s", (me.token ? TOK_NICK : MSG_NICK), nick, time (NULL), newmode, ident, host, me.name, time (NULL), realname);
(me.token ? TOK_NICK : MSG_NICK), nick, time(NULL), newmode,
ident, host, me.name, time(NULL), realname);
AddUser (nick, ident, host, me.name, 0, time (NULL)); AddUser (nick, ident, host, me.name, 0, time (NULL));
UserMode (nick, newmode, 0); UserMode (nick, newmode, 0);
#endif #endif
return 1; return 1;
} }
int sping_cmd(const char *from, const char *reply, const char *to) int
sping_cmd (const char *from, const char *reply, const char *to)
{ {
sts(":%s %s %s :%s", from, (me.token ? TOK_PING : MSG_PING), reply, sts (":%s %s %s :%s", from, (me.token ? TOK_PING : MSG_PING), reply, to);
to);
return 1; return 1;
} }
int sumode_cmd(const char *who, const char *target, long mode) int
sumode_cmd (const char *who, const char *target, long mode)
{ {
int i, j; int i, j;
char newmode[20]; char newmode[20];
@ -524,14 +526,13 @@ int sumode_cmd(const char *who, const char *target, long mode)
} }
newmode[j] = '\0'; newmode[j] = '\0';
sts(":%s %s %s :%s", who, (me.token ? TOK_MODE : MSG_MODE), target, sts (":%s %s %s :%s", who, (me.token ? TOK_MODE : MSG_MODE), target, newmode);
newmode);
UserMode (target, newmode, 0); UserMode (target, newmode, 0);
return 1; return 1;
} }
int snumeric_cmd(const int numeric, const char *target, const char *data, int
...) snumeric_cmd (const int numeric, const char *target, const char *data, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
@ -542,151 +543,144 @@ int snumeric_cmd(const int numeric, const char *target, const char *data,
return 1; return 1;
} }
int spong_cmd(const char *reply) int
spong_cmd (const char *reply)
{ {
sts ("%s %s", (me.token ? TOK_PONG : MSG_PONG), reply); sts ("%s %s", (me.token ? TOK_PONG : MSG_PONG), reply);
return 1; return 1;
} }
int snetinfo_cmd() int
snetinfo_cmd ()
{ {
sts(":%s %s 0 %d %d %s 0 0 0 :%s", me.name, MSG_SNETINFO, sts (":%s %s 0 %d %d %s 0 0 0 :%s", me.name, MSG_SNETINFO, time (NULL), ircd_srv.uprot, ircd_srv.cloak, me.netname);
time(NULL), ircd_srv.uprot, ircd_srv.cloak, me.netname);
return 1; return 1;
} }
int vctrl_cmd() int
vctrl_cmd ()
{ {
sts("%s %d %d %d %d 0 0 0 0 0 0 0 0 0 0 :%s", MSG_VCTRL, sts ("%s %d %d %d %d 0 0 0 0 0 0 0 0 0 0 :%s", MSG_VCTRL, ircd_srv.uprot, ircd_srv.nicklg, ircd_srv.modex, ircd_srv.gc, me.netname);
ircd_srv.uprot, ircd_srv.nicklg, ircd_srv.modex, ircd_srv.gc,
me.netname);
return 1; return 1;
} }
int skill_cmd(const char *from, const char *target, const char *reason,
...) int
skill_cmd (const char *from, const char *target, const char *reason, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
va_start (ap, reason); va_start (ap, reason);
vsnprintf (buf, 512, reason, ap); vsnprintf (buf, 512, reason, ap);
sts(":%s %s %s :%s", from, (me.token ? TOK_KILL : MSG_KILL), sts (":%s %s %s :%s", from, (me.token ? TOK_KILL : MSG_KILL), target, buf);
target, buf);
va_end (ap); va_end (ap);
DelUser (target); DelUser (target);
return 1; return 1;
} }
int ssvskill_cmd(const char *who, const char *reason, ...) int
ssvskill_cmd (const char *who, const char *reason, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
va_start (ap, reason); va_start (ap, reason);
vsnprintf (buf, 512, reason, ap); vsnprintf (buf, 512, reason, ap);
sts(":%s %s %s :%s", me.name, MSG_SVSKILL, sts (":%s %s %s :%s", me.name, MSG_SVSKILL, who, buf);
who, buf);
va_end (ap); va_end (ap);
return 1; return 1;
} }
int ssmo_cmd(const char *from, const char *umodetarget, const char *msg) int
ssmo_cmd (const char *from, const char *umodetarget, const char *msg)
{ {
chanalert(s_Services, chanalert (s_Services, "Warning, Module %s tried to SMO, which is not supported in Ultimate", segvinmodule);
"Warning, Module %s tried to SMO, which is not supported in Ultimate", nlog (LOG_NOTICE, LOG_CORE, "Warning, Module %s tried to SMO, which is not supported in Ultimate", segvinmodule);
segvinmodule);
nlog(LOG_NOTICE, LOG_CORE,
"Warning, Module %s tried to SMO, which is not supported in Ultimate",
segvinmodule);
return 1; return 1;
} }
int snick_cmd(const char *oldnick, const char *newnick) int
snick_cmd (const char *oldnick, const char *newnick)
{ {
Change_User (finduser (oldnick), newnick); Change_User (finduser (oldnick), newnick);
sts(":%s %s %s %d", oldnick, (me.token ? TOK_NICK : MSG_NICK), sts (":%s %s %s %d", oldnick, (me.token ? TOK_NICK : MSG_NICK), newnick, time (NULL));
newnick, time(NULL));
return 1;
}
int sswhois_cmd(const char *target, const char *swhois)
{
chanalert(s_Services,
"Warning Module %s tried to SWHOIS, which is not supported in Ultimate",
segvinmodule);
nlog(LOG_NOTICE, LOG_CORE,
"Warning. Module %s tried to SWHOIS, which is not supported in Ultimate",
segvinmodule);
return 1;
}
int ssvsnick_cmd(const char *target, const char *newnick)
{
sts("%s %s %s :%d", (me.token ? TOK_SVSNICK : MSG_SVSNICK), target,
newnick, time(NULL));
return 1; return 1;
} }
int ssvsjoin_cmd(const char *target, const char *chan) int
sswhois_cmd (const char *target, const char *swhois)
{ {
sts("%s %s %s", (me.token ? TOK_SVSJOIN : MSG_SVSJOIN), target, chanalert (s_Services, "Warning Module %s tried to SWHOIS, which is not supported in Ultimate", segvinmodule);
chan); nlog (LOG_NOTICE, LOG_CORE, "Warning. Module %s tried to SWHOIS, which is not supported in Ultimate", segvinmodule);
return 1; return 1;
} }
int ssvspart_cmd(const char *target, const char *chan) int
ssvsnick_cmd (const char *target, const char *newnick)
{ {
sts("%s %s %s", (me.token ? TOK_SVSPART : MSG_SVSPART), target, sts ("%s %s %s :%d", (me.token ? TOK_SVSNICK : MSG_SVSNICK), target, newnick, time (NULL));
chan);
return 1; return 1;
} }
int skick_cmd(const char *who, const char *target, const char *chan, int
const char *reason) ssvsjoin_cmd (const char *target, const char *chan)
{ {
sts(":%s %s %s %s :%s", who, (me.token ? TOK_KICK : MSG_KICK), sts ("%s %s %s", (me.token ? TOK_SVSJOIN : MSG_SVSJOIN), target, chan);
chan, target, (reason ? reason : "No Reason Given")); return 1;
}
int
ssvspart_cmd (const char *target, const char *chan)
{
sts ("%s %s %s", (me.token ? TOK_SVSPART : MSG_SVSPART), target, chan);
return 1;
}
int
skick_cmd (const char *who, const char *target, const char *chan, const char *reason)
{
sts (":%s %s %s %s :%s", who, (me.token ? TOK_KICK : MSG_KICK), chan, target, (reason ? reason : "No Reason Given"));
part_chan (finduser (target), (char *) chan); part_chan (finduser (target), (char *) chan);
return 1; return 1;
} }
int swallops_cmd(const char *who, const char *msg, ...)
int
swallops_cmd (const char *who, const char *msg, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
va_start (ap, msg); va_start (ap, msg);
vsnprintf (buf, 512, msg, ap); vsnprintf (buf, 512, msg, ap);
sts(":%s %s :%s", who, (me.token ? TOK_WALLOPS : MSG_WALLOPS), sts (":%s %s :%s", who, (me.token ? TOK_WALLOPS : MSG_WALLOPS), buf);
buf);
va_end (ap); va_end (ap);
return 1; return 1;
} }
int ssvshost_cmd(const char *who, const char *vhost) int
ssvshost_cmd (const char *who, const char *vhost)
{ {
User *u; User *u;
u = finduser (who); u = finduser (who);
if (!u) { if (!u) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Can't Find user %s for ssvshost_cmd", who);
"Can't Find user %s for ssvshost_cmd", who);
return 0; return 0;
} else { } else {
strncpy (u->vhost, vhost, MAXHOST); strncpy (u->vhost, vhost, MAXHOST);
#ifdef ULTIMATE3 #ifdef ULTIMATE3
sts(":%s %s %s %s", me.name, sts (":%s %s %s %s", me.name, (me.token ? TOK_SETHOST : MSG_SETHOST), who, vhost);
(me.token ? TOK_SETHOST : MSG_SETHOST), who, vhost);
#elif ULTIMATE #elif ULTIMATE
sts (":%s CHGHOST %s %s", me.name, who, vhost); sts (":%s CHGHOST %s %s", me.name, who, vhost);
#endif #endif
return 1; return 1;
} }
} }
int sakill_cmd(const char *host, const char *ident, const char *setby, int
const int length, const char *reason, ...) sakill_cmd (const char *host, const char *ident, const char *setby, const int length, const char *reason, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
va_start (ap, reason); va_start (ap, reason);
vsnprintf (buf, 512, reason, ap); vsnprintf (buf, 512, reason, ap);
#ifdef ULTIMATE3 #ifdef ULTIMATE3
sts(":%s %s %s %s %d %s %d :%s", me.name, sts (":%s %s %s %s %d %s %d :%s", me.name, (me.token ? TOK_AKILL : MSG_AKILL), host, ident, length, setby, time (NULL), buf);
(me.token ? TOK_AKILL : MSG_AKILL), host, ident, length, setby,
time(NULL), buf);
#elif ULTIMATE #elif ULTIMATE
sts (":%s %s %s@%s %d %d %s :%s", me.name, MSG_GLINE, ident, host, time (NULL) + length, time (NULL), setby, buf); sts (":%s %s %s@%s %d %d %s :%s", me.name, MSG_GLINE, ident, host, time (NULL) + length, time (NULL), setby, buf);
#endif #endif
@ -694,11 +688,11 @@ int sakill_cmd(const char *host, const char *ident, const char *setby,
return 1; return 1;
} }
int srakill_cmd(const char *host, const char *ident) int
srakill_cmd (const char *host, const char *ident)
{ {
#ifdef ULTIMATE3 #ifdef ULTIMATE3
sts(":%s %s %s %s", me.name, (me.token ? TOK_RAKILL : MSG_RAKILL), sts (":%s %s %s %s", me.name, (me.token ? TOK_RAKILL : MSG_RAKILL), host, ident);
host, ident);
#elif ULTIMATE #elif ULTIMATE
/* ultimate2 needs a oper to remove */ /* ultimate2 needs a oper to remove */
sts (":%s %s :%s@%s", s_Services, MSG_REMGLINE, host, ident); sts (":%s %s :%s@%s", s_Services, MSG_REMGLINE, host, ident);
@ -707,12 +701,15 @@ int srakill_cmd(const char *host, const char *ident)
} }
int ssvinfo_cmd() int
ssvinfo_cmd ()
{ {
sts ("SVINFO 5 3 0 :%d", time (NULL)); sts ("SVINFO 5 3 0 :%d", time (NULL));
return 1; return 1;
} }
int sburst_cmd(int b)
int
sburst_cmd (int b)
{ {
if (b == 0) { if (b == 0) {
sts ("BURST 0"); sts ("BURST 0");
@ -723,8 +720,8 @@ int sburst_cmd(int b)
} }
void
void chanalert(char *who, char *buf, ...) chanalert (char *who, char *buf, ...)
{ {
va_list ap; va_list ap;
char tmp[512]; char tmp[512];
@ -733,14 +730,15 @@ void chanalert(char *who, char *buf, ...)
vsnprintf (tmp, 512, buf, ap); vsnprintf (tmp, 512, buf, ap);
if (me.onchan) { if (me.onchan) {
snprintf(out, 512, ":%s PRIVMSG %s :%s", who, me.chan, snprintf (out, 512, ":%s PRIVMSG %s :%s", who, me.chan, tmp);
tmp);
nlog (LOG_DEBUG3, LOG_CORE, "SENT: %s", out); nlog (LOG_DEBUG3, LOG_CORE, "SENT: %s", out);
sts ("%s", out); sts ("%s", out);
} }
va_end (ap); va_end (ap);
} }
void prefmsg(char *to, const char *from, char *fmt, ...)
void
prefmsg (char *to, const char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
@ -748,9 +746,7 @@ void prefmsg(char *to, const char *from, char *fmt, ...)
va_start (ap, fmt); va_start (ap, fmt);
vsnprintf (buf2, sizeof (buf2), fmt, ap); vsnprintf (buf2, sizeof (buf2), fmt, ap);
if (findbot (to)) { if (findbot (to)) {
chanalert(s_Services, chanalert (s_Services, "Message From our Bot(%s) to Our Bot(%s), Dropping Message", from, to);
"Message From our Bot(%s) to Our Bot(%s), Dropping Message",
from, to);
return; return;
} }
if (me.want_privmsg) { if (me.want_privmsg) {
@ -761,15 +757,15 @@ void prefmsg(char *to, const char *from, char *fmt, ...)
sts ("%s", buf); sts ("%s", buf);
va_end (ap); va_end (ap);
} }
void privmsg(char *to, const char *from, char *fmt, ...)
void
privmsg (char *to, const char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
if (findbot (to)) { if (findbot (to)) {
chanalert(s_Services, chanalert (s_Services, "Message From our Bot(%s) to Our Bot(%s), Dropping Message", from, to);
"Message From our Bot(%s) to Our Bot(%s), Dropping Message",
from, to);
return; return;
} }
@ -780,15 +776,14 @@ void privmsg(char *to, const char *from, char *fmt, ...)
va_end (ap); va_end (ap);
} }
void notice(char *to, const char *from, char *fmt, ...) void
notice (char *to, const char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
if (findbot (to)) { if (findbot (to)) {
chanalert(s_Services, chanalert (s_Services, "Message From our Bot(%s) to Our Bot(%s), Dropping Message", from, to);
"Message From our Bot(%s) to Our Bot(%s), Dropping Message",
from, to);
return; return;
} }
@ -800,7 +795,8 @@ void notice(char *to, const char *from, char *fmt, ...)
} }
void privmsg_list(char *to, char *from, const char **text) void
privmsg_list (char *to, char *from, const char **text)
{ {
while (*text) { while (*text) {
if (**text) if (**text)
@ -812,7 +808,8 @@ void privmsg_list(char *to, char *from, const char **text)
} }
void globops(char *from, char *fmt, ...) void
globops (char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
@ -833,7 +830,8 @@ void globops(char *from, char *fmt, ...)
} }
void Srv_Sjoin(char *origin, char **argv, int argc) void
Srv_Sjoin (char *origin, char **argv, int argc)
{ {
char nick[MAXNICK]; char nick[MAXNICK];
long mode = 0; long mode = 0;
@ -860,22 +858,17 @@ void Srv_Sjoin(char *origin, char **argv, int argc)
goto nomodes; goto nomodes;
} }
while (*modes) { while (*modes) {
for (i = 0; for (i = 0; i < ((sizeof (cFlagTab) / sizeof (cFlagTab[0])) - 1); i++) {
i < ((sizeof(cFlagTab) / sizeof(cFlagTab[0])) - 1);
i++) {
if (*modes == cFlagTab[i].flag) { if (*modes == cFlagTab[i].flag) {
if (cFlagTab[i].parameters) { if (cFlagTab[i].parameters) {
m = smalloc (sizeof (ModesParm)); m = smalloc (sizeof (ModesParm));
m->mode = cFlagTab[i].mode; m->mode = cFlagTab[i].mode;
strncpy(m->param, argv[j], strncpy (m->param, argv[j], PARAMSIZE);
PARAMSIZE);
mn = lnode_create (m); mn = lnode_create (m);
if (!list_isfull (tl)) { if (!list_isfull (tl)) {
list_append (tl, mn); list_append (tl, mn);
} else { } else {
nlog(LOG_CRITICAL, nlog (LOG_CRITICAL, LOG_CORE, "Eeeek, tl list is full in Svr_Sjoin(ircd.c)");
LOG_CORE,
"Eeeek, tl list is full in Svr_Sjoin(ircd.c)");
do_exit (0); do_exit (0);
} }
j++; j++;
@ -891,10 +884,7 @@ void Srv_Sjoin(char *origin, char **argv, int argc)
modes = argv[j]; modes = argv[j];
mode = 0; mode = 0;
while (ok == 1) { while (ok == 1) {
for (i = 0; for (i = 0; i < ((sizeof (cFlagTab) / sizeof (cFlagTab[0])) - 1); i++) {
i <
((sizeof(cFlagTab) / sizeof(cFlagTab[0])) -
1); i++) {
if (cFlagTab[i].sjoin != 0) { if (cFlagTab[i].sjoin != 0) {
if (*modes == cFlagTab[i].sjoin) { if (*modes == cFlagTab[i].sjoin) {
mode |= cFlagTab[i].mode; mode |= cFlagTab[i].mode;
@ -910,8 +900,7 @@ void Srv_Sjoin(char *origin, char **argv, int argc)
} }
} }
join_chan (finduser (nick), argv[1]); join_chan (finduser (nick), argv[1]);
ChangeChanUserMode(findchan(argv[1]), finduser(nick), 1, ChangeChanUserMode (findchan (argv[1]), finduser (nick), 1, mode);
mode);
j++; j++;
ok = 1; ok = 1;
} }
@ -922,15 +911,15 @@ void Srv_Sjoin(char *origin, char **argv, int argc)
list_transfer (c->modeparms, tl, list_first (tl)); list_transfer (c->modeparms, tl, list_first (tl));
} else { } else {
/* eeeeeeek, list is full! */ /* eeeeeeek, list is full! */
nlog(LOG_CRITICAL, LOG_CORE, nlog (LOG_CRITICAL, LOG_CORE, "Eeeek, c->modeparms list is full in Svr_Sjoin(ircd.c)");
"Eeeek, c->modeparms list is full in Svr_Sjoin(ircd.c)");
do_exit (0); do_exit (0);
} }
} }
list_destroy (tl); list_destroy (tl);
} }
void Srv_Burst(char *origin, char **argv, int argc) void
Srv_Burst (char *origin, char **argv, int argc)
{ {
if (argc > 0) { if (argc > 0) {
if (ircd_srv.burst == 1) { if (ircd_srv.burst == 1) {
@ -944,7 +933,8 @@ void Srv_Burst(char *origin, char **argv, int argc)
} }
} }
void Srv_Connect(char *origin, char **argv, int argc) void
Srv_Connect (char *origin, char **argv, int argc)
{ {
int i; int i;
@ -961,49 +951,62 @@ void Srv_Connect(char *origin, char **argv, int argc)
} }
void Usr_Stats(char *origin, char **argv, int argc) void
Usr_Stats (char *origin, char **argv, int argc)
{ {
User *u; User *u;
u = finduser (origin); u = finduser (origin);
if (!u) { if (!u) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Recieved a Message from a Unknown User! (%s)", origin);
"Recieved a Message from a Unknown User! (%s)",
origin);
return; return;
} }
ShowStats (argv[0], u); ShowStats (argv[0], u);
} }
void Usr_Version(char *origin, char **argv, int argc) void
Usr_Version (char *origin, char **argv, int argc)
{ {
snumeric_cmd(351, origin, "%d.%d.%d%s :%s -> %s %s", MAJOR, MINOR, snumeric_cmd (351, origin, "%d.%d.%d%s :%s -> %s %s", MAJOR, MINOR, REV, version, me.name, version_date, version_time);
REV, version, me.name, version_date, version_time);
} }
void Usr_ShowMOTD(char *origin, char **argv, int argc)
void
Usr_ShowMOTD (char *origin, char **argv, int argc)
{ {
ShowMOTD (origin); ShowMOTD (origin);
} }
void Usr_ShowADMIN(char *origin, char **argv, int argc)
void
Usr_ShowADMIN (char *origin, char **argv, int argc)
{ {
ShowADMIN (origin); ShowADMIN (origin);
} }
void Usr_Showcredits(char *origin, char **argv, int argc)
void
Usr_Showcredits (char *origin, char **argv, int argc)
{ {
Showcredits (origin); Showcredits (origin);
} }
void Usr_AddServer(char *origin, char **argv, int argc)
void
Usr_AddServer (char *origin, char **argv, int argc)
{ {
AddServer (argv[0], origin, atoi (argv[1])); AddServer (argv[0], origin, atoi (argv[1]));
} }
void Usr_DelServer(char *origin, char **argv, int argc)
void
Usr_DelServer (char *origin, char **argv, int argc)
{ {
DelServer (argv[0]); DelServer (argv[0]);
} }
void Usr_DelUser(char *origin, char **argv, int argc)
void
Usr_DelUser (char *origin, char **argv, int argc)
{ {
DelUser (origin); DelUser (origin);
} }
void Usr_Smode(char *origin, char **argv, int argc)
void
Usr_Smode (char *origin, char **argv, int argc)
{ {
if (!strchr (argv[0], '#')) { if (!strchr (argv[0], '#')) {
/* its user svsmode change */ /* its user svsmode change */
@ -1017,7 +1020,8 @@ void Usr_Smode(char *origin, char **argv, int argc)
ChanMode (origin, argv, argc); ChanMode (origin, argv, argc);
} }
} }
void Usr_Mode(char *origin, char **argv, int argc) void
Usr_Mode (char *origin, char **argv, int argc)
{ {
if (!strchr (argv[0], '#')) { if (!strchr (argv[0], '#')) {
nlog (LOG_DEBUG1, LOG_CORE, "Mode: UserMode: %s %s", argv[0], argv[1]); nlog (LOG_DEBUG1, LOG_CORE, "Mode: UserMode: %s %s", argv[0], argv[1]);
@ -1026,18 +1030,19 @@ void Usr_Mode(char *origin, char **argv, int argc)
ChanMode (origin, argv, argc); ChanMode (origin, argv, argc);
} }
} }
void Usr_Kill(char *origin, char **argv, int argc) void
Usr_Kill (char *origin, char **argv, int argc)
{ {
User *u; User *u;
u = finduser (argv[0]); u = finduser (argv[0]);
if (u) { if (u) {
KillUser (argv[0]); KillUser (argv[0]);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, "Can't find user %s for Kill", nlog (LOG_WARNING, LOG_CORE, "Can't find user %s for Kill", argv[0]);
argv[0]);
} }
} }
void Usr_Vhost(char *origin, char **argv, int argc) void
Usr_Vhost (char *origin, char **argv, int argc)
{ {
User *u; User *u;
#ifndef ULTIMATE3 #ifndef ULTIMATE3
@ -1053,18 +1058,19 @@ void Usr_Vhost(char *origin, char **argv, int argc)
#endif #endif
} }
} }
void Usr_Pong(char *origin, char **argv, int argc) void
Usr_Pong (char *origin, char **argv, int argc)
{ {
Server *s; Server *s;
s = findserver (argv[0]); s = findserver (argv[0]);
if (s) { if (s) {
dopong (s); dopong (s);
} else { } else {
nlog(LOG_NOTICE, LOG_CORE, nlog (LOG_NOTICE, LOG_CORE, "Received PONG from unknown server: %s", argv[0]);
"Received PONG from unknown server: %s", argv[0]);
} }
} }
void Usr_Away(char *origin, char **argv, int argc) void
Usr_Away (char *origin, char **argv, int argc)
{ {
char *Buf; char *Buf;
User *u = finduser (origin); User *u = finduser (origin);
@ -1079,18 +1085,19 @@ void Usr_Away(char *origin, char **argv, int argc)
free (Buf); free (Buf);
} }
} else { } else {
nlog(LOG_NOTICE, LOG_CORE, nlog (LOG_NOTICE, LOG_CORE, "Warning, Unable to find User %s for Away", origin);
"Warning, Unable to find User %s for Away", origin);
} }
} }
void Usr_Nick(char *origin, char **argv, int argc) void
Usr_Nick (char *origin, char **argv, int argc)
{ {
User *u = finduser (origin); User *u = finduser (origin);
if (u) { if (u) {
Change_User (u, argv[0]); Change_User (u, argv[0]);
} }
} }
void Usr_Topic(char *origin, char **argv, int argc) void
Usr_Topic (char *origin, char **argv, int argc)
{ {
char *buf; char *buf;
Chans *c; Chans *c;
@ -1100,13 +1107,13 @@ void Usr_Topic(char *origin, char **argv, int argc)
Change_Topic (argv[1], c, atoi (argv[2]), buf); Change_Topic (argv[1], c, atoi (argv[2]), buf);
free (buf); free (buf);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, "Ehhh, Can't find Channel %s", nlog (LOG_WARNING, LOG_CORE, "Ehhh, Can't find Channel %s", argv[0]);
argv[0]);
} }
} }
void Usr_Kick(char *origin, char **argv, int argc) void
Usr_Kick (char *origin, char **argv, int argc)
{ {
User *u, *k; User *u, *k;
u = finduser (argv[1]); u = finduser (argv[1]);
@ -1114,12 +1121,11 @@ void Usr_Kick(char *origin, char **argv, int argc)
if ((u) && (k)) { if ((u) && (k)) {
kick_chan (u, argv[0], k); kick_chan (u, argv[0], k);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Warning, Can't find user %s for kick %s", argv[1], argv[0]);
"Warning, Can't find user %s for kick %s", argv[1],
argv[0]);
} }
} }
void Usr_Join(char *origin, char **argv, int argc) void
Usr_Join (char *origin, char **argv, int argc)
{ {
char *s, *t; char *s, *t;
t = argv[0]; t = argv[0];
@ -1130,11 +1136,14 @@ void Usr_Join(char *origin, char **argv, int argc)
join_chan (finduser (origin), s); join_chan (finduser (origin), s);
} }
} }
void Usr_Part(char *origin, char **argv, int argc) void
Usr_Part (char *origin, char **argv, int argc)
{ {
part_chan (finduser (origin), argv[0]); part_chan (finduser (origin), argv[0]);
} }
void Srv_Ping(char *origin, char **argv, int argc)
void
Srv_Ping (char *origin, char **argv, int argc)
{ {
spong_cmd (argv[0]); spong_cmd (argv[0]);
#ifdef ULTIMATE3 #ifdef ULTIMATE3
@ -1144,7 +1153,8 @@ void Srv_Ping(char *origin, char **argv, int argc)
#endif #endif
} }
void Srv_Vctrl(char *origin, char **argv, int argc) void
Srv_Vctrl (char *origin, char **argv, int argc)
{ {
ircd_srv.uprot = atoi (argv[0]); ircd_srv.uprot = atoi (argv[0]);
ircd_srv.nicklg = atoi (argv[1]); ircd_srv.nicklg = atoi (argv[1]);
@ -1154,13 +1164,15 @@ void Srv_Vctrl(char *origin, char **argv, int argc)
vctrl_cmd (); vctrl_cmd ();
} }
void Srv_Svinfo(char *origin, char **argv, int argc) void
Srv_Svinfo (char *origin, char **argv, int argc)
{ {
ssvinfo_cmd (); ssvinfo_cmd ();
} }
#ifndef ULTIMATE3 #ifndef ULTIMATE3
void Srv_Netinfo(char *origin, char **argv, int argc) void
Srv_Netinfo (char *origin, char **argv, int argc)
{ {
me.onchan = 1; me.onchan = 1;
ircd_srv.uprot = atoi (argv[2]); ircd_srv.uprot = atoi (argv[2]);
@ -1181,10 +1193,12 @@ void Srv_Netinfo(char *origin, char **argv, int argc)
} }
#endif #endif
void Srv_Pass(char *origin, char **argv, int argc) void
Srv_Pass (char *origin, char **argv, int argc)
{ {
} }
void Srv_Server(char *origin, char **argv, int argc) void
Srv_Server (char *origin, char **argv, int argc)
{ {
Server *s; Server *s;
if (*origin == 0) { if (*origin == 0) {
@ -1195,35 +1209,35 @@ void Srv_Server(char *origin, char **argv, int argc)
s = findserver (argv[0]); s = findserver (argv[0]);
me.s = s; me.s = s;
} }
void Srv_Squit(char *origin, char **argv, int argc)
void
Srv_Squit (char *origin, char **argv, int argc)
{ {
Server *s; Server *s;
s = findserver (argv[0]); s = findserver (argv[0]);
if (s) { if (s) {
DelServer (argv[0]); DelServer (argv[0]);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Waring, Squit from Unknown Server %s", argv[0]);
"Waring, Squit from Unknown Server %s", argv[0]);
} }
} }
/* BE REALLY CAREFULL ABOUT THE ORDER OF THESE ifdef's */ /* BE REALLY CAREFULL ABOUT THE ORDER OF THESE ifdef's */
void Srv_Nick(char *origin, char **argv, int argc) void
Srv_Nick (char *origin, char **argv, int argc)
{ {
char *realname; char *realname;
#if ULTIMATE3 #if ULTIMATE3
AddUser(argv[0], argv[4], argv[5], argv[6], AddUser (argv[0], argv[4], argv[5], argv[6], strtoul (argv[8], NULL, 10), strtoul (argv[2], NULL, 10));
strtoul(argv[8], NULL, 10), strtoul(argv[2], NULL, 10));
realname = joinbuf (argv, argc, 9); realname = joinbuf (argv, argc, 9);
AddRealName (argv[0], realname); AddRealName (argv[0], realname);
free (realname); free (realname);
nlog (LOG_DEBUG1, LOG_CORE, "Mode: UserMode: %s", argv[3]); nlog (LOG_DEBUG1, LOG_CORE, "Mode: UserMode: %s", argv[3]);
UserMode (argv[0], argv[3], 0); UserMode (argv[0], argv[3], 0);
#elif ULTIMATE #elif ULTIMATE
AddUser(argv[0], argv[3], argv[4], argv[5], 0, AddUser (argv[0], argv[3], argv[4], argv[5], 0, strtoul (argv[2], NULL, 10));
strtoul(argv[2], NULL, 10));
realname = joinbuf (argv, argc, 7); realname = joinbuf (argv, argc, 7);
AddRealName (argv[0], realname); AddRealName (argv[0], realname);
free (realname); free (realname);
@ -1232,12 +1246,12 @@ void Srv_Nick(char *origin, char **argv, int argc)
/* Ultimate3 Client Support */ /* Ultimate3 Client Support */
#ifdef ULTIMATE3 #ifdef ULTIMATE3
void Srv_Client(char *origin, char **argv, int argc) void
Srv_Client (char *origin, char **argv, int argc)
{ {
char *realname; char *realname;
AddUser(argv[0], argv[5], argv[6], argv[8], AddUser (argv[0], argv[5], argv[6], argv[8], strtoul (argv[10], NULL, 10), strtoul (argv[2], NULL, 10));
strtoul(argv[10], NULL, 10), strtoul(argv[2], NULL, 10));
realname = joinbuf (argv, argc, 11); realname = joinbuf (argv, argc, 11);
AddRealName (argv[0], realname); AddRealName (argv[0], realname);
free (realname); free (realname);
@ -1248,7 +1262,8 @@ void Srv_Client(char *origin, char **argv, int argc)
} }
void Srv_Smode(char *origin, char **argv, int argc) void
Srv_Smode (char *origin, char **argv, int argc)
{ {
UserMode (argv[0], argv[1], 1); UserMode (argv[0], argv[1], 1);
}; };
@ -1256,26 +1271,27 @@ void Srv_Smode(char *origin, char **argv, int argc)
/* ultimate 3 */ /* ultimate 3 */
#endif #endif
void Srv_Svsnick(char *origin, char **argv, int argc) void
Srv_Svsnick (char *origin, char **argv, int argc)
{ {
User *u; User *u;
u = finduser (argv[0]); u = finduser (argv[0]);
if (u) { if (u) {
Change_User (u, argv[1]); Change_User (u, argv[1]);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Warning, Can't find user %s for SVSNICK", argv[0]);
"Warning, Can't find user %s for SVSNICK", argv[0]);
} }
} }
void Srv_Kill(char *origin, char **argv, int argc) void
Srv_Kill (char *origin, char **argv, int argc)
{ {
} }
int SignOn_NewBot(const char *nick, const char *user, int
const char *host, const char *rname, long Umode) SignOn_NewBot (const char *nick, const char *user, const char *host, const char *rname, long Umode)
{ {
#ifdef ULTIMATE3 #ifdef ULTIMATE3

View file

@ -20,7 +20,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: Ultimate.h,v 1.24 2003/07/23 10:35:47 fishwaldo Exp $ ** $Id: Ultimate.h,v 1.25 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
#ifndef ULTIMATE_H #ifndef ULTIMATE_H
#define ULTIMATE_H #define ULTIMATE_H

355
Unreal.c
View file

@ -20,7 +20,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: Unreal.c,v 1.49 2003/07/11 13:43:27 fishwaldo Exp $ ** $Id: Unreal.c,v 1.50 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
#include "stats.h" #include "stats.h"
@ -294,7 +294,8 @@ Oper_Modes usr_mds[] = {
void init_ircd() void
init_ircd ()
{ {
/* count the number of commands */ /* count the number of commands */
ircd_srv.cmdcount = ((sizeof (cmd_list) / sizeof (cmd_list[0])) - 1); ircd_srv.cmdcount = ((sizeof (cmd_list) / sizeof (cmd_list[0])) - 1);
@ -302,87 +303,90 @@ void init_ircd()
}; };
int sserver_cmd(const char *name, const int numeric, const char *infoline) int
sserver_cmd (const char *name, const int numeric, const char *infoline)
{ {
sts(":%s %s %s %d :%s", me.name, sts (":%s %s %s %d :%s", me.name, (me.token ? TOK_SERVER : MSG_SERVER), name, numeric, infoline);
(me.token ? TOK_SERVER : MSG_SERVER), name, numeric, infoline);
return 1; return 1;
} }
int slogin_cmd(const char *name, const int numeric, const char *infoline, int
const char *pass) slogin_cmd (const char *name, const int numeric, const char *infoline, const char *pass)
{ {
sts ("%s %s", (me.token ? TOK_PASS : MSG_PASS), pass); sts ("%s %s", (me.token ? TOK_PASS : MSG_PASS), pass);
sts("%s %s %d :%s", (me.token ? TOK_SERVER : MSG_SERVER), name, sts ("%s %s %d :%s", (me.token ? TOK_SERVER : MSG_SERVER), name, numeric, infoline);
numeric, infoline);
return 1; return 1;
} }
int ssquit_cmd(const char *server) int
ssquit_cmd (const char *server)
{ {
sts ("%s %s", (me.token ? TOK_SQUIT : MSG_SQUIT), server); sts ("%s %s", (me.token ? TOK_SQUIT : MSG_SQUIT), server);
return 1; return 1;
} }
int sprotocol_cmd(const char *option) int
sprotocol_cmd (const char *option)
{ {
sts ("%s %s", (me.token ? TOK_PROTOCTL : MSG_PROTOCTL), option); sts ("%s %s", (me.token ? TOK_PROTOCTL : MSG_PROTOCTL), option);
return 1; return 1;
} }
int squit_cmd(const char *who, const char *quitmsg) int
squit_cmd (const char *who, const char *quitmsg)
{ {
sts (":%s %s :%s", who, (me.token ? TOK_QUIT : MSG_QUIT), quitmsg); sts (":%s %s :%s", who, (me.token ? TOK_QUIT : MSG_QUIT), quitmsg);
DelUser (who); DelUser (who);
return 1; return 1;
} }
int spart_cmd(const char *who, const char *chan) int
spart_cmd (const char *who, const char *chan)
{ {
sts (":%s %s %s", who, (me.token ? TOK_PART : MSG_PART), chan); sts (":%s %s %s", who, (me.token ? TOK_PART : MSG_PART), chan);
part_chan (finduser (who), (char *) chan); part_chan (finduser (who), (char *) chan);
return 1; return 1;
} }
int sjoin_cmd(const char *who, const char *chan) int
sjoin_cmd (const char *who, const char *chan)
{ {
sts (":%s %s %s", who, (me.token ? TOK_JOIN : MSG_JOIN), chan); sts (":%s %s %s", who, (me.token ? TOK_JOIN : MSG_JOIN), chan);
join_chan (finduser (who), (char *) chan); join_chan (finduser (who), (char *) chan);
return 1; return 1;
} }
int schmode_cmd(const char *who, const char *chan, const char *mode, int
const char *args) schmode_cmd (const char *who, const char *chan, const char *mode, const char *args)
{ {
char **av; char **av;
int ac; int ac;
char tmp[512]; char tmp[512];
sts(":%s %s %s %s %s %lu", who, (me.token ? TOK_MODE : MSG_MODE), sts (":%s %s %s %s %s %lu", who, (me.token ? TOK_MODE : MSG_MODE), chan, mode, args, time (NULL));
chan, mode, args, time(NULL));
snprintf (tmp, 512, "%s %s %s", chan, mode, args); snprintf (tmp, 512, "%s %s %s", chan, mode, args);
ac = split_buf (tmp, &av, 0); ac = split_buf (tmp, &av, 0);
ChanMode ("", av, ac); ChanMode ("", av, ac);
return 1; return 1;
} }
int snewnick_cmd(const char *nick, const char *ident, const char *host, int
const char *realname) snewnick_cmd (const char *nick, const char *ident, const char *host, const char *realname)
{ {
sts("%s %s 1 %lu %s %s %s 0 :%s", (me.token ? TOK_NICK : MSG_NICK), sts ("%s %s 1 %lu %s %s %s 0 :%s", (me.token ? TOK_NICK : MSG_NICK), nick, time (NULL), ident, host, me.name, realname);
nick, time(NULL), ident, host, me.name, realname);
AddUser (nick, ident, host, me.name, 0, time (NULL)); AddUser (nick, ident, host, me.name, 0, time (NULL));
return 1; return 1;
} }
int sping_cmd(const char *from, const char *reply, const char *to) int
sping_cmd (const char *from, const char *reply, const char *to)
{ {
sts(":%s %s %s :%s", from, (me.token ? TOK_PING : MSG_PING), reply, sts (":%s %s %s :%s", from, (me.token ? TOK_PING : MSG_PING), reply, to);
to);
return 1; return 1;
} }
int sumode_cmd(const char *who, const char *target, long mode) int
sumode_cmd (const char *who, const char *target, long mode)
{ {
int i, j; int i, j;
char newmode[20]; char newmode[20];
@ -396,14 +400,13 @@ int sumode_cmd(const char *who, const char *target, long mode)
} }
newmode[j] = '\0'; newmode[j] = '\0';
sts(":%s %s %s :%s", who, (me.token ? TOK_MODE : MSG_MODE), target, sts (":%s %s %s :%s", who, (me.token ? TOK_MODE : MSG_MODE), target, newmode);
newmode);
UserMode (target, newmode, 0); UserMode (target, newmode, 0);
return 1; return 1;
} }
int snumeric_cmd(const int numeric, const char *target, const char *data, int
...) snumeric_cmd (const int numeric, const char *target, const char *data, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
@ -414,141 +417,140 @@ int snumeric_cmd(const int numeric, const char *target, const char *data,
return 1; return 1;
} }
int spong_cmd(const char *reply) int
spong_cmd (const char *reply)
{ {
sts ("%s %s", (me.token ? TOK_PONG : MSG_PONG), reply); sts ("%s %s", (me.token ? TOK_PONG : MSG_PONG), reply);
return 1; return 1;
} }
int snetinfo_cmd() int
snetinfo_cmd ()
{ {
sts(":%s %s 0 %d %d %s 0 0 0 :%s", me.name, sts (":%s %s 0 %d %d %s 0 0 0 :%s", me.name, (me.token ? TOK_NETINFO : MSG_NETINFO), time (NULL), ircd_srv.uprot, ircd_srv.cloak, me.netname);
(me.token ? TOK_NETINFO : MSG_NETINFO), time(NULL),
ircd_srv.uprot, ircd_srv.cloak, me.netname);
return 1; return 1;
} }
int skill_cmd(const char *from, const char *target, const char *reason, int
...) skill_cmd (const char *from, const char *target, const char *reason, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
va_start (ap, reason); va_start (ap, reason);
vsnprintf (buf, 512, reason, ap); vsnprintf (buf, 512, reason, ap);
sts(":%s %s %s :%s", from, (me.token ? TOK_KILL : MSG_KILL), sts (":%s %s %s :%s", from, (me.token ? TOK_KILL : MSG_KILL), target, buf);
target, buf);
va_end (ap); va_end (ap);
DelUser (target); DelUser (target);
return 1; return 1;
} }
int ssmo_cmd(const char *from, const char *umodetarget, const char *msg)
int
ssmo_cmd (const char *from, const char *umodetarget, const char *msg)
{ {
sts(":%s %s %s :%s", from, (me.token ? TOK_SMO : MSG_SMO), sts (":%s %s %s :%s", from, (me.token ? TOK_SMO : MSG_SMO), umodetarget, msg);
umodetarget, msg);
return 1; return 1;
} }
int snick_cmd(const char *oldnick, const char *newnick) int
snick_cmd (const char *oldnick, const char *newnick)
{ {
Change_User (finduser (oldnick), newnick); Change_User (finduser (oldnick), newnick);
sts(":%s %s %s %d", oldnick, (me.token ? TOK_NICK : MSG_NICK), sts (":%s %s %s %d", oldnick, (me.token ? TOK_NICK : MSG_NICK), newnick, time (NULL));
newnick, time(NULL));
return 1;
}
int sswhois_cmd(const char *target, const char *swhois)
{
sts("%s %s :%s", (me.token ? TOK_SWHOIS : MSG_SWHOIS), target,
swhois);
return 1;
}
int ssvsnick_cmd(const char *target, const char *newnick)
{
sts("%s %s %s :%d", (me.token ? TOK_SVSNICK : MSG_SVSNICK), target,
newnick, time(NULL));
return 1; return 1;
} }
int ssvsjoin_cmd(const char *target, const char *chan) int
sswhois_cmd (const char *target, const char *swhois)
{ {
sts("%s %s %s", (me.token ? TOK_SVSJOIN : MSG_SVSJOIN), target, sts ("%s %s :%s", (me.token ? TOK_SWHOIS : MSG_SWHOIS), target, swhois);
chan);
return 1; return 1;
} }
int ssvspart_cmd(const char *target, const char *chan) int
ssvsnick_cmd (const char *target, const char *newnick)
{ {
sts("%s %s %s", (me.token ? TOK_SVSPART : MSG_SVSPART), target, sts ("%s %s %s :%d", (me.token ? TOK_SVSNICK : MSG_SVSNICK), target, newnick, time (NULL));
chan);
return 1; return 1;
} }
int skick_cmd(const char *who, const char *target, const char *chan, int
const char *reason) ssvsjoin_cmd (const char *target, const char *chan)
{ {
sts(":%s %s %s %s :%s", who, (me.token ? TOK_KICK : MSG_KICK), sts ("%s %s %s", (me.token ? TOK_SVSJOIN : MSG_SVSJOIN), target, chan);
chan, target, (reason ? reason : "No Reason Given")); return 1;
}
int
ssvspart_cmd (const char *target, const char *chan)
{
sts ("%s %s %s", (me.token ? TOK_SVSPART : MSG_SVSPART), target, chan);
return 1;
}
int
skick_cmd (const char *who, const char *target, const char *chan, const char *reason)
{
sts (":%s %s %s %s :%s", who, (me.token ? TOK_KICK : MSG_KICK), chan, target, (reason ? reason : "No Reason Given"));
part_chan (finduser (target), (char *) chan); part_chan (finduser (target), (char *) chan);
return 1; return 1;
} }
int swallops_cmd(const char *who, const char *msg, ...)
int
swallops_cmd (const char *who, const char *msg, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
va_start (ap, msg); va_start (ap, msg);
vsnprintf (buf, 512, msg, ap); vsnprintf (buf, 512, msg, ap);
sts(":%s %s :%s", who, (me.token ? TOK_WALLOPS : MSG_WALLOPS), sts (":%s %s :%s", who, (me.token ? TOK_WALLOPS : MSG_WALLOPS), buf);
buf);
va_end (ap); va_end (ap);
return 1; return 1;
} }
int ssvshost_cmd(const char *who, const char *vhost) int
ssvshost_cmd (const char *who, const char *vhost)
{ {
User *u; User *u;
u = finduser (who); u = finduser (who);
if (!u) { if (!u) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Can't Find user %s for ssvshost_cmd", who);
"Can't Find user %s for ssvshost_cmd", who);
return 0; return 0;
} else { } else {
strcpy (u->vhost, vhost); strcpy (u->vhost, vhost);
sts(":%s %s %s %s", me.name, sts (":%s %s %s %s", me.name, (me.token ? TOK_CHGHOST : MSG_CHGHOST), who, vhost);
(me.token ? TOK_CHGHOST : MSG_CHGHOST), who, vhost);
return 1; return 1;
} }
} }
int ssvsmode_cmd(const char *target, const char *modes) int
ssvsmode_cmd (const char *target, const char *modes)
{ {
User *u; User *u;
u = finduser (target); u = finduser (target);
if (!u) { if (!u) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Can't find user %s for ssvsmode_cmd", target);
"Can't find user %s for ssvsmode_cmd", target);
return 0; return 0;
} else { } else {
sts(":%s %s %s %s", me.name, sts (":%s %s %s %s", me.name, (me.token ? TOK_SVSMODE : MSG_SVSMODE), target, modes);
(me.token ? TOK_SVSMODE : MSG_SVSMODE), target, modes);
UserMode (target, modes, 0); UserMode (target, modes, 0);
} }
return 1; return 1;
} }
int ssvskill_cmd(const char *target, const char *reason, ...) int
ssvskill_cmd (const char *target, const char *reason, ...)
{ {
User *u; User *u;
va_list ap; va_list ap;
char buf[512]; char buf[512];
u = finduser (target); u = finduser (target);
if (!u) { if (!u) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Cant find user %s for ssvskill_cmd", target);
"Cant find user %s for ssvskill_cmd", target);
return 0; return 0;
} else { } else {
va_start (ap, reason); va_start (ap, reason);
vsnprintf (buf, 512, reason, ap); vsnprintf (buf, 512, reason, ap);
sts(":%s %s %s :%s", me.name, sts (":%s %s %s :%s", me.name, (me.token ? TOK_SVSKILL : MSG_SVSKILL), target, buf);
(me.token ? TOK_SVSKILL : MSG_SVSKILL), target, buf);
va_end (ap); va_end (ap);
return 1; return 1;
} }
@ -556,29 +558,28 @@ int ssvskill_cmd(const char *target, const char *reason, ...)
/* akill is gone in the latest Unreals, so we set Glines instead */ /* akill is gone in the latest Unreals, so we set Glines instead */
int sakill_cmd(const char *host, const char *ident, const char *setby, int
const int length, const char *reason, ...) sakill_cmd (const char *host, const char *ident, const char *setby, const int length, const char *reason, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
va_start (ap, reason); va_start (ap, reason);
vsnprintf (buf, 512, reason, ap); vsnprintf (buf, 512, reason, ap);
sts(":%s %s + G %s %s %s %d %d :%s", me.name, sts (":%s %s + G %s %s %s %d %d :%s", me.name, (me.token ? TOK_TKL : MSG_TKL), ident, host, setby, time (NULL) + length, time (NULL), buf);
(me.token ? TOK_TKL : MSG_TKL), ident, host, setby,
time(NULL) + length, time(NULL), buf);
va_end (ap); va_end (ap);
return 1; return 1;
} }
int srakill_cmd(const char *host, const char *ident) int
srakill_cmd (const char *host, const char *ident)
{ {
sts(":%s %s - G %s %s %s", me.name, (me.token ? TOK_TKL : MSG_TKL), sts (":%s %s - G %s %s %s", me.name, (me.token ? TOK_TKL : MSG_TKL), ident, host, me.name);
ident, host, me.name);
return 1; return 1;
} }
void chanalert(char *who, char *buf, ...) void
chanalert (char *who, char *buf, ...)
{ {
va_list ap; va_list ap;
char tmp[512]; char tmp[512];
@ -587,21 +588,20 @@ void chanalert(char *who, char *buf, ...)
vsnprintf (tmp, 512, buf, ap); vsnprintf (tmp, 512, buf, ap);
if (me.onchan) { if (me.onchan) {
snprintf(out, 512, ":%s PRIVMSG %s :%s", who, me.chan, snprintf (out, 512, ":%s PRIVMSG %s :%s", who, me.chan, tmp);
tmp);
sts ("%s", out); sts ("%s", out);
} }
va_end (ap); va_end (ap);
} }
void notice(char *to, const char *from, char *fmt, ...)
void
notice (char *to, const char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
if (findbot (to)) { if (findbot (to)) {
chanalert(s_Services, chanalert (s_Services, "Message From our Bot(%s) to Our Bot(%s), Dropping Message", from, to);
"Message From our Bot(%s) to Our Bot(%s), Dropping Message",
from, to);
return; return;
} }
@ -611,15 +611,15 @@ void notice(char *to, const char *from, char *fmt, ...)
sts ("%s", buf); sts ("%s", buf);
va_end (ap); va_end (ap);
} }
void privmsg(char *to, const char *from, char *fmt, ...)
void
privmsg (char *to, const char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
if (findbot (to)) { if (findbot (to)) {
chanalert(s_Services, chanalert (s_Services, "Message From our Bot(%s) to Our Bot(%s), Dropping Message", from, to);
"Message From our Bot(%s) to Our Bot(%s), Dropping Message",
from, to);
return; return;
} }
@ -630,7 +630,8 @@ void privmsg(char *to, const char *from, char *fmt, ...)
va_end (ap); va_end (ap);
} }
void prefmsg(char *to, const char *from, char *fmt, ...) void
prefmsg (char *to, const char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
@ -638,9 +639,7 @@ void prefmsg(char *to, const char *from, char *fmt, ...)
va_start (ap, fmt); va_start (ap, fmt);
vsnprintf (buf2, sizeof (buf2), fmt, ap); vsnprintf (buf2, sizeof (buf2), fmt, ap);
if (findbot (to)) { if (findbot (to)) {
chanalert(s_Services, chanalert (s_Services, "Message From our Bot(%s) to Our Bot(%s), Dropping Message", from, to);
"Message From our Bot(%s) to Our Bot(%s), Dropping Message",
from, to);
return; return;
} }
if (me.want_privmsg) { if (me.want_privmsg) {
@ -652,7 +651,8 @@ void prefmsg(char *to, const char *from, char *fmt, ...)
va_end (ap); va_end (ap);
} }
void privmsg_list(char *to, char *from, const char **text) void
privmsg_list (char *to, char *from, const char **text)
{ {
while (*text) { while (*text) {
if (**text) if (**text)
@ -664,7 +664,8 @@ void privmsg_list(char *to, char *from, const char **text)
} }
void globops(char *from, char *fmt, ...) void
globops (char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
@ -686,7 +687,8 @@ void globops(char *from, char *fmt, ...)
void Srv_Connect(char *origin, char **argv, int argc) void
Srv_Connect (char *origin, char **argv, int argc)
{ {
int i; int i;
@ -698,49 +700,62 @@ void Srv_Connect(char *origin, char **argv, int argc)
} }
void Usr_Stats(char *origin, char **argv, int argc) void
Usr_Stats (char *origin, char **argv, int argc)
{ {
User *u; User *u;
u = finduser (origin); u = finduser (origin);
if (!u) { if (!u) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Recieved a Message from a Unknown User! (%s)", origin);
"Recieved a Message from a Unknown User! (%s)",
origin);
return; return;
} }
ShowStats (argv[0], u); ShowStats (argv[0], u);
} }
void Usr_Version(char *origin, char **argv, int argc) void
Usr_Version (char *origin, char **argv, int argc)
{ {
snumeric_cmd(351, origin, "%d.%d.%d%s :%s -> %s %s", MAJOR, MINOR, snumeric_cmd (351, origin, "%d.%d.%d%s :%s -> %s %s", MAJOR, MINOR, REV, version, me.name, version_date, version_time);
REV, version, me.name, version_date, version_time);
} }
void Usr_ShowMOTD(char *origin, char **argv, int argc)
void
Usr_ShowMOTD (char *origin, char **argv, int argc)
{ {
ShowMOTD (origin); ShowMOTD (origin);
} }
void Usr_ShowADMIN(char *origin, char **argv, int argc)
void
Usr_ShowADMIN (char *origin, char **argv, int argc)
{ {
ShowADMIN (origin); ShowADMIN (origin);
} }
void Usr_Showcredits(char *origin, char **argv, int argc)
void
Usr_Showcredits (char *origin, char **argv, int argc)
{ {
Showcredits (origin); Showcredits (origin);
} }
void Usr_AddServer(char *origin, char **argv, int argc)
void
Usr_AddServer (char *origin, char **argv, int argc)
{ {
AddServer (argv[0], origin, atoi (argv[1])); AddServer (argv[0], origin, atoi (argv[1]));
} }
void Usr_DelServer(char *origin, char **argv, int argc)
void
Usr_DelServer (char *origin, char **argv, int argc)
{ {
DelServer (argv[0]); DelServer (argv[0]);
} }
void Usr_DelUser(char *origin, char **argv, int argc)
void
Usr_DelUser (char *origin, char **argv, int argc)
{ {
DelUser (origin); DelUser (origin);
} }
void Usr_Smode(char *origin, char **argv, int argc)
void
Usr_Smode (char *origin, char **argv, int argc)
{ {
if (!strchr (argv[0], '#')) { if (!strchr (argv[0], '#')) {
/* its user svsmode change */ /* its user svsmode change */
@ -750,7 +765,8 @@ void Usr_Smode(char *origin, char **argv, int argc)
ChanMode (origin, argv, argc); ChanMode (origin, argv, argc);
} }
} }
void Usr_Mode(char *origin, char **argv, int argc) void
Usr_Mode (char *origin, char **argv, int argc)
{ {
if (!strchr (argv[0], '#')) { if (!strchr (argv[0], '#')) {
UserMode (argv[0], argv[1], 0); UserMode (argv[0], argv[1], 0);
@ -758,18 +774,19 @@ void Usr_Mode(char *origin, char **argv, int argc)
ChanMode (origin, argv, argc); ChanMode (origin, argv, argc);
} }
} }
void Usr_Kill(char *origin, char **argv, int argc) void
Usr_Kill (char *origin, char **argv, int argc)
{ {
User *u; User *u;
u = finduser (argv[0]); u = finduser (argv[0]);
if (u) { if (u) {
KillUser (argv[0]); KillUser (argv[0]);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, "Can't find user %s for Kill", nlog (LOG_WARNING, LOG_CORE, "Can't find user %s for Kill", argv[0]);
argv[0]);
} }
} }
void Usr_Vhost(char *origin, char **argv, int argc) void
Usr_Vhost (char *origin, char **argv, int argc)
{ {
User *u; User *u;
u = finduser (origin); u = finduser (origin);
@ -777,18 +794,19 @@ void Usr_Vhost(char *origin, char **argv, int argc)
strncpy (u->vhost, argv[0], MAXHOST); strncpy (u->vhost, argv[0], MAXHOST);
} }
} }
void Usr_Pong(char *origin, char **argv, int argc) void
Usr_Pong (char *origin, char **argv, int argc)
{ {
Server *s; Server *s;
s = findserver (argv[0]); s = findserver (argv[0]);
if (s) { if (s) {
dopong (s); dopong (s);
} else { } else {
nlog(LOG_NOTICE, LOG_CORE, nlog (LOG_NOTICE, LOG_CORE, "Received PONG from unknown server: %s", argv[0]);
"Received PONG from unknown server: %s", argv[0]);
} }
} }
void Usr_Away(char *origin, char **argv, int argc) void
Usr_Away (char *origin, char **argv, int argc)
{ {
char *buf; char *buf;
User *u = finduser (origin); User *u = finduser (origin);
@ -803,22 +821,21 @@ void Usr_Away(char *origin, char **argv, int argc)
free (buf); free (buf);
} }
} else { } else {
nlog(LOG_NOTICE, LOG_CORE, nlog (LOG_NOTICE, LOG_CORE, "Warning, Unable to find User %s for Away", origin);
"Warning, Unable to find User %s for Away", origin);
} }
} }
void Usr_Nick(char *origin, char **argv, int argc) void
Usr_Nick (char *origin, char **argv, int argc)
{ {
User *u = finduser (origin); User *u = finduser (origin);
if (u) { if (u) {
Change_User (u, argv[0]); Change_User (u, argv[0]);
} else { } else {
nlog(LOG_NOTICE, LOG_CORE, nlog (LOG_NOTICE, LOG_CORE, "Warning, Unable to find user %s for User_nick", origin);
"Warning, Unable to find user %s for User_nick",
origin);
} }
} }
void Usr_Topic(char *origin, char **argv, int argc) void
Usr_Topic (char *origin, char **argv, int argc)
{ {
char *buf; char *buf;
Chans *c; Chans *c;
@ -828,13 +845,13 @@ void Usr_Topic(char *origin, char **argv, int argc)
Change_Topic (argv[1], c, atoi (argv[2]), buf); Change_Topic (argv[1], c, atoi (argv[2]), buf);
free (buf); free (buf);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, "Ehhh, Can't find Channel %s", nlog (LOG_WARNING, LOG_CORE, "Ehhh, Can't find Channel %s", argv[0]);
argv[0]);
} }
} }
void Usr_Kick(char *origin, char **argv, int argc) void
Usr_Kick (char *origin, char **argv, int argc)
{ {
User *u, *k; User *u, *k;
u = finduser (argv[1]); u = finduser (argv[1]);
@ -842,12 +859,11 @@ void Usr_Kick(char *origin, char **argv, int argc)
if (u) { if (u) {
kick_chan (u, argv[0], k); kick_chan (u, argv[0], k);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Waring, Can't find user %s for Kick %s", argv[1], argv[0]);
"Waring, Can't find user %s for Kick %s", argv[1],
argv[0]);
} }
} }
void Usr_Join(char *origin, char **argv, int argc) void
Usr_Join (char *origin, char **argv, int argc)
{ {
char *s, *t; char *s, *t;
t = argv[0]; t = argv[0];
@ -858,15 +874,20 @@ void Usr_Join(char *origin, char **argv, int argc)
join_chan (finduser (origin), s); join_chan (finduser (origin), s);
} }
} }
void Usr_Part(char *origin, char **argv, int argc) void
Usr_Part (char *origin, char **argv, int argc)
{ {
part_chan (finduser (origin), argv[0]); part_chan (finduser (origin), argv[0]);
} }
void Srv_Ping(char *origin, char **argv, int argc)
void
Srv_Ping (char *origin, char **argv, int argc)
{ {
spong_cmd (argv[0]); spong_cmd (argv[0]);
} }
void Srv_Netinfo(char *origin, char **argv, int argc)
void
Srv_Netinfo (char *origin, char **argv, int argc)
{ {
me.onchan = 1; me.onchan = 1;
ircd_srv.uprot = atoi (argv[2]); ircd_srv.uprot = atoi (argv[2]);
@ -883,10 +904,12 @@ void Srv_Netinfo(char *origin, char **argv, int argc)
me.synced = 1; me.synced = 1;
} }
void Srv_Pass(char *origin, char **argv, int argc) void
Srv_Pass (char *origin, char **argv, int argc)
{ {
} }
void Srv_Server(char *origin, char **argv, int argc) void
Srv_Server (char *origin, char **argv, int argc)
{ {
Server *s; Server *s;
if (*origin == 0) { if (*origin == 0) {
@ -897,53 +920,55 @@ void Srv_Server(char *origin, char **argv, int argc)
s = findserver (argv[0]); s = findserver (argv[0]);
me.s = s; me.s = s;
} }
void Srv_Squit(char *origin, char **argv, int argc)
void
Srv_Squit (char *origin, char **argv, int argc)
{ {
Server *s; Server *s;
s = findserver (argv[0]); s = findserver (argv[0]);
if (s) { if (s) {
DelServer (argv[0]); DelServer (argv[0]);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Waring, Squit from Unknown Server %s", argv[0]);
"Waring, Squit from Unknown Server %s", argv[0]);
} }
} }
/* BE REALLY CAREFULL ABOUT THE ORDER OF THESE ifdef's */ /* BE REALLY CAREFULL ABOUT THE ORDER OF THESE ifdef's */
void Srv_Nick(char *origin, char **argv, int argc) void
Srv_Nick (char *origin, char **argv, int argc)
{ {
char **av; char **av;
int ac = 0; int ac = 0;
char *realname; char *realname;
AddStringToList (&av, argv[0], &ac); AddStringToList (&av, argv[0], &ac);
AddUser(argv[0], argv[3], argv[4], argv[5], 0, AddUser (argv[0], argv[3], argv[4], argv[5], 0, strtol (argv[2], NULL, 10));
strtol(argv[2], NULL, 10));
realname = joinbuf (argv, argc, 7); realname = joinbuf (argv, argc, 7);
AddRealName (argv[0], realname); AddRealName (argv[0], realname);
free (realname); free (realname);
} }
void Srv_Svsnick(char *origin, char **argv, int argc) void
Srv_Svsnick (char *origin, char **argv, int argc)
{ {
User *u; User *u;
u = finduser (argv[0]); u = finduser (argv[0]);
if (u) { if (u) {
Change_User (u, argv[1]); Change_User (u, argv[1]);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Can't find user %s for svsnick", argv[0]);
"Can't find user %s for svsnick", argv[0]);
} }
} }
void Srv_Kill(char *origin, char **argv, int argc) void
Srv_Kill (char *origin, char **argv, int argc)
{ {
nlog (LOG_WARNING, LOG_CORE, "Got Kill, but its unhandled."); nlog (LOG_WARNING, LOG_CORE, "Got Kill, but its unhandled.");
} }
extern int SignOn_NewBot(const char *nick, const char *user, extern int
const char *host, const char *rname, long Umode) SignOn_NewBot (const char *nick, const char *user, const char *host, const char *rname, long Umode)
{ {
snewnick_cmd (nick, user, host, rname); snewnick_cmd (nick, user, host, rname);

View file

@ -44,7 +44,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* *
* $Id: Unreal.h,v 1.32 2003/07/23 10:35:47 fishwaldo Exp $ * $Id: Unreal.h,v 1.33 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
@ -521,4 +521,3 @@ int SignOn_NewBot(const char *, const char *, const char *, const char *, long);
#endif /* UNREAL_H Define */ #endif /* UNREAL_H Define */

View file

@ -18,18 +18,19 @@
#undef HAVEUSE_RPCTYPES_H #undef HAVEUSE_RPCTYPES_H
@ BOTTOM @ @ BOTTOM @
/* Use the definitions: */ /* Use the definitions: */
#ifndef HAVE_INLINE #ifndef HAVE_INLINE
#define inline #define inline
#endif #endif
#ifdef HAVE_POLL #ifdef HAVE_POLL
#include <sys/poll.h> #include <sys/poll.h>
#else #else
/* kludge it up */ /* kludge it up */
struct pollfd { int fd; short events; short revents; }; struct pollfd {
int fd;
short events;
short revents;
};
#define POLLIN 1 #define POLLIN 1
#define POLLPRI 2 #define POLLPRI 2
#define POLLOUT 4 #define POLLOUT 4

325
chans.c
View file

@ -19,7 +19,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: chans.c,v 1.47 2003/07/23 10:35:47 fishwaldo Exp $ ** $Id: chans.c,v 1.48 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
#include <fnmatch.h> #include <fnmatch.h>
@ -37,11 +37,13 @@
*/ */
void init_chan_hash() void
init_chan_hash ()
{ {
ch = hash_create (C_TABLE_SIZE, 0, 0); ch = hash_create (C_TABLE_SIZE, 0, 0);
} }
/** @brief Process the Channel TS Time /** @brief Process the Channel TS Time
* *
* Addes the channel TS time to the channel struct * Addes the channel TS time to the channel struct
@ -52,7 +54,9 @@ void init_chan_hash()
* @returns Nothing * @returns Nothing
* *
*/ */
void Change_Chan_Ts(Chans *c, time_t tstime) { void
Change_Chan_Ts (Chans * c, time_t tstime)
{
if (!c) { if (!c) {
nlog (LOG_WARNING, LOG_CORE, "Warning, Called Change_Change_Ts with null channel"); nlog (LOG_WARNING, LOG_CORE, "Warning, Called Change_Change_Ts with null channel");
return; return;
@ -75,7 +79,8 @@ void Change_Chan_Ts(Chans *c, time_t tstime) {
* @return Nothing * @return Nothing
*/ */
extern void Change_Topic(char *owner, Chans * c, time_t time, char *topic) extern void
Change_Topic (char *owner, Chans * c, time_t time, char *topic)
{ {
char **av; char **av;
int ac = 0; int ac = 0;
@ -100,7 +105,9 @@ extern void Change_Topic(char *owner, Chans * c, time_t time, char *topic)
* @returns 1 on match, 0 on no match, -1 on error * @returns 1 on match, 0 on no match, -1 on error
* *
*/ */
extern int CheckChanMode(Chans *c, long mode) { extern int
CheckChanMode (Chans * c, long mode)
{
ModesParm *m; ModesParm *m;
lnode_t *mn; lnode_t *mn;
if (!c) { if (!c) {
@ -135,7 +142,8 @@ extern int CheckChanMode(Chans *c, long mode) {
* @return 0 on match, 1 otherwise. * @return 0 on match, 1 otherwise.
*/ */
int comparemode(const void *v, const void *mode) int
comparemode (const void *v, const void *mode)
{ {
ModesParm *m = (void *) v; ModesParm *m = (void *) v;
if (m->mode == (long) mode) { if (m->mode == (long) mode) {
@ -156,7 +164,8 @@ int comparemode(const void *v, const void *mode)
* @return 0 on error, number of modes processed on success. * @return 0 on error, number of modes processed on success.
*/ */
int ChanMode(char *origin, char **av, int ac) int
ChanMode (char *origin, char **av, int ac)
{ {
char *modes; char *modes;
int add = 0; int add = 0;
@ -180,61 +189,34 @@ int ChanMode(char *origin, char **av, int ac)
add = 0; add = 0;
break; break;
default: default:
for (i = 0; for (i = 0; i < ((sizeof (cFlagTab) / sizeof (cFlagTab[0])) - 1); i++) {
i <
((sizeof(cFlagTab) / sizeof(cFlagTab[0])) -
1); i++) {
if (*modes == cFlagTab[i].flag) { if (*modes == cFlagTab[i].flag) {
if (add) { if (add) {
if (cFlagTab[i].nickparam) { if (cFlagTab[i].nickparam) {
ChangeChanUserMode ChangeChanUserMode (c, finduser (av[j]), 1, cFlagTab[i].mode);
(c,
finduser(av
[j]),
1,
cFlagTab[i].
mode);
j++; j++;
} else { } else {
if (cFlagTab[i]. if (cFlagTab[i].parameters) {
parameters) {
mn = list_first (c->modeparms); mn = list_first (c->modeparms);
modeexists modeexists = 0;
= 0;
while (mn) { while (mn) {
m = lnode_get (mn); m = lnode_get (mn);
/* mode limit and mode key replace current values */ /* mode limit and mode key replace current values */
if ((m->mode == MODE_LIMIT) && (cFlagTab[i].mode == MODE_LIMIT)) { if ((m->mode == MODE_LIMIT) && (cFlagTab[i].mode == MODE_LIMIT)) {
strncpy strncpy (m->param, av[j], PARAMSIZE);
(m->
param,
av
[j],
PARAMSIZE);
j++; j++;
modeexists modeexists = 1;
=
1;
break; break;
} else if ((m->mode == MODE_KEY) && (cFlagTab[i].mode == MODE_KEY)) { } else if ((m->mode == MODE_KEY) && (cFlagTab[i].mode == MODE_KEY)) {
strncpy strncpy (m->param, av[j], PARAMSIZE);
(m->
param,
av
[j],
PARAMSIZE);
j++; j++;
modeexists modeexists = 1;
=
1;
break; break;
} else if (((int *) m->mode == (int *) cFlagTab[i].mode) && !strcasecmp (m->param, av[j])) { } else if (((int *) m->mode == (int *) cFlagTab[i].mode) && !strcasecmp (m->param, av[j])) {
nlog (LOG_INFO, LOG_CORE, "Mode %c (%s) already exists, not adding again", cFlagTab[i].flag, av[j]); nlog (LOG_INFO, LOG_CORE, "Mode %c (%s) already exists, not adding again", cFlagTab[i].flag, av[j]);
j++; j++;
modeexists modeexists = 1;
=
1;
break; break;
} }
mn = list_next (c->modeparms, mn); mn = list_next (c->modeparms, mn);
@ -242,66 +224,40 @@ int ChanMode(char *origin, char **av, int ac)
if (modeexists != 1) { if (modeexists != 1) {
m = smalloc (sizeof (ModesParm)); m = smalloc (sizeof (ModesParm));
m->mode = cFlagTab[i].mode; m->mode = cFlagTab[i].mode;
strncpy strncpy (m->param, av[j], PARAMSIZE);
(m->
param,
av
[j],
PARAMSIZE);
mn = lnode_create (m); mn = lnode_create (m);
if (list_isfull (c->modeparms)) { if (list_isfull (c->modeparms)) {
nlog (LOG_CRITICAL, LOG_CORE, "Eeek, Can't add additional Modes to Channel %s. Modelist is full", c->name); nlog (LOG_CRITICAL, LOG_CORE, "Eeek, Can't add additional Modes to Channel %s. Modelist is full", c->name);
do_exit do_exit (0);
(0);
} else { } else {
list_append list_append (c->modeparms, mn);
(c->
modeparms,
mn);
} }
j++; j++;
} }
} else { } else {
c->modes |= c->modes |= cFlagTab[i].mode;
cFlagTab
[i].
mode;
} }
} }
} else { } else {
if (cFlagTab[i].nickparam) { if (cFlagTab[i].nickparam) {
ChangeChanUserMode ChangeChanUserMode (c, finduser (av[j]), 0, cFlagTab[i].mode);
(c,
finduser(av
[j]),
0,
cFlagTab[i].
mode);
j++; j++;
} else { } else {
if (cFlagTab[i]. if (cFlagTab[i].parameters) {
parameters) {
mn = list_find (c->modeparms, (int *) cFlagTab[i].mode, comparemode); mn = list_find (c->modeparms, (int *) cFlagTab[i].mode, comparemode);
if (!mn) { if (!mn) {
nlog (LOG_INFO, LOG_CORE, "Can't find Mode %c for Chan %s", *modes, c->name); nlog (LOG_INFO, LOG_CORE, "Can't find Mode %c for Chan %s", *modes, c->name);
} else { } else {
list_delete list_delete (c->modeparms, mn);
(c->
modeparms,
mn);
m = lnode_get (mn); m = lnode_get (mn);
lnode_destroy lnode_destroy (mn);
(mn);
free (m); free (m);
if (!(cFlagTab[i].mode == MODE_LIMIT || cFlagTab[i].mode == MODE_KEY)) if (!(cFlagTab[i].mode == MODE_LIMIT || cFlagTab[i].mode == MODE_KEY))
j++; j++;
} }
} else { } else {
c->modes &= c->modes &= ~cFlagTab[i].mode;
~cFlagTab
[i].
mode;
} }
} }
} }
@ -326,7 +282,8 @@ int ChanMode(char *origin, char **av, int ac)
* @return Nothing * @return Nothing
*/ */
void ChangeChanUserMode(Chans * c, User * u, int add, long mode) void
ChangeChanUserMode (Chans * c, User * u, int add, long mode)
{ {
lnode_t *cmn; lnode_t *cmn;
Chanmem *cm; Chanmem *cm;
@ -339,9 +296,7 @@ void ChangeChanUserMode(Chans * c, User * u, int add, long mode)
cmn = list_find (c->chanmembers, u->nick, comparef); cmn = list_find (c->chanmembers, u->nick, comparef);
if (!cmn) { if (!cmn) {
if (me.coder_debug) { if (me.coder_debug) {
chanalert(s_Services, chanalert (s_Services, "ChangeChanUserMode() %s doesn't seem to be in the Chan %s", u->nick, c->name);
"ChangeChanUserMode() %s doesn't seem to be in the Chan %s",
u->nick, c->name);
chandump (c->name); chandump (c->name);
UserDump (u->nick); UserDump (u->nick);
} }
@ -349,14 +304,10 @@ void ChangeChanUserMode(Chans * c, User * u, int add, long mode)
} }
cm = lnode_get (cmn); cm = lnode_get (cmn);
if (add) { if (add) {
nlog(LOG_DEBUG2, LOG_CORE, nlog (LOG_DEBUG2, LOG_CORE, "Adding mode %ld to Channel %s User %s", mode, c->name, u->nick);
"Adding mode %ld to Channel %s User %s", mode,
c->name, u->nick);
cm->flags |= mode; cm->flags |= mode;
} else { } else {
nlog(LOG_DEBUG2, LOG_CORE, nlog (LOG_DEBUG2, LOG_CORE, "Deleting Mode %ld to Channel %s User %s", mode, c->name, u->nick);
"Deleting Mode %ld to Channel %s User %s", mode,
c->name, u->nick);
cm->flags &= ~mode; cm->flags &= ~mode;
} }
} }
@ -371,7 +322,8 @@ void ChangeChanUserMode(Chans * c, User * u, int add, long mode)
* @returns c the newly created channel record * @returns c the newly created channel record
* @todo Dynamically resizable channel hashes * @todo Dynamically resizable channel hashes
*/ */
Chans *new_chan(char *chan) Chans *
new_chan (char *chan)
{ {
Chans *c; Chans *c;
hnode_t *cn; hnode_t *cn;
@ -397,7 +349,8 @@ Chans *new_chan(char *chan)
* @returns Nothing * @returns Nothing
*/ */
void del_chan(Chans * c) void
del_chan (Chans * c)
{ {
hnode_t *cn; hnode_t *cn;
lnode_t *cm; lnode_t *cm;
@ -405,8 +358,7 @@ void del_chan(Chans * c)
strcpy (segv_location, "del_chan"); strcpy (segv_location, "del_chan");
cn = hash_lookup (ch, c->name); cn = hash_lookup (ch, c->name);
if (!cn) { if (!cn) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Hu, Deleting a Non Existand Channel?");
"Hu, Deleting a Non Existand Channel?");
return; return;
} else { } else {
nlog (LOG_DEBUG2, LOG_CORE, "Deleting Channel %s", c->name); nlog (LOG_DEBUG2, LOG_CORE, "Deleting Channel %s", c->name);
@ -434,7 +386,8 @@ void del_chan(Chans * c)
* *
*/ */
void kick_chan(User * u, char *chan, User * k) void
kick_chan (User * u, char *chan, User * k)
{ {
char **av; char **av;
int ac = 0; int ac = 0;
@ -444,13 +397,9 @@ void kick_chan(User * u, char *chan, User * k)
strcpy (segv_location, "part_chan"); strcpy (segv_location, "part_chan");
nlog (LOG_DEBUG2, LOG_CORE, "%s Kicking %s from %s", k->nick, u->nick, chan); nlog (LOG_DEBUG2, LOG_CORE, "%s Kicking %s from %s", k->nick, u->nick, chan);
if (!u) { if (!u) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Ehh, KIcking a Unknown User %s from Chan %s: %s", u->nick, chan, recbuf);
"Ehh, KIcking a Unknown User %s from Chan %s: %s",
u->nick, chan, recbuf);
if (me.coder_debug) { if (me.coder_debug) {
chanalert(s_Services, chanalert (s_Services, "Ehh, Kicking a Unknown User %s from Chan %s: %s", u->nick, chan, recbuf);
"Ehh, Kicking a Unknown User %s from Chan %s: %s",
u->nick, chan, recbuf);
chandump (chan); chandump (chan);
UserDump (u->nick); UserDump (u->nick);
} }
@ -458,19 +407,14 @@ void kick_chan(User * u, char *chan, User * k)
} }
c = findchan (chan); c = findchan (chan);
if (!c) { if (!c) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Hu, Kicking a Non existant Channel? %s", chan);
"Hu, Kicking a Non existant Channel? %s", chan);
return; return;
} else { } else {
un = list_find (c->chanmembers, u->nick, comparef); un = list_find (c->chanmembers, u->nick, comparef);
if (!un) { if (!un) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Kick: hu, User %s isn't a member of this channel %s", u->nick, chan);
"Kick: hu, User %s isn't a member of this channel %s",
u->nick, chan);
if (me.coder_debug) { if (me.coder_debug) {
chanalert(s_Services, chanalert (s_Services, "Kick: hu, User %s isn't a member of this channel %s", u->nick, chan);
"Kick: hu, User %s isn't a member of this channel %s",
u->nick, chan);
chandump (c->name); chandump (c->name);
UserDump (u->nick); UserDump (u->nick);
} }
@ -485,8 +429,7 @@ void kick_chan(User * u, char *chan, User * k)
ac = 0; ac = 0;
c->cur_users--; c->cur_users--;
} }
nlog(LOG_DEBUG3, LOG_CORE, "Cur Users %s %d (list %d)", nlog (LOG_DEBUG3, LOG_CORE, "Cur Users %s %d (list %d)", c->name, c->cur_users, list_count (c->chanmembers));
c->name, c->cur_users, list_count(c->chanmembers));
if (c->cur_users <= 0) { if (c->cur_users <= 0) {
AddStringToList (&av, c->name, &ac); AddStringToList (&av, c->name, &ac);
Module_Event ("DELCHAN", av, ac); Module_Event ("DELCHAN", av, ac);
@ -496,13 +439,9 @@ void kick_chan(User * u, char *chan, User * k)
} }
un = list_find (u->chans, c->name, comparef); un = list_find (u->chans, c->name, comparef);
if (!un) { if (!un) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Kick:Hu, User %s claims not to be part of Chan %s", u->nick, chan);
"Kick:Hu, User %s claims not to be part of Chan %s",
u->nick, chan);
if (me.coder_debug) { if (me.coder_debug) {
chanalert(s_Services, chanalert (s_Services, "Kick: Hu, User %s claims not to be part of Chan %s", u->nick, chan);
"Kick: Hu, User %s claims not to be part of Chan %s",
u->nick, chan);
chandump (c->name); chandump (c->name);
UserDump (u->nick); UserDump (u->nick);
} }
@ -536,7 +475,8 @@ void kick_chan(User * u, char *chan, User * k)
*/ */
void part_chan(User * u, char *chan) void
part_chan (User * u, char *chan)
{ {
Chans *c; Chans *c;
lnode_t *un; lnode_t *un;
@ -546,13 +486,9 @@ void part_chan(User * u, char *chan)
strcpy (segv_location, "part_chan"); strcpy (segv_location, "part_chan");
nlog (LOG_DEBUG2, LOG_CORE, "Parting %s from %s", u->nick, chan); nlog (LOG_DEBUG2, LOG_CORE, "Parting %s from %s", u->nick, chan);
if (!u) { if (!u) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Ehh, Parting a Unknown User %s from Chan %s: %s", u->nick, chan, recbuf);
"Ehh, Parting a Unknown User %s from Chan %s: %s",
u->nick, chan, recbuf);
if (me.coder_debug) { if (me.coder_debug) {
chanalert(s_Services, chanalert (s_Services, "Ehh, Parting a Unknown User %s from Chan %s: %s", u->nick, chan, recbuf);
"Ehh, Parting a Unknown User %s from Chan %s: %s",
u->nick, chan, recbuf);
chandump (chan); chandump (chan);
UserDump (u->nick); UserDump (u->nick);
} }
@ -560,19 +496,14 @@ void part_chan(User * u, char *chan)
} }
c = findchan (chan); c = findchan (chan);
if (!c) { if (!c) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Hu, Parting a Non existant Channel? %s", chan);
"Hu, Parting a Non existant Channel? %s", chan);
return; return;
} else { } else {
un = list_find (c->chanmembers, u->nick, comparef); un = list_find (c->chanmembers, u->nick, comparef);
if (!un) { if (!un) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "hu, User %s isn't a member of this channel %s", u->nick, chan);
"hu, User %s isn't a member of this channel %s",
u->nick, chan);
if (me.coder_debug) { if (me.coder_debug) {
chanalert(s_Services, chanalert (s_Services, "hu, User %s isn't a member of this channel %s", u->nick, chan);
"hu, User %s isn't a member of this channel %s",
u->nick, chan);
chandump (c->name); chandump (c->name);
UserDump (u->nick); UserDump (u->nick);
} }
@ -588,8 +519,7 @@ void part_chan(User * u, char *chan)
// FreeList(av, ac); // FreeList(av, ac);
c->cur_users--; c->cur_users--;
} }
nlog(LOG_DEBUG3, LOG_CORE, "Cur Users %s %d (list %d)", nlog (LOG_DEBUG3, LOG_CORE, "Cur Users %s %d (list %d)", c->name, c->cur_users, list_count (c->chanmembers));
c->name, c->cur_users, list_count(c->chanmembers));
if (c->cur_users <= 0) { if (c->cur_users <= 0) {
AddStringToList (&av, c->name, &ac); AddStringToList (&av, c->name, &ac);
Module_Event ("DELCHAN", av, ac); Module_Event ("DELCHAN", av, ac);
@ -600,13 +530,9 @@ void part_chan(User * u, char *chan)
} }
un = list_find (u->chans, c->name, comparef); un = list_find (u->chans, c->name, comparef);
if (!un) { if (!un) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Hu, User %s claims not to be part of Chan %s", u->nick, chan);
"Hu, User %s claims not to be part of Chan %s",
u->nick, chan);
if (me.coder_debug) { if (me.coder_debug) {
chanalert(s_Services, chanalert (s_Services, "Hu, User %s claims not to be part of Chan %s", u->nick, chan);
"Hu, User %s claims not to be part of Chan %s",
u->nick, chan);
chandump (c->name); chandump (c->name);
UserDump (u->nick); UserDump (u->nick);
} }
@ -637,28 +563,23 @@ void part_chan(User * u, char *chan)
* @todo What happens if one of our bots change their nick? * @todo What happens if one of our bots change their nick?
*/ */
void change_user_nick(Chans * c, char *newnick, char *oldnick) void
change_user_nick (Chans * c, char *newnick, char *oldnick)
{ {
lnode_t *cm; lnode_t *cm;
Chanmem *cml; Chanmem *cml;
strcpy (segv_location, "change_user_nick"); strcpy (segv_location, "change_user_nick");
cm = list_find (c->chanmembers, oldnick, comparef); cm = list_find (c->chanmembers, oldnick, comparef);
if (!cm) { if (!cm) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "change_user_nick() %s isn't a member of %s", oldnick, c->name);
"change_user_nick() %s isn't a member of %s", oldnick,
c->name);
if (me.coder_debug) { if (me.coder_debug) {
chanalert(s_Services, chanalert (s_Services, "change_user_nick() %s isn't a member of %s", oldnick, c->name);
"change_user_nick() %s isn't a member of %s",
oldnick, c->name);
chandump (c->name); chandump (c->name);
UserDump (oldnick); UserDump (oldnick);
} }
return; return;
} else { } else {
nlog(LOG_DEBUG3, LOG_CORE, nlog (LOG_DEBUG3, LOG_CORE, "Change_User_Nick(): NewNick %s, OldNick %s", newnick, oldnick);
"Change_User_Nick(): NewNick %s, OldNick %s", newnick,
oldnick);
cml = lnode_get (cm); cml = lnode_get (cm);
strncpy (cml->nick, newnick, MAXNICK); strncpy (cml->nick, newnick, MAXNICK);
} }
@ -679,7 +600,8 @@ void change_user_nick(Chans * c, char *newnick, char *oldnick)
*/ */
void join_chan(User * u, char *chan) void
join_chan (User * u, char *chan)
{ {
Chans *c; Chans *c;
lnode_t *un, *cn; lnode_t *un, *cn;
@ -688,23 +610,19 @@ void join_chan(User * u, char *chan)
int ac = 0; int ac = 0;
strcpy (segv_location, "join_chan"); strcpy (segv_location, "join_chan");
if (!u) { if (!u) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "ehhh, Joining a Unknown user to %s: %s", chan, recbuf);
"ehhh, Joining a Unknown user to %s: %s", chan,
recbuf);
return; return;
} }
if (!strcasecmp ("0", chan)) { if (!strcasecmp ("0", chan)) {
/* join 0 is actually part all chans */ /* join 0 is actually part all chans */
nlog(LOG_DEBUG2, LOG_CORE, nlog (LOG_DEBUG2, LOG_CORE, "join_chan() -> Parting all chans %s", u->nick);
"join_chan() -> Parting all chans %s", u->nick);
list_process (u->chans, u, part_u_chan); list_process (u->chans, u, part_u_chan);
return; return;
} }
c = findchan (chan); c = findchan (chan);
if (!c) { if (!c) {
/* its a new Channel */ /* its a new Channel */
nlog(LOG_DEBUG2, LOG_CORE, "join_chan() -> New Channel %s", nlog (LOG_DEBUG2, LOG_CORE, "join_chan() -> New Channel %s", chan);
chan);
c = new_chan (chan); c = new_chan (chan);
c->chanmembers = list_create (CHAN_MEM_SIZE); c->chanmembers = list_create (CHAN_MEM_SIZE);
c->modeparms = list_create (MAXMODES); c->modeparms = list_create (MAXMODES);
@ -724,24 +642,18 @@ void join_chan(User * u, char *chan)
cm->joint = time (NULL); cm->joint = time (NULL);
cm->flags = 0; cm->flags = 0;
cn = lnode_create (cm); cn = lnode_create (cm);
nlog(LOG_DEBUG2, LOG_CORE, "adding usernode %s to Channel %s", nlog (LOG_DEBUG2, LOG_CORE, "adding usernode %s to Channel %s", u->nick, chan);
u->nick, chan);
if (list_find (c->chanmembers, u->nick, comparef)) { if (list_find (c->chanmembers, u->nick, comparef)) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Adding %s to Chan %s when he is already a member?", u->nick, chan);
"Adding %s to Chan %s when he is already a member?",
u->nick, chan);
if (me.coder_debug) { if (me.coder_debug) {
chanalert(s_Services, chanalert (s_Services, "Adding %s to Chan %s when he is already a member?", u->nick, chan);
"Adding %s to Chan %s when he is already a member?",
u->nick, chan);
chandump (c->name); chandump (c->name);
UserDump (u->nick); UserDump (u->nick);
} }
return; return;
} }
if (list_isfull (c->chanmembers)) { if (list_isfull (c->chanmembers)) {
nlog(LOG_CRITICAL, LOG_CORE, nlog (LOG_CRITICAL, LOG_CORE, "ekk, Channel %s Members list is full", c->name);
"ekk, Channel %s Members list is full", c->name);
lnode_destroy (cn); lnode_destroy (cn);
free (cm); free (cm);
return; return;
@ -751,8 +663,7 @@ void join_chan(User * u, char *chan)
c->cur_users++; c->cur_users++;
un = lnode_create (c->name); un = lnode_create (c->name);
if (list_isfull (u->chans)) { if (list_isfull (u->chans)) {
nlog(LOG_CRITICAL, LOG_CORE, nlog (LOG_CRITICAL, LOG_CORE, "eek, User %s members list is full", u->nick);
"eek, User %s members list is full", u->nick);
lnode_destroy (un); lnode_destroy (un);
} else { } else {
list_append (u->chans, un); list_append (u->chans, un);
@ -762,8 +673,7 @@ void join_chan(User * u, char *chan)
Module_Event ("JOINCHAN", av, ac); Module_Event ("JOINCHAN", av, ac);
free (av); free (av);
// FreeList(av, ac); // FreeList(av, ac);
nlog(LOG_DEBUG3, LOG_CORE, "Cur Users %s %d (list %d)", c->name, nlog (LOG_DEBUG3, LOG_CORE, "Cur Users %s %d (list %d)", c->name, c->cur_users, list_count (c->chanmembers));
c->cur_users, list_count(c->chanmembers));
if (findbot (u->nick)) { if (findbot (u->nick)) {
add_bot_to_chan (u->nick, c->name); add_bot_to_chan (u->nick, c->name);
} }
@ -781,7 +691,8 @@ void join_chan(User * u, char *chan)
*/ */
void chandump(char *chan) void
chandump (char *chan)
{ {
hnode_t *cn; hnode_t *cn;
lnode_t *cmn; lnode_t *cmn;
@ -802,34 +713,20 @@ void chandump(char *chan)
sendcoders ("===================="); sendcoders ("====================");
bzero (mode, 10); bzero (mode, 10);
mode[0] = '+'; mode[0] = '+';
for (i = 0; for (i = 0; i < ((sizeof (cFlagTab) / sizeof (cFlagTab[0])) - 1); i++) {
i <
((sizeof(cFlagTab) / sizeof(cFlagTab[0])) -
1); i++) {
if (c->modes & cFlagTab[i].mode) { if (c->modes & cFlagTab[i].mode) {
mode[++j] = cFlagTab[i].flag; mode[++j] = cFlagTab[i].flag;
} }
} }
sendcoders sendcoders ("Channel: %s Members: %d (List %d) Flags %s tstime %d", c->name, c->cur_users, list_count (c->chanmembers), mode, c->tstime);
("Channel: %s Members: %d (List %d) Flags %s tstime %d", sendcoders (" Topic Owner %s, TopicTime: %d, Topic %s", c->topicowner, c->topictime, c->topic);
c->name, c->cur_users,
list_count(c->chanmembers), mode, c->tstime);
sendcoders
(" Topic Owner %s, TopicTime: %d, Topic %s",
c->topicowner, c->topictime, c->topic);
sendcoders ("PubChan?: %d", is_pub_chan (c)); sendcoders ("PubChan?: %d", is_pub_chan (c));
cmn = list_first (c->modeparms); cmn = list_first (c->modeparms);
while (cmn) { while (cmn) {
m = lnode_get (cmn); m = lnode_get (cmn);
for (i = 0; for (i = 0; i < ((sizeof (cFlagTab) / sizeof (cFlagTab[0])) - 1); i++) {
i <
((sizeof(cFlagTab) /
sizeof(cFlagTab[0])) - 1); i++) {
if (m->mode & cFlagTab[i].mode) { if (m->mode & cFlagTab[i].mode) {
sendcoders sendcoders (" Modes: %c Parms %s", cFlagTab[i].flag, m->param);
(" Modes: %c Parms %s",
cFlagTab[i].flag,
m->param);
} }
} }
@ -841,17 +738,12 @@ void chandump(char *chan)
bzero (mode, 10); bzero (mode, 10);
j = 0; j = 0;
mode[0] = '+'; mode[0] = '+';
for (i = 0; for (i = 0; i < ((sizeof (cFlagTab) / sizeof (cFlagTab[0])) - 1); i++) {
i <
((sizeof(cFlagTab) /
sizeof(cFlagTab[0])) - 1); i++) {
if (cm->flags & cFlagTab[i].mode) { if (cm->flags & cFlagTab[i].mode) {
mode[++j] = cFlagTab[i].flag; mode[++j] = cFlagTab[i].flag;
} }
} }
sendcoders sendcoders ("Members: %s Modes %s Joined %d", cm->nick, mode, cm->joint);
("Members: %s Modes %s Joined %d",
cm->nick, mode, cm->joint);
cmn = list_next (c->chanmembers, cmn); cmn = list_next (c->chanmembers, cmn);
} }
} }
@ -863,34 +755,20 @@ void chandump(char *chan)
bzero (mode, 10); bzero (mode, 10);
j = 0; j = 0;
mode[0] = '+'; mode[0] = '+';
for (i = 0; for (i = 0; i < ((sizeof (cFlagTab) / sizeof (cFlagTab[0])) - 1); i++) {
i <
((sizeof(cFlagTab) / sizeof(cFlagTab[0])) -
1); i++) {
if (c->modes & cFlagTab[i].mode) { if (c->modes & cFlagTab[i].mode) {
mode[++j] = cFlagTab[i].flag; mode[++j] = cFlagTab[i].flag;
} }
} }
sendcoders sendcoders ("Channel: %s Members: %d (List %d) Flags %s tstime %d", c->name, c->cur_users, list_count (c->chanmembers), mode, c->tstime);
("Channel: %s Members: %d (List %d) Flags %s tstime %d", sendcoders (" Topic Owner %s, TopicTime: %d Topic %s", c->topicowner, c->topictime, c->topic);
c->name, c->cur_users,
list_count(c->chanmembers), mode, c->tstime);
sendcoders
(" Topic Owner %s, TopicTime: %d Topic %s",
c->topicowner, c->topictime, c->topic);
sendcoders ("PubChan?: %d", is_pub_chan (c)); sendcoders ("PubChan?: %d", is_pub_chan (c));
cmn = list_first (c->modeparms); cmn = list_first (c->modeparms);
while (cmn) { while (cmn) {
m = lnode_get (cmn); m = lnode_get (cmn);
for (i = 0; for (i = 0; i < ((sizeof (cFlagTab) / sizeof (cFlagTab[0])) - 1); i++) {
i <
((sizeof(cFlagTab) /
sizeof(cFlagTab[0])) - 1); i++) {
if (m->mode & cFlagTab[i].mode) { if (m->mode & cFlagTab[i].mode) {
sendcoders sendcoders (" Modes: %c Parms %s", cFlagTab[i].flag, m->param);
(" Modes: %c Parms %s",
cFlagTab[i].flag,
m->param);
} }
} }
cmn = list_next (c->modeparms, cmn); cmn = list_next (c->modeparms, cmn);
@ -901,17 +779,12 @@ void chandump(char *chan)
bzero (mode, 10); bzero (mode, 10);
mode[0] = '+'; mode[0] = '+';
j = 0; j = 0;
for (i = 0; for (i = 0; i < ((sizeof (cFlagTab) / sizeof (cFlagTab[0])) - 1); i++) {
i <
((sizeof(cFlagTab) /
sizeof(cFlagTab[0])) - 1); i++) {
if (cm->flags & cFlagTab[i].mode) { if (cm->flags & cFlagTab[i].mode) {
mode[++j] = cFlagTab[i].flag; mode[++j] = cFlagTab[i].flag;
} }
} }
sendcoders sendcoders ("Members: %s Modes %s Joined: %d", cm->nick, mode, cm->joint);
("Members: %s Modes %s Joined: %d",
cm->nick, mode, cm->joint);
cmn = list_next (c->chanmembers, cmn); cmn = list_next (c->chanmembers, cmn);
} }
} }
@ -929,7 +802,8 @@ void chandump(char *chan)
*/ */
Chans *findchan(char *chan) Chans *
findchan (char *chan)
{ {
Chans *c; Chans *c;
hnode_t *cn; hnode_t *cn;
@ -939,8 +813,7 @@ Chans *findchan(char *chan)
c = hnode_get (cn); c = hnode_get (cn);
return c; return c;
} else { } else {
nlog(LOG_DEBUG3, LOG_CORE, "FindChan(%s) -> Not Found", nlog (LOG_DEBUG3, LOG_CORE, "FindChan(%s) -> Not Found", chan);
chan);
return NULL; return NULL;
} }
} }

64
conf.c
View file

@ -20,7 +20,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: conf.c,v 1.25 2003/06/13 13:11:48 fishwaldo Exp $ ** $Id: conf.c,v 1.26 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
#include "stats.h" #include "stats.h"
@ -68,7 +68,8 @@ static config_option options[] = {
* @return Nothing * @return Nothing
*/ */
void init_conf() void
init_conf ()
{ {
} }
@ -80,7 +81,8 @@ void init_conf()
* @retval line the stripped line * @retval line the stripped line
*/ */
void strip(char *line) void
strip (char *line)
{ {
char *c; char *c;
if ((c = strchr (line, '\n'))) if ((c = strchr (line, '\n')))
@ -98,27 +100,20 @@ void strip(char *line)
*/ */
void ConfLoad() void
ConfLoad ()
{ {
/* Read in the Config File */ /* Read in the Config File */
printf ("Reading the Config File. Please wait.....\n"); printf ("Reading the Config File. Please wait.....\n");
if (!config_read ("neostats.cfg", options) == 0) { if (!config_read ("neostats.cfg", options) == 0) {
printf printf ("***************************************************\n");
("***************************************************\n"); printf ("* Error! *\n");
printf printf ("* *\n");
("* Error! *\n"); printf ("* Config File not found, or Unable to Open *\n");
printf printf ("* Please check its Location, and try again *\n");
("* *\n"); printf ("* *\n");
printf printf ("* NeoStats NOT Started *\n");
("* Config File not found, or Unable to Open *\n"); printf ("***************************************************\n");
printf
("* Please check its Location, and try again *\n");
printf
("* *\n");
printf
("* NeoStats NOT Started *\n");
printf
("***************************************************\n");
/* no need to call do_exit, we havn't even started! */ /* no need to call do_exit, we havn't even started! */
exit (0); exit (0);
} }
@ -131,6 +126,9 @@ void ConfLoad()
if (GetConf ((void *) &me.allbots, CFGBOOL, "AllBotsJoinChan") <= 0) { if (GetConf ((void *) &me.allbots, CFGBOOL, "AllBotsJoinChan") <= 0) {
me.allbots = 0; me.allbots = 0;
} }
if (GetConf ((void *) &me.pingtime, CFGINT, "PingServerTime") <= 0) {
me.pingtime = 120;
}
done_mods = 0; done_mods = 0;
} }
@ -144,7 +142,8 @@ void ConfLoad()
* @returns Nothing * @returns Nothing
*/ */
void cb_Module(char *arg, int configtype) void
cb_Module (char *arg, int configtype)
{ {
int i; int i;
strcpy (segv_location, "cb_Module"); strcpy (segv_location, "cb_Module");
@ -155,8 +154,7 @@ void cb_Module(char *arg, int configtype)
} }
} }
load_mods[i] = sstrdup (arg); load_mods[i] = sstrdup (arg);
nlog(LOG_NORMAL, LOG_CORE, "Added Module %d :%s", i, nlog (LOG_NORMAL, LOG_CORE, "Added Module %d :%s", i, load_mods[i]);
load_mods[i]);
} }
} }
@ -168,7 +166,8 @@ void cb_Module(char *arg, int configtype)
* @bugs if a single module fails to load, it stops trying to load any other modules * @bugs if a single module fails to load, it stops trying to load any other modules
*/ */
int init_modules() int
init_modules ()
{ {
int i; int i;
int rval; int rval;
@ -176,17 +175,12 @@ int init_modules()
strcpy (segv_location, "init_modules"); strcpy (segv_location, "init_modules");
for (i = 1; (i < NUM_MODULES) && (load_mods[i] != 0); i++) { for (i = 1; (i < NUM_MODULES) && (load_mods[i] != 0); i++) {
nlog(LOG_DEBUG1, LOG_CORE, "Loading Module %s", nlog (LOG_DEBUG1, LOG_CORE, "Loading Module %s", load_mods[i]);
load_mods[i]);
rval = load_module (load_mods[i], NULL); rval = load_module (load_mods[i], NULL);
if (!rval) { if (!rval) {
nlog(LOG_NORMAL, LOG_CORE, nlog (LOG_NORMAL, LOG_CORE, "Successfully Loaded Module %s", load_mods[i]);
"Successfully Loaded Module %s",
load_mods[i]);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Could Not Load Module %s, Please check above error Messages", load_mods[i]);
"Could Not Load Module %s, Please check above error Messages",
load_mods[i]);
} }
} }
return 1; return 1;
@ -201,7 +195,8 @@ int init_modules()
* @param configtype the index of the variable being called now * @param configtype the index of the variable being called now
* @returns Nothing * @returns Nothing
*/ */
void cb_Server(char *arg, int configtype) void
cb_Server (char *arg, int configtype)
{ {
if (configtype == 0) { if (configtype == 0) {
@ -253,7 +248,8 @@ void cb_Server(char *arg, int configtype)
* @returns Nothing * @returns Nothing
*/ */
void rehash() void
rehash ()
{ {
/* nothing, yet */ /* nothing, yet */
} }

2
conf.h
View file

@ -20,7 +20,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: conf.h,v 1.5 2003/05/26 09:18:28 fishwaldo Exp $ ** $Id: conf.h,v 1.6 2003/07/30 13:58:22 fishwaldo Exp $
*/ */

319
dl.c
View file

@ -20,7 +20,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: dl.c,v 1.61 2003/07/15 09:16:15 fishwaldo Exp $ ** $Id: dl.c,v 1.62 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
#include <dlfcn.h> #include <dlfcn.h>
@ -36,7 +36,8 @@
void __init_mod_list() void
__init_mod_list ()
{ {
strcpy (segv_location, "__init_mod_list"); strcpy (segv_location, "__init_mod_list");
@ -48,7 +49,8 @@ void __init_mod_list()
sockh = hash_create (me.maxsocks, 0, 0); sockh = hash_create (me.maxsocks, 0, 0);
} }
static Mod_Timer *new_timer(char *timer_name) static Mod_Timer *
new_timer (char *timer_name)
{ {
Mod_Timer *t; Mod_Timer *t;
hnode_t *tn; hnode_t *tn;
@ -60,8 +62,7 @@ static Mod_Timer *new_timer(char *timer_name)
strncpy (t->timername, timer_name, MAXHOST); strncpy (t->timername, timer_name, MAXHOST);
tn = hnode_create (t); tn = hnode_create (t);
if (hash_isfull (th)) { if (hash_isfull (th)) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "new_timer(): Couldn't add new Timer, Hash is Full!");
"new_timer(): Couldn't add new Timer, Hash is Full!");
return NULL; return NULL;
} else { } else {
hash_insert (th, tn, timer_name); hash_insert (th, tn, timer_name);
@ -69,7 +70,8 @@ static Mod_Timer *new_timer(char *timer_name)
return t; return t;
} }
Mod_Timer *findtimer(char *timer_name) Mod_Timer *
findtimer (char *timer_name)
{ {
hnode_t *tn; hnode_t *tn;
@ -79,8 +81,9 @@ Mod_Timer *findtimer(char *timer_name)
return (Mod_Timer *) hnode_get (tn); return (Mod_Timer *) hnode_get (tn);
return NULL; return NULL;
} }
int add_mod_timer(char *func_name, char *timer_name, char *mod_name,
int interval) int
add_mod_timer (char *func_name, char *timer_name, char *mod_name, int interval)
{ {
Mod_Timer *Mod_timer_list; Mod_Timer *Mod_timer_list;
@ -88,23 +91,24 @@ int add_mod_timer(char *func_name, char *timer_name, char *mod_name,
if (dlsym ((int *) get_dl_handle (mod_name), func_name) == NULL) { if (dlsym ((int *) get_dl_handle (mod_name), func_name) == NULL) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Oh Oh, The Timer Function doesn't exist");
"Oh Oh, The Timer Function doesn't exist");
return -1; return -1;
} }
Mod_timer_list = new_timer (timer_name); Mod_timer_list = new_timer (timer_name);
if (Mod_timer_list) {
Mod_timer_list->interval = interval; Mod_timer_list->interval = interval;
Mod_timer_list->lastrun = time (NULL); Mod_timer_list->lastrun = time (NULL);
strncpy (Mod_timer_list->modname, mod_name, MAXHOST); strncpy (Mod_timer_list->modname, mod_name, MAXHOST);
Mod_timer_list->function = Mod_timer_list->function = dlsym ((int *) get_dl_handle (mod_name), func_name);
dlsym((int *) get_dl_handle(mod_name), func_name); nlog (LOG_DEBUG2, LOG_CORE, "Registered Module %s with timer for Function %s", mod_name, func_name);
nlog(LOG_DEBUG2, LOG_CORE,
"Registered Module %s with timer for Function %s", mod_name,
func_name);
return 1; return 1;
} else {
return -1;
}
} }
int del_mod_timer(char *timer_name) int
del_mod_timer (char *timer_name)
{ {
Mod_Timer *list; Mod_Timer *list;
hnode_t *tn; hnode_t *tn;
@ -113,9 +117,7 @@ int del_mod_timer(char *timer_name)
tn = hash_lookup (th, timer_name); tn = hash_lookup (th, timer_name);
if (tn) { if (tn) {
list = hnode_get (tn); list = hnode_get (tn);
nlog(LOG_DEBUG2, LOG_CORE, nlog (LOG_DEBUG2, LOG_CORE, "Unregistered Timer function %s from Module %s", timer_name, list->modname);
"Unregistered Timer function %s from Module %s",
timer_name, list->modname);
hash_delete (th, tn); hash_delete (th, tn);
hnode_destroy (tn); hnode_destroy (tn);
free (list); free (list);
@ -124,7 +126,8 @@ int del_mod_timer(char *timer_name)
return -1; return -1;
} }
void list_module_timer(User * u) void
list_module_timer (User * u)
{ {
Mod_Timer *mod_ptr = NULL; Mod_Timer *mod_ptr = NULL;
hscan_t ts; hscan_t ts;
@ -135,21 +138,16 @@ void list_module_timer(User * u)
hash_scan_begin (&ts, th); hash_scan_begin (&ts, th);
while ((tn = hash_scan_next (&ts)) != NULL) { while ((tn = hash_scan_next (&ts)) != NULL) {
mod_ptr = hnode_get (tn); mod_ptr = hnode_get (tn);
prefmsg(u->nick, s_Services, prefmsg (u->nick, s_Services, "%s:--------------------------------", mod_ptr->modname);
"%s:--------------------------------", prefmsg (u->nick, s_Services, "Module Timer Name: %s", mod_ptr->timername);
mod_ptr->modname); prefmsg (u->nick, s_Services, "Module Interval: %d", mod_ptr->interval);
prefmsg(u->nick, s_Services, "Module Timer Name: %s", prefmsg (u->nick, s_Services, "Time till next Run: %d", mod_ptr->interval - (time (NULL) - mod_ptr->lastrun));
mod_ptr->timername);
prefmsg(u->nick, s_Services, "Module Interval: %d",
mod_ptr->interval);
prefmsg(u->nick, s_Services, "Time till next Run: %d",
mod_ptr->interval - (time(NULL) -
mod_ptr->lastrun));
} }
prefmsg (u->nick, s_Services, "End of Module timer List"); prefmsg (u->nick, s_Services, "End of Module timer List");
} }
static Sock_List *new_sock(char *sock_name) static Sock_List *
new_sock (char *sock_name)
{ {
Sock_List *s; Sock_List *s;
hnode_t *sn; hnode_t *sn;
@ -162,8 +160,7 @@ static Sock_List *new_sock(char *sock_name)
strncpy (s->sockname, sock_name, MAXHOST); strncpy (s->sockname, sock_name, MAXHOST);
sn = hnode_create (s); sn = hnode_create (s);
if (hash_isfull (sockh)) { if (hash_isfull (sockh)) {
nlog(LOG_CRITICAL, LOG_CORE, nlog (LOG_CRITICAL, LOG_CORE, "Eeek, SocketHash is full, can not add a new socket");
"Eeek, SocketHash is full, can not add a new socket");
return NULL; return NULL;
} else { } else {
hash_insert (sockh, sn, s->sockname); hash_insert (sockh, sn, s->sockname);
@ -171,7 +168,8 @@ static Sock_List *new_sock(char *sock_name)
return s; return s;
} }
Sock_List *findsock(char *sock_name) Sock_List *
findsock (char *sock_name)
{ {
hnode_t *sn; hnode_t *sn;
strcpy (segv_location, "findsock"); strcpy (segv_location, "findsock");
@ -181,55 +179,42 @@ Sock_List *findsock(char *sock_name)
return NULL; return NULL;
} }
int add_socket(char *readfunc, char *writefunc, char *errfunc, int
char *sock_name, int socknum, char *mod_name) add_socket (char *readfunc, char *writefunc, char *errfunc, char *sock_name, int socknum, char *mod_name)
{ {
Sock_List *Sockets_mod_list; Sock_List *Sockets_mod_list;
strcpy (segv_location, "add_Socket"); strcpy (segv_location, "add_Socket");
if (readfunc) { if (readfunc) {
if (dlsym((int *) get_dl_handle(mod_name), readfunc) == if (dlsym ((int *) get_dl_handle (mod_name), readfunc) == NULL) {
NULL) { nlog (LOG_WARNING, LOG_CORE, "oh oh, the Read socket function doesn't exist = %s (%s)", readfunc, mod_name);
nlog(LOG_WARNING, LOG_CORE,
"oh oh, the Read socket function doesn't exist = %s (%s)",
readfunc, mod_name);
return -1; return -1;
} }
} }
if (writefunc) { if (writefunc) {
if (dlsym((int *) get_dl_handle(mod_name), writefunc) == if (dlsym ((int *) get_dl_handle (mod_name), writefunc) == NULL) {
NULL) { nlog (LOG_WARNING, LOG_CORE, "oh oh, the Write socket function doesn't exist = %s (%s)", writefunc, mod_name);
nlog(LOG_WARNING, LOG_CORE,
"oh oh, the Write socket function doesn't exist = %s (%s)",
writefunc, mod_name);
return -1; return -1;
} }
} }
if (errfunc) { if (errfunc) {
if (dlsym((int *) get_dl_handle(mod_name), errfunc) == if (dlsym ((int *) get_dl_handle (mod_name), errfunc) == NULL) {
NULL) { nlog (LOG_WARNING, LOG_CORE, "oh oh, the Error socket function doesn't exist = %s (%s)", errfunc, mod_name);
nlog(LOG_WARNING, LOG_CORE,
"oh oh, the Error socket function doesn't exist = %s (%s)",
errfunc, mod_name);
return -1; return -1;
} }
} }
Sockets_mod_list = new_sock (sock_name); Sockets_mod_list = new_sock (sock_name);
Sockets_mod_list->sock_no = socknum; Sockets_mod_list->sock_no = socknum;
strncpy (Sockets_mod_list->modname, mod_name, MAXHOST); strncpy (Sockets_mod_list->modname, mod_name, MAXHOST);
Sockets_mod_list->readfnc = Sockets_mod_list->readfnc = dlsym ((int *) get_dl_handle (mod_name), readfunc);
dlsym((int *) get_dl_handle(mod_name), readfunc); Sockets_mod_list->writefnc = dlsym ((int *) get_dl_handle (mod_name), writefunc);
Sockets_mod_list->writefnc = Sockets_mod_list->errfnc = dlsym ((int *) get_dl_handle (mod_name), errfunc);
dlsym((int *) get_dl_handle(mod_name), writefunc); nlog (LOG_DEBUG2, LOG_CORE, "Registered Module %s with Socket functions %s", mod_name, Sockets_mod_list->sockname);
Sockets_mod_list->errfnc =
dlsym((int *) get_dl_handle(mod_name), errfunc);
nlog(LOG_DEBUG2, LOG_CORE,
"Registered Module %s with Socket functions %s", mod_name,
Sockets_mod_list->sockname);
return 1; return 1;
} }
int del_socket(char *sock_name) int
del_socket (char *sock_name)
{ {
Sock_List *list; Sock_List *list;
hnode_t *sn; hnode_t *sn;
@ -238,9 +223,7 @@ int del_socket(char *sock_name)
sn = hash_lookup (sockh, sock_name); sn = hash_lookup (sockh, sock_name);
if (sn) { if (sn) {
list = hnode_get (sn); list = hnode_get (sn);
nlog(LOG_DEBUG2, LOG_CORE, nlog (LOG_DEBUG2, LOG_CORE, "Unregistered Socket function %s from Module %s", sock_name, list->modname);
"Unregistered Socket function %s from Module %s",
sock_name, list->modname);
hash_scan_delete (sockh, sn); hash_scan_delete (sockh, sn);
hnode_destroy (sn); hnode_destroy (sn);
// free(list->sockname); // free(list->sockname);
@ -250,30 +233,27 @@ int del_socket(char *sock_name)
return -1; return -1;
} }
void list_sockets(User * u) void
list_sockets (User * u)
{ {
Sock_List *mod_ptr = NULL; Sock_List *mod_ptr = NULL;
hscan_t ss; hscan_t ss;
hnode_t *sn; hnode_t *sn;
strcpy (segv_location, "list_sockets"); strcpy (segv_location, "list_sockets");
prefmsg(u->nick, s_Services, "Sockets List: (%d)", prefmsg (u->nick, s_Services, "Sockets List: (%d)", hash_count (sockh));
hash_count(sockh));
hash_scan_begin (&ss, sockh); hash_scan_begin (&ss, sockh);
while ((sn = hash_scan_next (&ss)) != NULL) { while ((sn = hash_scan_next (&ss)) != NULL) {
mod_ptr = hnode_get (sn); mod_ptr = hnode_get (sn);
prefmsg(u->nick, s_Services, prefmsg (u->nick, s_Services, "%s:--------------------------------", mod_ptr->modname);
"%s:--------------------------------", prefmsg (u->nick, s_Services, "Socket Name: %s", mod_ptr->sockname);
mod_ptr->modname); prefmsg (u->nick, s_Services, "Socket Number: %d", mod_ptr->sock_no);
prefmsg(u->nick, s_Services, "Socket Name: %s",
mod_ptr->sockname);
prefmsg(u->nick, s_Services, "Socket Number: %d",
mod_ptr->sock_no);
} }
prefmsg (u->nick, s_Services, "End of Socket List"); prefmsg (u->nick, s_Services, "End of Socket List");
} }
extern void add_bot_to_chan(char *bot, char *chan) extern void
add_bot_to_chan (char *bot, char *chan)
{ {
hnode_t *cbn; hnode_t *cbn;
Chan_Bot *bc; Chan_Bot *bc;
@ -286,8 +266,7 @@ extern void add_bot_to_chan(char *bot, char *chan)
bc->bots = list_create (B_TABLE_SIZE); bc->bots = list_create (B_TABLE_SIZE);
cbn = hnode_create (bc); cbn = hnode_create (bc);
if (hash_isfull (bch)) { if (hash_isfull (bch)) {
nlog(LOG_CRITICAL, LOG_CORE, nlog (LOG_CRITICAL, LOG_CORE, "eek, bot channel hash is full");
"eek, bot channel hash is full");
return; return;
} }
hash_insert (bch, cbn, bc->chan); hash_insert (bch, cbn, bc->chan);
@ -295,8 +274,7 @@ extern void add_bot_to_chan(char *bot, char *chan)
bc = hnode_get (cbn); bc = hnode_get (cbn);
} }
if (list_isfull (bc->bots)) { if (list_isfull (bc->bots)) {
nlog(LOG_CRITICAL, LOG_CORE, nlog (LOG_CRITICAL, LOG_CORE, "Eeek, Bot Channel List is full for Chan %s", chan);
"Eeek, Bot Channel List is full for Chan %s", chan);
return; return;
} }
botname = sstrdup (bot); botname = sstrdup (bot);
@ -305,23 +283,21 @@ extern void add_bot_to_chan(char *bot, char *chan)
return; return;
} }
extern void del_bot_from_chan(char *bot, char *chan) extern void
del_bot_from_chan (char *bot, char *chan)
{ {
hnode_t *cbn; hnode_t *cbn;
Chan_Bot *bc; Chan_Bot *bc;
lnode_t *bmn; lnode_t *bmn;
cbn = hash_lookup (bch, chan); cbn = hash_lookup (bch, chan);
if (!cbn) { if (!cbn) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Hu? Can't Find Channel %s for botchanhash", chan);
"Hu? Can't Find Channel %s for botchanhash", chan);
return; return;
} }
bc = hnode_get (cbn); bc = hnode_get (cbn);
bmn = list_find (bc->bots, bot, comparef); bmn = list_find (bc->bots, bot, comparef);
if (!bmn) { if (!bmn) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Hu? Can't find bot %s in %s in botchanhash", bot, chan);
"Hu? Can't find bot %s in %s in botchanhash", bot,
chan);
return; return;
} }
list_delete (bc->bots, bmn); list_delete (bc->bots, bmn);
@ -336,7 +312,8 @@ extern void del_bot_from_chan(char *bot, char *chan)
} }
} }
extern void bot_chan_message(char *origin, char *chan, char **av, int ac) extern void
bot_chan_message (char *origin, char *chan, char **av, int ac)
{ {
hnode_t *cbn; hnode_t *cbn;
Chan_Bot *bc; Chan_Bot *bc;
@ -344,9 +321,7 @@ extern void bot_chan_message(char *origin, char *chan, char **av, int ac)
Mod_User *u; Mod_User *u;
cbn = hash_lookup (bch, chan); cbn = hash_lookup (bch, chan);
if (!cbn) { if (!cbn) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "eeeh, Can't find channel %s for BotChanMessage", chan);
"eeeh, Can't find channel %s for BotChanMessage",
chan);
return; return;
} }
bc = hnode_get (cbn); bc = hnode_get (cbn);
@ -354,8 +329,7 @@ extern void bot_chan_message(char *origin, char *chan, char **av, int ac)
while (bmn) { while (bmn) {
u = findbot (lnode_get (bmn)); u = findbot (lnode_get (bmn));
if (u->chanfunc) { if (u->chanfunc) {
nlog(LOG_DEBUG2, LOG_CORE, nlog (LOG_DEBUG2, LOG_CORE, "Running Module for Chanmessage %s", chan);
"Running Module for Chanmessage %s", chan);
u->chanfunc (origin, chan, av, ac); u->chanfunc (origin, chan, av, ac);
} }
bmn = list_next (bc->bots, bmn); bmn = list_next (bc->bots, bmn);
@ -365,7 +339,8 @@ extern void bot_chan_message(char *origin, char *chan, char **av, int ac)
} }
extern void botchandump(User * u) extern void
botchandump (User * u)
{ {
hscan_t hs; hscan_t hs;
hnode_t *hn; hnode_t *hn;
@ -375,18 +350,17 @@ extern void botchandump(User * u)
hash_scan_begin (&hs, bch); hash_scan_begin (&hs, bch);
while ((hn = hash_scan_next (&hs)) != NULL) { while ((hn = hash_scan_next (&hs)) != NULL) {
bc = hnode_get (hn); bc = hnode_get (hn);
prefmsg(u->nick, s_Services, prefmsg (u->nick, s_Services, "%s:--------------------------------", bc->chan);
"%s:--------------------------------", bc->chan);
ln = list_first (bc->bots); ln = list_first (bc->bots);
while (ln) { while (ln) {
prefmsg(u->nick, s_Services, "Bot Name: %s", prefmsg (u->nick, s_Services, "Bot Name: %s", lnode_get (ln));
lnode_get(ln));
ln = list_next (bc->bots, ln); ln = list_next (bc->bots, ln);
} }
} }
} }
static Mod_User *new_bot(char *bot_name) static Mod_User *
new_bot (char *bot_name)
{ {
Mod_User *u; Mod_User *u;
hnode_t *bn; hnode_t *bn;
@ -406,7 +380,9 @@ static Mod_User *new_bot(char *bot_name)
} }
return u; return u;
} }
int add_mod_user(char *nick, char *mod_name)
int
add_mod_user (char *nick, char *mod_name)
{ {
Mod_User *Mod_Usr_list; Mod_User *Mod_Usr_list;
Module *list_ptr; Module *list_ptr;
@ -423,19 +399,17 @@ int add_mod_user(char *nick, char *mod_name)
mn = hash_lookup (mh, mod_name); mn = hash_lookup (mh, mod_name);
if (mn) { if (mn) {
list_ptr = hnode_get (mn); list_ptr = hnode_get (mn);
Mod_Usr_list->function = Mod_Usr_list->function = dlsym (list_ptr->dl_handle, "__Bot_Message");
dlsym(list_ptr->dl_handle, "__Bot_Message"); Mod_Usr_list->chanfunc = dlsym (list_ptr->dl_handle, "__Chan_Message");
Mod_Usr_list->chanfunc =
dlsym(list_ptr->dl_handle, "__Chan_Message");
return 1; return 1;
} }
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "add_mod_user(): Couldn't Add ModuleBot to List");
"add_mod_user(): Couldn't Add ModuleBot to List");
return 0; return 0;
} }
Mod_User *findbot(char *bot_name) Mod_User *
findbot (char *bot_name)
{ {
hnode_t *bn; hnode_t *bn;
@ -447,7 +421,8 @@ Mod_User *findbot(char *bot_name)
return NULL; return NULL;
} }
int del_mod_user(char *bot_name) int
del_mod_user (char *bot_name)
{ {
Mod_User *list; Mod_User *list;
hnode_t *bn; hnode_t *bn;
@ -469,7 +444,8 @@ int del_mod_user(char *bot_name)
} }
int bot_nick_change(char *oldnick, char *newnick) int
bot_nick_change (char *oldnick, char *newnick)
{ {
User *u; User *u;
Mod_User *mod_tmp, *mod_ptr; Mod_User *mod_tmp, *mod_ptr;
@ -479,24 +455,19 @@ int bot_nick_change(char *oldnick, char *newnick)
/* First, try to find out if the newnick is unique! */ /* First, try to find out if the newnick is unique! */
u = finduser (oldnick); u = finduser (oldnick);
if (!u) { if (!u) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "A non-registered bot(%s) attempted to change its nick to %s", oldnick, newnick);
"A non-registered bot(%s) attempted to change its nick to %s",
oldnick, newnick);
return -1; return -1;
} }
u = finduser (newnick); u = finduser (newnick);
if (!u) { if (!u) {
if ((mod_ptr = findbot (oldnick)) != NULL) { if ((mod_ptr = findbot (oldnick)) != NULL) {
nlog(LOG_DEBUG3, LOG_CORE, nlog (LOG_DEBUG3, LOG_CORE, "Bot %s Changed its nick to %s", oldnick, newnick);
"Bot %s Changed its nick to %s", oldnick,
newnick);
mod_tmp = new_bot (newnick); mod_tmp = new_bot (newnick);
/* add a brand new user */ /* add a brand new user */
strncpy (mod_tmp->nick, newnick, MAXNICK); strncpy (mod_tmp->nick, newnick, MAXNICK);
strncpy(mod_tmp->modname, mod_ptr->modname, strncpy (mod_tmp->modname, mod_ptr->modname, MAXHOST);
MAXHOST);
mod_tmp->function = mod_ptr->function; mod_tmp->function = mod_ptr->function;
/* Now Delete the Old bot nick */ /* Now Delete the Old bot nick */
@ -506,15 +477,15 @@ int bot_nick_change(char *oldnick, char *newnick)
return 1; return 1;
} }
} }
nlog(LOG_NOTICE, LOG_CORE, "Couldn't find Bot Nick %s in Bot list", nlog (LOG_NOTICE, LOG_CORE, "Couldn't find Bot Nick %s in Bot list", oldnick);
oldnick);
return -1; return -1;
} }
void list_module_bots(User * u) void
list_module_bots (User * u)
{ {
Mod_User *mod_ptr; Mod_User *mod_ptr;
hnode_t *bn; hnode_t *bn;
@ -525,10 +496,8 @@ void list_module_bots(User * u)
hash_scan_begin (&bs, bh); hash_scan_begin (&bs, bh);
while ((bn = hash_scan_next (&bs)) != NULL) { while ((bn = hash_scan_next (&bs)) != NULL) {
mod_ptr = hnode_get (bn); mod_ptr = hnode_get (bn);
prefmsg(u->nick, s_Services, "Module: %s", prefmsg (u->nick, s_Services, "Module: %s", mod_ptr->modname);
mod_ptr->modname); prefmsg (u->nick, s_Services, "Module Bots: %s", mod_ptr->nick);
prefmsg(u->nick, s_Services, "Module Bots: %s",
mod_ptr->nick);
} }
prefmsg (u->nick, s_Services, "End of Module Bot List"); prefmsg (u->nick, s_Services, "End of Module Bot List");
} }
@ -536,7 +505,8 @@ void list_module_bots(User * u)
int load_module(char *path1, User * u) int
load_module (char *path1, User * u)
{ {
@ -581,12 +551,10 @@ int load_module(char *path1, User * u)
strcpy (segvinmodule, ""); strcpy (segvinmodule, "");
if (!dl_handle) { if (!dl_handle) {
if (do_msg) if (do_msg)
prefmsg(u->nick, s_Services, prefmsg (u->nick, s_Services, "Error, Couldn't Load Module");
"Error, Couldn't Load Module");
if (do_msg) if (do_msg)
prefmsg (u->nick, s_Services, "%s", dlerror ()); prefmsg (u->nick, s_Services, "%s", dlerror ());
nlog(LOG_WARNING, LOG_CORE, "Couldn't Load Module: %s", nlog (LOG_WARNING, LOG_CORE, "Couldn't Load Module: %s", dlerror ());
dlerror());
nlog (LOG_WARNING, LOG_CORE, "Module was %s", p); nlog (LOG_WARNING, LOG_CORE, "Module was %s", p);
return -1; return -1;
} }
@ -599,12 +567,10 @@ int load_module(char *path1, User * u)
if ((dl_error = dlerror ()) != NULL) { if ((dl_error = dlerror ()) != NULL) {
#endif #endif
if (do_msg) if (do_msg)
prefmsg(u->nick, s_Services, prefmsg (u->nick, s_Services, "Error, Couldn't Load Module");
"Error, Couldn't Load Module");
if (do_msg) if (do_msg)
prefmsg (u->nick, s_Services, "%s", dl_error); prefmsg (u->nick, s_Services, "%s", dl_error);
nlog(LOG_WARNING, LOG_CORE, "Couldn't Load Module: %s", nlog (LOG_WARNING, LOG_CORE, "Couldn't Load Module: %s", dl_error);
dl_error);
dlclose (dl_handle); dlclose (dl_handle);
return -1; return -1;
} }
@ -617,12 +583,10 @@ int load_module(char *path1, User * u)
if ((dl_error = dlerror ()) != NULL) { if ((dl_error = dlerror ()) != NULL) {
#endif #endif
if (do_msg) if (do_msg)
prefmsg(u->nick, s_Services, prefmsg (u->nick, s_Services, "Error, Couldn't Load Module");
"Error, Couldn't Load Module");
if (do_msg) if (do_msg)
prefmsg (u->nick, s_Services, "%s", dl_error); prefmsg (u->nick, s_Services, "%s", dl_error);
nlog(LOG_WARNING, LOG_CORE, "Couldn't Load Module: %s", nlog (LOG_WARNING, LOG_CORE, "Couldn't Load Module: %s", dl_error);
dl_error);
dlclose (dl_handle); dlclose (dl_handle);
return -1; return -1;
} }
@ -637,11 +601,8 @@ int load_module(char *path1, User * u)
if (mod_info_ptr == NULL || mod_funcs_ptr == NULL) { if (mod_info_ptr == NULL || mod_funcs_ptr == NULL) {
dlclose (dl_handle); dlclose (dl_handle);
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "%s: Could not load dynamic library %s!\n", __PRETTY_FUNCTION__, path);
"%s: Could not load dynamic library %s!\n", nlog (LOG_WARNING, LOG_CORE, "Couldn't Load Module: %s", dlerror ());
__PRETTY_FUNCTION__, path);
nlog(LOG_WARNING, LOG_CORE, "Couldn't Load Module: %s",
dlerror());
return -1; return -1;
} }
@ -650,9 +611,7 @@ int load_module(char *path1, User * u)
if (hash_lookup (mh, mod_info_ptr->module_name)) { if (hash_lookup (mh, mod_info_ptr->module_name)) {
dlclose (dl_handle); dlclose (dl_handle);
if (do_msg) if (do_msg)
prefmsg(u->nick, s_Services, prefmsg (u->nick, s_Services, "Module %s already Loaded, Can't Load 2 Copies", mod_info_ptr->module_name);
"Module %s already Loaded, Can't Load 2 Copies",
mod_info_ptr->module_name);
free (mod_ptr); free (mod_ptr);
return -1; return -1;
} }
@ -662,21 +621,17 @@ int load_module(char *path1, User * u)
mn = hnode_create (mod_ptr); mn = hnode_create (mod_ptr);
if (hash_isfull (mh)) { if (hash_isfull (mh)) {
if (do_msg) if (do_msg)
chanalert(s_Services, chanalert (s_Services, "Module List is Full. Can't Load any more modules");
"Module List is Full. Can't Load any more modules");
if (do_msg) if (do_msg)
prefmsg(u->nick, s_Services, prefmsg (u->nick, s_Services, "Module List is Full, Can't Load any more Modules");
"Module List is Full, Can't Load any more Modules");
dlclose (dl_handle); dlclose (dl_handle);
free (mod_ptr); free (mod_ptr);
return -1; return -1;
} else { } else {
hash_insert (mh, mn, mod_info_ptr->module_name); hash_insert (mh, mn, mod_info_ptr->module_name);
} }
nlog(LOG_NORMAL, LOG_CORE, "Module Internal name: %s", nlog (LOG_NORMAL, LOG_CORE, "Module Internal name: %s", mod_info_ptr->module_name);
mod_info_ptr->module_name); nlog (LOG_NORMAL, LOG_CORE, "Module description: %s", mod_info_ptr->module_description);
nlog(LOG_NORMAL, LOG_CORE, "Module description: %s",
mod_info_ptr->module_description);
mod_ptr->info = mod_info_ptr; mod_ptr->info = mod_info_ptr;
mod_ptr->function_list = mod_funcs_ptr; mod_ptr->function_list = mod_funcs_ptr;
@ -685,7 +640,8 @@ int load_module(char *path1, User * u)
/* assign a module number to this module */ /* assign a module number to this module */
i = 0; i = 0;
while (ModNum[i].used != 0) i++; while (ModNum[i].used != 0)
i++;
/* no need to check for overflow of NUM_MODULES, as its done above */ /* no need to check for overflow of NUM_MODULES, as its done above */
ModNum[i].used = 1; ModNum[i].used = 1;
ModNum[i].mod = mod_ptr; ModNum[i].mod = mod_ptr;
@ -699,10 +655,8 @@ int load_module(char *path1, User * u)
while (event_fn_ptr->cmd_name != NULL) { while (event_fn_ptr->cmd_name != NULL) {
if (!strcasecmp (event_fn_ptr->cmd_name, "ONLINE")) { if (!strcasecmp (event_fn_ptr->cmd_name, "ONLINE")) {
AddStringToList (&av, me.s->name, &ac); AddStringToList (&av, me.s->name, &ac);
strcpy(segv_location, strcpy (segv_location, mod_ptr->info->module_name);
mod_ptr->info->module_name); strcpy (segvinmodule, mod_ptr->info->module_name);
strcpy(segvinmodule,
mod_ptr->info->module_name);
event_fn_ptr->function (av, ac); event_fn_ptr->function (av, ac);
strcpy (segv_location, "AfterDLLoadOnline"); strcpy (segv_location, "AfterDLLoadOnline");
strcpy (segvinmodule, ""); strcpy (segvinmodule, "");
@ -713,18 +667,15 @@ int load_module(char *path1, User * u)
} }
} }
if (do_msg) if (do_msg)
prefmsg(u->nick, s_Services, prefmsg (u->nick, s_Services, "Module %s Loaded, Description: %s", mod_info_ptr->module_name, mod_info_ptr->module_description);
"Module %s Loaded, Description: %s",
mod_info_ptr->module_name,
mod_info_ptr->module_description);
if (do_msg) if (do_msg)
globops(me.name, "%s Module Loaded", globops (me.name, "%s Module Loaded", mod_info_ptr->module_name);
mod_info_ptr->module_name);
return 0; return 0;
} }
extern int get_dl_handle(char *mod_name) extern int
get_dl_handle (char *mod_name)
{ {
Module *list_ptr; Module *list_ptr;
hnode_t *mn; hnode_t *mn;
@ -738,7 +689,8 @@ extern int get_dl_handle(char *mod_name)
} }
return 0; return 0;
} }
extern int get_mod_num(char *mod_name) extern int
get_mod_num (char *mod_name)
{ {
int i; int i;
for (i = 0; i <= NUM_MODULES; i++) { for (i = 0; i <= NUM_MODULES; i++) {
@ -754,7 +706,8 @@ extern int get_mod_num(char *mod_name)
}; };
void list_module(User * u) void
list_module (User * u)
{ {
Module *mod_ptr = NULL; Module *mod_ptr = NULL;
hnode_t *mn; hnode_t *mn;
@ -764,18 +717,15 @@ void list_module(User * u)
hash_scan_begin (&hs, mh); hash_scan_begin (&hs, mh);
while ((mn = hash_scan_next (&hs)) != NULL) { while ((mn = hash_scan_next (&hs)) != NULL) {
mod_ptr = hnode_get (mn); mod_ptr = hnode_get (mn);
prefmsg(u->nick, s_Services, "Module: %s (%s)", prefmsg (u->nick, s_Services, "Module: %s (%s)", mod_ptr->info->module_name, mod_ptr->info->module_version);
mod_ptr->info->module_name, prefmsg (u->nick, s_Services, "Module Description: %s", mod_ptr->info->module_description);
mod_ptr->info->module_version); prefmsg (u->nick, s_Services, "Module Number: %d", get_mod_num (mod_ptr->info->module_name));
prefmsg(u->nick, s_Services, "Module Description: %s",
mod_ptr->info->module_description);
prefmsg(u->nick, s_Services, "Module Number: %d",
get_mod_num(mod_ptr->info->module_name));
} }
prefmsg (u->nick, s_Services, "End of Module List"); prefmsg (u->nick, s_Services, "End of Module List");
} }
int unload_module(char *module_name, User * u) int
unload_module (char *module_name, User * u)
{ {
Module *list; Module *list;
Mod_User *mod_ptr = NULL; Mod_User *mod_ptr = NULL;
@ -793,12 +743,8 @@ int unload_module(char *module_name, User * u)
chanalert (s_Services, "Unloading Module %s", module_name); chanalert (s_Services, "Unloading Module %s", module_name);
} else { } else {
if (u) { if (u) {
prefmsg(u->nick, s_Services, prefmsg (u->nick, s_Services, "Couldn't Find Module %s Loaded, Try /msg %s modlist", module_name, s_Services);
"Couldn't Find Module %s Loaded, Try /msg %s modlist", chanalert (s_Services, "%s tried to Unload %s but its not loaded", u->nick, module_name);
module_name, s_Services);
chanalert(s_Services,
"%s tried to Unload %s but its not loaded",
u->nick, module_name);
return -1; return -1;
} }
return -1; return -1;
@ -808,9 +754,7 @@ int unload_module(char *module_name, User * u)
while ((modnode = hash_scan_next (&hscan)) != NULL) { while ((modnode = hash_scan_next (&hscan)) != NULL) {
mod_tmr = hnode_get (modnode); mod_tmr = hnode_get (modnode);
if (!strcasecmp (mod_tmr->modname, module_name)) { if (!strcasecmp (mod_tmr->modname, module_name)) {
nlog(LOG_DEBUG1, LOG_CORE, nlog (LOG_DEBUG1, LOG_CORE, "Module %s has timer %s Registered. Deleting..", module_name, mod_tmr->timername);
"Module %s has timer %s Registered. Deleting..",
module_name, mod_tmr->timername);
del_mod_timer (mod_tmr->timername); del_mod_timer (mod_tmr->timername);
} }
} }
@ -819,9 +763,7 @@ int unload_module(char *module_name, User * u)
while ((modnode = hash_scan_next (&hscan)) != NULL) { while ((modnode = hash_scan_next (&hscan)) != NULL) {
mod_sock = hnode_get (modnode); mod_sock = hnode_get (modnode);
if (!strcasecmp (mod_sock->modname, module_name)) { if (!strcasecmp (mod_sock->modname, module_name)) {
nlog(LOG_DEBUG1, LOG_CORE, nlog (LOG_DEBUG1, LOG_CORE, "Module %s had Socket %s Registered. Deleting..", module_name, mod_sock->sockname);
"Module %s had Socket %s Registered. Deleting..",
module_name, mod_sock->sockname);
del_socket (mod_sock->sockname); del_socket (mod_sock->sockname);
} }
} }
@ -831,16 +773,13 @@ int unload_module(char *module_name, User * u)
while ((modnode = hash_scan_next (&hscan)) != NULL) { while ((modnode = hash_scan_next (&hscan)) != NULL) {
mod_ptr = hnode_get (modnode); mod_ptr = hnode_get (modnode);
if (!strcasecmp (mod_ptr->modname, module_name)) { if (!strcasecmp (mod_ptr->modname, module_name)) {
nlog(LOG_DEBUG1, LOG_CORE, nlog (LOG_DEBUG1, LOG_CORE, "Module %s had bot %s Registered. Deleting..", module_name, mod_ptr->nick);
"Module %s had bot %s Registered. Deleting..",
module_name, mod_ptr->nick);
del_bot (mod_ptr->nick, "Module Unloaded"); del_bot (mod_ptr->nick, "Module Unloaded");
} }
} }
modnode = hash_lookup (mh, module_name); modnode = hash_lookup (mh, module_name);
if (modnode) { if (modnode) {
nlog(LOG_DEBUG1, LOG_CORE, nlog (LOG_DEBUG1, LOG_CORE, "Deleting Module %s from ModHash", module_name);
"Deleting Module %s from ModHash", module_name);
globops (me.name, "%s Module Unloaded", module_name); globops (me.name, "%s Module Unloaded", module_name);
i = get_mod_num (module_name); i = get_mod_num (module_name);

2
dl.h
View file

@ -20,7 +20,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: dl.h,v 1.27 2003/07/11 13:43:27 fishwaldo Exp $ ** $Id: dl.h,v 1.28 2003/07/30 13:58:22 fishwaldo Exp $
*/ */

51
dns.c
View file

@ -20,7 +20,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: dns.c,v 1.14 2003/06/13 13:11:48 fishwaldo Exp $ ** $Id: dns.c,v 1.15 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
@ -72,8 +72,8 @@ list_t *dnslist;
* @return returns 1 on success, 0 on failure (to add the lookup, not a successfull lookup * @return returns 1 on success, 0 on failure (to add the lookup, not a successfull lookup
*/ */
int dns_lookup(char *str, adns_rrtype type, int
void (*callback) (char *data, adns_answer * a), char *data) dns_lookup (char *str, adns_rrtype type, void (*callback) (char *data, adns_answer * a), char *data)
{ {
lnode_t *dnsnode; lnode_t *dnsnode;
DnsLookup *dnsdata; DnsLookup *dnsdata;
@ -98,27 +98,17 @@ int dns_lookup(char *str, adns_rrtype type,
if (type == adns_r_ptr) { if (type == adns_r_ptr) {
sa.sin_family = AF_INET; sa.sin_family = AF_INET;
sa.sin_addr.s_addr = inet_addr (str); sa.sin_addr.s_addr = inet_addr (str);
status = status = adns_submit_reverse (ads, (const struct sockaddr *) &sa, type, adns_qf_owner | adns_qf_cname_loose, NULL, &dnsdata->q);
adns_submit_reverse(ads, (const struct sockaddr *) &sa,
type,
adns_qf_owner |
adns_qf_cname_loose, NULL,
&dnsdata->q);
} else { } else {
status = status = adns_submit (ads, str, type, adns_qf_owner | adns_qf_cname_loose, NULL, &dnsdata->q);
adns_submit(ads, str, type,
adns_qf_owner | adns_qf_cname_loose, NULL,
&dnsdata->q);
} }
if (status) { if (status) {
nlog(LOG_WARNING, LOG_CORE, "DNS: adns_submit error: %s", nlog (LOG_WARNING, LOG_CORE, "DNS: adns_submit error: %s", strerror (status));
strerror(status));
free (dnsdata); free (dnsdata);
return 0; return 0;
} }
nlog(LOG_DEBUG1, LOG_CORE, "DNS: Added dns query %s to list", nlog (LOG_DEBUG1, LOG_CORE, "DNS: Added dns query %s to list", data);
data);
/* if we get here, then the submit was successfull. Add it to the list of queryies */ /* if we get here, then the submit was successfull. Add it to the list of queryies */
dnsnode = lnode_create (dnsdata); dnsnode = lnode_create (dnsdata);
list_append (dnslist, dnsnode); list_append (dnslist, dnsnode);
@ -134,7 +124,8 @@ int dns_lookup(char *str, adns_rrtype type,
* @return returns 1 on success, 0 on failure * @return returns 1 on success, 0 on failure
*/ */
int init_dns() int
init_dns ()
{ {
int adnsstart; int adnsstart;
@ -144,15 +135,13 @@ int init_dns()
if (!dnslist) if (!dnslist)
return 0; return 0;
#ifndef DEBUG #ifndef DEBUG
adnsstart = adnsstart = adns_init (&ads, adns_if_noerrprint | adns_if_noautosys, 0);
adns_init(&ads, adns_if_noerrprint | adns_if_noautosys, 0);
#else #else
adnsstart = adns_init (&ads, adns_if_debug | adns_if_noautosys, 0); adnsstart = adns_init (&ads, adns_if_debug | adns_if_noautosys, 0);
#endif #endif
if (adnsstart) { if (adnsstart) {
printf ("ADNS init failed: %s\n", strerror (adnsstart)); printf ("ADNS init failed: %s\n", strerror (adnsstart));
nlog(LOG_CRITICAL, LOG_CORE, "ADNS init failed: %s", nlog (LOG_CRITICAL, LOG_CORE, "ADNS init failed: %s", strerror (adnsstart));
strerror(adnsstart));
return 0; return 0;
} }
return 1; return 1;
@ -168,7 +157,8 @@ int init_dns()
* @return Nothing * @return Nothing
*/ */
void do_dns() void
do_dns ()
{ {
lnode_t *dnsnode, *dnsnode1; lnode_t *dnsnode, *dnsnode1;
int status; int status;
@ -187,19 +177,14 @@ void do_dns()
status = adns_check (ads, &dnsdata->q, &dnsdata->a, NULL); status = adns_check (ads, &dnsdata->q, &dnsdata->a, NULL);
/* if status == eagain, the lookup hasn't completed yet */ /* if status == eagain, the lookup hasn't completed yet */
if (status == EAGAIN) { if (status == EAGAIN) {
nlog(LOG_DEBUG2, LOG_CORE, nlog (LOG_DEBUG2, LOG_CORE, "DNS: Lookup hasn't completed for %s", &dnsdata->data);
"DNS: Lookup hasn't completed for %s",
&dnsdata->data);
dnsnode = list_next (dnslist, dnsnode); dnsnode = list_next (dnslist, dnsnode);
break; break;
} }
/* there was a error */ /* there was a error */
if (status) { if (status) {
nlog(LOG_CRITICAL, LOG_CORE, nlog (LOG_CRITICAL, LOG_CORE, "DNS: Baaaad error on adns_check: %s. Please report to NeoStats Group", strerror (status));
"DNS: Baaaad error on adns_check: %s. Please report to NeoStats Group", chanalert (s_Services, "Bad Error on DNS lookup. Please check logfile");
strerror(status));
chanalert(s_Services,
"Bad Error on DNS lookup. Please check logfile");
/* set this so nlog works good */ /* set this so nlog works good */
strncpy (segvinmodule, dnsdata->mod_name, MAXHOST); strncpy (segvinmodule, dnsdata->mod_name, MAXHOST);
@ -215,9 +200,7 @@ void do_dns()
lnode_destroy (dnsnode1); lnode_destroy (dnsnode1);
break; break;
} }
nlog(LOG_DEBUG2, LOG_CORE, nlog (LOG_DEBUG2, LOG_CORE, "DNS: Calling callback function with data %s", dnsdata->data);
"DNS: Calling callback function with data %s",
dnsdata->data);
strncpy (segvinmodule, dnsdata->mod_name, MAXHOST); strncpy (segvinmodule, dnsdata->mod_name, MAXHOST);
/* call the callback function */ /* call the callback function */
dnsdata->callback (dnsdata->data, dnsdata->a); dnsdata->callback (dnsdata->data, dnsdata->a);

View file

@ -42,7 +42,7 @@
/* /*
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: dotconf.c,v 1.9 2003/06/13 13:11:48 fishwaldo Exp $ ** $Id: dotconf.c,v 1.10 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
#include <time.h> #include <time.h>
@ -77,13 +77,13 @@ static config_option *config_options[CFG_MODULES];
static void dotconf_cb_include (char *); /* magic 'Include' */ static void dotconf_cb_include (char *); /* magic 'Include' */
static void dotconf_cb_includepath (char *); /* magic 'IncludePath' */ static void dotconf_cb_includepath (char *); /* magic 'IncludePath' */
static config_option dotconf_options[] = static config_option dotconf_options[] = { {"Include", ARG_STR, dotconf_cb_include, 0},
{ {"Include", ARG_STR, dotconf_cb_include, 0},
{"IncludePath", ARG_STR, dotconf_cb_includepath, 0}, {"IncludePath", ARG_STR, dotconf_cb_includepath, 0},
LAST_OPTION LAST_OPTION
}; };
void config_substitute_env(char *str) void
config_substitute_env (char *str)
{ {
char *cp1, *cp2, *cp3, *eos, *eob; char *cp1, *cp2, *cp3, *eos, *eob;
char *env_value; char *env_value;
@ -122,16 +122,14 @@ void config_substitute_env(char *str)
cp1++; cp1++;
if (*cp1 != '}') if (*cp1 != '}')
fprintf(stderr, "%s:%d: Unbalanced '{'\n", fprintf (stderr, "%s:%d: Unbalanced '{'\n", dotconf_file, dotconf_line);
dotconf_file, dotconf_line);
else { else {
cp1++; /* skip } */ cp1++; /* skip } */
if ((env_value = getenv (env_name)) != NULL) { if ((env_value = getenv (env_name)) != NULL) {
strncat (cp2, env_value, eos - cp2); strncat (cp2, env_value, eos - cp2);
cp2 += strlen (env_value); cp2 += strlen (env_value);
} else { } else {
strncat(cp2, env_default, strncat (cp2, env_default, eos - cp2);
eos - cp2);
cp2 += strlen (env_default); cp2 += strlen (env_default);
} }
} }
@ -145,7 +143,8 @@ void config_substitute_env(char *str)
strncpy (str, tmp_value, CFG_MAX_VALUE + 1); strncpy (str, tmp_value, CFG_MAX_VALUE + 1);
} }
void config_register_options(config_option * options) void
config_register_options (config_option * options)
{ {
int i; int i;
for (i = 0; i < CFG_MODULES && config_options[i]; i++) { for (i = 0; i < CFG_MODULES && config_options[i]; i++) {
@ -153,7 +152,8 @@ void config_register_options(config_option * options)
config_options[i] = options; config_options[i] = options;
} }
int config_parse(FILE * config) int
config_parse (FILE * config)
{ {
static char buffer[CFG_BUFSIZE]; static char buffer[CFG_BUFSIZE];
static char *here_string; /* Damn FreeBSD */ static char *here_string; /* Damn FreeBSD */
@ -198,12 +198,9 @@ int config_parse(FILE * config)
/* and now find the entry in the option table, and call the callback */ /* and now find the entry in the option table, and call the callback */
bzero (&opt, sizeof (config_option)); bzero (&opt, sizeof (config_option));
for (mod = 0; mod < CFG_MODULES && config_options[mod]; for (mod = 0; mod < CFG_MODULES && config_options[mod]; mod++)
mod++)
for (i = 0; config_options[mod][i].name[0]; i++) for (i = 0; config_options[mod][i].name[0]; i++)
if (!strncmp if (!strncmp (name, config_options[mod][i].name, CFG_MAX_OPTION)) {
(name, config_options[mod][i].name,
CFG_MAX_OPTION)) {
opt = config_options[mod][i]; opt = config_options[mod][i];
break; /* found it; break out of for */ break; /* found it; break out of for */
} }
@ -243,18 +240,14 @@ int config_parse(FILE * config)
strncpy (here_limit, cp3 + 2, 8); /* copy here-delimiter */ strncpy (here_limit, cp3 + 2, 8); /* copy here-delimiter */
while (fgets (buffer, CFG_BUFSIZE, config)) { while (fgets (buffer, CFG_BUFSIZE, config)) {
if (!strncmp if (!strncmp (here_limit, buffer, strlen (here_limit))) {
(here_limit, buffer,
strlen(here_limit))) {
here_string = 0; here_string = 0;
break; break;
} }
strcat (here_doc, buffer); /* append to buffer */ strcat (here_doc, buffer); /* append to buffer */
} }
if (here_string) if (here_string)
fprintf(stderr, fprintf (stderr, "Line %d: Unterminated here-document!\n", dotconf_line);
"Line %d: Unterminated here-document!\n",
dotconf_line);
here_doc[strlen (here_doc) - 1] = '\0'; /* strip newline */ here_doc[strlen (here_doc) - 1] = '\0'; /* strip newline */
opt.callback (here_doc, opt.userdata); /* call back */ opt.callback (here_doc, opt.userdata); /* call back */
@ -312,8 +305,7 @@ int config_parse(FILE * config)
cp1++; cp1++;
} }
/* not space or quoted ; eat it: */ /* not space or quoted ; eat it: */
else if ((((!isspace(*cp1) && !dq && !sq else if ((((!isspace (*cp1) && !dq && !sq && *cp1 != '"' && *cp1 != '\'')
&& *cp1 != '"' && *cp1 != '\'')
/* dont take quote if quoting: */ /* dont take quote if quoting: */
|| (dq && (*cp1 != '"')) || (dq && (*cp1 != '"'))
|| (sq && *cp1 != '\'')))) || (sq && *cp1 != '\''))))
@ -329,15 +321,10 @@ int config_parse(FILE * config)
{ {
/* the value is true if the argument is Yes, On or 1 */ /* the value is true if the argument is Yes, On or 1 */
/* kludge code follows ;) */ /* kludge code follows ;) */
int arg = ((values[0][0] == 'Y' int arg = ((values[0][0] == 'Y' || values[0][1] == 'y')
|| values[0][1] == 'y')
|| (values[0][0] == '1') || (values[0][0] == '1')
|| ((values[0][0] == 'o' || ((values[0][0] == 'o' || values[0][0] == 'O')
|| values[0][0] == && (values[0][1] == 'n' || values[0][1]
'O')
&& (values[0][1] ==
'n'
|| values[0][1]
== 'N'))); == 'N')));
opt.callback (arg, USER_DATA); opt.callback (arg, USER_DATA);
break; break;
@ -359,13 +346,10 @@ int config_parse(FILE * config)
char *data[CFG_VALUES]; char *data[CFG_VALUES];
int i; int i;
for (i = 0; i < word_count; i++) { /* prepare list */ for (i = 0; i < word_count; i++) { /* prepare list */
config_substitute_env config_substitute_env (values[i]);
(values[i]); data[i] = strdup (values[i]);
data[i] =
strdup(values[i]);
} }
opt.callback(data, word_count, opt.callback (data, word_count, USER_DATA);
USER_DATA);
for (i = 0; i < word_count; i++) /* dump list */ for (i = 0; i < word_count; i++) /* dump list */
free (data[i]); free (data[i]);
@ -392,14 +376,14 @@ int config_parse(FILE * config)
* open and parse the config-file using the config_options list * open and parse the config-file using the config_options list
* as reference for what callback to call and what type of arguments to provide * as reference for what callback to call and what type of arguments to provide
*/ */
int config_read(char *fname, config_option * options) int
config_read (char *fname, config_option * options)
{ {
FILE *config; FILE *config;
char *dc_env; /* pointer to DC_INCLUDEPATH */ char *dc_env; /* pointer to DC_INCLUDEPATH */
if (access (fname, R_OK)) { if (access (fname, R_OK)) {
fprintf(stderr, "Error opening configuration file '%s'\n", fprintf (stderr, "Error opening configuration file '%s'\n", fname);
fname);
return 1; return 1;
} }
@ -427,7 +411,8 @@ int config_read(char *fname, config_option * options)
/* callbacks for internal options */ /* callbacks for internal options */
void dotconf_cb_include(char *str) void
dotconf_cb_include (char *str)
{ {
FILE *config; FILE *config;
char old_fname[CFG_MAX_FILENAME]; char old_fname[CFG_MAX_FILENAME];
@ -438,24 +423,17 @@ void dotconf_cb_include(char *str)
/* relative file AND include path is used */ /* relative file AND include path is used */
/* check for length of fully qualified filename */ /* check for length of fully qualified filename */
if ((strlen(str) + strlen(dotconf_includepath) + 1) == if ((strlen (str) + strlen (dotconf_includepath) + 1) == CFG_MAX_FILENAME) {
CFG_MAX_FILENAME) { fprintf (stderr, "%s:%d: Absolute filename too long (>%d)\n", dotconf_file, dotconf_line, CFG_MAX_FILENAME);
fprintf(stderr,
"%s:%d: Absolute filename too long (>%d)\n",
dotconf_file, dotconf_line,
CFG_MAX_FILENAME);
return; return;
} }
snprintf(dotconf_file, CFG_MAX_FILENAME + 1, "%s/%s", snprintf (dotconf_file, CFG_MAX_FILENAME + 1, "%s/%s", dotconf_includepath, str);
dotconf_includepath, str);
} else /* fully qualified, or no includepath */ } else /* fully qualified, or no includepath */
strncpy (dotconf_file, str, CFG_MAX_FILENAME); strncpy (dotconf_file, str, CFG_MAX_FILENAME);
if (access (dotconf_file, R_OK)) { if (access (dotconf_file, R_OK)) {
fprintf(stderr, fprintf (stderr, "Error in %s line %d: Cannot open %s for inclusion\n", old_fname, dotconf_line, dotconf_file);
"Error in %s line %d: Cannot open %s for inclusion\n",
old_fname, dotconf_line, dotconf_file);
strcpy (dotconf_file, old_fname); /* restore settings */ strcpy (dotconf_file, old_fname); /* restore settings */
return; return;
} }
@ -466,7 +444,8 @@ void dotconf_cb_include(char *str)
strcpy (dotconf_file, old_fname); strcpy (dotconf_file, old_fname);
} }
void dotconf_cb_includepath(char *str) void
dotconf_cb_includepath (char *str)
{ {
char *env = getenv ("DC_INCLUDEPATH"); char *env = getenv ("DC_INCLUDEPATH");
if (!env) /* environment overrides configuration file setting */ if (!env) /* environment overrides configuration file setting */

View file

@ -20,7 +20,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: dotconf.h,v 1.3 2003/05/26 09:18:28 fishwaldo Exp $ ** $Id: dotconf.h,v 1.4 2003/07/30 13:58:22 fishwaldo Exp $
*/ */

167
hash.c
View file

@ -39,7 +39,7 @@
* into proprietary software; there is no requirement for such software to * into proprietary software; there is no requirement for such software to
* contain a copyright notice related to this source. * contain a copyright notice related to this source.
* *
* $Id: hash.c,v 1.10 2003/07/17 10:13:51 fishwaldo Exp $ * $Id: hash.c,v 1.11 2003/07/30 13:58:22 fishwaldo Exp $
* $Name: $ * $Name: $
*/ */
@ -54,8 +54,7 @@
#ifdef KAZLIB_RCSID #ifdef KAZLIB_RCSID
static const char rcsid[] = static const char rcsid[] = "$Id: hash.c,v 1.11 2003/07/30 13:58:22 fishwaldo Exp $";
"$Id: hash.c,v 1.10 2003/07/17 10:13:51 fishwaldo Exp $";
#endif #endif
#define INIT_BITS 6 #define INIT_BITS 6
@ -104,7 +103,8 @@ int hash_val_t_bit;
* right, replacing the topmost bit by zero. * right, replacing the topmost bit by zero.
*/ */
static void compute_bits(void) static void
compute_bits (void)
{ {
hash_val_t val = HASH_VAL_T_MAX; /* 1 */ hash_val_t val = HASH_VAL_T_MAX; /* 1 */
int bits = 0; int bits = 0;
@ -121,7 +121,8 @@ static void compute_bits(void)
* Verify whether the given argument is a power of two. * Verify whether the given argument is a power of two.
*/ */
static int is_power_of_two(hash_val_t arg) static int
is_power_of_two (hash_val_t arg)
{ {
if (arg == 0) if (arg == 0)
return 0; return 0;
@ -134,7 +135,8 @@ static int is_power_of_two(hash_val_t arg)
* Compute a shift amount from a given table size * Compute a shift amount from a given table size
*/ */
static hash_val_t compute_mask(hashcount_t size) static hash_val_t
compute_mask (hashcount_t size)
{ {
nassert (is_power_of_two (size)); nassert (is_power_of_two (size));
nassert (size >= 2); nassert (size >= 2);
@ -146,7 +148,8 @@ static hash_val_t compute_mask(hashcount_t size)
* Initialize the table of pointers to null. * Initialize the table of pointers to null.
*/ */
static void clear_table(hash_t * hash) static void
clear_table (hash_t * hash)
{ {
hash_val_t i; hash_val_t i;
@ -182,7 +185,8 @@ static void clear_table(hash_t * hash)
* the various bookeeping fields of the hash structure. * the various bookeeping fields of the hash structure.
*/ */
static void grow_table(hash_t * hash) static void
grow_table (hash_t * hash)
{ {
hnode_t **newtable; hnode_t **newtable;
@ -198,11 +202,9 @@ static void grow_table(hash_t * hash)
nassert (mask != hash->mask); nassert (mask != hash->mask);
for (chain = 0; chain < hash->nchains; chain++) { /* 7 */ for (chain = 0; chain < hash->nchains; chain++) { /* 7 */
hnode_t *low_chain = 0, *high_chain = hnode_t *low_chain = 0, *high_chain = 0, *hptr, *next;
0, *hptr, *next;
for (hptr = newtable[chain]; hptr != 0; for (hptr = newtable[chain]; hptr != 0; hptr = next) {
hptr = next) {
next = hptr->next; next = hptr->next;
if (hptr->hkey & exposed_bit) { if (hptr->hkey & exposed_bit) {
@ -257,7 +259,8 @@ static void grow_table(hash_t * hash)
* 9. Finally, update the various table parameters to reflect the new size. * 9. Finally, update the various table parameters to reflect the new size.
*/ */
static void shrink_table(hash_t * hash) static void
shrink_table (hash_t * hash)
{ {
hash_val_t chain, nchains; hash_val_t chain, nchains;
hnode_t **newtable, *low_tail, *low_chain, *high_chain; hnode_t **newtable, *low_tail, *low_chain, *high_chain;
@ -316,8 +319,8 @@ static void shrink_table(hash_t * hash)
* 8. The table of chains must be properly reset to all null pointers. * 8. The table of chains must be properly reset to all null pointers.
*/ */
hash_t *hash_create(hashcount_t maxcount, hash_comp_t compfun, hash_t *
hash_fun_t hashfun) hash_create (hashcount_t maxcount, hash_comp_t compfun, hash_fun_t hashfun)
{ {
hash_t *hash; hash_t *hash;
@ -334,10 +337,8 @@ hash_t *hash_create(hashcount_t maxcount, hash_comp_t compfun,
hash->lowmark = INIT_SIZE / 2; hash->lowmark = INIT_SIZE / 2;
hash->nodecount = 0; hash->nodecount = 0;
hash->maxcount = maxcount; hash->maxcount = maxcount;
hash->compare = hash->compare = compfun ? compfun : hash_comp_default;
compfun ? compfun : hash_comp_default; hash->function = hashfun ? hashfun : hash_fun_default;
hash->function =
hashfun ? hashfun : hash_fun_default;
hash->allocnode = hnode_alloc; hash->allocnode = hnode_alloc;
hash->freenode = hnode_free; hash->freenode = hnode_free;
hash->context = NULL; hash->context = NULL;
@ -357,8 +358,8 @@ hash_t *hash_create(hashcount_t maxcount, hash_comp_t compfun,
* Select a different set of node allocator routines. * Select a different set of node allocator routines.
*/ */
void hash_set_allocator(hash_t * hash, hnode_alloc_t al, void
hnode_free_t fr, void *context) hash_set_allocator (hash_t * hash, hnode_alloc_t al, hnode_free_t fr, void *context)
{ {
nassert (hash_count (hash) == 0); nassert (hash_count (hash) == 0);
nassert ((al == 0 && fr == 0) || (al != 0 && fr != 0)); nassert ((al == 0 && fr == 0) || (al != 0 && fr != 0));
@ -373,7 +374,8 @@ void hash_set_allocator(hash_t * hash, hnode_alloc_t al,
* cause the hash to become empty. * cause the hash to become empty.
*/ */
void hash_free_nodes(hash_t * hash) void
hash_free_nodes (hash_t * hash)
{ {
hscan_t hs; hscan_t hs;
hnode_t *node; hnode_t *node;
@ -391,7 +393,8 @@ void hash_free_nodes(hash_t * hash)
* freeing them and then freeing the table all in one step. * freeing them and then freeing the table all in one step.
*/ */
void hash_free(hash_t * hash) void
hash_free (hash_t * hash)
{ {
#ifdef KAZLIB_OBSOLESCENT_DEBUG #ifdef KAZLIB_OBSOLESCENT_DEBUG
nassert ("call to obsolescent function hash_free()" && 0); nassert ("call to obsolescent function hash_free()" && 0);
@ -404,7 +407,8 @@ void hash_free(hash_t * hash)
* Free a dynamic hash table structure. * Free a dynamic hash table structure.
*/ */
void hash_destroy(hash_t * hash) void
hash_destroy (hash_t * hash)
{ {
nassert (hash_val_t_bit != 0); nassert (hash_val_t_bit != 0);
nassert (hash_isempty (hash)); nassert (hash_isempty (hash));
@ -425,9 +429,8 @@ void hash_destroy(hash_t * hash)
* so we reset it here. * so we reset it here.
*/ */
hash_t *hash_init(hash_t * hash, hashcount_t maxcount, hash_t *
hash_comp_t compfun, hash_fun_t hashfun, hash_init (hash_t * hash, hashcount_t maxcount, hash_comp_t compfun, hash_fun_t hashfun, hnode_t ** table, hashcount_t nchains)
hnode_t ** table, hashcount_t nchains)
{ {
if (hash_val_t_bit == 0) /* 1 */ if (hash_val_t_bit == 0) /* 1 */
compute_bits (); compute_bits ();
@ -460,7 +463,8 @@ hash_t *hash_init(hash_t * hash, hashcount_t maxcount,
* so that hash_scan_next() shall indicate failure. * so that hash_scan_next() shall indicate failure.
*/ */
void hash_scan_begin(hscan_t * scan, hash_t * hash) void
hash_scan_begin (hscan_t * scan, hash_t * hash)
{ {
hash_val_t nchains = hash->nchains; hash_val_t nchains = hash->nchains;
hash_val_t chain; hash_val_t chain;
@ -469,8 +473,7 @@ void hash_scan_begin(hscan_t * scan, hash_t * hash)
/* 1 */ /* 1 */
for (chain = 0; chain < nchains && hash->table[chain] == 0; for (chain = 0; chain < nchains && hash->table[chain] == 0; chain++);
chain++);
if (chain < nchains) { /* 2 */ if (chain < nchains) { /* 2 */
scan->chain = chain; scan->chain = chain;
@ -506,7 +509,8 @@ void hash_scan_begin(hscan_t * scan, hash_t * hash)
*/ */
hnode_t *hash_scan_next(hscan_t * scan) hnode_t *
hash_scan_next (hscan_t * scan)
{ {
hnode_t *next = scan->next; /* 1 */ hnode_t *next = scan->next; /* 1 */
hash_t *hash = scan->table; hash_t *hash = scan->table;
@ -545,7 +549,8 @@ hnode_t *hash_scan_next(hscan_t * scan)
* where N is the base 2 logarithm of the size of the hash table. * where N is the base 2 logarithm of the size of the hash table.
*/ */
void hash_insert(hash_t * hash, hnode_t * node, const void *key) void
hash_insert (hash_t * hash, hnode_t * node, const void *key)
{ {
hash_val_t hkey, chain; hash_val_t hkey, chain;
@ -583,7 +588,8 @@ void hash_insert(hash_t * hash, hnode_t * node, const void *key)
* entry. * entry.
*/ */
hnode_t *hash_lookup(hash_t * hash, const void *key) hnode_t *
hash_lookup (hash_t * hash, const void *key)
{ {
hash_val_t hkey, chain; hash_val_t hkey, chain;
hnode_t *nptr; hnode_t *nptr;
@ -592,8 +598,7 @@ hnode_t *hash_lookup(hash_t * hash, const void *key)
chain = hkey & hash->mask; /* 2 */ chain = hkey & hash->mask; /* 2 */
for (nptr = hash->table[chain]; nptr; nptr = nptr->next) { /* 3 */ for (nptr = hash->table[chain]; nptr; nptr = nptr->next) { /* 3 */
if (nptr->hkey == hkey if (nptr->hkey == hkey && hash->compare (nptr->key, key) == 0)
&& hash->compare(nptr->key, key) == 0)
return nptr; return nptr;
} }
@ -618,7 +623,8 @@ hnode_t *hash_lookup(hash_t * hash, const void *key)
* 6. Indicate that the node is no longer in a hash table. * 6. Indicate that the node is no longer in a hash table.
*/ */
hnode_t *hash_delete(hash_t * hash, hnode_t * node) hnode_t *
hash_delete (hash_t * hash, hnode_t * node)
{ {
hash_val_t chain; hash_val_t chain;
hnode_t *hptr; hnode_t *hptr;
@ -626,8 +632,7 @@ hnode_t *hash_delete(hash_t * hash, hnode_t * node)
nassert (hash_lookup (hash, node->key) == node); /* 1 */ nassert (hash_lookup (hash, node->key) == node); /* 1 */
nassert (hash_val_t_bit != 0); nassert (hash_val_t_bit != 0);
if (hash->dynamic && hash->nodecount <= hash->lowmark if (hash->dynamic && hash->nodecount <= hash->lowmark && hash->nodecount > INIT_SIZE)
&& hash->nodecount > INIT_SIZE)
shrink_table (hash); /* 2 */ shrink_table (hash); /* 2 */
chain = node->hkey & hash->mask; /* 3 */ chain = node->hkey & hash->mask; /* 3 */
@ -651,7 +656,8 @@ hnode_t *hash_delete(hash_t * hash, hnode_t * node)
return node; return node;
} }
int hash_alloc_insert(hash_t * hash, const void *key, void *data) int
hash_alloc_insert (hash_t * hash, const void *key, void *data)
{ {
hnode_t *node = hash->allocnode (hash->context); hnode_t *node = hash->allocnode (hash->context);
@ -663,7 +669,8 @@ int hash_alloc_insert(hash_t * hash, const void *key, void *data)
return 0; return 0;
} }
void hash_delete_free(hash_t * hash, hnode_t * node) void
hash_delete_free (hash_t * hash, hnode_t * node)
{ {
hash_delete (hash, node); hash_delete (hash, node);
hash->freenode (node, hash->context); hash->freenode (node, hash->context);
@ -674,7 +681,8 @@ void hash_delete_free(hash_t * hash, hnode_t * node)
* used from within a hash table scan operation. See notes for hash_delete. * used from within a hash table scan operation. See notes for hash_delete.
*/ */
hnode_t *hash_scan_delete(hash_t * hash, hnode_t * node) hnode_t *
hash_scan_delete (hash_t * hash, hnode_t * node)
{ {
hash_val_t chain; hash_val_t chain;
hnode_t *hptr; hnode_t *hptr;
@ -704,7 +712,8 @@ hnode_t *hash_scan_delete(hash_t * hash, hnode_t * node)
* Like hash_delete_free but based on hash_scan_delete. * Like hash_delete_free but based on hash_scan_delete.
*/ */
void hash_scan_delfree(hash_t * hash, hnode_t * node) void
hash_scan_delfree (hash_t * hash, hnode_t * node)
{ {
hash_scan_delete (hash, node); hash_scan_delete (hash, node);
hash->freenode (node, hash->context); hash->freenode (node, hash->context);
@ -719,7 +728,8 @@ void hash_scan_delfree(hash_t * hash, hnode_t * node)
* to see whether it is correct for the node's chain. * to see whether it is correct for the node's chain.
*/ */
int hash_verify(hash_t * hash) int
hash_verify (hash_t * hash)
{ {
hashcount_t count = 0; hashcount_t count = 0;
hash_val_t chain; hash_val_t chain;
@ -735,8 +745,7 @@ int hash_verify(hash_t * hash)
} }
for (chain = 0; chain < hash->nchains; chain++) { /* 2 */ for (chain = 0; chain < hash->nchains; chain++) { /* 2 */
for (hptr = hash->table[chain]; hptr != 0; for (hptr = hash->table[chain]; hptr != 0; hptr = hptr->next) {
hptr = hptr->next) {
if ((hptr->hkey & hash->mask) != chain) if ((hptr->hkey & hash->mask) != chain)
return 0; return 0;
count++; count++;
@ -755,7 +764,8 @@ int hash_verify(hash_t * hash)
*/ */
#undef hash_isfull #undef hash_isfull
int hash_isfull(hash_t * hash) int
hash_isfull (hash_t * hash)
{ {
return hash->nodecount == hash->maxcount; return hash->nodecount == hash->maxcount;
} }
@ -766,17 +776,20 @@ int hash_isfull(hash_t * hash)
*/ */
#undef hash_isempty #undef hash_isempty
int hash_isempty(hash_t * hash) int
hash_isempty (hash_t * hash)
{ {
return hash->nodecount == 0; return hash->nodecount == 0;
} }
static hnode_t *hnode_alloc(void *context) static hnode_t *
hnode_alloc (void *context)
{ {
return malloc (sizeof *hnode_alloc (NULL)); return malloc (sizeof *hnode_alloc (NULL));
} }
static void hnode_free(hnode_t * node, void *context) static void
hnode_free (hnode_t * node, void *context)
{ {
free (node); free (node);
} }
@ -786,7 +799,8 @@ static void hnode_free(hnode_t * node, void *context)
* Create a hash table node dynamically and assign it the given data. * Create a hash table node dynamically and assign it the given data.
*/ */
hnode_t *hnode_create(void *data) hnode_t *
hnode_create (void *data)
{ {
hnode_t *node = malloc (sizeof *node); hnode_t *node = malloc (sizeof *node);
if (node) { if (node) {
@ -800,7 +814,8 @@ hnode_t *hnode_create(void *data)
* Initialize a client-supplied node * Initialize a client-supplied node
*/ */
hnode_t *hnode_init(hnode_t * hnode, void *data) hnode_t *
hnode_init (hnode_t * hnode, void *data)
{ {
hnode->data = data; hnode->data = data;
hnode->next = NULL; hnode->next = NULL;
@ -811,42 +826,49 @@ hnode_t *hnode_init(hnode_t * hnode, void *data)
* Destroy a dynamically allocated node. * Destroy a dynamically allocated node.
*/ */
void hnode_destroy(hnode_t * hnode) void
hnode_destroy (hnode_t * hnode)
{ {
free (hnode); free (hnode);
} }
#undef hnode_put #undef hnode_put
void hnode_put(hnode_t * node, void *data) void
hnode_put (hnode_t * node, void *data)
{ {
node->data = data; node->data = data;
} }
#undef hnode_get #undef hnode_get
void *hnode_get(hnode_t * node) void *
hnode_get (hnode_t * node)
{ {
return node->data; return node->data;
} }
#undef hnode_getkey #undef hnode_getkey
const void *hnode_getkey(hnode_t * node) const void *
hnode_getkey (hnode_t * node)
{ {
return node->key; return node->key;
} }
#undef hash_count #undef hash_count
hashcount_t hash_count(hash_t * hash) hashcount_t
hash_count (hash_t * hash)
{ {
return hash->nodecount; return hash->nodecount;
} }
#undef hash_size #undef hash_size
hashcount_t hash_size(hash_t * hash) hashcount_t
hash_size (hash_t * hash)
{ {
return hash->nchains; return hash->nchains;
} }
static hash_val_t hash_fun_default(const void *key) static hash_val_t
hash_fun_default (const void *key)
{ {
static unsigned long randbox[] = { static unsigned long randbox[] = {
0x49848f1bU, 0xe6255dbaU, 0x36da5bdcU, 0x47bf94e9U, 0x49848f1bU, 0xe6255dbaU, 0x36da5bdcU, 0x47bf94e9U,
@ -869,7 +891,8 @@ static hash_val_t hash_fun_default(const void *key)
return acc; return acc;
} }
static int hash_comp_default(const void *key1, const void *key2) static int
hash_comp_default (const void *key1, const void *key2)
{ {
return strcasecmp (key1, key2); return strcasecmp (key1, key2);
} }
@ -882,7 +905,8 @@ static int hash_comp_default(const void *key1, const void *key2)
typedef char input_t[256]; typedef char input_t[256];
static int tokenize(char *string, ...) static int
tokenize (char *string, ...)
{ {
char **tokptr; char **tokptr;
va_list arglist; va_list arglist;
@ -909,7 +933,8 @@ static int tokenize(char *string, ...)
return tokcount; return tokcount;
} }
static char *dupstring(char *str) static char *
dupstring (char *str)
{ {
int sz = strlen (str) + 1; int sz = strlen (str) + 1;
char *new = malloc (sz); char *new = malloc (sz);
@ -918,7 +943,8 @@ static char *dupstring(char *str)
return new; return new;
} }
static hnode_t *new_node(void *c) static hnode_t *
new_node (void *c)
{ {
static hnode_t few[5]; static hnode_t few[5];
static int count; static int count;
@ -929,11 +955,13 @@ static hnode_t *new_node(void *c)
return NULL; return NULL;
} }
static void del_node(hnode_t * n, void *c) static void
del_node (hnode_t * n, void *c)
{ {
} }
int main(void) int
main (void)
{ {
input_t in; input_t in;
hash_t *h = hash_create (HASHCOUNT_T_MAX, 0, 0); hash_t *h = hash_create (HASHCOUNT_T_MAX, 0, 0);
@ -953,9 +981,7 @@ int main(void)
"+ increase hash table (private func)\n" "+ increase hash table (private func)\n"
"- decrease hash table (private func)\n" "- decrease hash table (private func)\n"
"b print hash_t_bit value\n" "b print hash_t_bit value\n"
"p turn prompt on\n" "p turn prompt on\n" "s switch to non-functioning allocator\n" "q quit";
"s switch to non-functioning allocator\n"
"q quit";
if (!h) if (!h)
puts ("hash_create failed"); puts ("hash_create failed");
@ -976,8 +1002,7 @@ int main(void)
printf ("%d\n", hash_val_t_bit); printf ("%d\n", hash_val_t_bit);
break; break;
case 'a': case 'a':
if (tokenize(in + 1, &tok1, &tok2, (char **) 0) != if (tokenize (in + 1, &tok1, &tok2, (char **) 0) != 2) {
2) {
puts ("what?"); puts ("what?");
break; break;
} }
@ -1035,9 +1060,7 @@ int main(void)
case 't': case 't':
hash_scan_begin (&hs, h); hash_scan_begin (&hs, h);
while ((hn = hash_scan_next (&hs))) while ((hn = hash_scan_next (&hs)))
printf("%s\t%s\n", printf ("%s\t%s\n", (char *) hnode_getkey (hn), (char *) hnode_get (hn));
(char *) hnode_getkey(hn),
(char *) hnode_get(hn));
break; break;
case '+': case '+':
grow_table (h); /* private function */ grow_table (h); /* private function */

6
hash.h
View file

@ -37,7 +37,7 @@
* into proprietary software; there is no requirement for such software to * into proprietary software; there is no requirement for such software to
* contain a copyright notice related to this source. * contain a copyright notice related to this source.
* *
* $Id: hash.h,v 1.3 2003/05/26 09:18:28 fishwaldo Exp $ * $Id: hash.h,v 1.4 2003/07/30 13:58:22 fishwaldo Exp $
* $Name: $ * $Name: $
*/ */
@ -214,8 +214,7 @@ extern void hash_set_allocator(hash_t *, hnode_alloc_t, hnode_free_t, void *);
extern void hash_destroy (hash_t *); extern void hash_destroy (hash_t *);
extern void hash_free_nodes (hash_t *); extern void hash_free_nodes (hash_t *);
extern void hash_free (hash_t *); extern void hash_free (hash_t *);
extern hash_t *hash_init(hash_t *, hashcount_t, hash_comp_t, extern hash_t *hash_init (hash_t *, hashcount_t, hash_comp_t, hash_fun_t, hnode_t **, hashcount_t);
hash_fun_t, hnode_t **, hashcount_t);
extern void hash_insert (hash_t *, hnode_t *, const void *); extern void hash_insert (hash_t *, hnode_t *, const void *);
extern hnode_t *hash_lookup (hash_t *, const void *); extern hnode_t *hash_lookup (hash_t *, const void *);
extern hnode_t *hash_delete (hash_t *, hnode_t *); extern hnode_t *hash_delete (hash_t *, hnode_t *);
@ -259,5 +258,4 @@ extern void hnode_destroy(hnode_t *);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif #endif

373
hybrid7.c
View file

@ -18,7 +18,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: hybrid7.c,v 1.22 2003/07/15 09:16:15 fishwaldo Exp $ ** $Id: hybrid7.c,v 1.23 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
#include "stats.h" #include "stats.h"
@ -165,28 +165,30 @@ Oper_Modes usr_mds[] = {
{0, 0, 0} {0, 0, 0}
}; };
void init_ircd() void
init_ircd ()
{ {
/* count the number of commands */ /* count the number of commands */
ircd_srv.cmdcount = ((sizeof (cmd_list) / sizeof (cmd_list[0])) - 1); ircd_srv.cmdcount = ((sizeof (cmd_list) / sizeof (cmd_list[0])) - 1);
}; };
int seob_cmd(const char *server) int
seob_cmd (const char *server)
{ {
sts (":%s %s", server, MSG_EOB); sts (":%s %s", server, MSG_EOB);
return 1; return 1;
} }
int sserver_cmd(const char *name, const int numeric, const char *infoline) int
sserver_cmd (const char *name, const int numeric, const char *infoline)
{ {
sts(":%s %s %s %d :%s", me.name, MSG_SERVER, name, numeric, sts (":%s %s %s %d :%s", me.name, MSG_SERVER, name, numeric, infoline);
infoline);
return 1; return 1;
} }
int slogin_cmd(const char *name, const int numeric, const char *infoline, int
const char *pass) slogin_cmd (const char *name, const int numeric, const char *infoline, const char *pass)
{ {
sts ("%s %s :TS", MSG_PASS, pass); sts ("%s %s :TS", MSG_PASS, pass);
sts ("CAPAB :TS EX CHW IE EOB KLN GLN KNOCK HOPS HUB AOPS MX"); sts ("CAPAB :TS EX CHW IE EOB KLN GLN KNOCK HOPS HUB AOPS MX");
@ -194,55 +196,60 @@ int slogin_cmd(const char *name, const int numeric, const char *infoline,
return 1; return 1;
} }
int ssquit_cmd(const char *server) int
ssquit_cmd (const char *server)
{ {
sts ("%s %s", MSG_SQUIT, server); sts ("%s %s", MSG_SQUIT, server);
return 1; return 1;
} }
int sprotocol_cmd(const char *option) int
sprotocol_cmd (const char *option)
{ {
return 1; return 1;
} }
int squit_cmd(const char *who, const char *quitmsg) int
squit_cmd (const char *who, const char *quitmsg)
{ {
sts (":%s %s :%s", who, MSG_QUIT, quitmsg); sts (":%s %s :%s", who, MSG_QUIT, quitmsg);
DelUser (who); DelUser (who);
return 1; return 1;
} }
int spart_cmd(const char *who, const char *chan) int
spart_cmd (const char *who, const char *chan)
{ {
sts (":%s %s %s", who, MSG_PART, chan); sts (":%s %s %s", who, MSG_PART, chan);
part_chan (finduser (who), (char *) chan); part_chan (finduser (who), (char *) chan);
return 1; return 1;
} }
int sjoin_cmd(const char *who, const char *chan) int
sjoin_cmd (const char *who, const char *chan)
{ {
sts (":%s %s 0 %s + :%s", me.name, MSG_SJOIN, chan, who); sts (":%s %s 0 %s + :%s", me.name, MSG_SJOIN, chan, who);
join_chan (finduser (who), (char *) chan); join_chan (finduser (who), (char *) chan);
return 1; return 1;
} }
int schmode_cmd(const char *who, const char *chan, const char *mode, int
const char *args) schmode_cmd (const char *who, const char *chan, const char *mode, const char *args)
{ {
char **av; char **av;
int ac; int ac;
char tmp[512]; char tmp[512];
sts(":%s %s %s %s %s %lu", who, MSG_MODE, chan, mode, args, sts (":%s %s %s %s %s %lu", who, MSG_MODE, chan, mode, args, time (NULL));
time(NULL));
snprintf (tmp, 512, "%s %s %s", chan, mode, args); snprintf (tmp, 512, "%s %s %s", chan, mode, args);
ac = split_buf (tmp, &av, 0); ac = split_buf (tmp, &av, 0);
ChanMode ("", av, ac); ChanMode ("", av, ac);
free (av); free (av);
return 1; return 1;
} }
int snewnick_cmd(const char *nick, const char *ident, const char *host,
const char *realname, long mode) int
snewnick_cmd (const char *nick, const char *ident, const char *host, const char *realname, long mode)
{ {
int i, j; int i, j;
char newmode[20]; char newmode[20];
@ -256,20 +263,21 @@ int snewnick_cmd(const char *nick, const char *ident, const char *host,
} }
newmode[j] = '\0'; newmode[j] = '\0';
sts("%s %s 1 %lu %s %s %s %s :%s", MSG_NICK, nick, time(NULL), sts ("%s %s 1 %lu %s %s %s %s :%s", MSG_NICK, nick, time (NULL), newmode, ident, host, me.name, realname);
newmode, ident, host, me.name, realname);
AddUser (nick, ident, host, me.name, 0, time (NULL)); AddUser (nick, ident, host, me.name, 0, time (NULL));
UserMode (nick, newmode, 0); UserMode (nick, newmode, 0);
return 1; return 1;
} }
int sping_cmd(const char *from, const char *reply, const char *to) int
sping_cmd (const char *from, const char *reply, const char *to)
{ {
sts (":%s %s %s :%s", from, MSG_PING, reply, to); sts (":%s %s %s :%s", from, MSG_PING, reply, to);
return 1; return 1;
} }
int sumode_cmd(const char *who, const char *target, long mode) int
sumode_cmd (const char *who, const char *target, long mode)
{ {
int i, j; int i, j;
char newmode[20]; char newmode[20];
@ -288,8 +296,8 @@ int sumode_cmd(const char *who, const char *target, long mode)
return 1; return 1;
} }
int snumeric_cmd(const int numeric, const char *target, const char *data, int
...) snumeric_cmd (const int numeric, const char *target, const char *data, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
@ -300,15 +308,16 @@ int snumeric_cmd(const int numeric, const char *target, const char *data,
return 1; return 1;
} }
int spong_cmd(const char *reply) int
spong_cmd (const char *reply)
{ {
sts ("%s %s", MSG_PONG, reply); sts ("%s %s", MSG_PONG, reply);
return 1; return 1;
} }
int skill_cmd(const char *from, const char *target, const char *reason, int
...) skill_cmd (const char *from, const char *target, const char *reason, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
@ -319,89 +328,79 @@ int skill_cmd(const char *from, const char *target, const char *reason,
DelUser (target); DelUser (target);
return 1; return 1;
} }
int ssvskill_cmd(const char *who, const char *reason, ...)
int
ssvskill_cmd (const char *who, const char *reason, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
va_start (ap, reason); va_start (ap, reason);
vsnprintf (buf, 512, reason, ap); vsnprintf (buf, 512, reason, ap);
sts(":%s %s %s :%s", me.name, MSG_KILL, sts (":%s %s %s :%s", me.name, MSG_KILL, who, buf);
who, buf);
va_end (ap); va_end (ap);
/* hybrid doesn't have svskill, so this is handled just like a normal kill */ /* hybrid doesn't have svskill, so this is handled just like a normal kill */
DelUser (who); DelUser (who);
return 1; return 1;
} }
int ssmo_cmd(const char *from, const char *umodetarget, const char *msg) int
ssmo_cmd (const char *from, const char *umodetarget, const char *msg)
{ {
notice(s_Services, notice (s_Services, "Warning, Module %s tried to SMO, which is not supported in Hybrid", segvinmodule);
"Warning, Module %s tried to SMO, which is not supported in Hybrid", nlog (LOG_NOTICE, LOG_CORE, "Warning, Module %s tried to SMO, which is not supported in Hybrid", segvinmodule);
segvinmodule);
nlog(LOG_NOTICE, LOG_CORE,
"Warning, Module %s tried to SMO, which is not supported in Hybrid",
segvinmodule);
return 1; return 1;
} }
int snick_cmd(const char *oldnick, const char *newnick) int
snick_cmd (const char *oldnick, const char *newnick)
{ {
Change_User (finduser (oldnick), newnick); Change_User (finduser (oldnick), newnick);
sts (":%s %s %s %d", oldnick, MSG_NICK, newnick, time (NULL)); sts (":%s %s %s %d", oldnick, MSG_NICK, newnick, time (NULL));
return 1; return 1;
} }
int sswhois_cmd(const char *target, const char *swhois)
int
sswhois_cmd (const char *target, const char *swhois)
{ {
notice(s_Services, notice (s_Services, "Warning Module %s tried to SWHOIS, which is not supported in Hybrid", segvinmodule);
"Warning Module %s tried to SWHOIS, which is not supported in Hybrid", nlog (LOG_NOTICE, LOG_CORE, "Warning. Module %s tried to SWHOIS, which is not supported in Hybrid", segvinmodule);
segvinmodule);
nlog(LOG_NOTICE, LOG_CORE,
"Warning. Module %s tried to SWHOIS, which is not supported in Hybrid",
segvinmodule);
return 1;
}
int ssvsnick_cmd(const char *target, const char *newnick)
{
notice(s_Services,
"Warning Module %s tried to SVSNICK, which is not supported in Hybrid",
segvinmodule);
nlog(LOG_NOTICE, LOG_CORE,
"Warning. Module %s tried to SVSNICK, which is not supported in Hybrid",
segvinmodule);
return 1; return 1;
} }
int ssvsjoin_cmd(const char *target, const char *chan) int
ssvsnick_cmd (const char *target, const char *newnick)
{ {
notice(s_Services, notice (s_Services, "Warning Module %s tried to SVSNICK, which is not supported in Hybrid", segvinmodule);
"Warning Module %s tried to SJOIN, which is not supported in Hybrid", nlog (LOG_NOTICE, LOG_CORE, "Warning. Module %s tried to SVSNICK, which is not supported in Hybrid", segvinmodule);
segvinmodule);
nlog(LOG_NOTICE, LOG_CORE,
"Warning. Module %s tried to SJOIN, which is not supported in Hybrid",
segvinmodule);
return 1; return 1;
} }
int ssvspart_cmd(const char *target, const char *chan) int
ssvsjoin_cmd (const char *target, const char *chan)
{ {
notice(s_Services, notice (s_Services, "Warning Module %s tried to SJOIN, which is not supported in Hybrid", segvinmodule);
"Warning Module %s tried to SVSPART, which is not supported in Hybrid", nlog (LOG_NOTICE, LOG_CORE, "Warning. Module %s tried to SJOIN, which is not supported in Hybrid", segvinmodule);
segvinmodule);
nlog(LOG_NOTICE, LOG_CORE,
"Warning. Module %s tried to SVSPART, which is not supported in Hybrid",
segvinmodule);
return 1; return 1;
} }
int skick_cmd(const char *who, const char *target, const char *chan, int
const char *reason) ssvspart_cmd (const char *target, const char *chan)
{ {
sts(":%s %s %s %s :%s", who, MSG_KICK, chan, target, notice (s_Services, "Warning Module %s tried to SVSPART, which is not supported in Hybrid", segvinmodule);
(reason ? reason : "No Reason Given")); nlog (LOG_NOTICE, LOG_CORE, "Warning. Module %s tried to SVSPART, which is not supported in Hybrid", segvinmodule);
return 1;
}
int
skick_cmd (const char *who, const char *target, const char *chan, const char *reason)
{
sts (":%s %s %s %s :%s", who, MSG_KICK, chan, target, (reason ? reason : "No Reason Given"));
part_chan (finduser (target), (char *) chan); part_chan (finduser (target), (char *) chan);
return 1; return 1;
} }
int swallops_cmd(const char *who, const char *msg, ...)
int
swallops_cmd (const char *who, const char *msg, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
@ -412,23 +411,23 @@ int swallops_cmd(const char *who, const char *msg, ...)
return 1; return 1;
} }
int ssvshost_cmd(const char *who, const char *vhost) int
ssvshost_cmd (const char *who, const char *vhost)
{ {
notice(s_Services, notice (s_Services, "Warning Module %s tried to SVSHOST, which is not supported in Hybrid", segvinmodule);
"Warning Module %s tried to SVSHOST, which is not supported in Hybrid", nlog (LOG_NOTICE, LOG_CORE, "Warning. Module %s tried to SVSHOST, which is not supported in Hybrid", segvinmodule);
segvinmodule);
nlog(LOG_NOTICE, LOG_CORE,
"Warning. Module %s tried to SVSHOST, which is not supported in Hybrid",
segvinmodule);
return 1; return 1;
} }
int ssvinfo_cmd() int
ssvinfo_cmd ()
{ {
sts ("SVINFO 5 3 0 :%d", time (NULL)); sts ("SVINFO 5 3 0 :%d", time (NULL));
return 1; return 1;
} }
int sburst_cmd(int b)
int
sburst_cmd (int b)
{ {
if (b == 0) { if (b == 0) {
sts ("BURST 0"); sts ("BURST 0");
@ -438,8 +437,8 @@ int sburst_cmd(int b)
return 1; return 1;
} }
int sakill_cmd(const char *host, const char *ident, const char *setby, int
const int length, const char *reason, ...) sakill_cmd (const char *host, const char *ident, const char *setby, const int length, const char *reason, ...)
{ {
/* there isn't a akill on Hybrid, so we send a kline to all servers! */ /* there isn't a akill on Hybrid, so we send a kline to all servers! */
hscan_t ss; hscan_t ss;
@ -454,21 +453,22 @@ int sakill_cmd(const char *host, const char *ident, const char *setby,
hash_scan_begin (&ss, sh); hash_scan_begin (&ss, sh);
while ((sn = hash_scan_next (&ss)) != NULL) { while ((sn = hash_scan_next (&ss)) != NULL) {
s = hnode_get (sn); s = hnode_get (sn);
sts(":%s %s %s %lu %s %s :%s", setby, MSG_KLINE, s->name, sts (":%s %s %s %lu %s %s :%s", setby, MSG_KLINE, s->name, length, ident, host, buf);
length, ident, host, buf);
} }
va_end (ap); va_end (ap);
return 1; return 1;
} }
int srakill_cmd(const char *host, const char *ident)
int
srakill_cmd (const char *host, const char *ident)
{ {
chanalert(s_Services, chanalert (s_Services, "Please Manually remove KLINES using /unkline on each server");
"Please Manually remove KLINES using /unkline on each server");
return 1; return 1;
} }
void chanalert(char *who, char *buf, ...) void
chanalert (char *who, char *buf, ...)
{ {
va_list ap; va_list ap;
char tmp[512]; char tmp[512];
@ -477,14 +477,15 @@ void chanalert(char *who, char *buf, ...)
vsnprintf (tmp, 512, buf, ap); vsnprintf (tmp, 512, buf, ap);
if (me.onchan) { if (me.onchan) {
snprintf(out, 512, ":%s PRIVMSG %s :%s", who, me.chan, snprintf (out, 512, ":%s PRIVMSG %s :%s", who, me.chan, tmp);
tmp);
nlog (LOG_DEBUG3, LOG_CORE, "SENT: %s", out); nlog (LOG_DEBUG3, LOG_CORE, "SENT: %s", out);
sts ("%s", out); sts ("%s", out);
} }
va_end (ap); va_end (ap);
} }
void prefmsg(char *to, const char *from, char *fmt, ...)
void
prefmsg (char *to, const char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
@ -492,9 +493,7 @@ void prefmsg(char *to, const char *from, char *fmt, ...)
va_start (ap, fmt); va_start (ap, fmt);
vsnprintf (buf2, sizeof (buf2), fmt, ap); vsnprintf (buf2, sizeof (buf2), fmt, ap);
if (findbot (to)) { if (findbot (to)) {
chanalert(s_Services, chanalert (s_Services, "Message From our Bot(%s) to Our Bot(%s), Dropping Message", from, to);
"Message From our Bot(%s) to Our Bot(%s), Dropping Message",
from, to);
return; return;
} }
if (me.want_privmsg) { if (me.want_privmsg) {
@ -505,15 +504,15 @@ void prefmsg(char *to, const char *from, char *fmt, ...)
sts ("%s", buf); sts ("%s", buf);
va_end (ap); va_end (ap);
} }
void privmsg(char *to, const char *from, char *fmt, ...)
void
privmsg (char *to, const char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
if (findbot (to)) { if (findbot (to)) {
chanalert(s_Services, chanalert (s_Services, "Message From our Bot(%s) to Our Bot(%s), Dropping Message", from, to);
"Message From our Bot(%s) to Our Bot(%s), Dropping Message",
from, to);
return; return;
} }
@ -524,15 +523,14 @@ void privmsg(char *to, const char *from, char *fmt, ...)
va_end (ap); va_end (ap);
} }
void notice(char *to, const char *from, char *fmt, ...) void
notice (char *to, const char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
if (findbot (to)) { if (findbot (to)) {
chanalert(s_Services, chanalert (s_Services, "Message From our Bot(%s) to Our Bot(%s), Dropping Message", from, to);
"Message From our Bot(%s) to Our Bot(%s), Dropping Message",
from, to);
return; return;
} }
@ -544,7 +542,8 @@ void notice(char *to, const char *from, char *fmt, ...)
} }
void privmsg_list(char *to, char *from, const char **text) void
privmsg_list (char *to, char *from, const char **text)
{ {
while (*text) { while (*text) {
if (**text) if (**text)
@ -556,7 +555,8 @@ void privmsg_list(char *to, char *from, const char **text)
} }
void globops(char *from, char *fmt, ...) void
globops (char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
@ -576,7 +576,8 @@ void globops(char *from, char *fmt, ...)
va_end (ap); va_end (ap);
} }
void Srv_Sjoin(char *origin, char **argv, int argc) void
Srv_Sjoin (char *origin, char **argv, int argc)
{ {
char nick[MAXNICK]; char nick[MAXNICK];
long mode = 0; long mode = 0;
@ -603,22 +604,17 @@ void Srv_Sjoin(char *origin, char **argv, int argc)
goto nomodes; goto nomodes;
} }
while (*modes) { while (*modes) {
for (i = 0; for (i = 0; i < ((sizeof (cFlagTab) / sizeof (cFlagTab[0])) - 1); i++) {
i < ((sizeof(cFlagTab) / sizeof(cFlagTab[0])) - 1);
i++) {
if (*modes == cFlagTab[i].flag) { if (*modes == cFlagTab[i].flag) {
if (cFlagTab[i].parameters) { if (cFlagTab[i].parameters) {
m = smalloc (sizeof (ModesParm)); m = smalloc (sizeof (ModesParm));
m->mode = cFlagTab[i].mode; m->mode = cFlagTab[i].mode;
strncpy(m->param, argv[j], strncpy (m->param, argv[j], PARAMSIZE);
PARAMSIZE);
mn = lnode_create (m); mn = lnode_create (m);
if (!list_isfull (tl)) { if (!list_isfull (tl)) {
list_append (tl, mn); list_append (tl, mn);
} else { } else {
nlog(LOG_CRITICAL, nlog (LOG_CRITICAL, LOG_CORE, "Eeeek, tl list is full in Svr_Sjoin(ircd.c)");
LOG_CORE,
"Eeeek, tl list is full in Svr_Sjoin(ircd.c)");
do_exit (0); do_exit (0);
} }
j++; j++;
@ -634,10 +630,7 @@ void Srv_Sjoin(char *origin, char **argv, int argc)
modes = argv[j]; modes = argv[j];
mode = 0; mode = 0;
while (ok == 1) { while (ok == 1) {
for (i = 0; for (i = 0; i < ((sizeof (cFlagTab) / sizeof (cFlagTab[0])) - 1); i++) {
i <
((sizeof(cFlagTab) / sizeof(cFlagTab[0])) -
1); i++) {
if (cFlagTab[i].sjoin != 0) { if (cFlagTab[i].sjoin != 0) {
if (*modes == cFlagTab[i].sjoin) { if (*modes == cFlagTab[i].sjoin) {
mode |= cFlagTab[i].mode; mode |= cFlagTab[i].mode;
@ -650,8 +643,7 @@ void Srv_Sjoin(char *origin, char **argv, int argc)
break; break;
} }
join_chan (finduser (nick), argv[1]); join_chan (finduser (nick), argv[1]);
ChangeChanUserMode(findchan(argv[1]), finduser(nick), 1, ChangeChanUserMode (findchan (argv[1]), finduser (nick), 1, mode);
mode);
j++; j++;
ok = 1; ok = 1;
} }
@ -662,15 +654,15 @@ void Srv_Sjoin(char *origin, char **argv, int argc)
list_transfer (c->modeparms, tl, list_first (tl)); list_transfer (c->modeparms, tl, list_first (tl));
} else { } else {
/* eeeeeeek, list is full! */ /* eeeeeeek, list is full! */
nlog(LOG_CRITICAL, LOG_CORE, nlog (LOG_CRITICAL, LOG_CORE, "Eeeek, c->modeparms list is full in Svr_Sjoin(ircd.c)");
"Eeeek, c->modeparms list is full in Svr_Sjoin(ircd.c)");
do_exit (0); do_exit (0);
} }
} }
list_destroy (tl); list_destroy (tl);
} }
void Srv_Burst(char *origin, char **argv, int argc) void
Srv_Burst (char *origin, char **argv, int argc)
{ {
if (argc > 0) { if (argc > 0) {
if (ircd_srv.burst == 1) { if (ircd_srv.burst == 1) {
@ -686,7 +678,8 @@ void Srv_Burst(char *origin, char **argv, int argc)
init_ServBot (); init_ServBot ();
} }
void Srv_Connect(char *origin, char **argv, int argc) void
Srv_Connect (char *origin, char **argv, int argc)
{ {
int i; int i;
@ -698,49 +691,62 @@ void Srv_Connect(char *origin, char **argv, int argc)
} }
void Usr_Stats(char *origin, char **argv, int argc) void
Usr_Stats (char *origin, char **argv, int argc)
{ {
User *u; User *u;
u = finduser (origin); u = finduser (origin);
if (!u) { if (!u) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Recieved a Message from a Unknown User! (%s)", origin);
"Recieved a Message from a Unknown User! (%s)",
origin);
} }
ShowStats (argv[0], u); ShowStats (argv[0], u);
} }
void Usr_Version(char *origin, char **argv, int argc) void
Usr_Version (char *origin, char **argv, int argc)
{ {
snumeric_cmd(351, origin, "%d.%d.%d%s :%s -> %s %s", MAJOR, MINOR, snumeric_cmd (351, origin, "%d.%d.%d%s :%s -> %s %s", MAJOR, MINOR, REV, version, me.name, version_date, version_time);
REV, version, me.name, version_date, version_time);
} }
void Usr_ShowMOTD(char *origin, char **argv, int argc)
void
Usr_ShowMOTD (char *origin, char **argv, int argc)
{ {
ShowMOTD (origin); ShowMOTD (origin);
} }
void Usr_ShowADMIN(char *origin, char **argv, int argc)
void
Usr_ShowADMIN (char *origin, char **argv, int argc)
{ {
ShowADMIN (origin); ShowADMIN (origin);
} }
void Usr_Showcredits(char *origin, char **argv, int argc)
void
Usr_Showcredits (char *origin, char **argv, int argc)
{ {
Showcredits (origin); Showcredits (origin);
} }
void Usr_AddServer(char *origin, char **argv, int argc)
void
Usr_AddServer (char *origin, char **argv, int argc)
{ {
AddServer (argv[0], origin, atoi (argv[1])); AddServer (argv[0], origin, atoi (argv[1]));
} }
void Usr_DelServer(char *origin, char **argv, int argc)
void
Usr_DelServer (char *origin, char **argv, int argc)
{ {
DelServer (argv[0]); DelServer (argv[0]);
} }
void Usr_DelUser(char *origin, char **argv, int argc)
void
Usr_DelUser (char *origin, char **argv, int argc)
{ {
DelUser (origin); DelUser (origin);
} }
void Usr_Smode(char *origin, char **argv, int argc)
void
Usr_Smode (char *origin, char **argv, int argc)
{ {
if (!strchr (argv[0], '#')) { if (!strchr (argv[0], '#')) {
/* its user svsmode change */ /* its user svsmode change */
@ -750,7 +756,8 @@ void Usr_Smode(char *origin, char **argv, int argc)
ChanMode (origin, argv, argc); ChanMode (origin, argv, argc);
} }
} }
void Usr_Mode(char *origin, char **argv, int argc) void
Usr_Mode (char *origin, char **argv, int argc)
{ {
if (!strchr (argv[0], '#')) { if (!strchr (argv[0], '#')) {
nlog (LOG_DEBUG1, LOG_CORE, "Mode: UserMode: %s", argv[0]); nlog (LOG_DEBUG1, LOG_CORE, "Mode: UserMode: %s", argv[0]);
@ -759,18 +766,19 @@ void Usr_Mode(char *origin, char **argv, int argc)
ChanMode (origin, argv, argc); ChanMode (origin, argv, argc);
} }
} }
void Usr_Kill(char *origin, char **argv, int argc) void
Usr_Kill (char *origin, char **argv, int argc)
{ {
User *u; User *u;
u = finduser (argv[0]); u = finduser (argv[0]);
if (u) { if (u) {
KillUser (argv[0]); KillUser (argv[0]);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, "Can't find user %s for Kill", nlog (LOG_WARNING, LOG_CORE, "Can't find user %s for Kill", argv[0]);
argv[0]);
} }
} }
void Usr_Vhost(char *origin, char **argv, int argc) void
Usr_Vhost (char *origin, char **argv, int argc)
{ {
User *u; User *u;
u = finduser (origin); u = finduser (origin);
@ -778,18 +786,19 @@ void Usr_Vhost(char *origin, char **argv, int argc)
strncpy (u->vhost, argv[0], MAXHOST); strncpy (u->vhost, argv[0], MAXHOST);
} }
} }
void Usr_Pong(char *origin, char **argv, int argc) void
Usr_Pong (char *origin, char **argv, int argc)
{ {
Server *s; Server *s;
s = findserver (argv[0]); s = findserver (argv[0]);
if (s) { if (s) {
dopong (s); dopong (s);
} else { } else {
nlog(LOG_NOTICE, LOG_CORE, nlog (LOG_NOTICE, LOG_CORE, "Received PONG from unknown server: %s", argv[0]);
"Received PONG from unknown server: %s", argv[0]);
} }
} }
void Usr_Away(char *origin, char **argv, int argc) void
Usr_Away (char *origin, char **argv, int argc)
{ {
User *u = finduser (origin); User *u = finduser (origin);
char *buf; char *buf;
@ -804,22 +813,22 @@ void Usr_Away(char *origin, char **argv, int argc)
free (buf); free (buf);
} }
} else { } else {
nlog(LOG_NOTICE, LOG_CORE, nlog (LOG_NOTICE, LOG_CORE, "Warning, Unable to find User %s for Away", origin);
"Warning, Unable to find User %s for Away", origin);
} }
} }
void Usr_Nick(char *origin, char **argv, int argc) void
Usr_Nick (char *origin, char **argv, int argc)
{ {
User *u = finduser (origin); User *u = finduser (origin);
if (u) { if (u) {
Change_User (u, argv[0]); Change_User (u, argv[0]);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Ehh, Can't find the user for %s", origin);
"Ehh, Can't find the user for %s", origin);
} }
} }
void Usr_Topic(char *origin, char **argv, int argc) void
Usr_Topic (char *origin, char **argv, int argc)
{ {
char *buf; char *buf;
Chans *c; Chans *c;
@ -829,13 +838,13 @@ void Usr_Topic(char *origin, char **argv, int argc)
Change_Topic (origin, c, time (NULL), buf); Change_Topic (origin, c, time (NULL), buf);
free (buf); free (buf);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, "Ehhh, Can't find Channel %s", nlog (LOG_WARNING, LOG_CORE, "Ehhh, Can't find Channel %s", argv[0]);
argv[0]);
} }
} }
void Usr_Kick(char *origin, char **argv, int argc) void
Usr_Kick (char *origin, char **argv, int argc)
{ {
User *u, *k; User *u, *k;
u = finduser (argv[1]); u = finduser (argv[1]);
@ -843,12 +852,11 @@ void Usr_Kick(char *origin, char **argv, int argc)
if (u) { if (u) {
kick_chan (u, argv[0], k); kick_chan (u, argv[0], k);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Warning, Can't find user %s for kick %s", argv[1], argv[0]);
"Warning, Can't find user %s for kick %s", argv[1],
argv[0]);
} }
} }
void Usr_Join(char *origin, char **argv, int argc) void
Usr_Join (char *origin, char **argv, int argc)
{ {
char *s, *t; char *s, *t;
t = argv[0]; t = argv[0];
@ -859,21 +867,26 @@ void Usr_Join(char *origin, char **argv, int argc)
join_chan (finduser (origin), s); join_chan (finduser (origin), s);
} }
} }
void Usr_Part(char *origin, char **argv, int argc) void
Usr_Part (char *origin, char **argv, int argc)
{ {
part_chan (finduser (origin), argv[0]); part_chan (finduser (origin), argv[0]);
} }
void Srv_Ping(char *origin, char **argv, int argc)
void
Srv_Ping (char *origin, char **argv, int argc)
{ {
spong_cmd (argv[0]); spong_cmd (argv[0]);
} }
void Srv_Svinfo(char *origin, char **argv, int argc) void
Srv_Svinfo (char *origin, char **argv, int argc)
{ {
ssvinfo_cmd (); ssvinfo_cmd ();
} }
void Srv_Netinfo(char *origin, char **argv, int argc) void
Srv_Netinfo (char *origin, char **argv, int argc)
{ {
me.onchan = 1; me.onchan = 1;
ircd_srv.uprot = atoi (argv[2]); ircd_srv.uprot = atoi (argv[2]);
@ -888,10 +901,12 @@ void Srv_Netinfo(char *origin, char **argv, int argc)
me.synced = 1; me.synced = 1;
} }
void Srv_Pass(char *origin, char **argv, int argc) void
Srv_Pass (char *origin, char **argv, int argc)
{ {
} }
void Srv_Server(char *origin, char **argv, int argc) void
Srv_Server (char *origin, char **argv, int argc)
{ {
Server *s; Server *s;
if (*origin == 0) { if (*origin == 0) {
@ -902,27 +917,28 @@ void Srv_Server(char *origin, char **argv, int argc)
s = findserver (argv[0]); s = findserver (argv[0]);
me.s = s; me.s = s;
} }
void Srv_Squit(char *origin, char **argv, int argc)
void
Srv_Squit (char *origin, char **argv, int argc)
{ {
Server *s; Server *s;
s = findserver (argv[0]); s = findserver (argv[0]);
if (s) { if (s) {
DelServer (argv[0]); DelServer (argv[0]);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Waring, Squit from Unknown Server %s", argv[0]);
"Waring, Squit from Unknown Server %s", argv[0]);
} }
} }
/* BE REALLY CAREFULL ABOUT THE ORDER OF THESE ifdef's */ /* BE REALLY CAREFULL ABOUT THE ORDER OF THESE ifdef's */
void Srv_Nick(char *origin, char **argv, int argc) void
Srv_Nick (char *origin, char **argv, int argc)
{ {
char *realname; char *realname;
AddUser(argv[0], argv[4], argv[5], argv[6], 0, AddUser (argv[0], argv[4], argv[5], argv[6], 0, strtoul (argv[2], NULL, 10));
strtoul(argv[2], NULL, 10));
realname = joinbuf (argv, argc, 7); realname = joinbuf (argv, argc, 7);
AddRealName (argv[0], realname); AddRealName (argv[0], realname);
free (realname); free (realname);
@ -930,12 +946,13 @@ void Srv_Nick(char *origin, char **argv, int argc)
UserMode (argv[0], argv[3], 0); UserMode (argv[0], argv[3], 0);
} }
void Srv_Kill(char *origin, char **argv, int argc) void
Srv_Kill (char *origin, char **argv, int argc)
{ {
} }
int SignOn_NewBot(const char *nick, const char *user, const char *host, int
const char *rname, long Umode) SignOn_NewBot (const char *nick, const char *user, const char *host, const char *rname, long Umode)
{ {
snewnick_cmd (nick, user, host, rname, Umode); snewnick_cmd (nick, user, host, rname, Umode);

View file

@ -18,7 +18,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: hybrid7.h,v 1.12 2003/07/23 10:35:47 fishwaldo Exp $ ** $Id: hybrid7.h,v 1.13 2003/07/30 13:58:22 fishwaldo Exp $
*/ */

214
ircd.c
View file

@ -22,7 +22,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: ircd.c,v 1.134 2003/07/22 11:50:51 fishwaldo Exp $ ** $Id: ircd.c,v 1.135 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
#include <setjmp.h> #include <setjmp.h>
#include "stats.h" #include "stats.h"
@ -34,8 +34,8 @@ extern const char protocol_version[];
extern IntCommands cmd_list[]; extern IntCommands cmd_list[];
int init_bot(char *nick, char *user, char *host, char *rname, char *modes, int
char *mod_name) init_bot (char *nick, char *user, char *host, char *rname, char *modes, char *mod_name)
{ {
User *u; User *u;
char **av; char **av;
@ -49,15 +49,11 @@ int init_bot(char *nick, char *user, char *host, char *rname, char *modes,
strcpy (segv_location, "init_bot"); strcpy (segv_location, "init_bot");
u = finduser (nick); u = finduser (nick);
if (u) { if (u) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Attempting to Login with a Nickname that already Exists: %s", nick);
"Attempting to Login with a Nickname that already Exists: %s",
nick);
return -1; return -1;
} }
if (strlen (user) > 8) { if (strlen (user) > 8) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Warning, %s bot %s has a username longer than 8 chars. Some IRCd's don't like that", mod_name, nick);
"Warning, %s bot %s has a username longer than 8 chars. Some IRCd's don't like that",
mod_name, nick);
} }
add_mod_user (nick, mod_name); add_mod_user (nick, mod_name);
Umode = 0; Umode = 0;
@ -71,17 +67,13 @@ int init_bot(char *nick, char *user, char *host, char *rname, char *modes,
add = 0; add = 0;
break; break;
default: default:
for (i = 0; for (i = 0; i < ((sizeof (usr_mds) / sizeof (usr_mds[0])) - 1); i++) {
i <
((sizeof(usr_mds) / sizeof(usr_mds[0])) - 1);
i++) {
if (usr_mds[i].mode == tmpmode) { if (usr_mds[i].mode == tmpmode) {
if (add) { if (add) {
Umode |= usr_mds[i].umodes; Umode |= usr_mds[i].umodes;
break; break;
} else { } else {
Umode &= Umode &= ~usr_mds[i].umodes;
~usr_mds[i].umodes;
break; break;
} }
} }
@ -98,16 +90,15 @@ int init_bot(char *nick, char *user, char *host, char *rname, char *modes,
return 1; return 1;
} }
int del_bot(char *nick, char *reason) int
del_bot (char *nick, char *reason)
{ {
User *u; User *u;
strcpy (segv_location, "del_bot"); strcpy (segv_location, "del_bot");
u = finduser (nick); u = finduser (nick);
nlog (LOG_DEBUG1, LOG_CORE, "Killing %s for %s", nick, reason); nlog (LOG_DEBUG1, LOG_CORE, "Killing %s for %s", nick, reason);
if (!u) { if (!u) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Attempting to Logoff with a Nickname that does not Exists: %s", nick);
"Attempting to Logoff with a Nickname that does not Exists: %s",
nick);
return -1; return -1;
} }
squit_cmd (nick, reason); squit_cmd (nick, reason);
@ -118,7 +109,8 @@ int del_bot(char *nick, char *reason)
void Module_Event(char *event, char **av, int ac) void
Module_Event (char *event, char **av, int ac)
{ {
Module *module_ptr; Module *module_ptr;
EventFnList *ev_list; EventFnList *ev_list;
@ -134,28 +126,16 @@ void Module_Event(char *event, char **av, int ac)
while (ev_list->cmd_name != NULL) { while (ev_list->cmd_name != NULL) {
/* This goes through each Command */ /* This goes through each Command */
if (!strcasecmp (ev_list->cmd_name, event)) { if (!strcasecmp (ev_list->cmd_name, event)) {
nlog(LOG_DEBUG1, LOG_CORE, nlog (LOG_DEBUG1, LOG_CORE, "Running Module %s for Comamnd %s -> %s", module_ptr->info->module_name, event, ev_list->cmd_name);
"Running Module %s for Comamnd %s -> %s", strcpy (segv_location, module_ptr->info->module_name);
module_ptr->info->module_name, strcpy (segvinmodule, module_ptr->info->module_name);
event, ev_list->cmd_name);
strcpy(segv_location,
module_ptr->info->
module_name);
strcpy(segvinmodule,
module_ptr->info->
module_name);
if (setjmp (sigvbuf) == 0) { if (setjmp (sigvbuf) == 0) {
ev_list->function (av, ac); ev_list->function (av, ac);
} else { } else {
nlog(LOG_CRITICAL, nlog (LOG_CRITICAL, LOG_CORE, "setjmp() Failed, Can't call Module %s\n", module_ptr->info->module_name);
LOG_CORE,
"setjmp() Failed, Can't call Module %s\n",
module_ptr->info->
module_name);
} }
strcpy (segvinmodule, ""); strcpy (segvinmodule, "");
strcpy(segv_location, strcpy (segv_location, "Module_Event_Return");
"Module_Event_Return");
break; break;
} }
ev_list++; ev_list++;
@ -178,7 +158,8 @@ void Module_Event(char *event, char **av, int ac)
* the buffer by side effect. * the buffer by side effect.
*/ */
extern int split_buf(char *buf, char ***argv, int colon_special) extern int
split_buf (char *buf, char ***argv, int colon_special)
{ {
int argvsize = 8; int argvsize = 8;
int argc; int argc;
@ -223,7 +204,8 @@ extern int split_buf(char *buf, char ***argv, int colon_special)
return argc - flag; return argc - flag;
} }
extern char *joinbuf(char **av, int ac, int from) extern char *
joinbuf (char **av, int ac, int from)
{ {
int i; int i;
char *buf; char *buf;
@ -239,7 +221,8 @@ extern char *joinbuf(char **av, int ac, int from)
} }
void parse(char *line) void
parse (char *line)
{ {
char origin[64], cmd[64], *coreLine; char origin[64], cmd[64], *coreLine;
char *nick; char *nick;
@ -324,8 +307,7 @@ void parse(char *line)
list = findbot (nick); list = findbot (nick);
/* Check to see if any of the Modules have this nick Registered */ /* Check to see if any of the Modules have this nick Registered */
if (list) { if (list) {
nlog(LOG_DEBUG1, LOG_CORE, "nicks: %s", nlog (LOG_DEBUG1, LOG_CORE, "nicks: %s", list->nick);
list->nick);
if (flood (finduser (origin))) { if (flood (finduser (origin))) {
free (av); free (av);
return; return;
@ -333,11 +315,8 @@ void parse(char *line)
/* Check to make sure there are no blank spaces so we dont crash */ /* Check to make sure there are no blank spaces so we dont crash */
if (strlen (av[1]) >= 350) { if (strlen (av[1]) >= 350) {
prefmsg(origin, s_Services, prefmsg (origin, s_Services, "command line too long!");
"command line too long!"); notice (s_Services, "%s tried to send a very LARGE command, we told them to shove it!", origin);
notice(s_Services,
"%s tried to send a very LARGE command, we told them to shove it!",
origin);
free (av); free (av);
return; return;
} }
@ -348,8 +327,7 @@ void parse(char *line)
list->function (origin, av, ac); list->function (origin, av, ac);
} }
strcpy (segvinmodule, ""); strcpy (segvinmodule, "");
strcpy(segv_location, strcpy (segv_location, "Return from Module Message");
"Return from Module Message");
free (av); free (av);
if (I == 1) if (I == 1)
free (nick); free (nick);
@ -386,23 +364,14 @@ void parse(char *line)
/* This goes through each Command */ /* This goes through each Command */
if (!strcmp (fn_list->cmd_name, cmd)) { if (!strcmp (fn_list->cmd_name, cmd)) {
if (fn_list->srvmsg == cmdptr) { if (fn_list->srvmsg == cmdptr) {
nlog(LOG_DEBUG1, LOG_CORE, nlog (LOG_DEBUG1, LOG_CORE, "Running Module %s for Function %s", module_ptr->info->module_name, fn_list->cmd_name);
"Running Module %s for Function %s", strcpy (segv_location, module_ptr->info->module_name);
module_ptr->info->module_name, strcpy (segvinmodule, module_ptr->info->module_name);
fn_list->cmd_name);
strcpy(segv_location,
module_ptr->info->
module_name);
strcpy(segvinmodule,
module_ptr->info->
module_name);
if (setjmp (sigvbuf) == 0) { if (setjmp (sigvbuf) == 0) {
fn_list->function(origin, fn_list->function (origin, av, ac);
av, ac);
} }
strcpy (segvinmodule, ""); strcpy (segvinmodule, "");
strcpy(segv_location, strcpy (segv_location, "Parse_Return_Module");
"Parse_Return_Module");
break; break;
} }
} }
@ -423,7 +392,8 @@ void parse(char *line)
/* Here are the Following Internal Functions. /* Here are the Following Internal Functions.
they should update the internal Structures */ they should update the internal Structures */
void init_ServBot() void
init_ServBot ()
{ {
char rname[63]; char rname[63];
char **av; char **av;
@ -433,8 +403,7 @@ void init_ServBot()
/* nick already exists on the network */ /* nick already exists on the network */
snprintf (s_Services, MAXNICK, "NeoStats1"); snprintf (s_Services, MAXNICK, "NeoStats1");
snprintf (rname, 63, "/msg %s \2HELP\2", s_Services); snprintf (rname, 63, "/msg %s \2HELP\2", s_Services);
SignOn_NewBot(s_Services, Servbot.user, Servbot.host, rname, SignOn_NewBot (s_Services, Servbot.user, Servbot.host, rname, UMODE_SERVICES);
UMODE_SERVICES);
me.onchan = 1; me.onchan = 1;
AddStringToList (&av, me.uplink, &ac); AddStringToList (&av, me.uplink, &ac);
Module_Event ("ONLINE", av, ac); Module_Event ("ONLINE", av, ac);
@ -446,7 +415,8 @@ void init_ServBot()
} }
void dopong(Server * s) void
dopong (Server * s)
{ {
char **av; char **av;
int ac = 0; int ac = 0;
@ -460,14 +430,14 @@ void dopong(Server * s)
Module_Event ("PONG", av, ac); Module_Event ("PONG", av, ac);
free (av); free (av);
} else { } else {
nlog(LOG_NOTICE, LOG_CORE, nlog (LOG_NOTICE, LOG_CORE, "Received PONG from unknown server: %s", recbuf);
"Received PONG from unknown server: %s", recbuf);
} }
} }
int flood(User * u) int
flood (User * u)
{ {
time_t current = time (NULL); time_t current = time (NULL);
@ -483,11 +453,8 @@ int flood(User * u)
return 0; return 0;
} }
if (u->flood >= 5) { if (u->flood >= 5) {
nlog(LOG_NORMAL, LOG_CORE, "FLOODING: %s!%s@%s", u->nick, nlog (LOG_NORMAL, LOG_CORE, "FLOODING: %s!%s@%s", u->nick, u->username, u->hostname);
u->username, u->hostname); ssvskill_cmd (u->nick, "%s!%s (Flooding Services.)", Servbot.host, s_Services);
ssvskill_cmd(u->nick,
"%s!%s (Flooding Services.)", Servbot.host,
s_Services);
return 1; return 1;
} else { } else {
u->flood++; u->flood++;
@ -496,15 +463,14 @@ int flood(User * u)
} }
/* Display our MOTD Message of the Day from the external neostats.motd file */ /* Display our MOTD Message of the Day from the external neostats.motd file */
void ShowMOTD(char *nick) void
ShowMOTD (char *nick)
{ {
FILE *fp; FILE *fp;
char buf[BUFSIZE]; char buf[BUFSIZE];
snumeric_cmd (375, nick, ":- %s Message of the Day -", me.name); snumeric_cmd (375, nick, ":- %s Message of the Day -", me.name);
snumeric_cmd(372, nick, snumeric_cmd (372, nick, ":- %d.%d.%d%s. Copyright (c) 1999 - 2002 The NeoStats Group", MAJOR, MINOR, REV, version);
":- %d.%d.%d%s. Copyright (c) 1999 - 2002 The NeoStats Group",
MAJOR, MINOR, REV, version);
snumeric_cmd (372, nick, ":-"); snumeric_cmd (372, nick, ":-");
fp = fopen ("neostats.motd", "r"); fp = fopen ("neostats.motd", "r");
@ -523,15 +489,14 @@ void ShowMOTD(char *nick)
/* Display the ADMIN Message from the external stats.admin file */ /* Display the ADMIN Message from the external stats.admin file */
void ShowADMIN(char *nick) void
ShowADMIN (char *nick)
{ {
FILE *fp; FILE *fp;
char buf[BUFSIZE]; char buf[BUFSIZE];
snumeric_cmd (256, nick, ":- %s NeoStats Admins -", me.name); snumeric_cmd (256, nick, ":- %s NeoStats Admins -", me.name);
snumeric_cmd(256, nick, snumeric_cmd (256, nick, ":- %d.%d.%d%s. Copyright (c) 1999 - 2002 The NeoStats Group", MAJOR, MINOR, REV, version);
":- %d.%d.%d%s. Copyright (c) 1999 - 2002 The NeoStats Group",
MAJOR, MINOR, REV, version);
fp = fopen ("stats.admin", "r"); fp = fopen ("stats.admin", "r");
@ -546,48 +511,33 @@ void ShowADMIN(char *nick)
} }
void Showcredits(char *nick) void
Showcredits (char *nick)
{ {
snumeric_cmd(351, nick, ":- NeoStats %d.%d.%d%s Credits ", MAJOR, snumeric_cmd (351, nick, ":- NeoStats %d.%d.%d%s Credits ", MAJOR, MINOR, REV, version);
MINOR, REV, version); snumeric_cmd (351, nick, ":- Now Maintained by Shmad (shmad@neostats.net) and ^Enigma^ (enigma@neostats.net)");
snumeric_cmd(351, nick, snumeric_cmd (351, nick, ":- For Support, you can find ^Enigma^ or Shmad at");
":- Now Maintained by Shmad (shmad@neostats.net) and ^Enigma^ (enigma@neostats.net)");
snumeric_cmd(351, nick,
":- For Support, you can find ^Enigma^ or Shmad at");
snumeric_cmd (351, nick, ":- irc.irc-chat.net #NeoStats"); snumeric_cmd (351, nick, ":- irc.irc-chat.net #NeoStats");
snumeric_cmd (351, nick, ":- Thanks to:"); snumeric_cmd (351, nick, ":- Thanks to:");
snumeric_cmd(351, nick, snumeric_cmd (351, nick, ":- \2Fish\2 still part of the team with patch submissions.");
":- \2Fish\2 still part of the team with patch submissions."); snumeric_cmd (351, nick, ":- Stskeeps for Writting the best IRCD ever!");
snumeric_cmd(351, nick, snumeric_cmd (351, nick, ":- chrisv@b0rked.dhs.org for the Code for Dynamically Loading Modules (Hurrican IRCD)");
":- Stskeeps for Writting the best IRCD ever!"); snumeric_cmd (351, nick, ":- monkeyIRCD for the Module Segv Catching code");
snumeric_cmd(351, nick, snumeric_cmd (351, nick, ":- the Users of Global-irc.net and Dreaming.org for being our Guinea Pigs!");
":- chrisv@b0rked.dhs.org for the Code for Dynamically Loading Modules (Hurrican IRCD)");
snumeric_cmd(351, nick,
":- monkeyIRCD for the Module Segv Catching code");
snumeric_cmd(351, nick,
":- the Users of Global-irc.net and Dreaming.org for being our Guinea Pigs!");
snumeric_cmd (351, nick, ":- Andy For Ideas"); snumeric_cmd (351, nick, ":- Andy For Ideas");
snumeric_cmd(351, nick, snumeric_cmd (351, nick, ":- HeadBang for BetaTesting, and Ideas, And Hassling us for Beta Copies");
":- HeadBang for BetaTesting, and Ideas, And Hassling us for Beta Copies"); snumeric_cmd (351, nick, ":- sre and Jacob for development systems and access");
snumeric_cmd(351, nick, snumeric_cmd (351, nick, ":- Error51 for Translating our FAQ and README files");
":- sre and Jacob for development systems and access"); snumeric_cmd (351, nick, ":- users and opers of irc.irc-chat.net/org for putting up with our constant coding crashes!");
snumeric_cmd(351, nick, snumeric_cmd (351, nick, ":- Eggy for proving to use our code still had bugs when we thought it didn't (and all the bug reports!)");
":- Error51 for Translating our FAQ and README files"); snumeric_cmd (351, nick, ":- Hwy - Helping us even though he also has a similar project, and providing solaris porting tips :)");
snumeric_cmd(351, nick, snumeric_cmd (351, nick, ":- M - Updating lots of Doco and code and providing lots of great feedback");
":- users and opers of irc.irc-chat.net/org for putting up with our constant coding crashes!"); snumeric_cmd (351, nick, ":- J Michael Jones - Giving us Patches to support QuantumIRCd");
snumeric_cmd(351, nick, snumeric_cmd (351, nick, ":- Blud - Giving us patches for Mystic IRCd");
":- Eggy for proving to use our code still had bugs when we thought it didn't (and all the bug reports!)");
snumeric_cmd(351, nick,
":- Hwy - Helping us even though he also has a similar project, and providing solaris porting tips :)");
snumeric_cmd(351, nick,
":- M - Updating lots of Doco and code and providing lots of great feedback");
snumeric_cmd(351, nick,
":- J Michael Jones - Giving us Patches to support QuantumIRCd");
snumeric_cmd(351, nick,
":- Blud - Giving us patches for Mystic IRCd");
} }
void ShowStats(char *what, User * u) void
ShowStats (char *what, User * u)
{ {
time_t tmp; time_t tmp;
time_t tmp2; time_t tmp2;
@ -603,16 +553,11 @@ void ShowStats(char *what, User * u)
if (!strcasecmp (what, "u")) { if (!strcasecmp (what, "u")) {
/* server uptime - Shmad */ /* server uptime - Shmad */
int uptime = time (NULL) - me.t_start; int uptime = time (NULL) - me.t_start;
snumeric_cmd(242, u->nick, snumeric_cmd (242, u->nick, "Statistical Server up %d days, %d:%02d:%02d", uptime / 86400, (uptime / 3600) % 24, (uptime / 60) % 60, uptime % 60);
"Statistical Server up %d days, %d:%02d:%02d",
uptime / 86400, (uptime / 3600) % 24,
(uptime / 60) % 60, uptime % 60);
} else if (!strcasecmp (what, "c")) { } else if (!strcasecmp (what, "c")) {
/* Connections */ /* Connections */
snumeric_cmd(214, u->nick, "N *@%s * * %d 50", me.uplink, snumeric_cmd (214, u->nick, "N *@%s * * %d 50", me.uplink, me.port);
me.port); snumeric_cmd (213, u->nick, "C *@%s * * %d 50", me.uplink, me.port);
snumeric_cmd(213, u->nick, "C *@%s * * %d 50", me.uplink,
me.port);
} else if (!strcasecmp (what, "o")) { } else if (!strcasecmp (what, "o")) {
/* Operators */ /* Operators */
#ifdef EXTAUTH #ifdef EXTAUTH
@ -623,24 +568,17 @@ void ShowStats(char *what, User * u)
(*listauth) (u); (*listauth) (u);
} else } else
#endif #endif
snumeric_cmd(243, u->nick, snumeric_cmd (243, u->nick, "Operators think they are God, but you and I know they are not!");
"Operators think they are God, but you and I know they are not!");
} else if (!strcasecmp (what, "l")) { } else if (!strcasecmp (what, "l")) {
/* Port Lists */ /* Port Lists */
tmp = time (NULL) - me.lastmsg; tmp = time (NULL) - me.lastmsg;
tmp2 = time (NULL) - me.t_start; tmp2 = time (NULL) - me.t_start;
snumeric_cmd(211, u->nick, snumeric_cmd (211, u->nick, "l SendQ SendM SendBytes RcveM RcveBytes Open_Since CPU :IDLE");
"l SendQ SendM SendBytes RcveM RcveBytes Open_Since CPU :IDLE"); snumeric_cmd (241, u->nick, "%s 0 %d %d %d %d %d 0 :%d", me.uplink, me.SendM, me.SendBytes, me.RcveM, me.RcveBytes, tmp2, tmp);
snumeric_cmd(241, u->nick, "%s 0 %d %d %d %d %d 0 :%d",
me.uplink, me.SendM, me.SendBytes, me.RcveM,
me.RcveBytes, tmp2, tmp);
} else if (!strcasecmp (what, "M")) { } else if (!strcasecmp (what, "M")) {
for (I = 0; I < ircd_srv.cmdcount; I++) { for (I = 0; I < ircd_srv.cmdcount; I++) {
if (cmd_list[I].usage > 0) if (cmd_list[I].usage > 0)
snumeric_cmd(212, u->nick, snumeric_cmd (212, u->nick, "Command %s Usage %d", cmd_list[I].name, cmd_list[I].usage);
"Command %s Usage %d",
cmd_list[I].name,
cmd_list[I].usage);
} }
} }
snumeric_cmd (219, u->nick, "%s :End of /STATS report", what); snumeric_cmd (219, u->nick, "%s :End of /STATS report", what);

2
ircd.h
View file

@ -18,7 +18,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: ircd.h,v 1.2 2003/06/26 05:14:16 fishwaldo Exp $ ** $Id: ircd.h,v 1.3 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
#ifndef IRCD_H #ifndef IRCD_H
#define IRCD_H #define IRCD_H

View file

@ -20,7 +20,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: keeper.c,v 1.10 2003/06/13 13:11:49 fishwaldo Exp $ ** $Id: keeper.c,v 1.11 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
#include "stats.h" #include "stats.h"
@ -30,7 +30,8 @@
/** @brief Gets Config Data of Type /** @brief Gets Config Data of Type
*/ */
int GetConf(void **data, int type, const char *item) int
GetConf (void **data, int type, const char *item)
{ {
char keypath[255]; char keypath[255];
int i = 0; int i = 0;
@ -56,9 +57,7 @@ int GetConf(void **data, int type, const char *item)
i = kp_get_bool (keypath, (int *) *&data); i = kp_get_bool (keypath, (int *) *&data);
break; break;
default: default:
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Keeper: Called GetConf with invalid datatype %d", type);
"Keeper: Called GetConf with invalid datatype %d",
type);
return -1; return -1;
} }
/* check for errors */ /* check for errors */
@ -66,8 +65,7 @@ int GetConf(void **data, int type, const char *item)
/* /*
data = malloc(255); data = malloc(255);
*/ */
nlog(LOG_DEBUG1, LOG_CORE, "GetConf: %s - Path: %s", nlog (LOG_DEBUG1, LOG_CORE, "GetConf: %s - Path: %s", kp_strerror (i), keypath);
kp_strerror(i), keypath);
return -1; return -1;
} }
return 1; return 1;
@ -75,7 +73,8 @@ int GetConf(void **data, int type, const char *item)
/* @brief return a array of strings containing all subkeys in a directory */ /* @brief return a array of strings containing all subkeys in a directory */
int GetDir(char *item, char ***data) int
GetDir (char *item, char ***data)
{ {
int i; int i;
char keypath[255]; char keypath[255];
@ -93,8 +92,7 @@ int GetDir(char *item, char ***data)
return 1; return 1;
} }
*data = NULL; *data = NULL;
nlog(LOG_DEBUG1, LOG_CORE, "GetDir: %s - Path: %s", kp_strerror(i), nlog (LOG_DEBUG1, LOG_CORE, "GetDir: %s - Path: %s", kp_strerror (i), keypath);
keypath);
return -1; return -1;
} }
@ -103,7 +101,8 @@ int GetDir(char *item, char ***data)
/** @brief Sets Config Data of Type /** @brief Sets Config Data of Type
*/ */
int SetConf(void *data, int type, char *item) int
SetConf (void *data, int type, char *item)
{ {
char keypath[255]; char keypath[255];
int i = 0; int i = 0;
@ -131,9 +130,7 @@ int SetConf(void *data, int type, char *item)
i = kp_set_bool (keypath, (int) data); i = kp_set_bool (keypath, (int) data);
break; break;
default: default:
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Keeper: Called SetConf with invalid datatype %d", type);
"Keeper: Called SetConf with invalid datatype %d",
type);
return -1; return -1;
} }
/* check for errors */ /* check for errors */

166
list.c
View file

@ -37,7 +37,7 @@
* into proprietary software; there is no requirement for such software to * into proprietary software; there is no requirement for such software to
* contain a copyright notice related to this source. * contain a copyright notice related to this source.
* *
* $Id: list.c,v 1.9 2003/07/17 10:13:51 fishwaldo Exp $ * $Id: list.c,v 1.10 2003/07/30 13:58:22 fishwaldo Exp $
* $Name: $ * $Name: $
*/ */
@ -69,8 +69,7 @@
#define lnode_prev(N) ((N)->prev) #define lnode_prev(N) ((N)->prev)
#ifdef KAZLIB_RCSID #ifdef KAZLIB_RCSID
static const char rcsid[] = static const char rcsid[] = "$Id: list.c,v 1.10 2003/07/30 13:58:22 fishwaldo Exp $";
"$Id: list.c,v 1.9 2003/07/17 10:13:51 fishwaldo Exp $";
#endif #endif
/* /*
@ -80,7 +79,8 @@ static const char rcsid[] =
* is not permitted. * is not permitted.
*/ */
list_t *list_init(list_t * list, listcount_t maxcount) list_t *
list_init (list_t * list, listcount_t maxcount)
{ {
nassert (maxcount != 0); nassert (maxcount != 0);
list->nilnode.next = &list->nilnode; list->nilnode.next = &list->nilnode;
@ -96,7 +96,8 @@ list_t *list_init(list_t * list, listcount_t maxcount)
* should be specified as LISTCOUNT_T_MAX, or, alternately, as -1. * should be specified as LISTCOUNT_T_MAX, or, alternately, as -1.
*/ */
list_t *list_create(listcount_t maxcount) list_t *
list_create (listcount_t maxcount)
{ {
list_t *new = malloc (sizeof *new); list_t *new = malloc (sizeof *new);
if (new) { if (new) {
@ -114,7 +115,8 @@ list_t *list_create(listcount_t maxcount)
* The client must remove the nodes first. * The client must remove the nodes first.
*/ */
void list_destroy(list_t * list) void
list_destroy (list_t * list)
{ {
nassert (list_isempty (list)); nassert (list_isempty (list));
free (list); free (list);
@ -126,10 +128,10 @@ void list_destroy(list_t * list)
* is empty. * is empty.
*/ */
void list_destroy_nodes(list_t * list) void
list_destroy_nodes (list_t * list)
{ {
lnode_t *lnode = list_first_priv(list), *nil = lnode_t *lnode = list_first_priv (list), *nil = list_nil (list), *tmp;
list_nil(list), *tmp;
while (lnode != nil) { while (lnode != nil) {
tmp = lnode->next; tmp = lnode->next;
@ -147,10 +149,10 @@ void list_destroy_nodes(list_t * list)
* the list must all have come from the same pool. * the list must all have come from the same pool.
*/ */
void list_return_nodes(list_t * list, lnodepool_t * pool) void
list_return_nodes (list_t * list, lnodepool_t * pool)
{ {
lnode_t *lnode = list_first_priv(list), *tmp, *nil = lnode_t *lnode = list_first_priv (list), *tmp, *nil = list_nil (list);
list_nil(list);
while (lnode != nil) { while (lnode != nil) {
tmp = lnode->next; tmp = lnode->next;
@ -167,7 +169,8 @@ void list_return_nodes(list_t * list, lnodepool_t * pool)
* Insert the node ``new'' into the list immediately after ``this'' node. * Insert the node ``new'' into the list immediately after ``this'' node.
*/ */
void list_ins_after(list_t * list, lnode_t * new, lnode_t * this) void
list_ins_after (list_t * list, lnode_t * new, lnode_t * this)
{ {
lnode_t *that = this->next; lnode_t *that = this->next;
@ -190,7 +193,8 @@ void list_ins_after(list_t * list, lnode_t * new, lnode_t * this)
* Insert the node ``new'' into the list immediately before ``this'' node. * Insert the node ``new'' into the list immediately before ``this'' node.
*/ */
void list_ins_before(list_t * list, lnode_t * new, lnode_t * this) void
list_ins_before (list_t * list, lnode_t * new, lnode_t * this)
{ {
lnode_t *that = this->prev; lnode_t *that = this->prev;
@ -213,7 +217,8 @@ void list_ins_before(list_t * list, lnode_t * new, lnode_t * this)
* Delete the given node from the list. * Delete the given node from the list.
*/ */
lnode_t *list_delete(list_t * list, lnode_t * del) lnode_t *
list_delete (list_t * list, lnode_t * del)
{ {
lnode_t *next = del->next; lnode_t *next = del->next;
lnode_t *prev = del->prev; lnode_t *prev = del->prev;
@ -235,12 +240,10 @@ lnode_t *list_delete(list_t * list, lnode_t * del)
* call to the function. * call to the function.
*/ */
void list_process(list_t * list, void *context, void
void (*function) (list_t * list, lnode_t * lnode, list_process (list_t * list, void *context, void (*function) (list_t * list, lnode_t * lnode, void *context))
void *context))
{ {
lnode_t *node = list_first_priv(list), *next, *nil = lnode_t *node = list_first_priv (list), *next, *nil = list_nil (list);
list_nil(list);
while (node != nil) { while (node != nil) {
/* check for callback function deleting */ /* check for callback function deleting */
@ -256,7 +259,8 @@ void list_process(list_t * list, void *context,
* Dynamically allocate a list node and assign it the given piece of data. * Dynamically allocate a list node and assign it the given piece of data.
*/ */
lnode_t *lnode_create(void *data) lnode_t *
lnode_create (void *data)
{ {
lnode_t *new = malloc (sizeof *new); lnode_t *new = malloc (sizeof *new);
if (new) { if (new) {
@ -271,7 +275,8 @@ lnode_t *lnode_create(void *data)
* Initialize a user-supplied lnode. * Initialize a user-supplied lnode.
*/ */
lnode_t *lnode_init(lnode_t * lnode, void *data) lnode_t *
lnode_init (lnode_t * lnode, void *data)
{ {
lnode->data = data; lnode->data = data;
lnode->next = NULL; lnode->next = NULL;
@ -283,7 +288,8 @@ lnode_t *lnode_init(lnode_t * lnode, void *data)
* Destroy a dynamically allocated node. * Destroy a dynamically allocated node.
*/ */
void lnode_destroy(lnode_t * lnode) void
lnode_destroy (lnode_t * lnode)
{ {
nassert (!lnode_is_in_a_list (lnode)); nassert (!lnode_is_in_a_list (lnode));
free (lnode); free (lnode);
@ -295,8 +301,8 @@ void lnode_destroy(lnode_t * lnode)
* ``n'' elements. * ``n'' elements.
*/ */
lnodepool_t *lnode_pool_init(lnodepool_t * pool, lnode_t * nodes, lnodepool_t *
listcount_t n) lnode_pool_init (lnodepool_t * pool, lnode_t * nodes, listcount_t n)
{ {
listcount_t i; listcount_t i;
@ -317,7 +323,8 @@ lnodepool_t *lnode_pool_init(lnodepool_t * pool, lnode_t * nodes,
* Create a dynamically allocated pool of n nodes. * Create a dynamically allocated pool of n nodes.
*/ */
lnodepool_t *lnode_pool_create(listcount_t n) lnodepool_t *
lnode_pool_create (listcount_t n)
{ {
lnodepool_t *pool; lnodepool_t *pool;
lnode_t *nodes; lnode_t *nodes;
@ -340,7 +347,8 @@ lnodepool_t *lnode_pool_create(listcount_t n)
* Determine whether the given pool is from this pool. * Determine whether the given pool is from this pool.
*/ */
int lnode_pool_isfrom(lnodepool_t * pool, lnode_t * node) int
lnode_pool_isfrom (lnodepool_t * pool, lnode_t * node)
{ {
listcount_t i; listcount_t i;
@ -359,7 +367,8 @@ int lnode_pool_isfrom(lnodepool_t * pool, lnode_t * node)
* Destroy a dynamically allocated pool of nodes. * Destroy a dynamically allocated pool of nodes.
*/ */
void lnode_pool_destroy(lnodepool_t * p) void
lnode_pool_destroy (lnodepool_t * p)
{ {
free (p->pool); free (p->pool);
free (p); free (p);
@ -370,7 +379,8 @@ void lnode_pool_destroy(lnodepool_t * p)
* is exhausted. * is exhausted.
*/ */
lnode_t *lnode_borrow(lnodepool_t * pool, void *data) lnode_t *
lnode_borrow (lnodepool_t * pool, void *data)
{ {
lnode_t *new = pool->fre; lnode_t *new = pool->fre;
if (new) { if (new) {
@ -387,7 +397,8 @@ lnode_t *lnode_borrow(lnodepool_t * pool, void *data)
* from which it came. * from which it came.
*/ */
void lnode_return(lnodepool_t * pool, lnode_t * node) void
lnode_return (lnodepool_t * pool, lnode_t * node)
{ {
nassert (lnode_pool_isfrom (pool, node)); nassert (lnode_pool_isfrom (pool, node));
nassert (!lnode_is_in_a_list (node)); nassert (!lnode_is_in_a_list (node));
@ -402,7 +413,8 @@ void lnode_return(lnodepool_t * pool, lnode_t * node)
* According to this function, a list does not contain its nilnode. * According to this function, a list does not contain its nilnode.
*/ */
int list_contains(list_t * list, lnode_t * node) int
list_contains (list_t * list, lnode_t * node)
{ {
lnode_t *n, *nil = list_nil (list); lnode_t *n, *nil = list_nil (list);
@ -420,8 +432,8 @@ int list_contains(list_t * list, lnode_t * node)
* list. * list.
*/ */
void list_extract(list_t * dest, list_t * source, lnode_t * first, void
lnode_t * last) list_extract (list_t * dest, list_t * source, lnode_t * first, lnode_t * last)
{ {
listcount_t moved = 1; listcount_t moved = 1;
@ -473,7 +485,8 @@ void list_extract(list_t * dest, list_t * source, lnode_t * first,
* order. * order.
*/ */
void list_transfer(list_t * dest, list_t * source, lnode_t * first) void
list_transfer (list_t * dest, list_t * source, lnode_t * first)
{ {
listcount_t moved = 1; listcount_t moved = 1;
lnode_t *last; lnode_t *last;
@ -513,8 +526,8 @@ void list_transfer(list_t * dest, list_t * source, lnode_t * first)
nassert (list_verify (dest)); nassert (list_verify (dest));
} }
void list_merge(list_t * dest, list_t * sour, void
int compare(const void *, const void *)) list_merge (list_t * dest, list_t * sour, int compare (const void *, const void *))
{ {
lnode_t *dn, *sn, *tn; lnode_t *dn, *sn, *tn;
lnode_t *d_nil = list_nil (dest), *s_nil = list_nil (sour); lnode_t *d_nil = list_nil (dest), *s_nil = list_nil (sour);
@ -551,7 +564,8 @@ void list_merge(list_t * dest, list_t * sour,
list_transfer (dest, sour, sn); list_transfer (dest, sour, sn);
} }
void list_sort(list_t * list, int compare(const void *, const void *)) void
list_sort (list_t * list, int compare (const void *, const void *))
{ {
list_t extra; list_t extra;
listcount_t middle; listcount_t middle;
@ -574,13 +588,12 @@ void list_sort(list_t * list, int compare(const void *, const void *))
nassert (list_is_sorted (list, compare)); nassert (list_is_sorted (list, compare));
} }
lnode_t *list_find(list_t * list, const void *key, lnode_t *
int compare(const void *, const void *)) list_find (list_t * list, const void *key, int compare (const void *, const void *))
{ {
lnode_t *node; lnode_t *node;
for (node = list_first_priv(list); node != list_nil(list); for (node = list_first_priv (list); node != list_nil (list); node = node->next) {
node = node->next) {
if (compare (lnode_get (node), key) == 0) if (compare (lnode_get (node), key) == 0)
return node; return node;
} }
@ -593,7 +606,8 @@ lnode_t *list_find(list_t * list, const void *key,
* Return 1 if the list is in sorted order, 0 otherwise * Return 1 if the list is in sorted order, 0 otherwise
*/ */
int list_is_sorted(list_t * list, int compare(const void *, const void *)) int
list_is_sorted (list_t * list, int compare (const void *, const void *))
{ {
lnode_t *node, *next, *nil; lnode_t *node, *next, *nil;
@ -635,7 +649,8 @@ int list_is_sorted(list_t * list, int compare(const void *, const void *))
* Return 1 if the list is empty, 0 otherwise * Return 1 if the list is empty, 0 otherwise
*/ */
int list_isempty(list_t * list) int
list_isempty (list_t * list)
{ {
return list->nodecount == 0; return list->nodecount == 0;
} }
@ -645,7 +660,8 @@ int list_isempty(list_t * list)
* Permitted only on bounded lists. * Permitted only on bounded lists.
*/ */
int list_isfull(list_t * list) int
list_isfull (list_t * list)
{ {
return list->nodecount == list->maxcount; return list->nodecount == list->maxcount;
} }
@ -654,7 +670,8 @@ int list_isfull(list_t * list)
* Check if the node pool is empty. * Check if the node pool is empty.
*/ */
int lnode_pool_isempty(lnodepool_t * pool) int
lnode_pool_isempty (lnodepool_t * pool)
{ {
return (pool->fre == NULL); return (pool->fre == NULL);
} }
@ -663,7 +680,8 @@ int lnode_pool_isempty(lnodepool_t * pool)
* Add the given node at the end of the list * Add the given node at the end of the list
*/ */
void list_append(list_t * list, lnode_t * node) void
list_append (list_t * list, lnode_t * node)
{ {
list_ins_before (list, node, &list->nilnode); list_ins_before (list, node, &list->nilnode);
} }
@ -672,7 +690,8 @@ void list_append(list_t * list, lnode_t * node)
* Add the given node at the beginning of the list. * Add the given node at the beginning of the list.
*/ */
void list_prepend(list_t * list, lnode_t * node) void
list_prepend (list_t * list, lnode_t * node)
{ {
list_ins_after (list, node, &list->nilnode); list_ins_after (list, node, &list->nilnode);
} }
@ -681,7 +700,8 @@ void list_prepend(list_t * list, lnode_t * node)
* Retrieve the first node of the list * Retrieve the first node of the list
*/ */
lnode_t *list_first(list_t * list) lnode_t *
list_first (list_t * list)
{ {
if (list->nilnode.next == &list->nilnode) if (list->nilnode.next == &list->nilnode)
return NULL; return NULL;
@ -692,7 +712,8 @@ lnode_t *list_first(list_t * list)
* Retrieve the last node of the list * Retrieve the last node of the list
*/ */
lnode_t *list_last(list_t * list) lnode_t *
list_last (list_t * list)
{ {
if (list->nilnode.prev == &list->nilnode) if (list->nilnode.prev == &list->nilnode)
return NULL; return NULL;
@ -703,7 +724,8 @@ lnode_t *list_last(list_t * list)
* Retrieve the count of nodes in the list * Retrieve the count of nodes in the list
*/ */
listcount_t list_count(list_t * list) listcount_t
list_count (list_t * list)
{ {
return list->nodecount; return list->nodecount;
} }
@ -712,7 +734,8 @@ listcount_t list_count(list_t * list)
* Remove the first node from the list and return it. * Remove the first node from the list and return it.
*/ */
lnode_t *list_del_first(list_t * list) lnode_t *
list_del_first (list_t * list)
{ {
return list_delete (list, list->nilnode.next); return list_delete (list, list->nilnode.next);
} }
@ -721,7 +744,8 @@ lnode_t *list_del_first(list_t * list)
* Remove the last node from the list and return it. * Remove the last node from the list and return it.
*/ */
lnode_t *list_del_last(list_t * list) lnode_t *
list_del_last (list_t * list)
{ {
return list_delete (list, list->nilnode.prev); return list_delete (list, list->nilnode.prev);
} }
@ -731,7 +755,8 @@ lnode_t *list_del_last(list_t * list)
* Associate a data item with the given node. * Associate a data item with the given node.
*/ */
void lnode_put(lnode_t * lnode, void *data) void
lnode_put (lnode_t * lnode, void *data)
{ {
lnode->data = data; lnode->data = data;
} }
@ -740,7 +765,8 @@ void lnode_put(lnode_t * lnode, void *data)
* Retrieve the data item associated with the node. * Retrieve the data item associated with the node.
*/ */
void *lnode_get(lnode_t * lnode) void *
lnode_get (lnode_t * lnode)
{ {
return lnode->data; return lnode->data;
} }
@ -750,7 +776,8 @@ void *lnode_get(lnode_t * lnode)
* NULL is returned. * NULL is returned.
*/ */
lnode_t *list_next(list_t * list, lnode_t * lnode) lnode_t *
list_next (list_t * list, lnode_t * lnode)
{ {
nassert (list_contains (list, lnode)); nassert (list_contains (list, lnode));
@ -763,7 +790,8 @@ lnode_t *list_next(list_t * list, lnode_t * lnode)
* Retrieve the node's predecessor. See comment for lnode_next(). * Retrieve the node's predecessor. See comment for lnode_next().
*/ */
lnode_t *list_prev(list_t * list, lnode_t * lnode) lnode_t *
list_prev (list_t * list, lnode_t * lnode)
{ {
nassert (list_contains (list, lnode)); nassert (list_contains (list, lnode));
@ -776,13 +804,15 @@ lnode_t *list_prev(list_t * list, lnode_t * lnode)
* Return 1 if the lnode is in some list, otherwise return 0. * Return 1 if the lnode is in some list, otherwise return 0.
*/ */
int lnode_is_in_a_list(lnode_t * lnode) int
lnode_is_in_a_list (lnode_t * lnode)
{ {
return (lnode->next != NULL || lnode->prev != NULL); return (lnode->next != NULL || lnode->prev != NULL);
} }
int list_verify(list_t * list) int
list_verify (list_t * list)
{ {
lnode_t *node = list_first_priv (list), *nil = list_nil (list); lnode_t *node = list_first_priv (list), *nil = list_nil (list);
listcount_t count = list_count (list); listcount_t count = list_count (list);
@ -808,7 +838,8 @@ int list_verify(list_t * list)
return 1; return 1;
} }
int comparef(const void *key1, const void *key2) int
comparef (const void *key1, const void *key2)
{ {
return strcasecmp (key1, key2); return strcasecmp (key1, key2);
} }
@ -824,7 +855,8 @@ int comparef(const void *key1, const void *key2)
typedef char input_t[256]; typedef char input_t[256];
static int tokenize(char *string, ...) static int
tokenize (char *string, ...)
{ {
char **tokptr; char **tokptr;
va_list arglist; va_list arglist;
@ -852,7 +884,8 @@ static int tokenize(char *string, ...)
} }
static char *dupstring(char *str) static char *
dupstring (char *str)
{ {
int sz = strlen (str) + 1; int sz = strlen (str) + 1;
char *new = malloc (sz); char *new = malloc (sz);
@ -861,7 +894,8 @@ static char *dupstring(char *str)
return new; return new;
} }
int main(void) int
main (void)
{ {
input_t in; input_t in;
list_t *l = list_create (LISTCOUNT_T_MAX); list_t *l = list_create (LISTCOUNT_T_MAX);
@ -874,10 +908,7 @@ int main(void)
"d <val> delete value from list\n" "d <val> delete value from list\n"
"l <val> lookup value in list\n" "l <val> lookup value in list\n"
"s sort list\n" "s sort list\n"
"c show number of entries\n" "c show number of entries\n" "t dump whole list\n" "p turn prompt on\n" "q quit";
"t dump whole list\n"
"p turn prompt on\n"
"q quit";
if (!l) if (!l)
puts ("list_create failed"); puts ("list_create failed");
@ -945,8 +976,7 @@ int main(void)
printf ("%lu\n", (unsigned long) list_count (l)); printf ("%lu\n", (unsigned long) list_count (l));
break; break;
case 't': case 't':
for (ln = list_first(l); ln != 0; for (ln = list_first (l); ln != 0; ln = list_next (l, ln))
ln = list_next(l, ln))
puts (lnode_get (ln)); puts (lnode_get (ln));
break; break;
case 'q': case 'q':

3
list.h
View file

@ -37,7 +37,7 @@
* into proprietary software; there is no requirement for such software to * into proprietary software; there is no requirement for such software to
* contain a copyright notice related to this source. * contain a copyright notice related to this source.
* *
* $Id: list.h,v 1.3 2002/09/04 08:40:27 fishwaldo Exp $ * $Id: list.h,v 1.4 2003/07/30 13:58:22 fishwaldo Exp $
* $Name: $ * $Name: $
*/ */
@ -176,5 +176,4 @@ int list_is_sorted(list_t *, int (const void *, const void *));
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif #endif

62
log.c
View file

@ -20,7 +20,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: log.c,v 1.11 2003/07/17 10:13:51 fishwaldo Exp $ ** $Id: log.c,v 1.12 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
#include "stats.h" #include "stats.h"
@ -55,7 +55,8 @@ void *close_logs();
/** @brief Initilize the logging functions /** @brief Initilize the logging functions
*/ */
void init_logs() void
init_logs ()
{ {
logs = hash_create (-1, 0, 0); logs = hash_create (-1, 0, 0);
if (!logs) { if (!logs) {
@ -69,7 +70,8 @@ void init_logs()
*/ */
void *close_logs() void *
close_logs ()
{ {
hscan_t hs; hscan_t hs;
hnode_t *hn; hnode_t *hn;
@ -81,8 +83,7 @@ void *close_logs()
fflush (logentry->logfile); fflush (logentry->logfile);
logentry->flush = 0; logentry->flush = 0;
#ifdef DEBUG #ifdef DEBUG
printf("Closing Logfile %s (%s)\n", logentry->name, printf ("Closing Logfile %s (%s)\n", logentry->name, (char *) hnode_getkey (hn));
(char *) hnode_getkey(hn));
#endif #endif
fclose (logentry->logfile); fclose (logentry->logfile);
hash_scan_delete (logs, hn); hash_scan_delete (logs, hn);
@ -95,7 +96,8 @@ void *close_logs()
/** @Configurable logging function /** @Configurable logging function
*/ */
void nlog(int level, int scope, char *fmt, ...) void
nlog (int level, int scope, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], fmttime[80]; char buf[512], fmttime[80];
@ -110,8 +112,7 @@ void nlog(int level, int scope, char *fmt, ...)
if (strlen (segvinmodule) > 1) { if (strlen (segvinmodule) > 1) {
hn = hash_lookup (logs, segvinmodule); hn = hash_lookup (logs, segvinmodule);
} else { } else {
nlog(LOG_ERROR, LOG_CORE, nlog (LOG_ERROR, LOG_CORE, "Warning, nlog called with LOG_MOD, but segvinmodule is blank! Logging to Core");
"Warning, nlog called with LOG_MOD, but segvinmodule is blank! Logging to Core");
hn = hash_lookup (logs, "core"); hn = hash_lookup (logs, "core");
} }
} else { } else {
@ -125,17 +126,14 @@ void nlog(int level, int scope, char *fmt, ...)
/* log file not found */ /* log file not found */
if ((strlen (segvinmodule) <= 1) && (scope > 0)) { if ((strlen (segvinmodule) <= 1) && (scope > 0)) {
#ifdef DEBUG #ifdef DEBUG
printf printf ("segvinmodule is blank, but scope is for Modules!\n");
("segvinmodule is blank, but scope is for Modules!\n");
#endif #endif
/* bad, but hey ! */ /* bad, but hey ! */
scope = 0; scope = 0;
} }
logentry = malloc (sizeof (struct logs_)); logentry = malloc (sizeof (struct logs_));
strncpy(logentry->name, strncpy (logentry->name, scope > 0 ? segvinmodule : "core", 30);
scope > 0 ? segvinmodule : "core", 30); snprintf (buf, 40, "logs/%s.log", scope > 0 ? segvinmodule : "NeoStats");
snprintf(buf, 40, "logs/%s.log",
scope > 0 ? segvinmodule : "NeoStats");
logentry->logfile = fopen (buf, "a"); logentry->logfile = fopen (buf, "a");
logentry->flush = 0; logentry->flush = 0;
hn = hnode_create (logentry); hn = hnode_create (logentry);
@ -153,19 +151,17 @@ void nlog(int level, int scope, char *fmt, ...)
va_start (ap, fmt); va_start (ap, fmt);
vsnprintf (buf, 512, fmt, ap); vsnprintf (buf, 512, fmt, ap);
fprintf(logentry->logfile, "(%s) %s %s - %s\n", fmttime, fprintf (logentry->logfile, "(%s) %s %s - %s\n", fmttime, loglevels[level - 1], scope > 0 ? segvinmodule : "CORE", buf);
loglevels[level - 1],
scope > 0 ? segvinmodule : "CORE", buf);
logentry->flush = 1; logentry->flush = 1;
#ifndef DEBUG #ifndef DEBUG
if (config.foreground) if (config.foreground)
#endif #endif
printf("%s %s - %s\n", loglevels[level - 1], printf ("%s %s - %s\n", loglevels[level - 1], scope > 0 ? segvinmodule : "CORE", buf);
scope > 0 ? segvinmodule : "CORE", buf);
va_end (ap); va_end (ap);
} }
} }
void ResetLogs() void
ResetLogs ()
{ {
char tmp[255], tmp2[255]; char tmp[255], tmp2[255];
time_t t = time (NULL); time_t t = time (NULL);
@ -182,24 +178,17 @@ void ResetLogs()
fflush (logentry->logfile); fflush (logentry->logfile);
logentry->flush = 0; logentry->flush = 0;
#ifdef DEBUG #ifdef DEBUG
printf("Closing Logfile %s (%s)\n", logentry->name, printf ("Closing Logfile %s (%s)\n", logentry->name, (char *) hnode_getkey (hn));
(char *) hnode_getkey(hn));
#endif #endif
fclose (logentry->logfile); fclose (logentry->logfile);
if (!strcasecmp (logentry->name, "core")) { if (!strcasecmp (logentry->name, "core")) {
strftime(tmp, 255, strftime (tmp, 255, "logs/NeoStats-%m-%d.log", localtime (&t));
"logs/NeoStats-%m-%d.log",
localtime(&t));
rename ("logs/NeoStats.log", tmp); rename ("logs/NeoStats.log", tmp);
logentry->logfile = logentry->logfile = fopen ("logs/NeoStats.log", "a");
fopen("logs/NeoStats.log", "a");
} else { } else {
strftime(tmp2, 255, "%m-%d.log", strftime (tmp2, 255, "%m-%d.log", localtime (&t));
localtime(&t)); snprintf (tmp, 255, "logs/%s-%s", logentry->name, tmp2);
snprintf(tmp, 255, "logs/%s-%s", snprintf (tmp2, 255, "logs/%s.log", logentry->name);
logentry->name, tmp2);
snprintf(tmp2, 255, "logs/%s.log",
logentry->name);
rename (tmp2, tmp); rename (tmp2, tmp);
logentry->logfile = fopen (tmp2, "a"); logentry->logfile = fopen (tmp2, "a");
} }
@ -210,7 +199,9 @@ void ResetLogs()
/* this is for printing out details during a assertion failure */ /* this is for printing out details during a assertion failure */
extern void nassert_fail(const char *expr, const char *file, const int line, const char *infunk) { extern void
nassert_fail (const char *expr, const char *file, const int line, const char *infunk)
{
#ifdef HAVE_BACKTRACE #ifdef HAVE_BACKTRACE
void *array[50]; void *array[50];
size_t size; size_t size;
@ -226,8 +217,7 @@ extern void nassert_fail(const char *expr, const char *file, const int line, con
nlog (LOG_CRITICAL, LOG_CORE, "Expression: %s", expr); nlog (LOG_CRITICAL, LOG_CORE, "Expression: %s", expr);
#ifdef HAVE_BACKTRACE #ifdef HAVE_BACKTRACE
for (i = 1; i < size; i++) { for (i = 1; i < size; i++) {
nlog(LOG_CRITICAL, LOG_CORE, "BackTrace(%d): %s", nlog (LOG_CRITICAL, LOG_CORE, "BackTrace(%d): %s", i - 1, strings[i]);
i - 1, strings[i]);
} }
#endif #endif
nlog (LOG_CRITICAL, LOG_CORE, "Shutting Down!"); nlog (LOG_CRITICAL, LOG_CORE, "Shutting Down!");

2
log.h
View file

@ -20,7 +20,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: log.h,v 1.5 2003/07/18 06:09:17 fishwaldo Exp $ ** $Id: log.h,v 1.6 2003/07/30 13:58:22 fishwaldo Exp $
*/ */

192
main.c
View file

@ -22,7 +22,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: main.c,v 1.98 2003/07/18 06:09:17 fishwaldo Exp $ ** $Id: main.c,v 1.99 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
#include <setjmp.h> #include <setjmp.h>
@ -87,7 +87,8 @@ int forked = 0;
* *
* @todo Close STDIN etc correctly * @todo Close STDIN etc correctly
*/ */
int main(int argc, char *argv[]) int
main (int argc, char *argv[])
{ {
FILE *fp; FILE *fp;
/* get our commandline options */ /* get our commandline options */
@ -111,16 +112,13 @@ int main(int argc, char *argv[])
me.onchan = 0; me.onchan = 0;
/* keep quiet if we are told to :) */ /* keep quiet if we are told to :) */
if (!config.quiet) { if (!config.quiet) {
printf("NeoStats %d.%d.%d%s Loading...\n", MAJOR, MINOR, printf ("NeoStats %d.%d.%d%s Loading...\n", MAJOR, MINOR, REV, version);
REV, version); printf ("-----------------------------------------------\n");
printf
("-----------------------------------------------\n");
printf ("Copyright: NeoStats Group. 2000-2003\n"); printf ("Copyright: NeoStats Group. 2000-2003\n");
printf ("Justin Hammond (fish@neostats.net)\n"); printf ("Justin Hammond (fish@neostats.net)\n");
printf ("Adam Rutter (shmad@neostats.net)\n"); printf ("Adam Rutter (shmad@neostats.net)\n");
printf ("^Enigma^ (enigma@neostats.net)\n"); printf ("^Enigma^ (enigma@neostats.net)\n");
printf printf ("-----------------------------------------------\n\n");
("-----------------------------------------------\n\n");
} }
/* set some defaults before we parse the config file */ /* set some defaults before we parse the config file */
me.t_start = time (NULL); me.t_start = time (NULL);
@ -155,10 +153,8 @@ int main(int argc, char *argv[])
/* load the config files */ /* load the config files */
ConfLoad (); ConfLoad ();
if (me.die) { if (me.die) {
printf printf ("\n-----> ERROR: Read the README file then edit neostats.cfg! <-----\n\n");
("\n-----> ERROR: Read the README file then edit neostats.cfg! <-----\n\n"); nlog (LOG_CRITICAL, LOG_CORE, "Read the README file and edit your neostats.cfg");
nlog(LOG_CRITICAL, LOG_CORE,
"Read the README file and edit your neostats.cfg");
sleep (1); sleep (1);
close (servsock); close (servsock);
remove ("neostats.pid"); remove ("neostats.pid");
@ -187,11 +183,8 @@ int main(int argc, char *argv[])
fclose (fp); fclose (fp);
if (!config.quiet) { if (!config.quiet) {
printf ("\n"); printf ("\n");
printf printf ("NeoStats %d.%d.%d%s Successfully Launched into Background\n", MAJOR, MINOR, REV, version);
("NeoStats %d.%d.%d%s Successfully Launched into Background\n", printf ("PID: %i - Wrote to neostats.pid\n", forked);
MAJOR, MINOR, REV, version);
printf("PID: %i - Wrote to neostats.pid\n",
forked);
} }
return 0; return 0;
} }
@ -202,9 +195,7 @@ int main(int argc, char *argv[])
} }
} }
#endif #endif
nlog(LOG_NOTICE, LOG_CORE, nlog (LOG_NOTICE, LOG_CORE, "Statistics Started (NeoStats %d.%d.%d%s).", MAJOR, MINOR, REV, version);
"Statistics Started (NeoStats %d.%d.%d%s).", MAJOR, MINOR,
REV, version);
/* don't init_modules till after we fork. This fixes the load->fork-exit->call _fini problems when we fork */ /* don't init_modules till after we fork. This fixes the load->fork-exit->call _fini problems when we fork */
init_modules (); init_modules ();
@ -219,7 +210,8 @@ int main(int argc, char *argv[])
* *
* Processes commandline options * Processes commandline options
*/ */
void get_options(int argc, char **argv) void
get_options (int argc, char **argv)
{ {
int c; int c;
int dbg; int dbg;
@ -237,31 +229,22 @@ void get_options(int argc, char **argv)
while ((c = getopt (argc, argv, "hvrd:nqf")) != -1) { while ((c = getopt (argc, argv, "hvrd:nqf")) != -1) {
switch (c) { switch (c) {
case 'h': case 'h':
printf printf ("NeoStats: Usage: \"neostats [options]\"\n");
("NeoStats: Usage: \"neostats [options]\"\n");
printf (" -h (Show this screen)\n"); printf (" -h (Show this screen)\n");
printf (" -v (Show Version Number)\n"); printf (" -v (Show Version Number)\n");
printf (" -r (Enable Recv.log)\n"); printf (" -r (Enable Recv.log)\n");
printf printf (" -d 1-10 (Enable Debuging output 1= lowest, 10 = highest)\n");
(" -d 1-10 (Enable Debuging output 1= lowest, 10 = highest)\n"); printf (" -n (Do not load any modules on startup)\n");
printf printf (" -q (Quiet Start - For Cron Scripts)\n");
(" -n (Do not load any modules on startup)\n"); printf (" -f (Do NOt fork into BackGround\n");
printf
(" -q (Quiet Start - For Cron Scripts)\n");
printf
(" -f (Do NOt fork into BackGround\n");
exit (1); exit (1);
case 'v': case 'v':
printf("NeoStats Version %d.%d.%d%s\n", MAJOR, printf ("NeoStats Version %d.%d.%d%s\n", MAJOR, MINOR, REV, version);
MINOR, REV, version); printf ("Compiled: %s at %s\n", version_date, version_time);
printf("Compiled: %s at %s\n", version_date, printf ("Flag after version number indicates what IRCd NeoStats is compiled for:\n");
version_time);
printf
("Flag after version number indicates what IRCd NeoStats is compiled for:\n");
printf ("(U) - Unreal IRCd\n"); printf ("(U) - Unreal IRCd\n");
printf ("(UL3)- Ultimate 3.x.x IRCd\n"); printf ("(UL3)- Ultimate 3.x.x IRCd\n");
printf printf ("(UL) - Ultimate 2.x.x IRCd (Depriciated)\n");
("(UL) - Ultimate 2.x.x IRCd (Depriciated)\n");
printf ("(H) - Hybrid 7.x IRCd\n"); printf ("(H) - Hybrid 7.x IRCd\n");
printf ("(N) - NeoIRCd IRCd\n"); printf ("(N) - NeoIRCd IRCd\n");
printf ("(M) - Mystic IRCd\n"); printf ("(M) - Mystic IRCd\n");
@ -310,12 +293,12 @@ void get_options(int argc, char **argv)
* *
* @todo Do a nice shutdown, no thtis crap :) * @todo Do a nice shutdown, no thtis crap :)
*/ */
RETSIGTYPE serv_die() RETSIGTYPE
serv_die ()
{ {
User *u; User *u;
u = finduser (s_Services); u = finduser (s_Services);
nlog(LOG_CRITICAL, LOG_CORE, nlog (LOG_CRITICAL, LOG_CORE, "Sigterm Recieved, Shuting Down Server!!!!");
"Sigterm Recieved, Shuting Down Server!!!!");
ns_shutdown (u, "SigTerm Recieved"); ns_shutdown (u, "SigTerm Recieved");
ssquit_cmd (me.name); ssquit_cmd (me.name);
@ -330,7 +313,8 @@ RETSIGTYPE serv_die()
* *
* @todo Implement a Rehash function. What can we actually rehash? * @todo Implement a Rehash function. What can we actually rehash?
*/ */
RETSIGTYPE conf_rehash() RETSIGTYPE
conf_rehash ()
{ {
/* struct sigaction act; */ /* struct sigaction act; */
chanalert (s_Services, "Recieved SIGHUP, Attempting to Rehash"); chanalert (s_Services, "Recieved SIGHUP, Attempting to Rehash");
@ -362,7 +346,8 @@ RETSIGTYPE conf_rehash()
* *
*/ */
RETSIGTYPE serv_segv() RETSIGTYPE
serv_segv ()
{ {
char name[30]; char name[30];
#ifdef HAVE_BACKTRACE #ifdef HAVE_BACKTRACE
@ -379,34 +364,20 @@ RETSIGTYPE serv_segv()
* and continue on * and continue on
*/ */
if (strlen (segvinmodule) > 1) { if (strlen (segvinmodule) > 1) {
globops(me.name, globops (me.name, "Oh Damn, Module %s Segv'd, Unloading Module", segvinmodule);
"Oh Damn, Module %s Segv'd, Unloading Module", chanalert (s_Services, "Oh Damn, Module %s Segv'd, Unloading Module", segvinmodule);
segvinmodule); nlog (LOG_CRITICAL, LOG_CORE, "Uh Oh, Segmentation Fault in Modules Code %s", segvinmodule);
chanalert(s_Services, nlog (LOG_CRITICAL, LOG_CORE, "Location could be %s", segv_location);
"Oh Damn, Module %s Segv'd, Unloading Module", nlog (LOG_CRITICAL, LOG_CORE, "Unloading Module and restoring stacks. Doing Backtrace:");
segvinmodule); chanalert (s_Services, "Location *could* be %s. Doing Backtrace:", segv_location);
nlog(LOG_CRITICAL, LOG_CORE,
"Uh Oh, Segmentation Fault in Modules Code %s",
segvinmodule);
nlog(LOG_CRITICAL, LOG_CORE, "Location could be %s",
segv_location);
nlog(LOG_CRITICAL, LOG_CORE,
"Unloading Module and restoring stacks. Doing Backtrace:");
chanalert(s_Services,
"Location *could* be %s. Doing Backtrace:",
segv_location);
#ifdef HAVE_BACKTRACE #ifdef HAVE_BACKTRACE
for (i = 1; i < size; i++) { for (i = 1; i < size; i++) {
chanalert(s_Services, "Backtrace(%d): %s", i, chanalert (s_Services, "Backtrace(%d): %s", i, strings[i]);
strings[i]); nlog (LOG_CRITICAL, LOG_CORE, "BackTrace(%d): %s", i - 1, strings[i]);
nlog(LOG_CRITICAL, LOG_CORE, "BackTrace(%d): %s",
i - 1, strings[i]);
} }
#else #else
chanalert(s_Services, chanalert (s_Services, "Backtrace not available on this platform");
"Backtrace not available on this platform"); nlog (LOG_CRITICAL, LOG_CORE, "Backtrace not available on this platform");
nlog(LOG_CRITICAL, LOG_CORE,
"Backtrace not available on this platform");
#endif #endif
strcpy (name, segvinmodule); strcpy (name, segvinmodule);
strcpy (segvinmodule, ""); strcpy (segvinmodule, "");
@ -420,32 +391,20 @@ RETSIGTYPE serv_segv()
} else { } else {
/** The segv happened in our core, damn it */ /** The segv happened in our core, damn it */
/* Thanks to Stskeeps and Unreal for this stuff :) */ /* Thanks to Stskeeps and Unreal for this stuff :) */
nlog(LOG_CRITICAL, LOG_CORE, nlog (LOG_CRITICAL, LOG_CORE, "Uh Oh, Segmentation Fault.. Server Terminating");
"Uh Oh, Segmentation Fault.. Server Terminating"); nlog (LOG_CRITICAL, LOG_CORE, "Details: Buffer: %s", recbuf);
nlog(LOG_CRITICAL, LOG_CORE, "Details: Buffer: %s", nlog (LOG_CRITICAL, LOG_CORE, "Approx Location: %s Backtrace:", segv_location);
recbuf);
nlog(LOG_CRITICAL, LOG_CORE,
"Approx Location: %s Backtrace:", segv_location);
/* Broadcast it out! */ /* Broadcast it out! */
globops(me.name, globops (me.name, "Ohhh Crap, Server Terminating, Segmentation Fault. Buffer: %s, Approx Location %s", recbuf, segv_location);
"Ohhh Crap, Server Terminating, Segmentation Fault. Buffer: %s, Approx Location %s", chanalert (s_Services, "Damn IT, Server Terminating (%d%d%d%s), Segmentation Fault. Buffer: %s, Approx Location: %s Backtrace:", MAJOR, MINOR, REV, version, recbuf, segv_location);
recbuf, segv_location);
chanalert(s_Services,
"Damn IT, Server Terminating (%d%d%d%s), Segmentation Fault. Buffer: %s, Approx Location: %s Backtrace:",
MAJOR, MINOR, REV, version, recbuf,
segv_location);
#ifdef HAVE_BACKTRACE #ifdef HAVE_BACKTRACE
for (i = 1; i < size; i++) { for (i = 1; i < size; i++) {
chanalert(s_Services, "Backtrace(%d): %s", i, chanalert (s_Services, "Backtrace(%d): %s", i, strings[i]);
strings[i]); nlog (LOG_CRITICAL, LOG_CORE, "BackTrace(%d): %s", i - 1, strings[i]);
nlog(LOG_CRITICAL, LOG_CORE, "BackTrace(%d): %s",
i - 1, strings[i]);
} }
#else #else
chanalert(s_Services, chanalert (s_Services, "Backtrace not available on this platform");
"Backtrace not available on this platform"); nlog (LOG_CRITICAL, LOG_CORE, "Backtrace not available on this platform");
nlog(LOG_CRITICAL, LOG_CORE,
"Backtrace not available on this platform");
#endif #endif
sleep (2); sleep (2);
kill (forked, 3); kill (forked, 3);
@ -464,7 +423,8 @@ RETSIGTYPE serv_segv()
* @return Nothing * @return Nothing
* *
*/ */
static void setup_signals() static void
setup_signals ()
{ {
struct sigaction act; struct sigaction act;
act.sa_handler = SIG_IGN; act.sa_handler = SIG_IGN;
@ -508,7 +468,8 @@ static void setup_signals()
* *
* @todo make the restart code nicer so it doesn't go mad when we can't connect * @todo make the restart code nicer so it doesn't go mad when we can't connect
*/ */
void start() void
start ()
{ {
static int attempts = 0; static int attempts = 0;
Module *mod_ptr = NULL; Module *mod_ptr = NULL;
@ -518,32 +479,27 @@ void start()
strcpy (segv_location, "start"); strcpy (segv_location, "start");
nlog(LOG_NOTICE, LOG_CORE, "Connecting to %s:%d", me.uplink, nlog (LOG_NOTICE, LOG_CORE, "Connecting to %s:%d", me.uplink, me.port);
me.port);
if (servsock > 0) if (servsock > 0)
close (servsock); close (servsock);
servsock = ConnectTo (me.uplink, me.port); servsock = ConnectTo (me.uplink, me.port);
if (servsock <= 0) { if (servsock <= 0) {
nlog(LOG_WARNING, LOG_CORE, "Unable to connect to %s", nlog (LOG_WARNING, LOG_CORE, "Unable to connect to %s", me.uplink);
me.uplink);
} else { } else {
attempts = 0; attempts = 0;
login (); login ();
read_loop (); read_loop ();
} }
nlog(LOG_NOTICE, LOG_CORE, nlog (LOG_NOTICE, LOG_CORE, "Reconnecting to the server in %d seconds (Attempt %i)", me.r_time, attempts);
"Reconnecting to the server in %d seconds (Attempt %i)",
me.r_time, attempts);
close (servsock); close (servsock);
/* Unload the Modules */ /* Unload the Modules */
hash_scan_begin (&ms, mh); hash_scan_begin (&ms, mh);
while ((mn = hash_scan_next (&ms)) != NULL) { while ((mn = hash_scan_next (&ms)) != NULL) {
mod_ptr = hnode_get (mn); mod_ptr = hnode_get (mn);
unload_module(mod_ptr->info->module_name, unload_module (mod_ptr->info->module_name, finduser (s_Services));
finduser(s_Services));
} }
sleep (5); sleep (5);
do_exit (2); do_exit (2);
@ -557,7 +513,8 @@ void start()
* *
*/ */
void login() void
login ()
{ {
strcpy (segv_location, "login"); strcpy (segv_location, "login");
slogin_cmd (me.name, 1, me.infoline, me.pass); slogin_cmd (me.name, 1, me.infoline, me.pass);
@ -576,14 +533,14 @@ void login()
* @todo move this to a util type file, as it being in main is crazy * @todo move this to a util type file, as it being in main is crazy
*/ */
void *smalloc(long size) void *
smalloc (long size)
{ {
void *buf; void *buf;
strcpy (segv_location, "smalloc"); strcpy (segv_location, "smalloc");
if (!size) { if (!size) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "smalloc(): illegal attempt to allocate 0 bytes!");
"smalloc(): illegal attempt to allocate 0 bytes!");
size = 1; size = 1;
} }
buf = malloc (size); buf = malloc (size);
@ -606,7 +563,8 @@ void *smalloc(long size)
* *
*/ */
char *sstrdup(const char *s) char *
sstrdup (const char *s)
{ {
char *t = strdup (s); char *t = strdup (s);
if (!t) { if (!t) {
@ -630,7 +588,8 @@ char *sstrdup(const char *s)
* *
*/ */
unsigned long HASH(const unsigned char *name, int size_of_table) unsigned long
HASH (const unsigned char *name, int size_of_table)
{ {
unsigned long h = 0, g; unsigned long h = 0, g;
@ -653,7 +612,8 @@ unsigned long HASH(const unsigned char *name, int size_of_table)
* *
*/ */
char *strlower(char *s) char *
strlower (char *s)
{ {
char *t; char *t;
t = malloc (strlen (s)); t = malloc (strlen (s));
@ -676,7 +636,8 @@ char *strlower(char *s)
* *
*/ */
void AddStringToList(char ***List, char S[], int *C) void
AddStringToList (char ***List, char S[], int *C)
{ {
if (*C == 0) { if (*C == 0) {
*List = calloc (sizeof (char *) * 8, 1); *List = calloc (sizeof (char *) * 8, 1);
@ -695,7 +656,8 @@ void AddStringToList(char ***List, char S[], int *C)
* @returns Nothing * @returns Nothing
* *
*/ */
void FreeList(char **List, int C) void
FreeList (char **List, int C)
{ {
int i; int i;
for (i = 0; i == C; i++) for (i = 0; i == C; i++)
@ -709,20 +671,18 @@ void FreeList(char **List, int C)
* @parm segv 1 = we are exiting because of a segv fault, 0, we are not. * @parm segv 1 = we are exiting because of a segv fault, 0, we are not.
* if 1, we don't prompt to save data * if 1, we don't prompt to save data
*/ */
void do_exit(int segv) void
do_exit (int segv)
{ {
switch (segv) { switch (segv) {
case 0: case 0:
nlog(LOG_CRITICAL, LOG_CORE, nlog (LOG_CRITICAL, LOG_CORE, "Normal shut down SubSystems");
"Normal shut down SubSystems");
break; break;
case 2: case 2:
nlog(LOG_CRITICAL, LOG_CORE, nlog (LOG_CRITICAL, LOG_CORE, "Restarting NeoStats SubSystems");
"Restarting NeoStats SubSystems");
break; break;
case 1: case 1:
nlog(LOG_CRITICAL, LOG_CORE, nlog (LOG_CRITICAL, LOG_CORE, "Shutting Down SubSystems without saving data due to core");
"Shutting Down SubSystems without saving data due to core");
break; break;
} }
close_logs (); close_logs ();

386
mystic.c
View file

@ -20,7 +20,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: mystic.c,v 1.7 2003/07/11 14:06:45 fishwaldo Exp $ ** $Id: mystic.c,v 1.8 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
#include "stats.h" #include "stats.h"
@ -253,48 +253,52 @@ Oper_Modes usr_mds[] = {
{0, 0, 0} {0, 0, 0}
}; };
void init_ircd() void
init_ircd ()
{ {
/* count the number of commands */ /* count the number of commands */
ircd_srv.cmdcount = ((sizeof (cmd_list) / sizeof (cmd_list[0])) - 1); ircd_srv.cmdcount = ((sizeof (cmd_list) / sizeof (cmd_list[0])) - 1);
}; };
int sserver_cmd(const char *name, const int numeric, const char *infoline) int
sserver_cmd (const char *name, const int numeric, const char *infoline)
{ {
sts(":%s %s %s %d :%s", me.name, sts (":%s %s %s %d :%s", me.name, (me.token ? TOK_SERVER : MSG_SERVER), name, numeric, infoline);
(me.token ? TOK_SERVER : MSG_SERVER), name, numeric, infoline);
return 1; return 1;
} }
int slogin_cmd(const char *name, const int numeric, const char *infoline, int
const char *pass) slogin_cmd (const char *name, const int numeric, const char *infoline, const char *pass)
{ {
sts ("%s %s", (me.token ? TOK_PASS : MSG_PASS), pass); sts ("%s %s", (me.token ? TOK_PASS : MSG_PASS), pass);
sts("%s %s %d :%s", (me.token ? TOK_SERVER : MSG_SERVER), name, sts ("%s %s %d :%s", (me.token ? TOK_SERVER : MSG_SERVER), name, numeric, infoline);
numeric, infoline);
return 1; return 1;
} }
int ssquit_cmd(const char *server) int
ssquit_cmd (const char *server)
{ {
sts ("%s %s", (me.token ? TOK_SQUIT : MSG_SQUIT), server); sts ("%s %s", (me.token ? TOK_SQUIT : MSG_SQUIT), server);
return 1; return 1;
} }
int sprotocol_cmd(const char *option) int
sprotocol_cmd (const char *option)
{ {
sts ("%s %s", (me.token ? TOK_PROTOCTL : MSG_PROTOCTL), option); sts ("%s %s", (me.token ? TOK_PROTOCTL : MSG_PROTOCTL), option);
return 1; return 1;
} }
int squit_cmd(const char *who, const char *quitmsg) int
squit_cmd (const char *who, const char *quitmsg)
{ {
sts (":%s %s :%s", who, (me.token ? TOK_QUIT : MSG_QUIT), quitmsg); sts (":%s %s :%s", who, (me.token ? TOK_QUIT : MSG_QUIT), quitmsg);
DelUser (who); DelUser (who);
return 1; return 1;
} }
int spart_cmd(const char *who, const char *chan) int
spart_cmd (const char *who, const char *chan)
{ {
sts (":%s %s %s", who, (me.token ? TOK_PART : MSG_PART), chan); sts (":%s %s %s", who, (me.token ? TOK_PART : MSG_PART), chan);
part_chan (finduser (who), (char *) chan); part_chan (finduser (who), (char *) chan);
@ -302,23 +306,22 @@ int spart_cmd(const char *who, const char *chan)
} }
int sjoin_cmd(const char *who, const char *chan) int
sjoin_cmd (const char *who, const char *chan)
{ {
sts (":%s %s %s", who, (me.token ? TOK_JOIN : MSG_JOIN), chan); sts (":%s %s %s", who, (me.token ? TOK_JOIN : MSG_JOIN), chan);
join_chan (finduser (who), (char *) chan); join_chan (finduser (who), (char *) chan);
return 1; return 1;
} }
int schmode_cmd(const char *who, const char *chan, const char *mode, int
const char *args) schmode_cmd (const char *who, const char *chan, const char *mode, const char *args)
{ {
char **av; char **av;
int ac; int ac;
char tmp[512]; char tmp[512];
sts(":%s %s %s %s %s %lu", me.name, sts (":%s %s %s %s %s %lu", me.name, (me.token ? TOK_MODE : MSG_MODE), chan, mode, args, time (NULL));
(me.token ? TOK_MODE : MSG_MODE), chan, mode, args,
time(NULL));
snprintf (tmp, 512, "%s %s %s", chan, mode, args); snprintf (tmp, 512, "%s %s %s", chan, mode, args);
ac = split_buf (tmp, &av, 0); ac = split_buf (tmp, &av, 0);
ChanMode ("", av, ac); ChanMode ("", av, ac);
@ -326,23 +329,23 @@ int schmode_cmd(const char *who, const char *chan, const char *mode,
return 1; return 1;
} }
int snewnick_cmd(const char *nick, const char *ident, const char *host, int
const char *realname) snewnick_cmd (const char *nick, const char *ident, const char *host, const char *realname)
{ {
sts("%s %s 1 %lu %s %s %s 0 :%s", (me.token ? TOK_NICK : MSG_NICK), sts ("%s %s 1 %lu %s %s %s 0 :%s", (me.token ? TOK_NICK : MSG_NICK), nick, time (NULL), ident, host, me.name, realname);
nick, time(NULL), ident, host, me.name, realname);
AddUser (nick, ident, host, me.name, 0, time (NULL)); AddUser (nick, ident, host, me.name, 0, time (NULL));
return 1; return 1;
} }
int sping_cmd(const char *from, const char *reply, const char *to) int
sping_cmd (const char *from, const char *reply, const char *to)
{ {
sts(":%s %s %s :%s", from, (me.token ? TOK_PING : MSG_PING), reply, sts (":%s %s %s :%s", from, (me.token ? TOK_PING : MSG_PING), reply, to);
to);
return 1; return 1;
} }
int sumode_cmd(const char *who, const char *target, long mode) int
sumode_cmd (const char *who, const char *target, long mode)
{ {
int i, j; int i, j;
char newmode[20]; char newmode[20];
@ -356,14 +359,13 @@ int sumode_cmd(const char *who, const char *target, long mode)
} }
newmode[j] = '\0'; newmode[j] = '\0';
sts(":%s %s %s :%s", who, (me.token ? TOK_MODE : MSG_MODE), target, sts (":%s %s %s :%s", who, (me.token ? TOK_MODE : MSG_MODE), target, newmode);
newmode);
UserMode (target, newmode, 0); UserMode (target, newmode, 0);
return 1; return 1;
} }
int snumeric_cmd(const int numeric, const char *target, const char *data, int
...) snumeric_cmd (const int numeric, const char *target, const char *data, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
@ -374,128 +376,124 @@ int snumeric_cmd(const int numeric, const char *target, const char *data,
return 1; return 1;
} }
int spong_cmd(const char *reply) int
spong_cmd (const char *reply)
{ {
sts ("%s %s", (me.token ? TOK_PONG : MSG_PONG), reply); sts ("%s %s", (me.token ? TOK_PONG : MSG_PONG), reply);
return 1; return 1;
} }
int snetinfo_cmd() int
snetinfo_cmd ()
{ {
sts(":%s %s 0 %d %d %s 0 0 0 :%s", me.name, MSG_SNETINFO, sts (":%s %s 0 %d %d %s 0 0 0 :%s", me.name, MSG_SNETINFO, time (NULL), ircd_srv.uprot, ircd_srv.cloak, me.netname);
time(NULL), ircd_srv.uprot, ircd_srv.cloak, me.netname);
return 1; return 1;
} }
int vctrl_cmd() int
vctrl_cmd ()
{ {
sts("%s %d %d %d %d 0 0 0 0 0 0 0 0 0 0 :%s", MSG_VCTRL, sts ("%s %d %d %d %d 0 0 0 0 0 0 0 0 0 0 :%s", MSG_VCTRL, ircd_srv.uprot, ircd_srv.nicklg, ircd_srv.modex, ircd_srv.gc, me.netname);
ircd_srv.uprot, ircd_srv.nicklg, ircd_srv.modex, ircd_srv.gc,
me.netname);
return 1; return 1;
} }
int skill_cmd(const char *from, const char *target, const char *reason,
...) int
skill_cmd (const char *from, const char *target, const char *reason, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
va_start (ap, reason); va_start (ap, reason);
vsnprintf (buf, 512, reason, ap); vsnprintf (buf, 512, reason, ap);
sts(":%s %s %s :%s", from, (me.token ? TOK_KILL : MSG_KILL), sts (":%s %s %s :%s", from, (me.token ? TOK_KILL : MSG_KILL), target, buf);
target, buf);
va_end (ap); va_end (ap);
DelUser (target); DelUser (target);
return 1; return 1;
} }
int ssvskill_cmd(const char *who, const char *reason, ...) int
ssvskill_cmd (const char *who, const char *reason, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
va_start (ap, reason); va_start (ap, reason);
vsnprintf (buf, 512, reason, ap); vsnprintf (buf, 512, reason, ap);
sts(":%s %s %s :%s", me.name, MSG_SVSKILL, sts (":%s %s %s :%s", me.name, MSG_SVSKILL, who, buf);
who, buf);
va_end (ap); va_end (ap);
return 1; return 1;
} }
int ssmo_cmd(const char *from, const char *umodetarget, const char *msg) int
ssmo_cmd (const char *from, const char *umodetarget, const char *msg)
{ {
notice(s_Services, notice (s_Services, "Warning, Module %s tried to SMO, which is not supported in Mystic", segvinmodule);
"Warning, Module %s tried to SMO, which is not supported in Mystic", nlog (LOG_NOTICE, LOG_CORE, "Warning, Module %s tried to SMO, which is not supported in Mystic", segvinmodule);
segvinmodule);
nlog(LOG_NOTICE, LOG_CORE,
"Warning, Module %s tried to SMO, which is not supported in Mystic",
segvinmodule);
return 1; return 1;
} }
int snick_cmd(const char *oldnick, const char *newnick) int
snick_cmd (const char *oldnick, const char *newnick)
{ {
Change_User (finduser (oldnick), newnick); Change_User (finduser (oldnick), newnick);
sts(":%s %s %s %d", oldnick, (me.token ? TOK_NICK : MSG_NICK), sts (":%s %s %s %d", oldnick, (me.token ? TOK_NICK : MSG_NICK), newnick, time (NULL));
newnick, time(NULL));
return 1;
}
int sswhois_cmd(const char *target, const char *swhois)
{
notice(s_Services,
"Warning Module %s tried to SWHOIS, which is not supported in Mystic",
segvinmodule);
nlog(LOG_NOTICE, LOG_CORE,
"Warning. Module %s tried to SWHOIS, which is not supported in Mystic",
segvinmodule);
return 1;
}
int ssvsnick_cmd(const char *target, const char *newnick)
{
sts("%s %s %s :%d", (me.token ? TOK_SVSNICK : MSG_SVSNICK), target,
newnick, time(NULL));
return 1; return 1;
} }
int ssvsjoin_cmd(const char *target, const char *chan) int
sswhois_cmd (const char *target, const char *swhois)
{ {
sts("%s %s %s", (me.token ? TOK_SVSJOIN : MSG_SVSJOIN), target, notice (s_Services, "Warning Module %s tried to SWHOIS, which is not supported in Mystic", segvinmodule);
chan); nlog (LOG_NOTICE, LOG_CORE, "Warning. Module %s tried to SWHOIS, which is not supported in Mystic", segvinmodule);
return 1; return 1;
} }
int ssvspart_cmd(const char *target, const char *chan) int
ssvsnick_cmd (const char *target, const char *newnick)
{ {
sts("%s %s %s", (me.token ? TOK_SVSPART : MSG_SVSPART), target, sts ("%s %s %s :%d", (me.token ? TOK_SVSNICK : MSG_SVSNICK), target, newnick, time (NULL));
chan);
return 1; return 1;
} }
int skick_cmd(const char *who, const char *target, const char *chan, int
const char *reason) ssvsjoin_cmd (const char *target, const char *chan)
{ {
sts(":%s %s %s %s :%s", who, (me.token ? TOK_KICK : MSG_KICK), sts ("%s %s %s", (me.token ? TOK_SVSJOIN : MSG_SVSJOIN), target, chan);
chan, target, (reason ? reason : "No Reason Given")); return 1;
}
int
ssvspart_cmd (const char *target, const char *chan)
{
sts ("%s %s %s", (me.token ? TOK_SVSPART : MSG_SVSPART), target, chan);
return 1;
}
int
skick_cmd (const char *who, const char *target, const char *chan, const char *reason)
{
sts (":%s %s %s %s :%s", who, (me.token ? TOK_KICK : MSG_KICK), chan, target, (reason ? reason : "No Reason Given"));
part_chan (finduser (target), (char *) chan); part_chan (finduser (target), (char *) chan);
return 1; return 1;
} }
int swallops_cmd(const char *who, const char *msg, ...)
int
swallops_cmd (const char *who, const char *msg, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
va_start (ap, msg); va_start (ap, msg);
vsnprintf (buf, 512, msg, ap); vsnprintf (buf, 512, msg, ap);
sts(":%s %s :%s", who, (me.token ? TOK_WALLOPS : MSG_WALLOPS), sts (":%s %s :%s", who, (me.token ? TOK_WALLOPS : MSG_WALLOPS), buf);
buf);
va_end (ap); va_end (ap);
return 1; return 1;
} }
int ssvshost_cmd(const char *who, const char *vhost) int
ssvshost_cmd (const char *who, const char *vhost)
{ {
User *u; User *u;
u = finduser (who); u = finduser (who);
if (!u) { if (!u) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Can't Find user %s for ssvshost_cmd", who);
"Can't Find user %s for ssvshost_cmd", who);
return 0; return 0;
} else { } else {
strncpy (u->vhost, vhost, MAXHOST); strncpy (u->vhost, vhost, MAXHOST);
@ -503,8 +501,8 @@ int ssvshost_cmd(const char *who, const char *vhost)
return 1; return 1;
} }
} }
int sakill_cmd(const char *host, const char *ident, const char *setby, int
const int length, const char *reason, ...) sakill_cmd (const char *host, const char *ident, const char *setby, const int length, const char *reason, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
@ -515,7 +513,8 @@ int sakill_cmd(const char *host, const char *ident, const char *setby,
return 1; return 1;
} }
int srakill_cmd(const char *host, const char *ident) int
srakill_cmd (const char *host, const char *ident)
{ {
/* ultimate2 needs a oper to remove */ /* ultimate2 needs a oper to remove */
sts (":%s %s :%s@%s", s_Services, MSG_REMGLINE, host, ident); sts (":%s %s :%s@%s", s_Services, MSG_REMGLINE, host, ident);
@ -524,12 +523,15 @@ int srakill_cmd(const char *host, const char *ident)
} }
int ssvinfo_cmd() int
ssvinfo_cmd ()
{ {
sts ("SVINFO 5 3 0 :%d", time (NULL)); sts ("SVINFO 5 3 0 :%d", time (NULL));
return 1; return 1;
} }
int sburst_cmd(int b)
int
sburst_cmd (int b)
{ {
if (b == 0) { if (b == 0) {
sts ("BURST 0"); sts ("BURST 0");
@ -541,7 +543,8 @@ int sburst_cmd(int b)
void chanalert(char *who, char *buf, ...) void
chanalert (char *who, char *buf, ...)
{ {
va_list ap; va_list ap;
char tmp[512]; char tmp[512];
@ -550,14 +553,15 @@ void chanalert(char *who, char *buf, ...)
vsnprintf (tmp, 512, buf, ap); vsnprintf (tmp, 512, buf, ap);
if (me.onchan) { if (me.onchan) {
snprintf(out, 512, ":%s PRIVMSG %s :%s", who, me.chan, snprintf (out, 512, ":%s PRIVMSG %s :%s", who, me.chan, tmp);
tmp);
nlog (LOG_DEBUG3, LOG_CORE, "SENT: %s", out); nlog (LOG_DEBUG3, LOG_CORE, "SENT: %s", out);
sts ("%s", out); sts ("%s", out);
} }
va_end (ap); va_end (ap);
} }
void prefmsg(char *to, const char *from, char *fmt, ...)
void
prefmsg (char *to, const char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
@ -565,9 +569,7 @@ void prefmsg(char *to, const char *from, char *fmt, ...)
va_start (ap, fmt); va_start (ap, fmt);
vsnprintf (buf2, sizeof (buf2), fmt, ap); vsnprintf (buf2, sizeof (buf2), fmt, ap);
if (findbot (to)) { if (findbot (to)) {
chanalert(s_Services, chanalert (s_Services, "Message From our Bot(%s) to Our Bot(%s), Dropping Message", from, to);
"Message From our Bot(%s) to Our Bot(%s), Dropping Message",
from, to);
return; return;
} }
if (me.want_privmsg) { if (me.want_privmsg) {
@ -578,15 +580,15 @@ void prefmsg(char *to, const char *from, char *fmt, ...)
sts ("%s", buf); sts ("%s", buf);
va_end (ap); va_end (ap);
} }
void privmsg(char *to, const char *from, char *fmt, ...)
void
privmsg (char *to, const char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
if (findbot (to)) { if (findbot (to)) {
chanalert(s_Services, chanalert (s_Services, "Message From our Bot(%s) to Our Bot(%s), Dropping Message", from, to);
"Message From our Bot(%s) to Our Bot(%s), Dropping Message",
from, to);
return; return;
} }
@ -597,15 +599,14 @@ void privmsg(char *to, const char *from, char *fmt, ...)
va_end (ap); va_end (ap);
} }
void notice(char *to, const char *from, char *fmt, ...) void
notice (char *to, const char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
if (findbot (to)) { if (findbot (to)) {
chanalert(s_Services, chanalert (s_Services, "Message From our Bot(%s) to Our Bot(%s), Dropping Message", from, to);
"Message From our Bot(%s) to Our Bot(%s), Dropping Message",
from, to);
return; return;
} }
@ -617,7 +618,8 @@ void notice(char *to, const char *from, char *fmt, ...)
} }
void privmsg_list(char *to, char *from, const char **text) void
privmsg_list (char *to, char *from, const char **text)
{ {
while (*text) { while (*text) {
if (**text) if (**text)
@ -629,7 +631,8 @@ void privmsg_list(char *to, char *from, const char **text)
} }
void globops(char *from, char *fmt, ...) void
globops (char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
@ -646,7 +649,8 @@ void globops(char *from, char *fmt, ...)
} }
void Srv_Sjoin(char *origin, char **argv, int argc) void
Srv_Sjoin (char *origin, char **argv, int argc)
{ {
char nick[MAXNICK]; char nick[MAXNICK];
long mode = 0; long mode = 0;
@ -673,22 +677,17 @@ void Srv_Sjoin(char *origin, char **argv, int argc)
goto nomodes; goto nomodes;
} }
while (*modes) { while (*modes) {
for (i = 0; for (i = 0; i < ((sizeof (cFlagTab) / sizeof (cFlagTab[0])) - 1); i++) {
i < ((sizeof(cFlagTab) / sizeof(cFlagTab[0])) - 1);
i++) {
if (*modes == cFlagTab[i].flag) { if (*modes == cFlagTab[i].flag) {
if (cFlagTab[i].parameters) { if (cFlagTab[i].parameters) {
m = smalloc (sizeof (ModesParm)); m = smalloc (sizeof (ModesParm));
m->mode = cFlagTab[i].mode; m->mode = cFlagTab[i].mode;
strncpy(m->param, argv[j], strncpy (m->param, argv[j], PARAMSIZE);
PARAMSIZE);
mn = lnode_create (m); mn = lnode_create (m);
if (!list_isfull (tl)) { if (!list_isfull (tl)) {
list_append (tl, mn); list_append (tl, mn);
} else { } else {
nlog(LOG_CRITICAL, nlog (LOG_CRITICAL, LOG_CORE, "Eeeek, tl list is full in Svr_Sjoin(ircd.c)");
LOG_CORE,
"Eeeek, tl list is full in Svr_Sjoin(ircd.c)");
do_exit (0); do_exit (0);
} }
j++; j++;
@ -704,10 +703,7 @@ void Srv_Sjoin(char *origin, char **argv, int argc)
modes = argv[j]; modes = argv[j];
mode = 0; mode = 0;
while (ok == 1) { while (ok == 1) {
for (i = 0; for (i = 0; i < ((sizeof (cFlagTab) / sizeof (cFlagTab[0])) - 1); i++) {
i <
((sizeof(cFlagTab) / sizeof(cFlagTab[0])) -
1); i++) {
if (cFlagTab[i].sjoin != 0) { if (cFlagTab[i].sjoin != 0) {
if (*modes == cFlagTab[i].sjoin) { if (*modes == cFlagTab[i].sjoin) {
mode |= cFlagTab[i].mode; mode |= cFlagTab[i].mode;
@ -720,8 +716,7 @@ void Srv_Sjoin(char *origin, char **argv, int argc)
break; break;
} }
join_chan (finduser (nick), argv[1]); join_chan (finduser (nick), argv[1]);
ChangeChanUserMode(findchan(argv[1]), finduser(nick), 1, ChangeChanUserMode (findchan (argv[1]), finduser (nick), 1, mode);
mode);
j++; j++;
ok = 1; ok = 1;
} }
@ -732,15 +727,15 @@ void Srv_Sjoin(char *origin, char **argv, int argc)
list_transfer (c->modeparms, tl, list_first (tl)); list_transfer (c->modeparms, tl, list_first (tl));
} else { } else {
/* eeeeeeek, list is full! */ /* eeeeeeek, list is full! */
nlog(LOG_CRITICAL, LOG_CORE, nlog (LOG_CRITICAL, LOG_CORE, "Eeeek, c->modeparms list is full in Svr_Sjoin(ircd.c)");
"Eeeek, c->modeparms list is full in Svr_Sjoin(ircd.c)");
do_exit (0); do_exit (0);
} }
} }
list_destroy (tl); list_destroy (tl);
} }
void Srv_Burst(char *origin, char **argv, int argc) void
Srv_Burst (char *origin, char **argv, int argc)
{ {
if (argc > 0) { if (argc > 0) {
if (ircd_srv.burst == 1) { if (ircd_srv.burst == 1) {
@ -754,7 +749,8 @@ void Srv_Burst(char *origin, char **argv, int argc)
} }
} }
void Srv_Connect(char *origin, char **argv, int argc) void
Srv_Connect (char *origin, char **argv, int argc)
{ {
int i; int i;
@ -766,49 +762,62 @@ void Srv_Connect(char *origin, char **argv, int argc)
} }
void Usr_Stats(char *origin, char **argv, int argc) void
Usr_Stats (char *origin, char **argv, int argc)
{ {
User *u; User *u;
u = finduser (origin); u = finduser (origin);
if (!u) { if (!u) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Recieved a Message from a Unknown User! (%s)", origin);
"Recieved a Message from a Unknown User! (%s)",
origin);
return; return;
} }
ShowStats (argv[0], u); ShowStats (argv[0], u);
} }
void Usr_Version(char *origin, char **argv, int argc) void
Usr_Version (char *origin, char **argv, int argc)
{ {
snumeric_cmd(351, origin, "%d.%d.%d%s :%s -> %s %s", MAJOR, MINOR, snumeric_cmd (351, origin, "%d.%d.%d%s :%s -> %s %s", MAJOR, MINOR, REV, version, me.name, version_date, version_time);
REV, version, me.name, version_date, version_time);
} }
void Usr_ShowMOTD(char *origin, char **argv, int argc)
void
Usr_ShowMOTD (char *origin, char **argv, int argc)
{ {
ShowMOTD (origin); ShowMOTD (origin);
} }
void Usr_ShowADMIN(char *origin, char **argv, int argc)
void
Usr_ShowADMIN (char *origin, char **argv, int argc)
{ {
ShowADMIN (origin); ShowADMIN (origin);
} }
void Usr_Showcredits(char *origin, char **argv, int argc)
void
Usr_Showcredits (char *origin, char **argv, int argc)
{ {
Showcredits (origin); Showcredits (origin);
} }
void Usr_AddServer(char *origin, char **argv, int argc)
void
Usr_AddServer (char *origin, char **argv, int argc)
{ {
AddServer (argv[0], origin, atoi (argv[1])); AddServer (argv[0], origin, atoi (argv[1]));
} }
void Usr_DelServer(char *origin, char **argv, int argc)
void
Usr_DelServer (char *origin, char **argv, int argc)
{ {
DelServer (argv[0]); DelServer (argv[0]);
} }
void Usr_DelUser(char *origin, char **argv, int argc)
void
Usr_DelUser (char *origin, char **argv, int argc)
{ {
DelUser (origin); DelUser (origin);
} }
void Usr_Smode(char *origin, char **argv, int argc)
void
Usr_Smode (char *origin, char **argv, int argc)
{ {
if (!strchr (argv[0], '#')) { if (!strchr (argv[0], '#')) {
/* its user svsmode change */ /* its user svsmode change */
@ -818,7 +827,8 @@ void Usr_Smode(char *origin, char **argv, int argc)
ChanMode (origin, argv, argc); ChanMode (origin, argv, argc);
} }
} }
void Usr_Mode(char *origin, char **argv, int argc) void
Usr_Mode (char *origin, char **argv, int argc)
{ {
if (!strchr (argv[0], '#')) { if (!strchr (argv[0], '#')) {
nlog (LOG_DEBUG1, LOG_CORE, "Mode: UserMode: %s", argv[0]); nlog (LOG_DEBUG1, LOG_CORE, "Mode: UserMode: %s", argv[0]);
@ -827,18 +837,19 @@ void Usr_Mode(char *origin, char **argv, int argc)
ChanMode (origin, argv, argc); ChanMode (origin, argv, argc);
} }
} }
void Usr_Kill(char *origin, char **argv, int argc) void
Usr_Kill (char *origin, char **argv, int argc)
{ {
User *u; User *u;
u = finduser (argv[0]); u = finduser (argv[0]);
if (u) { if (u) {
KillUser (argv[0]); KillUser (argv[0]);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, "Can't find user %s for Kill", nlog (LOG_WARNING, LOG_CORE, "Can't find user %s for Kill", argv[0]);
argv[0]);
} }
} }
void Usr_Vhost(char *origin, char **argv, int argc) void
Usr_Vhost (char *origin, char **argv, int argc)
{ {
User *u; User *u;
u = finduser (origin); u = finduser (origin);
@ -846,18 +857,19 @@ void Usr_Vhost(char *origin, char **argv, int argc)
strncpy (u->vhost, argv[0], MAXHOST); strncpy (u->vhost, argv[0], MAXHOST);
} }
} }
void Usr_Pong(char *origin, char **argv, int argc) void
Usr_Pong (char *origin, char **argv, int argc)
{ {
Server *s; Server *s;
s = findserver (argv[0]); s = findserver (argv[0]);
if (s) { if (s) {
dopong (s); dopong (s);
} else { } else {
nlog(LOG_NOTICE, LOG_CORE, nlog (LOG_NOTICE, LOG_CORE, "Received PONG from unknown server: %s", argv[0]);
"Received PONG from unknown server: %s", argv[0]);
} }
} }
void Usr_Away(char *origin, char **argv, int argc) void
Usr_Away (char *origin, char **argv, int argc)
{ {
char *Buf; char *Buf;
User *u = finduser (origin); User *u = finduser (origin);
@ -872,18 +884,19 @@ void Usr_Away(char *origin, char **argv, int argc)
free (Buf); free (Buf);
} }
} else { } else {
nlog(LOG_NOTICE, LOG_CORE, nlog (LOG_NOTICE, LOG_CORE, "Warning, Unable to find User %s for Away", origin);
"Warning, Unable to find User %s for Away", origin);
} }
} }
void Usr_Nick(char *origin, char **argv, int argc) void
Usr_Nick (char *origin, char **argv, int argc)
{ {
User *u = finduser (origin); User *u = finduser (origin);
if (u) { if (u) {
Change_User (u, argv[0]); Change_User (u, argv[0]);
} }
} }
void Usr_Topic(char *origin, char **argv, int argc) void
Usr_Topic (char *origin, char **argv, int argc)
{ {
char *buf; char *buf;
Chans *c; Chans *c;
@ -893,13 +906,13 @@ void Usr_Topic(char *origin, char **argv, int argc)
Change_Topic (argv[1], c, atoi (argv[2]), buf); Change_Topic (argv[1], c, atoi (argv[2]), buf);
free (buf); free (buf);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, "Ehhh, Can't find Channel %s", nlog (LOG_WARNING, LOG_CORE, "Ehhh, Can't find Channel %s", argv[0]);
argv[0]);
} }
} }
void Usr_Kick(char *origin, char **argv, int argc) void
Usr_Kick (char *origin, char **argv, int argc)
{ {
User *u, *k; User *u, *k;
u = finduser (argv[1]); u = finduser (argv[1]);
@ -907,12 +920,11 @@ void Usr_Kick(char *origin, char **argv, int argc)
if ((u) && (k)) { if ((u) && (k)) {
kick_chan (u, argv[0], k); kick_chan (u, argv[0], k);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Warning, Can't find user %s for kick %s", argv[1], argv[0]);
"Warning, Can't find user %s for kick %s", argv[1],
argv[0]);
} }
} }
void Usr_Join(char *origin, char **argv, int argc) void
Usr_Join (char *origin, char **argv, int argc)
{ {
char *s, *t; char *s, *t;
t = argv[0]; t = argv[0];
@ -923,16 +935,20 @@ void Usr_Join(char *origin, char **argv, int argc)
join_chan (finduser (origin), s); join_chan (finduser (origin), s);
} }
} }
void Usr_Part(char *origin, char **argv, int argc) void
Usr_Part (char *origin, char **argv, int argc)
{ {
part_chan (finduser (origin), argv[0]); part_chan (finduser (origin), argv[0]);
} }
void Srv_Ping(char *origin, char **argv, int argc)
void
Srv_Ping (char *origin, char **argv, int argc)
{ {
spong_cmd (argv[0]); spong_cmd (argv[0]);
} }
void Srv_Vctrl(char *origin, char **argv, int argc) void
Srv_Vctrl (char *origin, char **argv, int argc)
{ {
ircd_srv.uprot = atoi (argv[0]); ircd_srv.uprot = atoi (argv[0]);
ircd_srv.nicklg = atoi (argv[1]); ircd_srv.nicklg = atoi (argv[1]);
@ -942,12 +958,14 @@ void Srv_Vctrl(char *origin, char **argv, int argc)
vctrl_cmd (); vctrl_cmd ();
} }
void Srv_Svinfo(char *origin, char **argv, int argc) void
Srv_Svinfo (char *origin, char **argv, int argc)
{ {
ssvinfo_cmd (); ssvinfo_cmd ();
} }
void Srv_Netinfo(char *origin, char **argv, int argc) void
Srv_Netinfo (char *origin, char **argv, int argc)
{ {
me.onchan = 1; me.onchan = 1;
ircd_srv.uprot = atoi (argv[2]); ircd_srv.uprot = atoi (argv[2]);
@ -967,10 +985,12 @@ void Srv_Netinfo(char *origin, char **argv, int argc)
me.synced = 1; me.synced = 1;
} }
void Srv_Pass(char *origin, char **argv, int argc) void
Srv_Pass (char *origin, char **argv, int argc)
{ {
} }
void Srv_Server(char *origin, char **argv, int argc) void
Srv_Server (char *origin, char **argv, int argc)
{ {
Server *s; Server *s;
if (*origin == 0) { if (*origin == 0) {
@ -981,27 +1001,28 @@ void Srv_Server(char *origin, char **argv, int argc)
s = findserver (argv[0]); s = findserver (argv[0]);
me.s = s; me.s = s;
} }
void Srv_Squit(char *origin, char **argv, int argc)
void
Srv_Squit (char *origin, char **argv, int argc)
{ {
Server *s; Server *s;
s = findserver (argv[0]); s = findserver (argv[0]);
if (s) { if (s) {
DelServer (argv[0]); DelServer (argv[0]);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Waring, Squit from Unknown Server %s", argv[0]);
"Waring, Squit from Unknown Server %s", argv[0]);
} }
} }
/* BE REALLY CAREFULL ABOUT THE ORDER OF THESE ifdef's */ /* BE REALLY CAREFULL ABOUT THE ORDER OF THESE ifdef's */
void Srv_Nick(char *origin, char **argv, int argc) void
Srv_Nick (char *origin, char **argv, int argc)
{ {
char *realname; char *realname;
#if MYSTIC #if MYSTIC
AddUser(argv[0], argv[3], argv[4], argv[5], 0, AddUser (argv[0], argv[3], argv[4], argv[5], 0, strtoul (argv[2], NULL, 10));
strtoul(argv[2], NULL, 10));
realname = joinbuf (argv, argc, 7); realname = joinbuf (argv, argc, 7);
AddRealName (argv[0], realname); AddRealName (argv[0], realname);
free (realname); free (realname);
@ -1009,26 +1030,27 @@ void Srv_Nick(char *origin, char **argv, int argc)
} }
void Srv_Svsnick(char *origin, char **argv, int argc) void
Srv_Svsnick (char *origin, char **argv, int argc)
{ {
User *u; User *u;
u = finduser (argv[0]); u = finduser (argv[0]);
if (u) { if (u) {
Change_User (u, argv[1]); Change_User (u, argv[1]);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Warning, Can't find user %s for SVSNICK", argv[0]);
"Warning, Can't find user %s for SVSNICK", argv[0]);
} }
} }
void Srv_Kill(char *origin, char **argv, int argc) void
Srv_Kill (char *origin, char **argv, int argc)
{ {
} }
int SignOn_NewBot(const char *nick, const char *ident, int
const char *host, const char *rname, long Umode) SignOn_NewBot (const char *nick, const char *ident, const char *host, const char *rname, long Umode)
{ {
snewnick_cmd (nick, ident, host, rname); snewnick_cmd (nick, ident, host, rname);
sumode_cmd (nick, nick, Umode); sumode_cmd (nick, nick, Umode);

View file

@ -20,7 +20,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: mystic.h,v 1.4 2003/07/23 10:35:47 fishwaldo Exp $ ** $Id: mystic.h,v 1.5 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
#ifndef MYSTIC_H #ifndef MYSTIC_H
#define MYSTIC_H #define MYSTIC_H

339
neoircd.c
View file

@ -18,7 +18,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: neoircd.c,v 1.22 2003/07/15 09:16:15 fishwaldo Exp $ ** $Id: neoircd.c,v 1.23 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
#include "stats.h" #include "stats.h"
@ -178,28 +178,31 @@ Oper_Modes usr_mds[] = {
{0, 0, 0} {0, 0, 0}
}; };
void init_ircd() void
init_ircd ()
{ {
/* count the number of commands */ /* count the number of commands */
ircd_srv.cmdcount = ((sizeof (cmd_list) / sizeof (cmd_list[0])) - 1); ircd_srv.cmdcount = ((sizeof (cmd_list) / sizeof (cmd_list[0])) - 1);
} }
int seob_cmd(const char *server) int
seob_cmd (const char *server)
{ {
sts (":%s %s", server, MSG_EOB); sts (":%s %s", server, MSG_EOB);
return 1; return 1;
} }
int sserver_cmd(const char *name, const int numeric, const char *infoline) int
sserver_cmd (const char *name, const int numeric, const char *infoline)
{ {
sts (":%s %s %s 2 0 :%s", me.name, MSG_SERVER, name, infoline); sts (":%s %s %s 2 0 :%s", me.name, MSG_SERVER, name, infoline);
return 1; return 1;
} }
int slogin_cmd(const char *name, const int numeric, const char *infoline, int
const char *pass) slogin_cmd (const char *name, const int numeric, const char *infoline, const char *pass)
{ {
sts ("%s %s :TS", MSG_PASS, pass); sts ("%s %s :TS", MSG_PASS, pass);
sts ("CAPAB :TS EOB HUB PARA"); sts ("CAPAB :TS EOB HUB PARA");
@ -207,56 +210,60 @@ int slogin_cmd(const char *name, const int numeric, const char *infoline,
return 1; return 1;
} }
int ssquit_cmd(const char *server) int
ssquit_cmd (const char *server)
{ {
sts ("%s %s", MSG_SQUIT, server); sts ("%s %s", MSG_SQUIT, server);
return 1; return 1;
} }
int sprotocol_cmd(const char *option) int
sprotocol_cmd (const char *option)
{ {
return 1; return 1;
} }
int squit_cmd(const char *who, const char *quitmsg) int
squit_cmd (const char *who, const char *quitmsg)
{ {
sts (":%s %s :%s", who, MSG_QUIT, quitmsg); sts (":%s %s :%s", who, MSG_QUIT, quitmsg);
DelUser (who); DelUser (who);
return 1; return 1;
} }
int spart_cmd(const char *who, const char *chan) int
spart_cmd (const char *who, const char *chan)
{ {
sts (":%s %s %s", who, MSG_PART, chan); sts (":%s %s %s", who, MSG_PART, chan);
part_chan (finduser (who), (char *) chan); part_chan (finduser (who), (char *) chan);
return 1; return 1;
} }
int sjoin_cmd(const char *who, const char *chan) int
sjoin_cmd (const char *who, const char *chan)
{ {
sts(":%s %s %d %s + :%s", me.name, MSG_SJOIN, time(NULL), chan, sts (":%s %s %d %s + :%s", me.name, MSG_SJOIN, time (NULL), chan, who);
who);
join_chan (finduser (who), (char *) chan); join_chan (finduser (who), (char *) chan);
return 1; return 1;
} }
int schmode_cmd(const char *who, const char *chan, const char *mode, int
const char *args) schmode_cmd (const char *who, const char *chan, const char *mode, const char *args)
{ {
char **av; char **av;
int ac; int ac;
char tmp[512]; char tmp[512];
sts(":%s %s %s %s %s %lu", who, MSG_MODE, chan, mode, args, sts (":%s %s %s %s %s %lu", who, MSG_MODE, chan, mode, args, time (NULL));
time(NULL));
snprintf (tmp, 512, "%s %s %s", chan, mode, args); snprintf (tmp, 512, "%s %s %s", chan, mode, args);
ac = split_buf (tmp, &av, 0); ac = split_buf (tmp, &av, 0);
ChanMode ("", av, ac); ChanMode ("", av, ac);
free (av); free (av);
return 1; return 1;
} }
int snewnick_cmd(const char *nick, const char *ident, const char *host,
const char *realname, long mode) int
snewnick_cmd (const char *nick, const char *ident, const char *host, const char *realname, long mode)
{ {
int i, j; int i, j;
char newmode[20]; char newmode[20];
@ -270,20 +277,21 @@ int snewnick_cmd(const char *nick, const char *ident, const char *host,
} }
newmode[j] = '\0'; newmode[j] = '\0';
sts("%s %s 1 %lu %s %s %s * %s 0 :%s", MSG_NICK, nick, time(NULL), sts ("%s %s 1 %lu %s %s %s * %s 0 :%s", MSG_NICK, nick, time (NULL), newmode, ident, host, me.name, realname);
newmode, ident, host, me.name, realname);
AddUser (nick, ident, host, me.name, 0, time (NULL)); AddUser (nick, ident, host, me.name, 0, time (NULL));
UserMode (nick, newmode, 0); UserMode (nick, newmode, 0);
return 1; return 1;
} }
int sping_cmd(const char *from, const char *reply, const char *to) int
sping_cmd (const char *from, const char *reply, const char *to)
{ {
sts (":%s %s %s :%s", from, MSG_PING, reply, to); sts (":%s %s %s :%s", from, MSG_PING, reply, to);
return 1; return 1;
} }
int sumode_cmd(const char *who, const char *target, long mode) int
sumode_cmd (const char *who, const char *target, long mode)
{ {
int i, j; int i, j;
char newmode[20]; char newmode[20];
@ -302,8 +310,8 @@ int sumode_cmd(const char *who, const char *target, long mode)
return 1; return 1;
} }
int snumeric_cmd(const int numeric, const char *target, const char *data, int
...) snumeric_cmd (const int numeric, const char *target, const char *data, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
@ -314,15 +322,16 @@ int snumeric_cmd(const int numeric, const char *target, const char *data,
return 1; return 1;
} }
int spong_cmd(const char *reply) int
spong_cmd (const char *reply)
{ {
sts ("%s %s", MSG_PONG, reply); sts ("%s %s", MSG_PONG, reply);
return 1; return 1;
} }
int skill_cmd(const char *from, const char *target, const char *reason, int
...) skill_cmd (const char *from, const char *target, const char *reason, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
@ -334,14 +343,14 @@ int skill_cmd(const char *from, const char *target, const char *reason,
return 1; return 1;
} }
int ssvskill_cmd(const char *who, const char *reason, ...) int
ssvskill_cmd (const char *who, const char *reason, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
va_start (ap, reason); va_start (ap, reason);
vsnprintf (buf, 512, reason, ap); vsnprintf (buf, 512, reason, ap);
sts(":%s %s %s :%s", me.name, MSG_KILL, sts (":%s %s %s :%s", me.name, MSG_KILL, who, buf);
who, buf);
va_end (ap); va_end (ap);
/* neoircd doesn't have svskill, so this is handled just like a normal kill */ /* neoircd doesn't have svskill, so this is handled just like a normal kill */
DelUser (who); DelUser (who);
@ -349,56 +358,60 @@ int ssvskill_cmd(const char *who, const char *reason, ...)
} }
int ssmo_cmd(const char *from, const char *umodetarget, const char *msg) int
ssmo_cmd (const char *from, const char *umodetarget, const char *msg)
{ {
notice(s_Services, notice (s_Services, "Warning, Module %s tried to SMO, which is not supported in Hybrid", segvinmodule);
"Warning, Module %s tried to SMO, which is not supported in Hybrid", nlog (LOG_NORMAL, LOG_CORE, "Warning, Module %s tried to SMO, which is not supported in Hybrid", segvinmodule);
segvinmodule);
nlog(LOG_NORMAL, LOG_CORE,
"Warning, Module %s tried to SMO, which is not supported in Hybrid",
segvinmodule);
return 1; return 1;
} }
int snick_cmd(const char *oldnick, const char *newnick) int
snick_cmd (const char *oldnick, const char *newnick)
{ {
Change_User (finduser (oldnick), newnick); Change_User (finduser (oldnick), newnick);
sts (":%s %s %s %d", oldnick, MSG_NICK, newnick, time (NULL)); sts (":%s %s %s %d", oldnick, MSG_NICK, newnick, time (NULL));
return 1; return 1;
} }
int sswhois_cmd(const char *target, const char *swhois)
int
sswhois_cmd (const char *target, const char *swhois)
{ {
sts (":%s SWHOIS %s :%s", me.name, target, swhois); sts (":%s SWHOIS %s :%s", me.name, target, swhois);
return 1; return 1;
} }
int ssvsnick_cmd(const char *target, const char *newnick)
int
ssvsnick_cmd (const char *target, const char *newnick)
{ {
sts(":%s SVSNICK %s %s :%lu", me.name, target, newnick, sts (":%s SVSNICK %s %s :%lu", me.name, target, newnick, time (NULL));
time(NULL));
return 1; return 1;
} }
int ssvsjoin_cmd(const char *target, const char *chan) int
ssvsjoin_cmd (const char *target, const char *chan)
{ {
sts (":%s SVSJOIN %s %s", me.name, target, chan); sts (":%s SVSJOIN %s %s", me.name, target, chan);
return 1; return 1;
} }
int ssvspart_cmd(const char *target, const char *chan) int
ssvspart_cmd (const char *target, const char *chan)
{ {
sts (":%s SVSPART %s %s", me.name, target, chan); sts (":%s SVSPART %s %s", me.name, target, chan);
return 1; return 1;
} }
int skick_cmd(const char *who, const char *target, const char *chan, int
const char *reason) skick_cmd (const char *who, const char *target, const char *chan, const char *reason)
{ {
sts(":%s %s %s %s :%s", who, MSG_KICK, chan, target, sts (":%s %s %s %s :%s", who, MSG_KICK, chan, target, (reason ? reason : "No Reason Given"));
(reason ? reason : "No Reason Given"));
part_chan (finduser (target), (char *) chan); part_chan (finduser (target), (char *) chan);
return 1; return 1;
} }
int swallops_cmd(const char *who, const char *msg, ...)
int
swallops_cmd (const char *who, const char *msg, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];
@ -409,7 +422,8 @@ int swallops_cmd(const char *who, const char *msg, ...)
return 1; return 1;
} }
int ssvshost_cmd(const char *who, const char *vhost) int
ssvshost_cmd (const char *who, const char *vhost)
{ {
User *u; User *u;
u = finduser (who); u = finduser (who);
@ -418,19 +432,21 @@ int ssvshost_cmd(const char *who, const char *vhost)
sts (":%s SVSHOST %s :%s", me.name, who, vhost); sts (":%s SVSHOST %s :%s", me.name, who, vhost);
return 1; return 1;
} else { } else {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Can't Find user %s for ssvshost_cmd", who);
"Can't Find user %s for ssvshost_cmd", who);
return 0; return 0;
} }
return 0; return 0;
} }
int ssvinfo_cmd() int
ssvinfo_cmd ()
{ {
sts ("SVINFO 5 3 0 :%d", time (NULL)); sts ("SVINFO 5 3 0 :%d", time (NULL));
return 1; return 1;
} }
int sburst_cmd(int b)
int
sburst_cmd (int b)
{ {
if (b == 0) { if (b == 0) {
sts ("BURST 0"); sts ("BURST 0");
@ -440,8 +456,8 @@ int sburst_cmd(int b)
return 1; return 1;
} }
int sakill_cmd(const char *host, const char *ident, const char *setby, int
const int length, const char *reason, ...) sakill_cmd (const char *host, const char *ident, const char *setby, const int length, const char *reason, ...)
{ {
/* there isn't a akill on Hybrid, so we send a kline to all servers! */ /* there isn't a akill on Hybrid, so we send a kline to all servers! */
#if 0 #if 0
@ -454,20 +470,21 @@ int sakill_cmd(const char *host, const char *ident, const char *setby,
char buf[512]; char buf[512];
va_start (ap, reason); va_start (ap, reason);
vsnprintf (buf, 512, reason, ap); vsnprintf (buf, 512, reason, ap);
sts(":%s GLINE %s %s %d :%s", me.name, ident, host, sts (":%s GLINE %s %s %d :%s", me.name, ident, host, time (NULL) + length, buf);
time(NULL) + length, buf);
va_end (ap); va_end (ap);
return 1; return 1;
} }
int srakill_cmd(const char *host, const char *ident) int
srakill_cmd (const char *host, const char *ident)
{ {
sts (":%s UNGLINE %s@%s", me.name, ident, host); sts (":%s UNGLINE %s@%s", me.name, ident, host);
return 1; return 1;
} }
void chanalert(char *who, char *buf, ...) void
chanalert (char *who, char *buf, ...)
{ {
va_list ap; va_list ap;
char tmp[512]; char tmp[512];
@ -476,14 +493,15 @@ void chanalert(char *who, char *buf, ...)
vsnprintf (tmp, 512, buf, ap); vsnprintf (tmp, 512, buf, ap);
if (me.onchan) { if (me.onchan) {
snprintf(out, 512, ":%s PRIVMSG %s :%s", who, me.chan, snprintf (out, 512, ":%s PRIVMSG %s :%s", who, me.chan, tmp);
tmp);
nlog (LOG_DEBUG3, LOG_CORE, "SENT: %s", out); nlog (LOG_DEBUG3, LOG_CORE, "SENT: %s", out);
sts ("%s", out); sts ("%s", out);
} }
va_end (ap); va_end (ap);
} }
void prefmsg(char *to, const char *from, char *fmt, ...)
void
prefmsg (char *to, const char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
@ -491,9 +509,7 @@ void prefmsg(char *to, const char *from, char *fmt, ...)
va_start (ap, fmt); va_start (ap, fmt);
vsnprintf (buf2, sizeof (buf2), fmt, ap); vsnprintf (buf2, sizeof (buf2), fmt, ap);
if (findbot (to)) { if (findbot (to)) {
chanalert(s_Services, chanalert (s_Services, "Message From our Bot(%s) to Our Bot(%s), Dropping Message", from, to);
"Message From our Bot(%s) to Our Bot(%s), Dropping Message",
from, to);
return; return;
} }
if (me.want_privmsg) { if (me.want_privmsg) {
@ -504,15 +520,15 @@ void prefmsg(char *to, const char *from, char *fmt, ...)
sts ("%s", buf); sts ("%s", buf);
va_end (ap); va_end (ap);
} }
void privmsg(char *to, const char *from, char *fmt, ...)
void
privmsg (char *to, const char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
if (findbot (to)) { if (findbot (to)) {
chanalert(s_Services, chanalert (s_Services, "Message From our Bot(%s) to Our Bot(%s), Dropping Message", from, to);
"Message From our Bot(%s) to Our Bot(%s), Dropping Message",
from, to);
return; return;
} }
@ -523,15 +539,14 @@ void privmsg(char *to, const char *from, char *fmt, ...)
va_end (ap); va_end (ap);
} }
void notice(char *to, const char *from, char *fmt, ...) void
notice (char *to, const char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
if (findbot (to)) { if (findbot (to)) {
chanalert(s_Services, chanalert (s_Services, "Message From our Bot(%s) to Our Bot(%s), Dropping Message", from, to);
"Message From our Bot(%s) to Our Bot(%s), Dropping Message",
from, to);
return; return;
} }
@ -543,7 +558,8 @@ void notice(char *to, const char *from, char *fmt, ...)
} }
void privmsg_list(char *to, char *from, const char **text) void
privmsg_list (char *to, char *from, const char **text)
{ {
while (*text) { while (*text) {
if (**text) if (**text)
@ -555,7 +571,8 @@ void privmsg_list(char *to, char *from, const char **text)
} }
void globops(char *from, char *fmt, ...) void
globops (char *from, char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512], buf2[512]; char buf[512], buf2[512];
@ -580,7 +597,8 @@ void globops(char *from, char *fmt, ...)
/* XXXX sjoin sucks man Should do as much of this in a chans.c function*/ /* XXXX sjoin sucks man Should do as much of this in a chans.c function*/
void Srv_Sjoin(char *origin, char **argv, int argc) void
Srv_Sjoin (char *origin, char **argv, int argc)
{ {
char nick[MAXNICK]; char nick[MAXNICK];
long mode = 0; long mode = 0;
@ -607,22 +625,17 @@ void Srv_Sjoin(char *origin, char **argv, int argc)
goto nomodes; goto nomodes;
} }
while (*modes) { while (*modes) {
for (i = 0; for (i = 0; i < ((sizeof (cFlagTab) / sizeof (cFlagTab[0])) - 1); i++) {
i < ((sizeof(cFlagTab) / sizeof(cFlagTab[0])) - 1);
i++) {
if (*modes == cFlagTab[i].flag) { if (*modes == cFlagTab[i].flag) {
if (cFlagTab[i].parameters) { if (cFlagTab[i].parameters) {
m = smalloc (sizeof (ModesParm)); m = smalloc (sizeof (ModesParm));
m->mode = cFlagTab[i].mode; m->mode = cFlagTab[i].mode;
strncpy(m->param, argv[j], strncpy (m->param, argv[j], PARAMSIZE);
PARAMSIZE);
mn = lnode_create (m); mn = lnode_create (m);
if (!list_isfull (tl)) { if (!list_isfull (tl)) {
list_append (tl, mn); list_append (tl, mn);
} else { } else {
nlog(LOG_CRITICAL, nlog (LOG_CRITICAL, LOG_CORE, "Eeeek, tl list is full in Svr_Sjoin(ircd.c)");
LOG_CORE,
"Eeeek, tl list is full in Svr_Sjoin(ircd.c)");
do_exit (0); do_exit (0);
} }
j++; j++;
@ -638,10 +651,7 @@ void Srv_Sjoin(char *origin, char **argv, int argc)
modes = argv[j]; modes = argv[j];
mode = 0; mode = 0;
while (ok == 1) { while (ok == 1) {
for (i = 0; for (i = 0; i < ((sizeof (cFlagTab) / sizeof (cFlagTab[0])) - 1); i++) {
i <
((sizeof(cFlagTab) / sizeof(cFlagTab[0])) -
1); i++) {
if (cFlagTab[i].sjoin != 0) { if (cFlagTab[i].sjoin != 0) {
if (*modes == cFlagTab[i].sjoin) { if (*modes == cFlagTab[i].sjoin) {
mode |= cFlagTab[i].mode; mode |= cFlagTab[i].mode;
@ -654,8 +664,7 @@ void Srv_Sjoin(char *origin, char **argv, int argc)
break; break;
} }
join_chan (finduser (nick), argv[1]); join_chan (finduser (nick), argv[1]);
ChangeChanUserMode(findchan(argv[1]), finduser(nick), 1, ChangeChanUserMode (findchan (argv[1]), finduser (nick), 1, mode);
mode);
j++; j++;
ok = 1; ok = 1;
} }
@ -666,8 +675,7 @@ void Srv_Sjoin(char *origin, char **argv, int argc)
list_transfer (c->modeparms, tl, list_first (tl)); list_transfer (c->modeparms, tl, list_first (tl));
} else { } else {
/* eeeeeeek, list is full! */ /* eeeeeeek, list is full! */
nlog(LOG_CRITICAL, LOG_CORE, nlog (LOG_CRITICAL, LOG_CORE, "Eeeek, c->modeparms list is full in Svr_Sjoin(ircd.c)");
"Eeeek, c->modeparms list is full in Svr_Sjoin(ircd.c)");
do_exit (0); do_exit (0);
} }
} }
@ -675,7 +683,8 @@ void Srv_Sjoin(char *origin, char **argv, int argc)
} }
void Srv_Burst(char *origin, char **argv, int argc) void
Srv_Burst (char *origin, char **argv, int argc)
{ {
if (argc > 0) { if (argc > 0) {
if (ircd_srv.burst == 1) { if (ircd_srv.burst == 1) {
@ -692,7 +701,8 @@ void Srv_Burst(char *origin, char **argv, int argc)
} }
void Srv_Connect(char *origin, char **argv, int argc) void
Srv_Connect (char *origin, char **argv, int argc)
{ {
int i; int i;
for (i = 0; i < argc; i++) { for (i = 0; i < argc; i++) {
@ -703,48 +713,62 @@ void Srv_Connect(char *origin, char **argv, int argc)
} }
void Usr_Stats(char *origin, char **argv, int argc) void
Usr_Stats (char *origin, char **argv, int argc)
{ {
User *u; User *u;
u = finduser (origin); u = finduser (origin);
if (!u) { if (!u) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Recieved a Message from a Unknown User!");
"Recieved a Message from a Unknown User!");
return; return;
} }
ShowStats (argv[0], u); ShowStats (argv[0], u);
} }
void Usr_Version(char *origin, char **argv, int argc) void
Usr_Version (char *origin, char **argv, int argc)
{ {
snumeric_cmd(351, origin, "%d.%d.%d%s :%s -> %s %s", MAJOR, MINOR, snumeric_cmd (351, origin, "%d.%d.%d%s :%s -> %s %s", MAJOR, MINOR, REV, version, me.name, version_date, version_time);
REV, version, me.name, version_date, version_time);
} }
void Usr_ShowMOTD(char *origin, char **argv, int argc)
void
Usr_ShowMOTD (char *origin, char **argv, int argc)
{ {
ShowMOTD (origin); ShowMOTD (origin);
} }
void Usr_ShowADMIN(char *origin, char **argv, int argc)
void
Usr_ShowADMIN (char *origin, char **argv, int argc)
{ {
ShowADMIN (origin); ShowADMIN (origin);
} }
void Usr_Showcredits(char *origin, char **argv, int argc)
void
Usr_Showcredits (char *origin, char **argv, int argc)
{ {
Showcredits (origin); Showcredits (origin);
} }
void Usr_AddServer(char *origin, char **argv, int argc)
void
Usr_AddServer (char *origin, char **argv, int argc)
{ {
AddServer (argv[0], origin, atoi (argv[1])); AddServer (argv[0], origin, atoi (argv[1]));
} }
void Usr_DelServer(char *origin, char **argv, int argc)
void
Usr_DelServer (char *origin, char **argv, int argc)
{ {
DelServer (argv[0]); DelServer (argv[0]);
} }
void Usr_DelUser(char *origin, char **argv, int argc)
void
Usr_DelUser (char *origin, char **argv, int argc)
{ {
DelUser (origin); DelUser (origin);
} }
void Usr_Smode(char *origin, char **argv, int argc)
void
Usr_Smode (char *origin, char **argv, int argc)
{ {
if (!strchr (argv[0], '#')) { if (!strchr (argv[0], '#')) {
/* its user svsmode change */ /* its user svsmode change */
@ -754,7 +778,8 @@ void Usr_Smode(char *origin, char **argv, int argc)
ChanMode (origin, argv, argc); ChanMode (origin, argv, argc);
} }
} }
void Usr_Mode(char *origin, char **argv, int argc) void
Usr_Mode (char *origin, char **argv, int argc)
{ {
if (!strchr (argv[0], '#')) { if (!strchr (argv[0], '#')) {
nlog (LOG_DEBUG1, LOG_CORE, "Mode: UserMode: %s", argv[0]); nlog (LOG_DEBUG1, LOG_CORE, "Mode: UserMode: %s", argv[0]);
@ -763,18 +788,19 @@ void Usr_Mode(char *origin, char **argv, int argc)
ChanMode (origin, argv, argc); ChanMode (origin, argv, argc);
} }
} }
void Usr_Kill(char *origin, char **argv, int argc) void
Usr_Kill (char *origin, char **argv, int argc)
{ {
User *u; User *u;
u = finduser (argv[0]); u = finduser (argv[0]);
if (u) { if (u) {
KillUser (argv[0]); KillUser (argv[0]);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, "Can't find user %s for Kill", nlog (LOG_WARNING, LOG_CORE, "Can't find user %s for Kill", argv[0]);
argv[0]);
} }
} }
void Usr_Vhost(char *origin, char **argv, int argc) void
Usr_Vhost (char *origin, char **argv, int argc)
{ {
User *u; User *u;
u = finduser (origin); u = finduser (origin);
@ -782,18 +808,19 @@ void Usr_Vhost(char *origin, char **argv, int argc)
strncpy (u->vhost, argv[0], MAXHOST); strncpy (u->vhost, argv[0], MAXHOST);
} }
} }
void Usr_Pong(char *origin, char **argv, int argc) void
Usr_Pong (char *origin, char **argv, int argc)
{ {
Server *s; Server *s;
s = findserver (argv[0]); s = findserver (argv[0]);
if (s) { if (s) {
dopong (s); dopong (s);
} else { } else {
nlog(LOG_NOTICE, LOG_CORE, nlog (LOG_NOTICE, LOG_CORE, "Recieved PONG from unknown Server %s", argv[0]);
"Recieved PONG from unknown Server %s", argv[0]);
} }
} }
void Usr_Away(char *origin, char **argv, int argc) void
Usr_Away (char *origin, char **argv, int argc)
{ {
char *buf; char *buf;
User *u; User *u;
@ -809,18 +836,19 @@ void Usr_Away(char *origin, char **argv, int argc)
free (buf); free (buf);
} }
} else { } else {
nlog(LOG_NOTICE, LOG_CORE, nlog (LOG_NOTICE, LOG_CORE, "Warning, Unable to find User %s for Away", origin);
"Warning, Unable to find User %s for Away", origin);
} }
} }
void Usr_Nick(char *origin, char **argv, int argc) void
Usr_Nick (char *origin, char **argv, int argc)
{ {
User *u = finduser (origin); User *u = finduser (origin);
if (u) { if (u) {
Change_User (u, argv[0]); Change_User (u, argv[0]);
} }
} }
void Usr_Topic(char *origin, char **argv, int argc) void
Usr_Topic (char *origin, char **argv, int argc)
{ {
char *buf; char *buf;
Chans *c; Chans *c;
@ -830,13 +858,13 @@ void Usr_Topic(char *origin, char **argv, int argc)
Change_Topic (argv[1], c, atoi (argv[2]), buf); Change_Topic (argv[1], c, atoi (argv[2]), buf);
free (buf); free (buf);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, "Ehhh, Can't find Channel %s", nlog (LOG_WARNING, LOG_CORE, "Ehhh, Can't find Channel %s", argv[0]);
argv[0]);
} }
} }
void Usr_Kick(char *origin, char **argv, int argc) void
Usr_Kick (char *origin, char **argv, int argc)
{ {
User *u, *k; User *u, *k;
u = finduser (argv[1]); u = finduser (argv[1]);
@ -844,12 +872,11 @@ void Usr_Kick(char *origin, char **argv, int argc)
if (u) { if (u) {
kick_chan (u, argv[0], k); kick_chan (u, argv[0], k);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Warning, Can't find user %s for kick %s", argv[1], argv[0]);
"Warning, Can't find user %s for kick %s", argv[1],
argv[0]);
} }
} }
void Usr_Join(char *origin, char **argv, int argc) void
Usr_Join (char *origin, char **argv, int argc)
{ {
char *s, *t; char *s, *t;
t = argv[0]; t = argv[0];
@ -860,22 +887,27 @@ void Usr_Join(char *origin, char **argv, int argc)
join_chan (finduser (origin), s); join_chan (finduser (origin), s);
} }
} }
void Usr_Part(char *origin, char **argv, int argc) void
Usr_Part (char *origin, char **argv, int argc)
{ {
part_chan (finduser (origin), argv[0]); part_chan (finduser (origin), argv[0]);
} }
void Srv_Ping(char *origin, char **argv, int argc)
void
Srv_Ping (char *origin, char **argv, int argc)
{ {
spong_cmd (argv[0]); spong_cmd (argv[0]);
} }
void Srv_Svinfo(char *origin, char **argv, int argc) void
Srv_Svinfo (char *origin, char **argv, int argc)
{ {
ssvinfo_cmd (); ssvinfo_cmd ();
} }
void Srv_Netinfo(char *origin, char **argv, int argc) void
Srv_Netinfo (char *origin, char **argv, int argc)
{ {
me.onchan = 1; me.onchan = 1;
ircd_srv.uprot = atoi (argv[2]); ircd_srv.uprot = atoi (argv[2]);
@ -890,10 +922,12 @@ void Srv_Netinfo(char *origin, char **argv, int argc)
me.synced = 1; me.synced = 1;
} }
void Srv_Pass(char *origin, char **argv, int argc) void
Srv_Pass (char *origin, char **argv, int argc)
{ {
} }
void Srv_Server(char *origin, char **argv, int argc) void
Srv_Server (char *origin, char **argv, int argc)
{ {
Server *s; Server *s;
if (*origin == 0) { if (*origin == 0) {
@ -904,26 +938,27 @@ void Srv_Server(char *origin, char **argv, int argc)
s = findserver (argv[0]); s = findserver (argv[0]);
me.s = s; me.s = s;
} }
void Srv_Squit(char *origin, char **argv, int argc)
void
Srv_Squit (char *origin, char **argv, int argc)
{ {
Server *s; Server *s;
s = findserver (argv[0]); s = findserver (argv[0]);
if (s) { if (s) {
DelServer (argv[0]); DelServer (argv[0]);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Waring, Squit from Unknown Server %s", argv[0]);
"Waring, Squit from Unknown Server %s", argv[0]);
} }
} }
/* BE REALLY CAREFULL ABOUT THE ORDER OF THESE ifdef's */ /* BE REALLY CAREFULL ABOUT THE ORDER OF THESE ifdef's */
void Srv_Nick(char *origin, char **argv, int argc) void
Srv_Nick (char *origin, char **argv, int argc)
{ {
char *realname; char *realname;
User *u; User *u;
AddUser(argv[0], argv[4], argv[5], argv[7], 0, AddUser (argv[0], argv[4], argv[5], argv[7], 0, strtoul (argv[2], NULL, 10));
strtoul(argv[2], NULL, 10));
realname = joinbuf (argv, argc, 9); realname = joinbuf (argv, argc, 9);
AddRealName (argv[0], realname); AddRealName (argv[0], realname);
free (realname); free (realname);
@ -935,28 +970,29 @@ void Srv_Nick(char *origin, char **argv, int argc)
UserMode (argv[0], argv[3], 0); UserMode (argv[0], argv[3], 0);
} }
void Srv_Svsnick(char *origin, char **argv, int argc) void
Srv_Svsnick (char *origin, char **argv, int argc)
{ {
User *u; User *u;
u = finduser (argv[0]); u = finduser (argv[0]);
if (u) { if (u) {
Change_User (u, argv[1]); Change_User (u, argv[1]);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Can't Find User %s for SVSNICK", argv[0]);
"Can't Find User %s for SVSNICK", argv[0]);
} }
} }
void Srv_Kill(char *origin, char **argv, int argc) void
Srv_Kill (char *origin, char **argv, int argc)
{ {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Got Srv_Kill, but its un-handled (%s)", recbuf);
"Got Srv_Kill, but its un-handled (%s)", recbuf);
} }
/* Topic Bursting for NeoIRCD */ /* Topic Bursting for NeoIRCD */
/* R: :fish.dynam.ac TBURST 1034639893 #ircop 1034652780 ChanServ!services@neostats.net :NeoIRCd Test Oper Channel */ /* R: :fish.dynam.ac TBURST 1034639893 #ircop 1034652780 ChanServ!services@neostats.net :NeoIRCd Test Oper Channel */
void Srv_Tburst(char *origin, char **argv, int argc) void
Srv_Tburst (char *origin, char **argv, int argc)
{ {
char *buf; char *buf;
Chans *c; Chans *c;
@ -966,15 +1002,14 @@ void Srv_Tburst(char *origin, char **argv, int argc)
Change_Topic (argv[3], c, atoi (argv[2]), buf); Change_Topic (argv[3], c, atoi (argv[2]), buf);
free (buf); free (buf);
} else { } else {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "TopicBurst: Ehhh, Can't find Channel %s", argv[1]);
"TopicBurst: Ehhh, Can't find Channel %s", argv[1]);
} }
} }
extern int SignOn_NewBot(const char *nick, const char *user, extern int
const char *host, const char *rname, long Umode) SignOn_NewBot (const char *nick, const char *user, const char *host, const char *rname, long Umode)
{ {
snewnick_cmd (nick, user, host, rname, Umode); snewnick_cmd (nick, user, host, rname, Umode);

View file

@ -18,7 +18,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: neoircd.h,v 1.9 2003/07/23 10:35:47 fishwaldo Exp $ ** $Id: neoircd.h,v 1.10 2003/07/30 13:58:22 fishwaldo Exp $
*/ */

View file

@ -22,12 +22,13 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: ns_help.c,v 1.8 2003/06/13 13:11:49 fishwaldo Exp $ ** $Id: ns_help.c,v 1.9 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
#include "stats.h" #include "stats.h"
void init_ns_help() void
init_ns_help ()
{ {
if (usr_mds); if (usr_mds);
} }

View file

@ -22,7 +22,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: server.c,v 1.20 2003/07/15 09:16:15 fishwaldo Exp $ ** $Id: server.c,v 1.21 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
#include <fnmatch.h> #include <fnmatch.h>
@ -35,12 +35,14 @@ int fnmatch(const char *, const char *, int flags);
Server *new_server (char *); Server *new_server (char *);
void init_server() void
init_server ()
{ {
if (usr_mds); if (usr_mds);
} }
Server *new_server(char *name) Server *
new_server (char *name)
{ {
Server *s; Server *s;
hnode_t *sn; hnode_t *sn;
@ -54,15 +56,15 @@ Server *new_server(char *name)
nlog (LOG_WARNING, LOG_CORE, "Eeek, Hash is broken\n"); nlog (LOG_WARNING, LOG_CORE, "Eeek, Hash is broken\n");
} }
if (hash_isfull (sh)) { if (hash_isfull (sh)) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Eeek, Server Hash is full!\n");
"Eeek, Server Hash is full!\n");
} else { } else {
hash_insert (sh, sn, s->name); hash_insert (sh, sn, s->name);
} }
return s; return s;
} }
void AddServer(char *name, char *uplink, int hops) void
AddServer (char *name, char *uplink, int hops)
{ {
Server *s; Server *s;
char **av; char **av;
@ -88,7 +90,8 @@ void AddServer(char *name, char *uplink, int hops)
} }
void DelServer(char *name) void
DelServer (char *name)
{ {
Server *s; Server *s;
hnode_t *sn; hnode_t *sn;
@ -100,8 +103,7 @@ void DelServer(char *name)
} }
sn = hash_lookup (sh, name); sn = hash_lookup (sh, name);
if (!sn) { if (!sn) {
nlog(LOG_DEBUG1, LOG_CORE, "DelServer(): %s not found!", nlog (LOG_DEBUG1, LOG_CORE, "DelServer(): %s not found!", name);
name);
return; return;
} }
s = hnode_get (sn); s = hnode_get (sn);
@ -116,7 +118,8 @@ void DelServer(char *name)
free (s); free (s);
} }
Server *findserver(const char *name) Server *
findserver (const char *name)
{ {
Server *s; Server *s;
hnode_t *sn; hnode_t *sn;
@ -126,13 +129,13 @@ Server *findserver(const char *name)
s = hnode_get (sn); s = hnode_get (sn);
return s; return s;
} else { } else {
nlog(LOG_DEBUG2, LOG_CORE, "FindServer(): %s not found!", nlog (LOG_DEBUG2, LOG_CORE, "FindServer(): %s not found!", name);
name);
return NULL; return NULL;
} }
} }
void ServerDump() void
ServerDump ()
{ {
Server *s; Server *s;
hscan_t ss; hscan_t ss;
@ -148,18 +151,19 @@ void ServerDump()
sendcoders ("End of Listing."); sendcoders ("End of Listing.");
} }
void init_server_hash() void
init_server_hash ()
{ {
sh = hash_create (S_TABLE_SIZE, 0, 0); sh = hash_create (S_TABLE_SIZE, 0, 0);
if (!sh) { if (!sh) {
nlog(LOG_CRITICAL, LOG_CORE, nlog (LOG_CRITICAL, LOG_CORE, "Create Server Hash Failed\n");
"Create Server Hash Failed\n");
do_exit (1); do_exit (1);
} }
AddServer (me.name, NULL, 0); AddServer (me.name, NULL, 0);
} }
void TimerPings() void
TimerPings ()
{ {
Server *s; Server *s;
hscan_t ss; hscan_t ss;

View file

@ -22,7 +22,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: services.c,v 1.55 2003/06/13 13:11:49 fishwaldo Exp $ ** $Id: services.c,v 1.56 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
#include "stats.h" #include "stats.h"
@ -47,7 +47,8 @@ static void ns_chan_dump(User *, char *);
static void ns_uptime (User *); static void ns_uptime (User *);
static void ns_version (User *); static void ns_version (User *);
void servicesbot(char *nick, char **av, int ac) void
servicesbot (char *nick, char **av, int ac)
{ {
User *u; User *u;
int rval; int rval;
@ -55,34 +56,27 @@ void servicesbot(char *nick, char **av, int ac)
u = finduser (nick); u = finduser (nick);
if (!u) { if (!u) {
nlog(LOG_WARNING, LOG_CORE, "Unable to finduser %s (%s)", nlog (LOG_WARNING, LOG_CORE, "Unable to finduser %s (%s)", nick, s_Services);
nick, s_Services);
return; return;
} }
me.requests++; me.requests++;
if (me.onlyopers && (UserLevel (u) < 40)) { if (me.onlyopers && (UserLevel (u) < 40)) {
prefmsg(u->nick, s_Services, prefmsg (u->nick, s_Services, "This service is only available to IRCops.");
"This service is only available to IRCops."); chanalert (s_Services, "%s Requested %s, but he is Not a Operator!", u->nick, av[1]);
chanalert(s_Services,
"%s Requested %s, but he is Not a Operator!",
u->nick, av[1]);
return; return;
} }
if (!strcasecmp (av[1], "HELP")) { if (!strcasecmp (av[1], "HELP")) {
if (ac > 2) { if (ac > 2) {
chanalert(s_Services, "%s Requested %s Help on %s", chanalert (s_Services, "%s Requested %s Help on %s", u->nick, s_Services, av[2]);
u->nick, s_Services, av[2]);
} else { } else {
chanalert(s_Services, "%s Requested %s Help", chanalert (s_Services, "%s Requested %s Help", u->nick, s_Services);
u->nick, s_Services);
} }
if (ac < 3) { if (ac < 3) {
privmsg_list (nick, s_Services, ns_help); privmsg_list (nick, s_Services, ns_help);
if (UserLevel (u) >= 180) if (UserLevel (u) >= 180)
privmsg_list(nick, s_Services, privmsg_list (nick, s_Services, ns_myuser_help);
ns_myuser_help);
} else if (!strcasecmp (av[2], "VERSION")) } else if (!strcasecmp (av[2], "VERSION"))
privmsg_list (nick, s_Services, ns_version_help); privmsg_list (nick, s_Services, ns_version_help);
else if (!strcasecmp (av[2], "SHUTDOWN") else if (!strcasecmp (av[2], "SHUTDOWN")
@ -123,177 +117,135 @@ void servicesbot(char *nick, char **av, int ac)
else if (!strcasecmp (av[2], "LEVEL")) else if (!strcasecmp (av[2], "LEVEL"))
privmsg_list (nick, s_Services, ns_level_help); privmsg_list (nick, s_Services, ns_level_help);
else else
prefmsg(nick, s_Services, prefmsg (nick, s_Services, "Unknown Help Topic: \2%s\2", av[2]);
"Unknown Help Topic: \2%s\2", av[2]);
} else if (!strcasecmp (av[1], "LEVEL")) { } else if (!strcasecmp (av[1], "LEVEL")) {
prefmsg(nick, s_Services, "Your Level is %d", prefmsg (nick, s_Services, "Your Level is %d", UserLevel (u));
UserLevel(u));
} else if (!strcasecmp (av[1], "LOAD")) { } else if (!strcasecmp (av[1], "LOAD")) {
if (!(UserLevel (u) >= 180)) { if (!(UserLevel (u) >= 180)) {
prefmsg (nick, s_Services, "Permission Denied"); prefmsg (nick, s_Services, "Permission Denied");
chanalert(s_Services, chanalert (s_Services, "%s Tried to LOAD, but is not at least a NetAdmin", nick);
"%s Tried to LOAD, but is not at least a NetAdmin",
nick);
return; return;
} }
if (ac <= 2) { if (ac <= 2) {
prefmsg(nick, s_Services, prefmsg (nick, s_Services, "Please Specify a Module");
"Please Specify a Module");
return; return;
} }
rval = load_module (av[2], u); rval = load_module (av[2], u);
if (!rval) { if (!rval) {
chanalert(s_Services, "%s Loaded Module %s", chanalert (s_Services, "%s Loaded Module %s", u->nick, av[2]);
u->nick, av[2]);
} else { } else {
chanalert(s_Services, chanalert (s_Services, "%s Tried to Load Module %s, but Failed", u->nick, av[2]);
"%s Tried to Load Module %s, but Failed",
u->nick, av[2]);
} }
} else if (!strcasecmp (av[1], "MODLIST")) { } else if (!strcasecmp (av[1], "MODLIST")) {
if (!(UserLevel (u) >= 180)) { if (!(UserLevel (u) >= 180)) {
prefmsg (nick, s_Services, "Permission Denied"); prefmsg (nick, s_Services, "Permission Denied");
chanalert(s_Services, chanalert (s_Services, "%s Tried to MODLIST, but is not a Techadmin", nick);
"%s Tried to MODLIST, but is not a Techadmin",
nick);
return; return;
} }
list_module (u); list_module (u);
} else if (!strcasecmp (av[1], "UNLOAD")) { } else if (!strcasecmp (av[1], "UNLOAD")) {
if (!(UserLevel (u) >= 180)) { if (!(UserLevel (u) >= 180)) {
prefmsg (nick, s_Services, "Permission Denied"); prefmsg (nick, s_Services, "Permission Denied");
chanalert(s_Services, chanalert (s_Services, "%s Tried to UNLOAD, but is not a Techadmin", nick);
"%s Tried to UNLOAD, but is not a Techadmin",
nick);
return; return;
} }
if (ac <= 2) { if (ac <= 2) {
prefmsg(nick, s_Services, prefmsg (nick, s_Services, " Please Specify a Module Name");
" Please Specify a Module Name");
return; return;
} }
rval = unload_module (av[2], u); rval = unload_module (av[2], u);
if (rval > 0) { if (rval > 0) {
chanalert(s_Services, "%s Unloaded Module %s", chanalert (s_Services, "%s Unloaded Module %s", u->nick, av[2]);
u->nick, av[2]);
} }
return; return;
} else if (!strcasecmp (av[1], "MODBOTLIST")) { } else if (!strcasecmp (av[1], "MODBOTLIST")) {
if (!(UserLevel (u) >= 180)) { if (!(UserLevel (u) >= 180)) {
prefmsg (nick, s_Services, "Permission Denied"); prefmsg (nick, s_Services, "Permission Denied");
chanalert(s_Services, chanalert (s_Services, "%s Tried to MODBOTLIST, but is not a Techadmin", nick);
"%s Tried to MODBOTLIST, but is not a Techadmin",
nick);
return; return;
} }
list_module_bots (u); list_module_bots (u);
} else if (!strcasecmp (av[1], "MODSOCKLIST")) { } else if (!strcasecmp (av[1], "MODSOCKLIST")) {
if (!(UserLevel (u) >= 180)) { if (!(UserLevel (u) >= 180)) {
prefmsg (nick, s_Services, "Permission Denied"); prefmsg (nick, s_Services, "Permission Denied");
chanalert(s_Services, chanalert (s_Services, "%s Tried to MODSOCKLIST, but is not a Techadmin", nick);
"%s Tried to MODSOCKLIST, but is not a Techadmin",
nick);
return; return;
} }
list_sockets (u); list_sockets (u);
} else if (!strcasecmp (av[1], "MODTIMERLIST")) { } else if (!strcasecmp (av[1], "MODTIMERLIST")) {
if (!(UserLevel (u) >= 180)) { if (!(UserLevel (u) >= 180)) {
prefmsg (nick, s_Services, "Permission Denied"); prefmsg (nick, s_Services, "Permission Denied");
chanalert(s_Services, chanalert (s_Services, "%s Tried to MODTIMERLIST, but is not a Techadmin", nick);
"%s Tried to MODTIMERLIST, but is not a Techadmin",
nick);
return; return;
} }
list_module_timer (u); list_module_timer (u);
} else if (!strcasecmp (av[1], "MODBOTCHANLIST")) { } else if (!strcasecmp (av[1], "MODBOTCHANLIST")) {
if (!(UserLevel (u) >= 180)) { if (!(UserLevel (u) >= 180)) {
prefmsg (nick, s_Services, "Permission Denied"); prefmsg (nick, s_Services, "Permission Denied");
chanalert(s_Services, chanalert (s_Services, "%s tried to MODBOTCHANLIST, but is not a techadmin", nick);
"%s tried to MODBOTCHANLIST, but is not a techadmin",
nick);
return; return;
} }
botchandump (u); botchandump (u);
} else if (!strcasecmp (av[1], "INFO")) { } else if (!strcasecmp (av[1], "INFO")) {
ns_uptime (u); ns_uptime (u);
chanalert(s_Services, "%s Wanted to see %s's info", chanalert (s_Services, "%s Wanted to see %s's info", u->nick, me.name);
u->nick, me.name);
} else if (!strcasecmp (av[1], "SHUTDOWN")) { } else if (!strcasecmp (av[1], "SHUTDOWN")) {
if (!(UserLevel (u) >= 180)) { if (!(UserLevel (u) >= 180)) {
prefmsg (nick, s_Services, "Permission Denied"); prefmsg (nick, s_Services, "Permission Denied");
chanalert(s_Services, chanalert (s_Services, "%s Tried to SHUTDOWN, but is not a Techadmin", nick);
"%s Tried to SHUTDOWN, but is not a Techadmin",
nick);
return; return;
} }
chanalert(s_Services, chanalert (s_Services, "%s Wants me to Go to BED!!! Good Night!", u->nick);
"%s Wants me to Go to BED!!! Good Night!",
u->nick);
tmp = joinbuf (av, ac, 2); tmp = joinbuf (av, ac, 2);
ns_shutdown (u, tmp); ns_shutdown (u, tmp);
free (tmp); free (tmp);
} else if (!strcasecmp (av[1], "VERSION")) { } else if (!strcasecmp (av[1], "VERSION")) {
ns_version (u); ns_version (u);
chanalert(s_Services, chanalert (s_Services, "%s Wanted to know our version number ", u->nick);
"%s Wanted to know our version number ",
u->nick);
} else if (!strcasecmp (av[1], "RELOAD")) { } else if (!strcasecmp (av[1], "RELOAD")) {
if (!(UserLevel (u) >= 180)) { if (!(UserLevel (u) >= 180)) {
prefmsg (nick, s_Services, "Permission Denied"); prefmsg (nick, s_Services, "Permission Denied");
chanalert(s_Services, chanalert (s_Services, "%s Tried to RELOAD, but is not a Techadmin", nick);
"%s Tried to RELOAD, but is not a Techadmin",
nick);
return; return;
} }
if (ac <= 2) { if (ac <= 2) {
prefmsg(nick, s_Services, prefmsg (nick, s_Services, "You must supply a Reason to Reload");
"You must supply a Reason to Reload");
return; return;
} }
tmp = joinbuf (av, ac, 2); tmp = joinbuf (av, ac, 2);
chanalert(s_Services, "%s Wants me to RELOAD! for %s", chanalert (s_Services, "%s Wants me to RELOAD! for %s", u->nick, tmp);
u->nick, tmp);
ns_reload (u, tmp); ns_reload (u, tmp);
free (tmp); free (tmp);
} else if (!strcasecmp (av[1], "LOGS")) { } else if (!strcasecmp (av[1], "LOGS")) {
if (!(UserLevel (u) >= 180)) { if (!(UserLevel (u) >= 180)) {
prefmsg (nick, s_Services, "Permission Denied"); prefmsg (nick, s_Services, "Permission Denied");
chanalert(s_Services, chanalert (s_Services, "%s Tried to view LOGS, but is not a Techadmin", nick);
"%s Tried to view LOGS, but is not a Techadmin",
nick);
return; return;
} }
ns_logs (u); ns_logs (u);
chanalert(s_Services, "%s Wants to Look at my Logs!!", chanalert (s_Services, "%s Wants to Look at my Logs!!", u->nick);
u->nick);
} else if (!strcasecmp (av[1], "JUPE")) { } else if (!strcasecmp (av[1], "JUPE")) {
if (!(UserLevel (u) >= 180)) { if (!(UserLevel (u) >= 180)) {
prefmsg (nick, s_Services, "Permission Denied"); prefmsg (nick, s_Services, "Permission Denied");
chanalert(s_Services, chanalert (s_Services, "%s Tried to JUPE, but is not a Techadmin", nick);
"%s Tried to JUPE, but is not a Techadmin",
nick);
return; return;
} }
if (ac <= 2) { if (ac <= 2) {
prefmsg(nick, s_Services, prefmsg (nick, s_Services, "You must supply a ServerName to Jupe");
"You must supply a ServerName to Jupe");
return; return;
} }
ns_jupe (u, av[2]); ns_jupe (u, av[2]);
chanalert(s_Services, "%s Wants to JUPE this Server %s", chanalert (s_Services, "%s Wants to JUPE this Server %s", u->nick, av[2]);
u->nick, av[2]);
} else if (!strcasecmp (av[1], "DEBUG")) { } else if (!strcasecmp (av[1], "DEBUG")) {
if (!(UserLevel (u) >= 180)) { if (!(UserLevel (u) >= 180)) {
prefmsg(u->nick, s_Services, prefmsg (u->nick, s_Services, "Permission Denied, you need to be a Techadmin to Enable Debug Mode!");
"Permission Denied, you need to be a Techadmin to Enable Debug Mode!");
return; return;
} }
ns_debug_to_coders (u->nick); ns_debug_to_coders (u->nick);
} else if (!strcasecmp (av[1], "USERDUMP")) { } else if (!strcasecmp (av[1], "USERDUMP")) {
if (!me.coder_debug) { if (!me.coder_debug) {
prefmsg(u->nick, s_Services, prefmsg (u->nick, s_Services, "\2Error:\2 Debug Mode Disabled");
"\2Error:\2 Debug Mode Disabled");
return; return;
} }
if (ac <= 2) { if (ac <= 2) {
@ -303,8 +255,7 @@ void servicesbot(char *nick, char **av, int ac)
} }
} else if (!strcasecmp (av[1], "CHANDUMP")) { } else if (!strcasecmp (av[1], "CHANDUMP")) {
if (!me.coder_debug) { if (!me.coder_debug) {
prefmsg(u->nick, s_Services, prefmsg (u->nick, s_Services, "\2Error:\2 Debug Mode Disabled");
"\2Error:\2 Debug Mode Disabled");
return; return;
} }
if (ac < 3) { if (ac < 3) {
@ -314,17 +265,14 @@ void servicesbot(char *nick, char **av, int ac)
} }
} else if (!strcasecmp (av[1], "SERVERDUMP")) { } else if (!strcasecmp (av[1], "SERVERDUMP")) {
if (!me.coder_debug) { if (!me.coder_debug) {
prefmsg(u->nick, s_Services, prefmsg (u->nick, s_Services, "\2Error:\2 Debug Mode Disabled");
"\2Error:\2 Debug Mode Disabled");
return; return;
} }
ns_server_dump (u); ns_server_dump (u);
} else if (!strcasecmp (av[1], "RAW")) { } else if (!strcasecmp (av[1], "RAW")) {
if (!(UserLevel (u) >= 180)) { if (!(UserLevel (u) >= 180)) {
prefmsg (nick, s_Services, "Permission Denied"); prefmsg (nick, s_Services, "Permission Denied");
chanalert(s_Services, chanalert (s_Services, "%s Tried to use RAW, but is not a Techadmin", nick);
"%s Tried to use RAW, but is not a Techadmin",
nick);
return; return;
} }
#ifdef USE_RAW #ifdef USE_RAW
@ -337,16 +285,14 @@ void servicesbot(char *nick, char **av, int ac)
return; return;
#endif #endif
} else { } else {
prefmsg(nick, s_Services, "Unknown Command: \2%s\2", prefmsg (nick, s_Services, "Unknown Command: \2%s\2", av[1]);
av[1]); chanalert (s_Services, "%s Reqested %s, but that is a Unknown Command", u->nick, av[1]);
chanalert(s_Services,
"%s Reqested %s, but that is a Unknown Command",
u->nick, av[1]);
} }
} }
extern void ns_shutdown(User * u, char *reason) extern void
ns_shutdown (User * u, char *reason)
{ {
Module *mod_ptr = NULL; Module *mod_ptr = NULL;
hscan_t ms; hscan_t ms;
@ -358,43 +304,37 @@ extern void ns_shutdown(User * u, char *reason)
hash_scan_begin (&ms, mh); hash_scan_begin (&ms, mh);
while ((mn = hash_scan_next (&ms)) != NULL) { while ((mn = hash_scan_next (&ms)) != NULL) {
mod_ptr = hnode_get (mn); mod_ptr = hnode_get (mn);
chanalert(s_Services, "Module %s Unloaded by %s", chanalert (s_Services, "Module %s Unloaded by %s", mod_ptr->info->module_name, u->nick);
mod_ptr->info->module_name, u->nick);
unload_module (mod_ptr->info->module_name, u); unload_module (mod_ptr->info->module_name, u);
} }
globops(s_Services, "%s requested \2SHUTDOWN\2 for %s", u->nick, globops (s_Services, "%s requested \2SHUTDOWN\2 for %s", u->nick, reason);
reason); snprintf (quitmsg, 255, "%s Set SHUTDOWN: %s", u->nick, (reason ? reason : "No Reason"));
snprintf(quitmsg, 255, "%s Set SHUTDOWN: %s", u->nick,
(reason ? reason : "No Reason"));
squit_cmd (s_Services, quitmsg); squit_cmd (s_Services, quitmsg);
ssquit_cmd (me.name); ssquit_cmd (me.name);
sleep (1); sleep (1);
close (servsock); close (servsock);
remove ("neostats.pid"); remove ("neostats.pid");
nlog(LOG_NOTICE, LOG_CORE, "%s [%s](%s) requested SHUTDOWN.", nlog (LOG_NOTICE, LOG_CORE, "%s [%s](%s) requested SHUTDOWN.", u->nick, u->username, u->hostname);
u->nick, u->username, u->hostname);
do_exit (0); do_exit (0);
} }
static void ns_reload(User * u, char *reason) static void
ns_reload (User * u, char *reason)
{ {
Module *mod_ptr = NULL; Module *mod_ptr = NULL;
hscan_t ms; hscan_t ms;
hnode_t *mn; hnode_t *mn;
char quitmsg[255]; char quitmsg[255];
strcpy (segv_location, "ns_reload"); strcpy (segv_location, "ns_reload");
globops(s_Services, "%s requested \2RELOAD\2 for %s", u->nick, globops (s_Services, "%s requested \2RELOAD\2 for %s", u->nick, reason);
reason); nlog (LOG_NOTICE, LOG_CORE, "%s requested RELOAD. -> reason", u->nick);
nlog(LOG_NOTICE, LOG_CORE, "%s requested RELOAD. -> reason",
u->nick);
snprintf (quitmsg, 255, "%s Sent RELOAD: %s", u->nick, reason); snprintf (quitmsg, 255, "%s Sent RELOAD: %s", u->nick, reason);
hash_scan_begin (&ms, mh); hash_scan_begin (&ms, mh);
while ((mn = hash_scan_next (&ms)) != NULL) { while ((mn = hash_scan_next (&ms)) != NULL) {
mod_ptr = hnode_get (mn); mod_ptr = hnode_get (mn);
chanalert(s_Services, "Module %s Unloaded by %s", chanalert (s_Services, "Module %s Unloaded by %s", mod_ptr->info->module_name, u->nick);
mod_ptr->info->module_name, u->nick);
unload_module (mod_ptr->info->module_name, u); unload_module (mod_ptr->info->module_name, u);
} }
squit_cmd (s_Services, quitmsg); squit_cmd (s_Services, quitmsg);
@ -404,11 +344,11 @@ static void ns_reload(User * u, char *reason)
} }
static void ns_logs(User * u) static void
ns_logs (User * u)
{ {
#ifdef DEBUG #ifdef DEBUG
prefmsg(u->nick, s_Services, prefmsg (u->nick, s_Services, "This command is disabled while in DEBUG.");
"This command is disabled while in DEBUG.");
#else #else
FILE *fp; FILE *fp;
char buf[512]; char buf[512];
@ -417,8 +357,7 @@ static void ns_logs(User * u)
fp = fopen ("logs/NeoStats.log", "r"); fp = fopen ("logs/NeoStats.log", "r");
if (!fp) { if (!fp) {
prefmsg(u->nick, s_Services, prefmsg (u->nick, s_Services, "Unable to open neostats.log");
"Unable to open neostats.log");
return; return;
} }
while (fgets (buf, sizeof (buf), fp)) { while (fgets (buf, sizeof (buf), fp)) {
@ -429,24 +368,24 @@ static void ns_logs(User * u)
#endif #endif
} }
static void ns_jupe(User * u, char *server) static void
ns_jupe (User * u, char *server)
{ {
char infoline[255]; char infoline[255];
strcpy (segv_location, "ns_jupe"); strcpy (segv_location, "ns_jupe");
snprintf (infoline, 255, "[Jupitered by %s]", u->nick); snprintf (infoline, 255, "[Jupitered by %s]", u->nick);
sserver_cmd (server, 1, infoline); sserver_cmd (server, 1, infoline);
nlog(LOG_NOTICE, LOG_CORE, "%s!%s@%s jupitered %s", u->nick, nlog (LOG_NOTICE, LOG_CORE, "%s!%s@%s jupitered %s", u->nick, u->username, u->hostname, server);
u->username, u->hostname, server);
} }
void ns_debug_to_coders(char *u) void
ns_debug_to_coders (char *u)
{ {
strcpy (segv_location, "ns_debug_to_coders"); strcpy (segv_location, "ns_debug_to_coders");
if (!me.coder_debug) { if (!me.coder_debug) {
me.coder_debug = 1; me.coder_debug = 1;
if (u) { if (u) {
globops(me.name, "\2DEBUG MODE\2 Activated by %s", globops (me.name, "\2DEBUG MODE\2 Activated by %s", u);
u);
prefmsg (u, s_Services, "Debuging Mode Enabled!"); prefmsg (u, s_Services, "Debuging Mode Enabled!");
} else { } else {
globops (me.name, "\2DEBUG MODE\3 Active"); globops (me.name, "\2DEBUG MODE\3 Active");
@ -454,8 +393,7 @@ void ns_debug_to_coders(char *u)
} else { } else {
me.coder_debug = 0; me.coder_debug = 0;
if (!u) { if (!u) {
globops(me.name, globops (me.name, "\2DEBUG MODE\2 Deactivated by %s", u);
"\2DEBUG MODE\2 Deactivated by %s", u);
prefmsg (u, s_Services, "Debuging Mode Disabled"); prefmsg (u, s_Services, "Debuging Mode Disabled");
} else { } else {
globops (me.name, "\2DEBUG MODE\2 Deactivated"); globops (me.name, "\2DEBUG MODE\2 Deactivated");
@ -464,15 +402,13 @@ void ns_debug_to_coders(char *u)
} }
#ifdef USE_RAW #ifdef USE_RAW
static void ns_raw(User * u, char *message) static void
ns_raw (User * u, char *message)
{ {
int sent; int sent;
strcpy (segv_location, "ns_raw"); strcpy (segv_location, "ns_raw");
chanalert(s_Services, chanalert (s_Services, "\2RAW COMMAND\2 \2%s\2 Issued a Raw Command!(%s)", u->nick, message);
"\2RAW COMMAND\2 \2%s\2 Issued a Raw Command!(%s)", nlog (LOG_INFO, LOG_CORE, "RAW COMMAND %sIssued a Raw Command!(%s)", u->nick, message);
u->nick, message);
nlog(LOG_INFO, LOG_CORE, "RAW COMMAND %sIssued a Raw Command!(%s)",
u->nick, message);
strcat (message, "\n"); strcat (message, "\n");
sent = write (servsock, message, strlen (message)); sent = write (servsock, message, strlen (message));
if (sent == -1) { if (sent == -1) {
@ -483,95 +419,73 @@ static void ns_raw(User * u, char *message)
me.SendBytes = me.SendBytes + sent; me.SendBytes = me.SendBytes + sent;
} }
#endif #endif
static void ns_user_dump(User * u, char *nick) static void
ns_user_dump (User * u, char *nick)
{ {
strcpy (segv_location, "ns_user_dump"); strcpy (segv_location, "ns_user_dump");
if (!(UserLevel (u) >= 180)) { if (!(UserLevel (u) >= 180)) {
prefmsg(u->nick, s_Services, prefmsg (u->nick, s_Services, "Permission Denied, you need to be at least a NetAdmin to Enable Debug Mode!");
"Permission Denied, you need to be at least a NetAdmin to Enable Debug Mode!");
return; return;
} }
chanalert(s_Services, "\2DEBUG\2 \2%s\2 Requested a UserDump!", chanalert (s_Services, "\2DEBUG\2 \2%s\2 Requested a UserDump!", u->nick);
u->nick);
UserDump (nick); UserDump (nick);
} }
static void ns_server_dump(User * u) static void
ns_server_dump (User * u)
{ {
strcpy (segv_location, "ns_server_dump"); strcpy (segv_location, "ns_server_dump");
if (!(UserLevel (u) >= 180)) { if (!(UserLevel (u) >= 180)) {
prefmsg(u->nick, s_Services, prefmsg (u->nick, s_Services, "Permission Denied, you need to be at least a NetAdmin to Enable Debug Mode!");
"Permission Denied, you need to be at least a NetAdmin to Enable Debug Mode!");
return; return;
} }
chanalert(s_Services, "\2DEBUG\2 \2%s\2 Requested a ServerDump!", chanalert (s_Services, "\2DEBUG\2 \2%s\2 Requested a ServerDump!", u->nick);
u->nick);
ServerDump (); ServerDump ();
} }
static void ns_chan_dump(User * u, char *chan) static void
ns_chan_dump (User * u, char *chan)
{ {
strcpy (segv_location, "ns_chan_dump"); strcpy (segv_location, "ns_chan_dump");
if (!(UserLevel (u) >= 180)) { if (!(UserLevel (u) >= 180)) {
prefmsg(u->nick, s_Services, prefmsg (u->nick, s_Services, "Permission Denied, you need to be at least a NetAdmin to Enable Debug Mode!");
"Permission Denied, you need to be at least a NetAdmin to Enable Debug Mode!");
return; return;
} }
chanalert(s_Services, "\2DEBUG\2 \2%s\2 Requested a ChannelDump!", chanalert (s_Services, "\2DEBUG\2 \2%s\2 Requested a ChannelDump!", u->nick);
u->nick);
chandump (chan); chandump (chan);
} }
static void ns_uptime(User * u) static void
ns_uptime (User * u)
{ {
int uptime = time (NULL) - me.t_start; int uptime = time (NULL) - me.t_start;
strcpy (segv_location, "ns_uptime"); strcpy (segv_location, "ns_uptime");
prefmsg (u->nick, s_Services, "Statistics Information:"); prefmsg (u->nick, s_Services, "Statistics Information:");
if (uptime > 86400) { if (uptime > 86400) {
prefmsg(u->nick, s_Services, prefmsg (u->nick, s_Services, "Statistics up \2%ld\2 day%s, \2%02ld:%02ld\2", uptime / 86400, (uptime / 86400 == 1) ? "" : "s", (uptime / 3600) % 24, (uptime / 60) % 60);
"Statistics up \2%ld\2 day%s, \2%02ld:%02ld\2",
uptime / 86400, (uptime / 86400 == 1) ? "" : "s",
(uptime / 3600) % 24, (uptime / 60) % 60);
} else if (uptime > 3600) { } else if (uptime > 3600) {
prefmsg(u->nick, s_Services, prefmsg (u->nick, s_Services, "Statistics up \2%ld hour%s, %ld minute%s\2", uptime / 3600, uptime / 3600 == 1 ? "" : "s", (uptime / 60) % 60, (uptime / 60) % 60 == 1 ? "" : "s");
"Statistics up \2%ld hour%s, %ld minute%s\2",
uptime / 3600, uptime / 3600 == 1 ? "" : "s",
(uptime / 60) % 60,
(uptime / 60) % 60 == 1 ? "" : "s");
} else if (uptime > 60) { } else if (uptime > 60) {
prefmsg(u->nick, s_Services, prefmsg (u->nick, s_Services, "Statistics up \2%ld minute%s, %ld second%s\2", uptime / 60, uptime / 60 == 1 ? "" : "s", uptime % 60, uptime % 60 == 1 ? "" : "s");
"Statistics up \2%ld minute%s, %ld second%s\2",
uptime / 60, uptime / 60 == 1 ? "" : "s",
uptime % 60, uptime % 60 == 1 ? "" : "s");
} else { } else {
prefmsg(u->nick, s_Services, prefmsg (u->nick, s_Services, "Statistics up \2%ld second%s\2", uptime, uptime == 1 ? "" : "s");
"Statistics up \2%ld second%s\2", uptime,
uptime == 1 ? "" : "s");
} }
prefmsg(u->nick, s_Services, prefmsg (u->nick, s_Services, "Sent %ld Messages Totaling %ld Bytes", me.SendM, me.SendBytes);
"Sent %ld Messages Totaling %ld Bytes", me.SendM, prefmsg (u->nick, s_Services, "Recieved %ld Messages, Totaling %ld Bytes", me.RcveM, me.RcveBytes);
me.SendBytes);
prefmsg(u->nick, s_Services,
"Recieved %ld Messages, Totaling %ld Bytes", me.RcveM,
me.RcveBytes);
prefmsg (u->nick, s_Services, "Reconnect Time: %d", me.r_time); prefmsg (u->nick, s_Services, "Reconnect Time: %d", me.r_time);
prefmsg(u->nick, s_Services, "Statistic Requests: %d", prefmsg (u->nick, s_Services, "Statistic Requests: %d", me.requests);
me.requests); prefmsg (u->nick, s_Services, "Max Sockets: %d (in use: %d)", me.maxsocks, me.cursocks);
prefmsg(u->nick, s_Services, "Max Sockets: %d (in use: %d)", prefmsg (u->nick, s_Services, "Use SMO for Debug?: %s", (me.usesmo) ? "Enabled" : "Disabled");
me.maxsocks, me.cursocks);
prefmsg(u->nick, s_Services, "Use SMO for Debug?: %s",
(me.usesmo) ? "Enabled" : "Disabled");
if (me.coder_debug) if (me.coder_debug)
prefmsg (u->nick, s_Services, "Debugging Mode is \2ON!\2"); prefmsg (u->nick, s_Services, "Debugging Mode is \2ON!\2");
else else
prefmsg(u->nick, s_Services, prefmsg (u->nick, s_Services, "Debugging Mode is Disabled!");
"Debugging Mode is Disabled!");
prefmsg (u->nick, s_Services, "End of Information."); prefmsg (u->nick, s_Services, "End of Information.");
} }
static void ns_version(User * u) static void
ns_version (User * u)
{ {
strcpy (segv_location, "ns_version"); strcpy (segv_location, "ns_version");
prefmsg (u->nick, s_Services, "\2NeoStats Version Information\2"); prefmsg (u->nick, s_Services, "\2NeoStats Version Information\2");
prefmsg(u->nick, s_Services, "NeoStats Version: %d.%d.%d%s", MAJOR, prefmsg (u->nick, s_Services, "NeoStats Version: %d.%d.%d%s", MAJOR, MINOR, REV, version);
MINOR, REV, version);
prefmsg (u->nick, s_Services, "http://www.neostats.net"); prefmsg (u->nick, s_Services, "http://www.neostats.net");
} }

160
sock.c
View file

@ -22,7 +22,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: sock.c,v 1.39 2003/06/26 05:25:09 fishwaldo Exp $ ** $Id: sock.c,v 1.40 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
#include <fcntl.h> #include <fcntl.h>
@ -37,7 +37,8 @@ void recvlog(char *line);
struct sockaddr_in lsa; struct sockaddr_in lsa;
int dobind; int dobind;
int ConnectTo(char *host, int port) int
ConnectTo (char *host, int port)
{ {
struct hostent *hp; struct hostent *hp;
struct sockaddr_in sa; struct sockaddr_in sa;
@ -48,12 +49,9 @@ int ConnectTo(char *host, int port)
memset (&lsa, 0, sizeof (lsa)); memset (&lsa, 0, sizeof (lsa));
if (strlen (me.local) > 1) { if (strlen (me.local) > 1) {
if ((hp = gethostbyname (me.local)) == NULL) { if ((hp = gethostbyname (me.local)) == NULL) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Warning, Couldn't bind to IP address %s", me.local);
"Warning, Couldn't bind to IP address %s",
me.local);
} else { } else {
memcpy((char *) &lsa.sin_addr, hp->h_addr, memcpy ((char *) &lsa.sin_addr, hp->h_addr, hp->h_length);
hp->h_length);
lsa.sin_family = hp->h_addrtype; lsa.sin_family = hp->h_addrtype;
dobind = 1; dobind = 1;
} }
@ -69,9 +67,7 @@ int ConnectTo(char *host, int port)
return (-1); return (-1);
if (dobind > 0) { if (dobind > 0) {
if (bind (s, (struct sockaddr *) &lsa, sizeof (lsa)) < 0) { if (bind (s, (struct sockaddr *) &lsa, sizeof (lsa)) < 0) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "bind(): Warning, Couldn't bind to IP address %s", strerror (errno));
"bind(): Warning, Couldn't bind to IP address %s",
strerror(errno));
} }
} }
@ -89,7 +85,8 @@ int ConnectTo(char *host, int port)
return s; return s;
} }
void read_loop() void
read_loop ()
{ {
register int i, j, SelectResult; register int i, j, SelectResult;
struct timeval *TimeOut, tvbuf; struct timeval *TimeOut, tvbuf;
@ -127,17 +124,13 @@ void read_loop()
++me.cursocks; ++me.cursocks;
} }
/* adns stuff... whats its interested in */ /* adns stuff... whats its interested in */
adns_beforeselect(ads, &me.maxsocks, &readfds, &writefds, adns_beforeselect (ads, &me.maxsocks, &readfds, &writefds, &errfds, &TimeOut, &tvbuf, 0);
&errfds, &TimeOut, &tvbuf, 0);
/* adns may change this, but we tell it to go away!!! */ /* adns may change this, but we tell it to go away!!! */
TimeOut->tv_sec = 1; TimeOut->tv_sec = 1;
TimeOut->tv_usec = 0; TimeOut->tv_usec = 0;
SelectResult = SelectResult = select (FD_SETSIZE, &readfds, &writefds, &errfds, TimeOut);
select(FD_SETSIZE, &readfds, &writefds, &errfds,
TimeOut);
if (SelectResult > 0) { if (SelectResult > 0) {
adns_afterselect(ads, me.maxsocks, &readfds, adns_afterselect (ads, me.maxsocks, &readfds, &writefds, &errfds, 0);
&writefds, &errfds, 0);
/* do and dns related callbacks now */ /* do and dns related callbacks now */
do_dns (); do_dns ();
@ -151,80 +144,35 @@ void read_loop()
if ((c == '\n') if ((c == '\n')
|| (c == '\r')) { || (c == '\r')) {
me.RcveM++; me.RcveM++;
me.lastmsg = me.lastmsg = time (NULL);
time(NULL);
if (config.recvlog) if (config.recvlog)
recvlog recvlog (buf);
(buf);
parse (buf); parse (buf);
break; break;
} }
} else { } else {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "read returned a Error");
"read returned a Error");
return; return;
} }
} else { } else {
/* this checks if there is any data waiting on a socket for a module */ /* this checks if there is any data waiting on a socket for a module */
hash_scan_begin (&ss, sockh); hash_scan_begin (&ss, sockh);
while ((sn = while ((sn = hash_scan_next (&ss)) != NULL) {
hash_scan_next(&ss)) !=
NULL) {
mod_sock = hnode_get (sn); mod_sock = hnode_get (sn);
strcpy(segvinmodule, strcpy (segvinmodule, mod_sock->modname);
mod_sock->modname); if (FD_ISSET (mod_sock->sock_no, &readfds)) {
if (FD_ISSET nlog (LOG_DEBUG3, LOG_CORE, "Running module %s readsock function for %s", mod_sock->modname, mod_sock->sockname);
(mod_sock->sock_no, if (mod_sock->readfnc (mod_sock->sock_no, mod_sock->sockname) < 0)
&readfds)) {
nlog(LOG_DEBUG3,
LOG_CORE,
"Running module %s readsock function for %s",
mod_sock->
modname,
mod_sock->
sockname);
if (mod_sock->
readfnc
(mod_sock->
sock_no,
mod_sock->
sockname) < 0)
break; break;
} }
if (FD_ISSET if (FD_ISSET (mod_sock->sock_no, &writefds)) {
(mod_sock->sock_no, nlog (LOG_DEBUG3, LOG_CORE, "Running module %s writesock function for %s", mod_sock->modname, mod_sock->sockname);
&writefds)) { if (mod_sock->writefnc (mod_sock->sock_no, mod_sock->sockname) < 0)
nlog(LOG_DEBUG3,
LOG_CORE,
"Running module %s writesock function for %s",
mod_sock->
modname,
mod_sock->
sockname);
if (mod_sock->
writefnc
(mod_sock->
sock_no,
mod_sock->
sockname) < 0)
break; break;
} }
if (FD_ISSET if (FD_ISSET (mod_sock->sock_no, &errfds)) {
(mod_sock->sock_no, nlog (LOG_DEBUG3, LOG_CORE, "Running module %s errorsock function for %s", mod_sock->modname, mod_sock->sockname);
&errfds)) { if (mod_sock->errfnc (mod_sock->sock_no, mod_sock->sockname) < 0)
nlog(LOG_DEBUG3,
LOG_CORE,
"Running module %s errorsock function for %s",
mod_sock->
modname,
mod_sock->
sockname);
if (mod_sock->
errfnc
(mod_sock->
sock_no,
mod_sock->
sockname) < 0)
break; break;
} }
} }
@ -240,21 +188,16 @@ void read_loop()
hash_scan_begin (&ms, mh); hash_scan_begin (&ms, mh);
while ((mn = hash_scan_next (&ms)) != NULL) { while ((mn = hash_scan_next (&ms)) != NULL) {
mod_ptr = hnode_get (mn); mod_ptr = hnode_get (mn);
unload_module(mod_ptr->info-> unload_module (mod_ptr->info->module_name, finduser (s_Services));
module_name,
finduser
(s_Services));
} }
close (servsock); close (servsock);
sleep (5); sleep (5);
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Eeek, Zombie Server, Reconnecting");
"Eeek, Zombie Server, Reconnecting");
do_exit (2); do_exit (2);
} }
} else if (SelectResult == -1) { } else if (SelectResult == -1) {
if (errno != EINTR) { if (errno != EINTR) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Lost connection to server.");
"Lost connection to server.");
return; return;
} }
} }
@ -262,7 +205,8 @@ void read_loop()
nlog (LOG_NORMAL, LOG_CORE, "hu, how did we get here"); nlog (LOG_NORMAL, LOG_CORE, "hu, how did we get here");
} }
extern int getmaxsock() extern int
getmaxsock ()
{ {
struct rlimit *lim; struct rlimit *lim;
int ret; int ret;
@ -273,7 +217,8 @@ extern int getmaxsock()
return ret; return ret;
} }
void recvlog(char *line) void
recvlog (char *line)
{ {
FILE *logfile; FILE *logfile;
if ((logfile = fopen ("logs/recv.log", "a")) == NULL) if ((logfile = fopen ("logs/recv.log", "a")) == NULL)
@ -285,7 +230,8 @@ void recvlog(char *line)
#if 0 #if 0
void log(char *fmt, ...) void
log (char *fmt, ...)
{ {
va_list ap; va_list ap;
FILE *logfile; FILE *logfile;
@ -315,7 +261,8 @@ void log(char *fmt, ...)
#endif #endif
char *sctime(time_t stuff) char *
sctime (time_t stuff)
{ {
char *s, *c; char *s, *c;
@ -328,7 +275,8 @@ char *sctime(time_t stuff)
char fmtime[80]; char fmtime[80];
char *sftime(time_t stuff) char *
sftime (time_t stuff)
{ {
struct tm *ltm = localtime (&stuff); struct tm *ltm = localtime (&stuff);
@ -338,9 +286,8 @@ char *sftime(time_t stuff)
} }
int sock_connect(int socktype, unsigned long ipaddr, int port, int
char *sockname, char *module, char *func_read, sock_connect (int socktype, unsigned long ipaddr, int port, char *sockname, char *module, char *func_read, char *func_write, char *func_error)
char *func_write, char *func_error)
{ {
struct sockaddr_in sa; struct sockaddr_in sa;
int s; int s;
@ -354,9 +301,7 @@ int sock_connect(int socktype, unsigned long ipaddr, int port,
/* bind to a IP address */ /* bind to a IP address */
if (dobind > 0) { if (dobind > 0) {
if (bind (s, (struct sockaddr *) &lsa, sizeof (lsa)) < 0) { if (bind (s, (struct sockaddr *) &lsa, sizeof (lsa)) < 0) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "sock_connect(): Warning, Couldn't bind to IP address %s", strerror (errno));
"sock_connect(): Warning, Couldn't bind to IP address %s",
strerror(errno));
} }
} }
@ -368,9 +313,7 @@ int sock_connect(int socktype, unsigned long ipaddr, int port,
/* set non blocking */ /* set non blocking */
if ((i = fcntl (s, F_SETFL, O_NONBLOCK)) < 0) { if ((i = fcntl (s, F_SETFL, O_NONBLOCK)) < 0) {
nlog(LOG_CRITICAL, LOG_CORE, nlog (LOG_CRITICAL, LOG_CORE, "can't set socket %s(%s) non-blocking: %s", sockname, module, strerror (i));
"can't set socket %s(%s) non-blocking: %s", sockname,
module, strerror(i));
return (-1); return (-1);
} }
@ -379,9 +322,7 @@ int sock_connect(int socktype, unsigned long ipaddr, int port,
case EINPROGRESS: case EINPROGRESS:
break; break;
default: default:
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Socket %s(%s) cant connect %s", sockname, module, strerror (errno), i);
"Socket %s(%s) cant connect %s", sockname,
module, strerror(errno), i);
close (s); close (s);
return (-1); return (-1);
} }
@ -391,7 +332,8 @@ int sock_connect(int socktype, unsigned long ipaddr, int port,
return s; return s;
} }
int sock_disconnect(char *sockname) int
sock_disconnect (char *sockname)
{ {
Sock_List *sock; Sock_List *sock;
fd_set fds; fd_set fds;
@ -400,8 +342,7 @@ int sock_disconnect(char *sockname)
sock = findsock (sockname); sock = findsock (sockname);
if (!sock) { if (!sock) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Warning, Can not find Socket %s in list", sockname);
"Warning, Can not find Socket %s in list", sockname);
return (-1); return (-1);
} }
@ -413,19 +354,18 @@ int sock_disconnect(char *sockname)
tv.tv_usec = 0; tv.tv_usec = 0;
i = select (1, &fds, NULL, NULL, &tv); i = select (1, &fds, NULL, NULL, &tv);
if (!i && errno == EBADF) { if (!i && errno == EBADF) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Warning, Bad File Descriptor %s in list", sockname);
"Warning, Bad File Descriptor %s in list", sockname);
return (-1); return (-1);
} }
nlog(LOG_DEBUG3, LOG_CORE, "Closing Socket %s with Number %d", nlog (LOG_DEBUG3, LOG_CORE, "Closing Socket %s with Number %d", sockname, sock->sock_no);
sockname, sock->sock_no);
close (sock->sock_no); close (sock->sock_no);
del_socket (sockname); del_socket (sockname);
return (1); return (1);
} }
void sts(char *fmt, ...) void
sts (char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[512]; char buf[512];

2
sock.h
View file

@ -20,7 +20,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: sock.h,v 1.1 2003/06/26 05:25:09 fishwaldo Exp $ ** $Id: sock.h,v 1.2 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
#ifndef SOCK_H #ifndef SOCK_H

15
stats.h
View file

@ -20,7 +20,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: stats.h,v 1.88 2003/07/23 10:35:47 fishwaldo Exp $ ** $Id: stats.h,v 1.89 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
#ifndef STATS_H #ifndef STATS_H
@ -179,6 +179,7 @@ struct me {
long RcveM; long RcveM;
long RcveBytes; long RcveBytes;
time_t lastmsg; time_t lastmsg;
int pingtime;
} me; } me;
@ -263,9 +264,7 @@ extern void ResetLogs();
extern char *sctime (time_t); extern char *sctime (time_t);
extern char *sftime (time_t); extern char *sftime (time_t);
extern int getmaxsock (); extern int getmaxsock ();
extern int sock_connect(int socktype, unsigned long ipaddr, int port, extern int sock_connect (int socktype, unsigned long ipaddr, int port, char *sockname, char *module, char *func_read, char *func_write, char *func_error);
char *sockname, char *module, char *func_read,
char *func_write, char *func_error);
extern int sock_disconnect (char *sockname); extern int sock_disconnect (char *sockname);
/* conf.c */ /* conf.c */
extern void strip (char *); extern void strip (char *);
@ -310,8 +309,7 @@ extern void TimerMidnight();
extern int is_midnight (); extern int is_midnight ();
extern MyUser *myuhead; extern MyUser *myuhead;
extern void AddUser(const char *, const char *, const char *, const char *, extern void AddUser (const char *, const char *, const char *, const char *, const unsigned long ip, const unsigned long TS);
const unsigned long ip, const unsigned long TS);
extern void DelUser (const char *); extern void DelUser (const char *);
void AddRealName (const char *, const char *); void AddRealName (const char *, const char *);
extern void Change_User (User *, const char *); extern void Change_User (User *, const char *);
@ -380,11 +378,8 @@ void Change_Chan_Ts(Chans *c, time_t tstime);
extern int CheckChanMode (Chans * c, long mode); extern int CheckChanMode (Chans * c, long mode);
/* dns.c */ /* dns.c */
extern int dns_lookup(char *str, adns_rrtype type, extern int dns_lookup (char *str, adns_rrtype type, void (*callback) (char *data, adns_answer * a), char *data);
void (*callback) (char *data, adns_answer * a),
char *data);
extern int init_dns (); extern int init_dns ();
extern void do_dns (); extern void do_dns ();
#endif #endif

48
timer.c
View file

@ -20,7 +20,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: timer.c,v 1.24 2003/06/13 13:11:49 fishwaldo Exp $ ** $Id: timer.c,v 1.25 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
#include "stats.h" #include "stats.h"
@ -33,52 +33,52 @@ static time_t last_cache_save;
static int midnight = 0; static int midnight = 0;
void chk() void
chk ()
{ {
Mod_Timer *mod_ptr = NULL; Mod_Timer *mod_ptr = NULL;
time_t current = time (NULL); time_t current = time (NULL);
hscan_t ts; hscan_t ts;
hnode_t *tn; hnode_t *tn;
strcpy(segv_location, "chk");
/* First, lets see if any modules have a function that is due to run..... */ /* First, lets see if any modules have a function that is due to run..... */
hash_scan_begin (&ts, th); hash_scan_begin (&ts, th);
while ((tn = hash_scan_next (&ts)) != NULL) { while ((tn = hash_scan_next (&ts)) != NULL) {
strcpy (segv_location, "chk");
mod_ptr = hnode_get (tn); mod_ptr = hnode_get (tn);
if (current - mod_ptr->lastrun > mod_ptr->interval) { if (current - mod_ptr->lastrun > mod_ptr->interval) {
strcpy (segv_location, mod_ptr->modname); strcpy (segv_location, mod_ptr->modname);
strcpy (segvinmodule, mod_ptr->modname); strcpy (segvinmodule, mod_ptr->modname);
if (setjmp (sigvbuf) == 0) { if (setjmp (sigvbuf) == 0) {
mod_ptr->function(); if (mod_ptr->function () < 0) {
mod_ptr->lastrun = (int) time(NULL); nlog(LOG_DEBUG2, LOG_CORE, "Deleting Timer %s for Module %s as requested", mod_ptr->timername, mod_ptr->modname);
hash_scan_delete(th, tn);
hnode_destroy(tn);
free(mod_ptr);
} else { } else {
nlog(LOG_CRITICAL, LOG_CORE, mod_ptr->lastrun = (int) time (NULL);
"setjmp() Failed, Can't call Module %s\n", }
mod_ptr->modname); } else {
nlog (LOG_CRITICAL, LOG_CORE, "setjmp() Failed, Can't call Module %s\n", mod_ptr->modname);
} }
strcpy (segvinmodule, ""); strcpy (segvinmodule, "");
strcpy(segv_location, "Module_Event_Return");
} }
} }
if (current - ping.last_sent > 60) { if (current - ping.last_sent > me.pingtime) {
TimerPings (); TimerPings ();
ping.last_sent = time (NULL); ping.last_sent = time (NULL);
if (hash_verify (sockh) == 0) { if (hash_verify (sockh) == 0) {
nlog(LOG_CRITICAL, LOG_CORE, nlog (LOG_CRITICAL, LOG_CORE, "Eeeek, Corruption of the socket hash");
"Eeeek, Corruption of the socket hash");
} }
if (hash_verify (mh) == 0) { if (hash_verify (mh) == 0) {
nlog(LOG_CRITICAL, LOG_CORE, nlog (LOG_CRITICAL, LOG_CORE, "Eeeek, Corruption of the Module hash");
"Eeeek, Corruption of the Module hash");
} }
if (hash_verify (bh) == 0) { if (hash_verify (bh) == 0) {
nlog(LOG_CRITICAL, LOG_CORE, nlog (LOG_CRITICAL, LOG_CORE, "Eeeek, Corruption of the Bot hash");
"Eeeek, Corruption of the Bot hash");
} }
if (hash_verify (th) == 0) { if (hash_verify (th) == 0) {
nlog(LOG_CRITICAL, LOG_CORE, nlog (LOG_CRITICAL, LOG_CORE, "Eeeek, Corruption of the Timer hash");
"Eeeek, Corruption of the Timer hash");
} }
/* flush log files */ /* flush log files */
fflush (NULL); fflush (NULL);
@ -92,7 +92,8 @@ void chk()
} }
} }
void TimerReset() void
TimerReset ()
{ {
time_t current = time (NULL); time_t current = time (NULL);
last_stats_save = current; last_stats_save = current;
@ -104,14 +105,15 @@ void TimerReset()
void TimerMidnight() void
TimerMidnight ()
{ {
nlog(LOG_DEBUG1, LOG_CORE, "Its midnight!!! -> %s", nlog (LOG_DEBUG1, LOG_CORE, "Its midnight!!! -> %s", sctime (time (NULL)));
sctime(time(NULL)));
ResetLogs (); ResetLogs ();
} }
int is_midnight() int
is_midnight ()
{ {
time_t current = time (NULL); time_t current = time (NULL);
struct tm *ltm = localtime (&current); struct tm *ltm = localtime (&current);

131
users.c
View file

@ -22,7 +22,7 @@
** USA ** USA
** **
** NeoStats CVS Identification ** NeoStats CVS Identification
** $Id: users.c,v 1.57 2003/07/17 15:00:13 fishwaldo Exp $ ** $Id: users.c,v 1.58 2003/07/30 13:58:22 fishwaldo Exp $
*/ */
#include <fnmatch.h> #include <fnmatch.h>
@ -49,7 +49,8 @@ static User *new_user(const char *);
User *new_user(const char *nick) User *
new_user (const char *nick)
{ {
User *u; User *u;
hnode_t *un; hnode_t *un;
@ -68,21 +69,16 @@ User *new_user(const char *nick)
return (u); return (u);
} }
void AddUser(const char *nick, const char *user, const char *host, void
const char *server, const unsigned long ipaddr, AddUser (const char *nick, const char *user, const char *host, const char *server, const unsigned long ipaddr, const unsigned long TS)
const unsigned long TS)
{ {
User *u; User *u;
nlog(LOG_DEBUG2, LOG_CORE, nlog (LOG_DEBUG2, LOG_CORE, "AddUser(): %s (%s@%s)(%lu) -> %s at %lu", nick, user, host, htonl (ipaddr), server, TS);
"AddUser(): %s (%s@%s)(%lu) -> %s at %lu", nick, user, host,
htonl(ipaddr), server, TS);
strcpy (segv_location, "AddUser"); strcpy (segv_location, "AddUser");
u = finduser (nick); u = finduser (nick);
if (u) { if (u) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "trying to add a user that already exists? (%s)", nick);
"trying to add a user that already exists? (%s)",
nick);
return; return;
} }
@ -105,7 +101,9 @@ void AddUser(const char *nick, const char *user, const char *host,
u->ipaddr.s_addr = htonl (ipaddr); u->ipaddr.s_addr = htonl (ipaddr);
u->TS = TS; u->TS = TS;
} }
void AddRealName(const char *nick, const char *realname)
void
AddRealName (const char *nick, const char *realname)
{ {
char **av; char **av;
int ac = 0; int ac = 0;
@ -113,8 +111,7 @@ void AddRealName(const char *nick, const char *realname)
User *u = finduser (nick); User *u = finduser (nick);
if (!u) { if (!u) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Warning, Can not find User %s for Realname", nick);
"Warning, Can not find User %s for Realname", nick);
return; return;
} }
nlog (LOG_DEBUG2, LOG_CORE, "RealName(%s): %s", nick, realname); nlog (LOG_DEBUG2, LOG_CORE, "RealName(%s): %s", nick, realname);
@ -124,20 +121,27 @@ void AddRealName(const char *nick, const char *realname)
free (av); free (av);
} }
void part_u_chan(list_t * list, lnode_t * node, void *v) void
part_u_chan (list_t * list, lnode_t * node, void *v)
{ {
User *u = v; User *u = v;
part_chan (u, lnode_get (node)); part_chan (u, lnode_get (node));
} }
void KillUser(const char *nick)
void
KillUser (const char *nick)
{ {
doDelUser (nick, 1); doDelUser (nick, 1);
} }
void DelUser(const char *nick)
void
DelUser (const char *nick)
{ {
doDelUser (nick, 0); doDelUser (nick, 0);
} }
void doDelUser(const char *nick, int i)
void
doDelUser (const char *nick, int i)
{ {
User *u; User *u;
hnode_t *un; hnode_t *un;
@ -180,7 +184,8 @@ void doDelUser(const char *nick, int i)
free (u); free (u);
} }
void Do_Away(User * u, const char *awaymsg) void
Do_Away (User * u, const char *awaymsg)
{ {
char **av; char **av;
int ac = 0; int ac = 0;
@ -198,7 +203,8 @@ void Do_Away(User * u, const char *awaymsg)
} }
} }
void Change_User(User * u, const char *newnick) void
Change_User (User * u, const char *newnick)
{ {
hnode_t *un; hnode_t *un;
lnode_t *cm; lnode_t *cm;
@ -207,18 +213,15 @@ void Change_User(User * u, const char *newnick)
char *oldnick; char *oldnick;
strcpy (segv_location, "Change_User"); strcpy (segv_location, "Change_User");
nlog(LOG_DEBUG2, LOG_CORE, "Change_User(%s, %s)", u->nick, nlog (LOG_DEBUG2, LOG_CORE, "Change_User(%s, %s)", u->nick, newnick);
newnick);
un = hash_lookup (uh, u->nick); un = hash_lookup (uh, u->nick);
if (!un) { if (!un) {
nlog(LOG_WARNING, LOG_CORE, "ChangeUser(%s) Failed!", nlog (LOG_WARNING, LOG_CORE, "ChangeUser(%s) Failed!", u->nick);
u->nick);
return; return;
} }
cm = list_first (u->chans); cm = list_first (u->chans);
while (cm) { while (cm) {
change_user_nick(findchan(lnode_get(cm)), (char *) newnick, change_user_nick (findchan (lnode_get (cm)), (char *) newnick, u->nick);
u->nick);
cm = list_next (u->chans, cm); cm = list_next (u->chans, cm);
} }
strcpy (segv_location, "Change_User_Return"); strcpy (segv_location, "Change_User_Return");
@ -234,7 +237,9 @@ void Change_User(User * u, const char *newnick)
free (av); free (av);
free (oldnick); free (oldnick);
} }
void sendcoders(char *message, ...)
void
sendcoders (char *message, ...)
{ {
va_list ap; va_list ap;
char tmp[512]; char tmp[512];
@ -249,7 +254,8 @@ void sendcoders(char *message, ...)
va_end (ap); va_end (ap);
} }
User *finduser(const char *nick) User *
finduser (const char *nick)
{ {
User *u; User *u;
hnode_t *un; hnode_t *un;
@ -259,21 +265,22 @@ User *finduser(const char *nick)
u = hnode_get (un); u = hnode_get (un);
return u; return u;
} else { } else {
nlog(LOG_DEBUG2, LOG_CORE, "FindUser(%s) -> NOTFOUND", nlog (LOG_DEBUG2, LOG_CORE, "FindUser(%s) -> NOTFOUND", nick);
nick);
return NULL; return NULL;
} }
} }
void init_user_hash() void
init_user_hash ()
{ {
uh = hash_create (U_TABLE_SIZE, 0, 0); uh = hash_create (U_TABLE_SIZE, 0, 0);
} }
void UserDump(char *nick) void
UserDump (char *nick)
{ {
User *u; User *u;
hnode_t *un; hnode_t *un;
@ -288,8 +295,7 @@ void UserDump(char *nick)
sendcoders ("User: %s", u->nick); sendcoders ("User: %s", u->nick);
cm = list_first (u->chans); cm = list_first (u->chans);
while (cm) { while (cm) {
sendcoders(" Chans: %s", sendcoders (" Chans: %s", (char *) lnode_get (cm));
(char *) lnode_get(cm));
cm = list_next (u->chans, cm); cm = list_next (u->chans, cm);
} }
} }
@ -300,8 +306,7 @@ void UserDump(char *nick)
sendcoders ("User: %s", u->nick); sendcoders ("User: %s", u->nick);
cm = list_first (u->chans); cm = list_first (u->chans);
while (cm) { while (cm) {
sendcoders(" Chans: %s", sendcoders (" Chans: %s", (char *) lnode_get (cm));
(char *) lnode_get(cm));
cm = list_next (u->chans, cm); cm = list_next (u->chans, cm);
} }
} else { } else {
@ -310,7 +315,8 @@ void UserDump(char *nick)
} }
} }
int UserLevel(User * u) int
UserLevel (User * u)
{ {
int i, tmplvl = 0; int i, tmplvl = 0;
#ifdef EXTAUTH #ifdef EXTAUTH
@ -324,21 +330,18 @@ int UserLevel(User * u)
tmplvl = usr_mds[i].level; tmplvl = usr_mds[i].level;
} }
} }
nlog(LOG_DEBUG1, LOG_CORE, "Umode Level for %s is %d", u->nick, nlog (LOG_DEBUG1, LOG_CORE, "Umode Level for %s is %d", u->nick, tmplvl);
tmplvl);
/* I hate SMODEs damn it */ /* I hate SMODEs damn it */
#ifdef ULTIMATE3 #ifdef ULTIMATE3
for (i = 0; i < ((sizeof(susr_mds) / sizeof(susr_mds[0])) - 1); for (i = 0; i < ((sizeof (susr_mds) / sizeof (susr_mds[0])) - 1); i++) {
i++) {
if (u->Smode & susr_mds[i].umodes) { if (u->Smode & susr_mds[i].umodes) {
if (susr_mds[i].level > tmplvl) if (susr_mds[i].level > tmplvl)
tmplvl = susr_mds[i].level; tmplvl = susr_mds[i].level;
} }
} }
#endif #endif
nlog(LOG_DEBUG1, LOG_CORE, "Smode Level for %s is %d", u->nick, nlog (LOG_DEBUG1, LOG_CORE, "Smode Level for %s is %d", u->nick, tmplvl);
tmplvl);
#ifdef DEBUG #ifdef DEBUG
#ifdef CODERHACK #ifdef CODERHACK
/* this is only cause I dun have the right O lines on some of my "Beta" Networks, so I need to hack this in :) */ /* this is only cause I dun have the right O lines on some of my "Beta" Networks, so I need to hack this in :) */
@ -363,13 +366,13 @@ int UserLevel(User * u)
nlog(LOG_DEBUG1, LOG_CORE, "UserLevel for %s is %d (%d)", u->nick, nlog (LOG_DEBUG1, LOG_CORE, "UserLevel for %s is %d (%d)", u->nick, tmplvl, i);
tmplvl, i);
return tmplvl; return tmplvl;
} }
void UserMode(const char *nick, const char *modes, int smode) void
UserMode (const char *nick, const char *modes, int smode)
{ {
/* I don't know why, but I spent like 3 hours trying to make this function work and /* I don't know why, but I spent like 3 hours trying to make this function work and
I finally got it... what a waste of time... gah, oh well... basically, it sets both the User Flags, and also the User Levels.. I finally got it... what a waste of time... gah, oh well... basically, it sets both the User Flags, and also the User Levels..
@ -385,9 +388,7 @@ void UserMode(const char *nick, const char *modes, int smode)
strcpy (segv_location, "UserMode"); strcpy (segv_location, "UserMode");
u = finduser (nick); u = finduser (nick);
if (!u) { if (!u) {
nlog(LOG_WARNING, LOG_CORE, nlog (LOG_WARNING, LOG_CORE, "Warning, Changing Modes for a Unknown User %s!", nick);
"Warning, Changing Modes for a Unknown User %s!",
nick);
nlog (LOG_DEBUG1, LOG_CORE, "Recbuf: %s", recbuf); nlog (LOG_DEBUG1, LOG_CORE, "Recbuf: %s", recbuf);
return; return;
} }
@ -415,39 +416,25 @@ void UserMode(const char *nick, const char *modes, int smode)
break; break;
default: default:
if (smode > 0) { if (smode > 0) {
for (i = 0; for (i = 0; i < ((sizeof (susr_mds) / sizeof (susr_mds[0])) - 1); i++) {
i <
((sizeof(susr_mds) /
sizeof(susr_mds[0])) - 1); i++) {
if (susr_mds[i].mode == tmpmode) { if (susr_mds[i].mode == tmpmode) {
if (add) { if (add) {
u->Smode |= u->Smode |= susr_mds[i].umodes;
susr_mds[i].
umodes;
break; break;
} else { } else {
u->Smode &= u->Smode &= ~susr_mds[i].umodes;
~susr_mds[i].
umodes;
break; break;
} }
} }
} }
} else { } else {
for (i = 0; for (i = 0; i < ((sizeof (usr_mds) / sizeof (usr_mds[0])) - 1); i++) {
i <
((sizeof(usr_mds) /
sizeof(usr_mds[0])) - 1); i++) {
if (usr_mds[i].mode == tmpmode) { if (usr_mds[i].mode == tmpmode) {
if (add) { if (add) {
u->Umode |= u->Umode |= usr_mds[i].umodes;
usr_mds[i].
umodes;
break; break;
} else { } else {
u->Umode &= u->Umode &= ~usr_mds[i].umodes;
~usr_mds[i].
umodes;
break; break;
} }
} }
@ -457,12 +444,10 @@ void UserMode(const char *nick, const char *modes, int smode)
tmpmode = *modes++; tmpmode = *modes++;
} }
if (smode > 0) { if (smode > 0) {
nlog(LOG_DEBUG1, LOG_CORE, "SMODE for %s is are now %p", nlog (LOG_DEBUG1, LOG_CORE, "SMODE for %s is are now %p", u->nick, u->Smode);
u->nick, u->Smode);
Module_Event ("SMODE", av, ac); Module_Event ("SMODE", av, ac);
} else { } else {
nlog(LOG_DEBUG1, LOG_CORE, "Modes for %s are now %p", nlog (LOG_DEBUG1, LOG_CORE, "Modes for %s are now %p", u->nick, u->Umode);
u->nick, u->Umode);
Module_Event ("UMODE", av, ac); Module_Event ("UMODE", av, ac);
} }
free (av); free (av);