X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/c0e8f348f8f0a7066939ebd2160ec0088c3ec044..24170ac312f9e042993a5377ed82769f4ae74e55:/extensions/m_webirc.c diff --git a/extensions/m_webirc.c b/extensions/m_webirc.c index 1b42029..1ddb634 100644 --- a/extensions/m_webirc.c +++ b/extensions/m_webirc.c @@ -27,15 +27,14 @@ * auth { * user = "webirc@"; # if identd used, put ident username instead * password = ""; # encryption possible - * spoof = "webirc." + * spoof = "webirc."; * class = "users"; * }; * Possible flags: * encrypted - password is encrypted (recommended) - * kline_exempt - k/g lines on the cgiirc ip are ignored - * gline_exempt - glines on the cgiirc ip are ignored + * kline_exempt - klines on the cgiirc ip are ignored * dlines are checked on the cgiirc ip (of course). - * k/d/g/x lines, auth blocks, user limits, etc are checked using the + * k/d/x lines, auth blocks, user limits, etc are checked using the * real host/ip. * The password should be specified unencrypted in webirc_password in * cgiirc.config @@ -43,7 +42,7 @@ #include "stdinc.h" #include "client.h" /* client struct */ -#include "irc_string.h" +#include "match.h" #include "hostmask.h" #include "send.h" /* sendto_one */ #include "numeric.h" /* ERR_xxx */ @@ -68,7 +67,6 @@ DECLARE_MODULE_AV1(webirc, NULL, NULL, webirc_clist, NULL, NULL, "$Revision: 207 /* * mr_webirc - webirc message handler - * parv[0] = sender prefix * parv[1] = password * parv[2] = fake username (we ignore this) * parv[3] = fake hostname @@ -87,9 +85,10 @@ mr_webirc(struct Client *client_p, struct Client *source_p, int parc, const char } aconf = find_address_conf(client_p->host, client_p->sockhost, + IsGotId(client_p) ? client_p->username : "webirc", IsGotId(client_p) ? client_p->username : "webirc", (struct sockaddr *) &client_p->localClient->ip, - client_p->localClient->ip.ss_family); + client_p->localClient->ip.ss_family, NULL); if (aconf == NULL || !(aconf->status & CONF_CLIENT)) return 0; if (!IsConfDoSpoofIp(aconf) || irccmp(aconf->info.name, "webirc.")) @@ -107,7 +106,7 @@ mr_webirc(struct Client *client_p, struct Client *source_p, int parc, const char if (EmptyString(parv[1])) encr = ""; else if (IsConfEncrypted(aconf)) - encr = crypt(parv[1], aconf->passwd); + encr = rb_crypt(parv[1], aconf->passwd); else encr = parv[1]; @@ -117,16 +116,19 @@ mr_webirc(struct Client *client_p, struct Client *source_p, int parc, const char return 0; } - strlcpy(source_p->sockhost, parv[4], sizeof(source_p->sockhost)); + + rb_strlcpy(source_p->sockhost, parv[4], sizeof(source_p->sockhost)); + if(strlen(parv[3]) <= HOSTLEN) - strlcpy(source_p->host, parv[3], sizeof(source_p->host)); + rb_strlcpy(source_p->host, parv[3], sizeof(source_p->host)); else - strlcpy(source_p->host, source_p->sockhost, sizeof(source_p->host)); - + rb_strlcpy(source_p->host, source_p->sockhost, sizeof(source_p->host)); + rb_inet_pton_sock(parv[4], (struct sockaddr *)&source_p->localClient->ip); - /* Check dlines now, k/glines will be checked on registration */ - if((aconf = find_dline((struct sockaddr *)&source_p->localClient->ip))) + /* Check dlines now, klines will be checked on registration */ + if((aconf = find_dline((struct sockaddr *)&source_p->localClient->ip, + source_p->localClient->ip.ss_family))) { if(!(aconf->status & CONF_EXEMPTDLINE)) {