X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/blobdiff_plain/cb5815228b08881b5ede2063a29241431d7a129a..3e1b768066a16c4b899b9cbdd7911be883151a05:/glines/glines.h diff --git a/glines/glines.h b/glines/glines.h index 7bf65bb7..a5d29d72 100644 --- a/glines/glines.h +++ b/glines/glines.h @@ -4,23 +4,25 @@ #include "../lib/sstring.h" #include "../nick/nick.h" #include "../channel/channel.h" +#include "../whowas/whowas.h" -#define SNIRCD_13 -#undef SNIRCD_14 +#define SNIRCD_VERSION 134 #define MAXUSERGLINEUSERHITS 100 #define MAXUSERGLINECHANNELHITS 10 -#define MAXUSERGLINEDURATION 90 * 86400 -#define MINUSERGLINEREASON 10 + +#define MAXGLINEDURATION 90 * 86400 +#define MINGLINEREASONLEN 10 #define MAXGLINEUSERHITS 500 #define MAXGLINECHANNELHITS 50 +#define MAXGLINELOG 500 + #define GLINE_IGNORE_TRUST 1 #define GLINE_ALWAYS_NICK 2 #define GLINE_ALWAYS_USER 4 -#define GLINE_NO_LIMIT 8 -#define GLINE_SIMULATE 16 +#define GLINE_SIMULATE 8 #define GLINE_HOSTMASK 1 /* Gline includes a host mask */ #define GLINE_IPMASK 2 /* Gline includes an CIDR mask */ @@ -28,7 +30,9 @@ #define GLINE_REALNAME 8 /* Gline includes a realname */ #define GLINE_ACTIVATE 16 /* Gline should be activated */ #define GLINE_DEACTIVATE 32 /* Gline should be deactivated */ -#define GLINE_ACTIVE 64 /* Gline is active */ +#define GLINE_DESTROY 64 /* Gline should be destroyed */ +#define GLINE_ACTIVE 128 /* Gline is active */ +#define GLINE_DESTROYED 256 /* Gline is destroyed */ /** * glist flags @@ -71,40 +75,74 @@ typedef struct gline { time_t lifetime; unsigned int flags; + int glinebufid; struct gline *next; } gline; typedef struct glinebuf { - gline *head; - int merge; + int id; + sstring *comment; + time_t commit; + time_t amend; + + gline *glines; + + int hitsvalid; + int userhits; + int channelhits; + + array hits; } glinebuf; +typedef struct glineinfo { + int hits; + char *mask; +} glineinfo; + extern gline *glinelist; +extern glinebuf *glinebuflog[MAXGLINELOG]; +extern int glinebuflogoffset; /* glines.c */ -char *glinetostring(gline *g); gline *findgline(const char *); -gline *makegline(const char *); void gline_propagate(gline *); -gline *gline_deactivate(gline *, time_t, int); -gline *gline_activate(gline *agline, time_t lastmod, int propagate); +void gline_deactivate(gline *, time_t, int); +void gline_destroy(gline *, time_t, int); +void gline_activate(gline *agline, time_t lastmod, int propagate); int glineequal(gline *, gline *); int gline_match_mask(gline *gla, gline *glb); int gline_match_nick(gline *gl, nick *np); int gline_match_channel(gline *gl, channel *cp); +int isglinesane(gline *gl, const char **hint); +gline *glinedup(gline *gl); + +/* glines_formats.c */ +gline *makegline(const char *); +char *glinetostring(gline *g); -int glinebyip(const char *user, struct irc_in_addr *ip, unsigned char bits, int flags, const char *reason, int duration, const char *creator); -int glinebynick(nick *np, int flags, const char *reason, int duration, const char *creator); +/* glines_util.c */ +int glinebyip(const char *user, struct irc_in_addr *ip, unsigned char bits, int duration, const char *reason, int flags, const char *creator); +glineinfo *glinebynickex(nick *np, int duration, const char *reason, int flags, const char *creator); +int glinebynick(nick *np, int duration, const char *reason, int flags, const char *creator); +void glineunsetmask(const char *mask); /* glines_buf.c */ -void glinebufinit(glinebuf *gbuf, int merge); +void glinebufinit(glinebuf *gbuf, int id); gline *glinebufadd(glinebuf *gbuf, const char *mask, const char *creator, const char *reason, time_t expire, time_t lastmod, time_t lifetime); -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); -void glinebufaddbynick(glinebuf *gbuf, nick *, 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); +char *glinebufaddbynick(glinebuf *gbuf, nick *, int flags, const char *creator, const char *reason, time_t expire, time_t lastmod, time_t lifetime); +void glinebufaddbywhowas(glinebuf *gbuf, whowas *, int flags, const char *creator, const char *reason, time_t expire, time_t lastmod, time_t lifetime); void glinebufcounthits(glinebuf *gbuf, int *users, int *channels); -void glinebufflush(glinebuf *gbuf, int propagate); -void glinebufabandon(glinebuf *gbuf); +int glinebufchecksane(glinebuf *gbuf, nick *spewto, int overridesanity, int overridelimit); +void glinebufspew(glinebuf *gbuf, nick *spewto); +void glinebufmerge(glinebuf *gbuf); +int glinebufcommit(glinebuf *gbuf, int propagate); +void glinebufabort(glinebuf *gbuf); +int glinebufundo(int id); +void glinebufcommentf(glinebuf *gbuf, const char *format, ...); +void glinebufcommentv(glinebuf *gbuf, const char *prefix, int cargc, char **cargv); +int glinebufwritelog(glinebuf *gbuf, int propagating); /* glines_alloc.c */ void freegline(gline *);