X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/blobdiff_plain/b5d1db5e073d1028c513bbffbb0aec12538ee5b8..21b22dceca9d89abfa607419c4289b9eacf84a2f:/glines/glines_buf.c diff --git a/glines/glines_buf.c b/glines/glines_buf.c index 5103f5c6..01b85c6b 100644 --- a/glines/glines_buf.c +++ b/glines/glines_buf.c @@ -54,9 +54,9 @@ gline *glinebufadd(glinebuf *gbuf, const char *mask, const char *creator, const return gl; } -void glinebufaddbyip(glinebuf *gbuf, const char *user, struct irc_in_addr *ip, unsigned char bits, int flags, const char *creator, const char *reason, time_t expire, time_t lastmod, time_t lifetime) { +char *glinebufaddbyip(glinebuf *gbuf, const char *user, struct irc_in_addr *ip, unsigned char bits, int flags, const char *creator, const char *reason, time_t expire, time_t lastmod, time_t lifetime) { trusthost *th, *oth; - char mask[512]; + static char mask[512]; unsigned char nodebits; nodebits = getnodebits(ip); @@ -68,7 +68,8 @@ void glinebufaddbyip(glinebuf *gbuf, const char *user, struct irc_in_addr *ip, u for (oth = th->group->hosts; oth; oth = oth->next) glinebufaddbyip(gbuf, user, &oth->ip, oth->bits, flags | GLINE_ALWAYS_USER | GLINE_IGNORE_TRUST, creator, reason, expire, lastmod, lifetime); - return; + snprintf(mask, sizeof(mask), "%s@%s/tg%u", user, (bits == 128) ? IPtostr(*ip) : CIDRtostr(*ip, bits), th->group->id); + return mask; } } @@ -79,18 +80,32 @@ void glinebufaddbyip(glinebuf *gbuf, const char *user, struct irc_in_addr *ip, u if (nodebits < bits) bits = nodebits; - snprintf(mask, sizeof(mask), "%s@%s", user, trusts_cidr2str(ip, bits)); + snprintf(mask, sizeof(mask), "%s@%s", user, (bits == 128) ? IPtostr(*ip) : CIDRtostr(*ip, bits)); glinebufadd(gbuf, mask, creator, reason, expire, lastmod, lifetime); + return mask; } -void glinebufaddbynick(glinebuf *gbuf, nick *np, int flags, const char *creator, const char *reason, time_t expire, time_t lastmod, time_t lifetime) { +char *glinebufaddbynick(glinebuf *gbuf, nick *np, int flags, const char *creator, const char *reason, time_t expire, time_t lastmod, time_t lifetime) { + if (flags & GLINE_ALWAYS_NICK) { + static char mask[512]; + snprintf(mask, sizeof(mask), "%s!*@*", np->nick); + glinebufadd(gbuf, mask, creator, reason, expire, lastmod, lifetime); + return mask; + } else { + return glinebufaddbyip(gbuf, np->ident, &np->ipaddress, 128, flags, creator, reason, expire, lastmod, lifetime); + } +} + +void glinebufaddbywhowas(glinebuf *gbuf, whowas *ww, int flags, const char *creator, const char *reason, time_t expire, time_t lastmod, time_t lifetime) { + nick *np = &ww->nick; + if (flags & GLINE_ALWAYS_NICK) { char mask[512]; snprintf(mask, sizeof(mask), "%s!*@*", np->nick); glinebufadd(gbuf, mask, creator, reason, expire, lastmod, lifetime); } else { - glinebufaddbyip(gbuf, np->ident, &np->p_ipaddr, 128, flags, creator, reason, expire, lastmod, lifetime); + glinebufaddbyip(gbuf, np->ident, &np->ipaddress, 128, flags, creator, reason, expire, lastmod, lifetime); } } @@ -243,7 +258,7 @@ void glinebufspew(glinebuf *gbuf, nick *spewto) { else strftime(lastmod, sizeof(lastmod), "%d/%m/%y %H:%M:%S", localtime(&gl->lastmod)); - controlreply(spewto, "%-40s %-20s %-20s %-25s %s", glinetostring(gl), timebuf, lastmod, gl->creator->content, gl->reason->content); + controlreply(spewto, "%-40s %-20s %-20s %-25s %s", glinetostring(gl), timebuf, lastmod, gl->creator->content, gl->reason ? gl->reason->content : ""); } controlreply(spewto, "Hits"); @@ -298,7 +313,7 @@ int glinebufcommit(glinebuf *gbuf, int propagate) { glinebufcounthits(gbuf, &users, &channels); if (propagate && (users > MAXGLINEUSERHITS || channels > MAXGLINECHANNELHITS)) { - controlwall(NO_OPER, NL_GLINES, "G-Line buffer would hit %d users/%d channels. Not setting G-Lines."); + controlwall(NO_OPER, NL_GLINES_AUTO, "G-Line buffer would hit %d users/%d channels. Not setting G-Lines."); glinebufabort(gbuf); return 0; } @@ -490,7 +505,7 @@ int glinebufwritelog(glinebuf *gbuf, int propagating) { } /* Make a new glinebuf for the log */ - if (!gbl && gbuf->id == 0) { + if (!gbl) { gbl = malloc(sizeof(glinebuf)); glinebufinit(gbl, (gbuf->id == 0) ? nextglinebufid++ : gbuf->id);