Add SETNAME, SETHOST and SETIDENT support
This commit is contained in:
parent
8556683962
commit
1c3b9d7455
6 changed files with 145 additions and 8 deletions
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
84
src/ircd.c
84
src/ircd.c
|
@ -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, ...)
|
||||
{
|
||||
|
|
|
@ -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]);
|
||||
}
|
||||
|
|
Reference in a new issue