X-Git-Url: https://jfr.im/git/solanum.git/blobdiff_plain/212380e3f42f585dc1ea927402252eb943f91f7b..ea41b24fd4807e3565bf5f8f293e2efc4c20b62d:/modules/m_user.c diff --git a/modules/m_user.c b/modules/m_user.c index c8d710c9..fc657c9b 100644 --- a/modules/m_user.c +++ b/modules/m_user.c @@ -20,13 +20,11 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA - * - * $Id: m_user.c 1459 2006-05-26 20:50:41Z jilles $ */ #include "stdinc.h" #include "client.h" -#include "irc_string.h" +#include "match.h" #include "ircd.h" #include "numeric.h" #include "s_user.h" @@ -35,23 +33,23 @@ #include "msg.h" #include "parse.h" #include "modules.h" -#include "sprintf_irc.h" -#include "blacklist.h" +#include "s_assert.h" -#define UFLAGS (FLAGS_INVISIBLE|FLAGS_WALLOP|FLAGS_SERVNOTICE) +static const char user_desc[] = + "Provides the USER command to register a new connection"; -static int mr_user(struct Client *, struct Client *, int, const char **); +static void mr_user(struct MsgBuf *, struct Client *, struct Client *, int, const char **); struct Message user_msgtab = { - "USER", 0, 0, 0, MFLG_SLOW, + "USER", 0, 0, 0, 0, {{mr_user, 5}, mg_reg, mg_ignore, mg_ignore, mg_ignore, mg_reg} }; mapi_clist_av1 user_clist[] = { &user_msgtab, NULL }; -DECLARE_MODULE_AV1(user, NULL, NULL, user_clist, NULL, NULL, "$Revision: 1459 $"); +DECLARE_MODULE_AV2(user, NULL, NULL, user_clist, NULL, NULL, NULL, NULL, user_desc); -static int do_local_user(struct Client *client_p, struct Client *source_p, - const char *username, const char *realname); +static void do_local_user(struct Client *client_p, struct Client *source_p, + const char *username, const char *realname); /* mr_user() * parv[1] = username (login name, account) @@ -59,62 +57,50 @@ static int do_local_user(struct Client *client_p, struct Client *source_p, * parv[3] = server host name (ignored) * parv[4] = users gecos */ -static int -mr_user(struct Client *client_p, struct Client *source_p, int parc, const char *parv[]) +static void +mr_user(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p, int parc, const char *parv[]) { static char buf[BUFSIZE]; char *p; - if (strlen(client_p->id) == 3) + if (strlen(client_p->id) == 3 || (source_p->preClient && !EmptyString(source_p->preClient->id))) { exit_client(client_p, client_p, client_p, "Mixing client and server protocol"); - return 0; + return; } + if(source_p->flags & FLAGS_SENTUSER) + return; + if((p = strchr(parv[1], '@'))) *p = '\0'; - ircsnprintf(buf, sizeof(buf), "%s %s", parv[2], parv[3]); - MyFree(source_p->localClient->fullcaps); - DupString(source_p->localClient->fullcaps, buf); + snprintf(buf, sizeof(buf), "%s %s", parv[2], parv[3]); + rb_free(source_p->localClient->fullcaps); + source_p->localClient->fullcaps = rb_strdup(buf); do_local_user(client_p, source_p, parv[1], parv[4]); - return 0; } -static int +static void do_local_user(struct Client *client_p, struct Client *source_p, const char *username, const char *realname) { - struct User *user; - s_assert(NULL != source_p); s_assert(source_p->username != username); - user = make_user(source_p); - user->server = me.name; + make_user(source_p); - if (!(source_p->flags & FLAGS_SENTUSER)) - { - lookup_blacklists(source_p); - source_p->flags |= FLAGS_SENTUSER; - } + source_p->flags |= FLAGS_SENTUSER; - strlcpy(source_p->info, realname, sizeof(source_p->info)); + rb_strlcpy(source_p->info, realname, sizeof(source_p->info)); if(!IsGotId(source_p)) - { - /* This is in this location for a reason..If there is no identd - * and ping cookies are enabled..we need to have a copy of this - */ - strlcpy(source_p->username, username, sizeof(source_p->username)); - } + rb_strlcpy(source_p->username, username, sizeof(source_p->username)); if(source_p->name[0]) { /* NICK already received, now I have USER... */ - return register_local_user(client_p, source_p, username); + register_local_user(client_p, source_p); } - - return 0; }