Add SETNAME, SETHOST and SETIDENT support

This commit is contained in:
Mark 2004-07-22 16:30:07 +00:00
parent 8556683962
commit 1c3b9d7455
6 changed files with 145 additions and 8 deletions

View file

@ -4,6 +4,8 @@ Anything we add/remove/fix/change is in here (even our rants)
Fish (F), Mark (M)
===============================================================================
* NeoStats * Version 3.0.genesis
- Add support for online bot realname, host and ident changes. (M)
- Add support for IRCd SETNAME, SETIDENT and SETHOST functions. (M)
- Add support for online bot nick changes. (M)
- Combined BOTCHANLIST command with BOTLIST command. (M)
- Remove redundant botchanhash code and tables. We can get this information

View file

@ -95,17 +95,17 @@ typedef struct ProtocolInfo {
char* services_cmode;
} ProtocolInfo;
#ifndef NEOSTATSCORE
#ifdef NEOSTATSCORE
extern cumode_init* chan_umodes;
extern cmode_init* chan_modes;
extern umode_init* user_umodes;
extern umode_init* user_smodes;
#else
MODULEVAR extern ircd_cmd cmd_list[];
MODULEVAR extern cumode_init chan_umodes[];
MODULEVAR extern cmode_init chan_modes[];
MODULEVAR extern umode_init user_umodes[];
MODULEVAR extern umode_init user_smodes[];
#else
extern cumode_init* chan_umodes;
extern cmode_init* chan_modes;
extern umode_init* user_umodes;
extern umode_init* user_smodes;
#endif
EXPORTVAR extern ircd_server ircd_srv;
@ -177,6 +177,9 @@ EXPORTFUNC void do_burst (char *origin, char **argv, int argc);
EXPORTFUNC void do_swhois (char *who, char *swhois);
EXPORTFUNC void do_tkl(const char *add, const char *type, const char *user, const char *host, const char *setby, const char *tsexpire, const char *tsset, const char *reason);
EXPORTFUNC void do_eos(const char *name);
EXPORTFUNC void do_setname(const char* nick, const char* realname);
EXPORTFUNC void do_sethost (const char *nick, const char *host);
EXPORTFUNC void do_setident (const char *nick, const char *ident);
/* Defined in ircd specific files */
MODULEFUNC void send_privmsg (const char *source, const char *to, const char *buf);
@ -216,6 +219,9 @@ MODULEFUNC void send_svinfo (const int tscurrent, const int tsmin, const unsigne
MODULEFUNC void send_vctrl (const int uprot, const int nicklen, const int modex, const int gc, const char* netname);
MODULEFUNC void send_burst (int b);
MODULEFUNC void send_svstime (const char *source, const unsigned long ts);
MODULEFUNC void send_setname(const char* nick, const char* realname);
MODULEFUNC void send_sethost (const char *nick, const char *host);
MODULEFUNC void send_setident (const char *nick, const char *ident);
int InitIrcd (void);
int irc_connect (const char *name, const int numeric, const char *infoline, const char *pass, const unsigned long tsboot, const unsigned long tslink);

View file

@ -963,6 +963,9 @@ EXPORTFUNC int irc_part (const Bot *botptr, const char *chan);
EXPORTFUNC int irc_kick (const Bot *botptr, const char *chan, const char *target, const char *reason);
EXPORTFUNC int irc_invite (const Bot *botptr, const char *target, const char *chan);
EXPORTFUNC int irc_cloakhost (const Bot *botptr);
EXPORTFUNC int irc_setname (const Bot *botptr, const char* realname);
EXPORTFUNC int irc_sethost (const Bot *botptr, const char* host);
EXPORTFUNC int irc_setident (const Bot *botptr, const char* ident);
/* Mode functions
* Require a bot to operate

View file

@ -1181,16 +1181,23 @@ int bot_set_altnick_cb(CmdParams* cmdparams)
int bot_set_user_cb(CmdParams* cmdparams)
{
irc_setident (cmdparams->bot, cmdparams->av[1]);
return NS_SUCCESS;
}
int bot_set_host_cb(CmdParams* cmdparams)
{
irc_sethost (cmdparams->bot, cmdparams->av[1]);
return NS_SUCCESS;
}
int bot_set_realname_cb(CmdParams* cmdparams)
{
char *buf;
buf = joinbuf(cmdparams->av, cmdparams->ac, 1);
irc_setname(cmdparams->bot, buf);
sfree(buf);
return NS_SUCCESS;
}

View file

@ -85,6 +85,9 @@ void (*irc_send_svinfo) (const int tscurrent, const int tsmin, const unsigned lo
void (*irc_send_vctrl) (const int uprot, const int nicklen, const int modex, const int gc, const char* netname);
void (*irc_send_burst) (int b);
void (*irc_send_svstime) (const char *source, const unsigned long ts);
void (*irc_send_setname) (const char* nick, const char* realname);
void (*irc_send_sethost) (const char* nick, const char* host);
void (*irc_send_setident) (const char* nick, const char* ident);
static void m_numeric242 (char *origin, char **argv, int argc, int srv);
static void m_numeric351 (char *origin, char **argv, int argc, int srv);
@ -234,6 +237,10 @@ InitIrcdSymbols (void)
irc_send_svinfo = ns_dlsym( protocol_module_handle, "send_svinfo");
irc_send_vctrl = ns_dlsym( protocol_module_handle, "send_vctrl");
irc_send_burst = ns_dlsym( protocol_module_handle, "send_burst");
irc_send_setname = ns_dlsym( protocol_module_handle, "send_setname");
irc_send_sethost = ns_dlsym( protocol_module_handle, "send_sethost");
irc_send_setident = ns_dlsym( protocol_module_handle, "send_setident");
return NS_SUCCESS;
}
@ -934,6 +941,40 @@ irc_nickchange (const Bot *botptr, const char *newnick)
return NS_SUCCESS;
}
int irc_setname(const Bot *botptr, const char* realname)
{
if (!irc_send_setname) {
unsupported_cmd ("SETNAME");
return NS_FAILURE;
}
irc_send_setname (botptr->name, realname);
strlcpy (botptr->u->info, (char*)realname, MAXHOST);
return NS_SUCCESS;
}
int irc_sethost (const Bot *botptr, const char* host)
{
if (!irc_send_sethost) {
unsupported_cmd("SETNAME");
return NS_FAILURE;
}
irc_send_sethost (botptr->name, host);
strlcpy (botptr->u->user->hostname, (char*)host, MAXHOST);
return NS_SUCCESS;
}
int irc_setident (const Bot *botptr, const char* ident)
{
if (!irc_send_setident) {
unsupported_cmd ("SETNAME");
return NS_FAILURE;
}
irc_send_setident (botptr->name, ident);
strlcpy (botptr->u->user->username, (char*)ident, MAXHOST);
return NS_SUCCESS;
}
int
irc_chanmode (const Bot *botptr, const char *chan, const char *mode, const char *args)
{
@ -1558,14 +1599,53 @@ do_eos (const char *name)
Client *s;
s = find_server (name);
if(s) {
if (s) {
SynchServer(s);
dlog(DEBUG1, "do_eos: server %s is now synched", name);
dlog (DEBUG1, "do_eos: server %s is now synched", name);
} else {
nlog (LOG_WARNING, "do_eos: server %s not found", name);
}
}
void do_setname (const char* nick, const char* realname)
{
Client *u;
u = find_user(nick);
if (u) {
dlog (DEBUG1, "do_setname: setting realname of user %s to %s", nick, realname);
strlcpy(u->info, (char*)realname, MAXHOST);
} else {
nlog (LOG_WARNING, "do_setname: user %s not found", nick);
}
}
void do_sethost (const char* nick, const char* host)
{
Client *u;
u = find_user(nick);
if (u) {
dlog (DEBUG1, "do_sethost: setting host of user %s to %s", nick, host);
strlcpy(u->user->hostname, (char*)host, MAXHOST);
} else {
nlog (LOG_WARNING, "do_sethost: user %s not found", nick);
}
}
void do_setident (const char* nick, const char* ident)
{
Client *u;
u = find_user(nick);
if (u) {
dlog (DEBUG1, "do_setident: setting ident of user %s to %s", nick, ident);
strlcpy(u->user->username, (char*)ident, MAXHOST);
} else {
nlog (LOG_WARNING, "do_setident: user %s not found", nick);
}
}
void
send_cmd (char *fmt, ...)
{

View file

@ -58,6 +58,9 @@ static void m_whois (char *origin, char **argv, int argc, int srv);
static void m_smo (char *origin, char **argv, int argc, int srv);
static void m_swhois (char *origin, char **argv, int argc, int srv);
static void m_tkl (char *origin, char **argv, int argc, int srv);
static void m_setname (char *origin, char **argv, int argc, int srv);
static void m_sethost (char *origin, char **argv, int argc, int srv);
static void m_setident (char *origin, char **argv, int argc, int srv);
#define NICKV2
#define NICKIP
@ -118,6 +121,9 @@ ircd_cmd cmd_list[] = {
{MSG_SMO, TOK_SMO, m_smo, 0},
{MSG_EOS, TOK_EOS, m_eos, 0},
{MSG_TKL, TOK_TKL, m_tkl, 0},
{MSG_SETNAME, TOK_SETNAME, m_setname, 0},
{MSG_SETHOST, TOK_SETHOST, m_sethost, 0},
{MSG_SETIDENT, TOK_SETIDENT, m_setident, 0},
{0, 0, 0, 0},
};
@ -447,6 +453,24 @@ send_nickchange (const char *oldnick, const char *newnick, const unsigned long t
send_cmd (":%s %s %s %lu", oldnick, MSGTOK(NICK), newnick, ts);
}
void
send_setname (const char *nick, const char *realname)
{
send_cmd (":%s %s :%s", nick, MSGTOK(SETNAME), realname);
}
void
send_sethost (const char *nick, const char *host)
{
send_cmd (":%s %s :%s", nick, MSGTOK(SETHOST), host);
}
void
send_setident (const char *nick, const char *ident)
{
send_cmd (":%s %s :%s", nick, MSGTOK(SETIDENT), ident);
}
void
send_swhois (const char *source, const char *target, const char *swhois)
{
@ -948,3 +972,18 @@ static void m_tkl (char *origin, char **argv, int argc, int srv)
{
do_tkl(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7]);
}
static void m_setname (char *origin, char **argv, int argc, int srv)
{
do_setname(origin, argv[0]);
}
static void m_sethost (char *origin, char **argv, int argc, int srv)
{
do_sethost(origin, argv[0]);
}
static void m_setident (char *origin, char **argv, int argc, int srv)
{
do_setident(origin, argv[0]);
}