X-Git-Url: https://jfr.im/git/solanum.git/blobdiff_plain/cda8e9b8db4e4c46b4270c915724b288924bc173..43946961df9e7703c8877e4bbd9181507422429d:/modules/m_pass.c diff --git a/modules/m_pass.c b/modules/m_pass.c index d26e640a..0cc0747b 100644 --- a/modules/m_pass.c +++ b/modules/m_pass.c @@ -26,7 +26,7 @@ #include "stdinc.h" #include "client.h" /* client struct */ -#include "irc_string.h" +#include "match.h" #include "send.h" /* sendto_one */ #include "numeric.h" /* ERR_xxx */ #include "ircd.h" /* me */ @@ -60,14 +60,33 @@ DECLARE_MODULE_AV1(pass, NULL, NULL, pass_clist, NULL, NULL, "$Revision: 3550 $" static int mr_pass(struct Client *client_p, struct Client *source_p, int parc, const char *parv[]) { + char *auth_user, *pass, *buf; + buf = LOCAL_COPY(parv[1]); + if(client_p->localClient->passwd) { memset(client_p->localClient->passwd, 0, strlen(client_p->localClient->passwd)); - MyFree(client_p->localClient->passwd); + rb_free(client_p->localClient->passwd); } - DupNString(client_p->localClient->passwd, parv[1], PASSWDLEN); + client_p->localClient->passwd = rb_strndup(parv[1], PASSWDLEN); + + if ((pass = strchr(buf, ':')) != NULL) + { + *pass++ = '\0'; + auth_user = buf; + } + else + { + pass = buf; + auth_user = NULL; + } + + client_p->localClient->passwd = rb_strndup(pass, PASSWDLEN); + + if(auth_user) + client_p->localClient->auth_user = rb_strndup(auth_user, PASSWDLEN); /* These are for servers only */ if(parc > 2 && client_p->user == NULL)