diff --git a/include/client.h b/include/client.h index fe0e67234..a7ebc6960 100644 --- a/include/client.h +++ b/include/client.h @@ -115,8 +115,7 @@ struct Client time_t tsinfo; /* TS on the nick, SVINFO on server */ unsigned int umodes; /* opers, normal users subset */ - unsigned int flags; /* client flags */ - unsigned int flags2; /* ugh. overflow */ + uint64_t flags; /* client flags */ unsigned int snomask; /* server notice mask */ @@ -388,26 +387,35 @@ struct ListClient /* housekeeping flags */ -#define FLAGS_PINGSENT 0x0001 /* Unreplied ping sent */ -#define FLAGS_DEAD 0x0002 /* Local socket is dead--Exiting soon */ -#define FLAGS_KILLED 0x0004 /* Prevents "QUIT" from being sent for this */ -#define FLAGS_SENTUSER 0x0008 /* Client sent a USER command. */ -#define FLAGS_CLICAP 0x0010 /* In CAP negotiation, wait for CAP END */ -#define FLAGS_CLOSING 0x0020 /* set when closing to suppress errors */ -#define FLAGS_PING_COOKIE 0x0040 /* has sent ping cookie */ -#define FLAGS_GOTID 0x0080 /* successful ident lookup achieved */ -#define FLAGS_FLOODDONE 0x0100 /* flood grace period over / reported */ -#define FLAGS_NORMALEX 0x0400 /* Client exited normally */ -#define FLAGS_MARK 0x10000 /* marked client */ -#define FLAGS_HIDDEN 0x20000 /* hidden server */ -#define FLAGS_EOB 0x40000 /* EOB */ -#define FLAGS_MYCONNECT 0x80000 /* MyConnect */ -#define FLAGS_IOERROR 0x100000 /* IO error */ -#define FLAGS_SERVICE 0x200000 /* network service */ -#define FLAGS_TGCHANGE 0x400000 /* we're allowed to clear something */ -#define FLAGS_DYNSPOOF 0x800000 /* dynamic spoof, only opers see ip */ -#define FLAGS_TGEXCESSIVE 0x1000000 /* whether the client has attemped to change targets excessively fast */ -#define FLAGS_CLICAP_DATA 0x2000000 /* requested CAP LS 302 */ +#define FLAGS_PINGSENT 0x00000001 /* Unreplied ping sent */ +#define FLAGS_DEAD 0x00000002 /* Local socket is dead--Exiting soon */ +#define FLAGS_KILLED 0x00000004 /* Prevents "QUIT" from being sent for this */ +#define FLAGS_SENTUSER 0x00000008 /* Client sent a USER command. */ +#define FLAGS_CLICAP 0x00000010 /* In CAP negotiation, wait for CAP END */ +#define FLAGS_CLOSING 0x00000020 /* set when closing to suppress errors */ +#define FLAGS_PING_COOKIE 0x00000040 /* has sent ping cookie */ +#define FLAGS_GOTID 0x00000080 /* successful ident lookup achieved */ +#define FLAGS_FLOODDONE 0x00000100 /* flood grace period over / reported */ +#define FLAGS_NORMALEX 0x00000200 /* Client exited normally */ +#define FLAGS_MARK 0x00000400 /* marked client */ +#define FLAGS_HIDDEN 0x00000800 /* hidden server */ +#define FLAGS_EOB 0x00001000 /* EOB */ +#define FLAGS_MYCONNECT 0x00002000 /* MyConnect */ +#define FLAGS_IOERROR 0x00004000 /* IO error */ +#define FLAGS_SERVICE 0x00008000 /* network service */ +#define FLAGS_TGCHANGE 0x00010000 /* we're allowed to clear something */ +#define FLAGS_DYNSPOOF 0x00020000 /* dynamic spoof, only opers see ip */ +#define FLAGS_TGEXCESSIVE 0x00040000 /* whether the client has attemped to change targets excessively fast */ +#define FLAGS_CLICAP_DATA 0x00080000 /* requested CAP LS 302 */ +#define FLAGS_EXTENDCHANS 0x00100000 +#define FLAGS_EXEMPTRESV 0x00200000 +#define FLAGS_EXEMPTKLINE 0x00400000 +#define FLAGS_EXEMPTFLOOD 0x00800000 +#define FLAGS_IP_SPOOFING 0x01000000 +#define FLAGS_EXEMPTSPAMBOT 0x02000000 +#define FLAGS_EXEMPTSHIDE 0x04000000 +#define FLAGS_EXEMPTJUPE 0x08000000 + /* flags for local clients, this needs stuff moved from above to here at some point */ #define LFLAGS_SSL 0x00000001 @@ -432,17 +440,6 @@ struct ListClient #define UMODE_ADMIN 0x2000 /* Admin on server */ #define UMODE_SSLCLIENT 0x4000 /* using SSL */ -/* overflow flags */ -/* EARLIER FLAGS ARE IN s_newconf.h */ -#define FLAGS2_EXTENDCHANS 0x00200000 -#define FLAGS2_EXEMPTRESV 0x00400000 -#define FLAGS2_EXEMPTKLINE 0x00800000 -#define FLAGS2_EXEMPTFLOOD 0x01000000 -#define FLAGS2_IP_SPOOFING 0x10000000 -#define FLAGS2_EXEMPTSPAMBOT 0x20000000 -#define FLAGS2_EXEMPTSHIDE 0x40000000 -#define FLAGS2_EXEMPTJUPE 0x80000000 - #define DEFAULT_OPER_UMODES (UMODE_SERVNOTICE | UMODE_OPERWALL | \ UMODE_WALLOP | UMODE_LOCOPS) #define DEFAULT_OPER_SNOMASK SNO_GENERAL @@ -524,25 +521,22 @@ struct ListClient #define SetGotId(x) ((x)->flags |= FLAGS_GOTID) #define IsGotId(x) (((x)->flags & FLAGS_GOTID) != 0) -/* - * flags2 macros. - */ -#define IsExemptKline(x) ((x)->flags2 & FLAGS2_EXEMPTKLINE) -#define SetExemptKline(x) ((x)->flags2 |= FLAGS2_EXEMPTKLINE) -#define IsExemptFlood(x) ((x)->flags2 & FLAGS2_EXEMPTFLOOD) -#define SetExemptFlood(x) ((x)->flags2 |= FLAGS2_EXEMPTFLOOD) -#define IsExemptSpambot(x) ((x)->flags2 & FLAGS2_EXEMPTSPAMBOT) -#define SetExemptSpambot(x) ((x)->flags2 |= FLAGS2_EXEMPTSPAMBOT) -#define IsExemptShide(x) ((x)->flags2 & FLAGS2_EXEMPTSHIDE) -#define SetExemptShide(x) ((x)->flags2 |= FLAGS2_EXEMPTSHIDE) -#define IsExemptJupe(x) ((x)->flags2 & FLAGS2_EXEMPTJUPE) -#define SetExemptJupe(x) ((x)->flags2 |= FLAGS2_EXEMPTJUPE) -#define IsExemptResv(x) ((x)->flags2 & FLAGS2_EXEMPTRESV) -#define SetExemptResv(x) ((x)->flags2 |= FLAGS2_EXEMPTRESV) -#define IsIPSpoof(x) ((x)->flags2 & FLAGS2_IP_SPOOFING) -#define SetIPSpoof(x) ((x)->flags2 |= FLAGS2_IP_SPOOFING) -#define IsExtendChans(x) ((x)->flags2 & FLAGS2_EXTENDCHANS) -#define SetExtendChans(x) ((x)->flags2 |= FLAGS2_EXTENDCHANS) +#define IsExemptKline(x) ((x)->flags & FLAGS_EXEMPTKLINE) +#define SetExemptKline(x) ((x)->flags |= FLAGS_EXEMPTKLINE) +#define IsExemptFlood(x) ((x)->flags & FLAGS_EXEMPTFLOOD) +#define SetExemptFlood(x) ((x)->flags |= FLAGS_EXEMPTFLOOD) +#define IsExemptSpambot(x) ((x)->flags & FLAGS_EXEMPTSPAMBOT) +#define SetExemptSpambot(x) ((x)->flags |= FLAGS_EXEMPTSPAMBOT) +#define IsExemptShide(x) ((x)->flags & FLAGS_EXEMPTSHIDE) +#define SetExemptShide(x) ((x)->flags |= FLAGS_EXEMPTSHIDE) +#define IsExemptJupe(x) ((x)->flags & FLAGS_EXEMPTJUPE) +#define SetExemptJupe(x) ((x)->flags |= FLAGS_EXEMPTJUPE) +#define IsExemptResv(x) ((x)->flags & FLAGS_EXEMPTRESV) +#define SetExemptResv(x) ((x)->flags |= FLAGS_EXEMPTRESV) +#define IsIPSpoof(x) ((x)->flags & FLAGS_IP_SPOOFING) +#define SetIPSpoof(x) ((x)->flags |= FLAGS_IP_SPOOFING) +#define IsExtendChans(x) ((x)->flags & FLAGS_EXTENDCHANS) +#define SetExtendChans(x) ((x)->flags |= FLAGS_EXTENDCHANS) /* for local users: flood grace period is over * for servers: mentioned in networknotice.c notice diff --git a/include/s_conf.h b/include/s_conf.h index 7ffa47085..dbbdce194 100644 --- a/include/s_conf.h +++ b/include/s_conf.h @@ -74,41 +74,41 @@ struct ConfItem rb_patricia_node_t *pnode; /* Our patricia node */ }; -#define CONF_ILLEGAL 0x80000000 -#define CONF_CLIENT 0x0002 -#define CONF_KILL 0x0040 +#define CONF_ILLEGAL 0x80000000 +#define CONF_CLIENT 0x0002 +#define CONF_KILL 0x0040 #define CONF_XLINE 0x0080 #define CONF_RESV_CHANNEL 0x0100 #define CONF_RESV_NICK 0x0200 #define CONF_RESV (CONF_RESV_CHANNEL | CONF_RESV_NICK) -#define CONF_DLINE 0x20000 -#define CONF_EXEMPTDLINE 0x100000 +#define CONF_DLINE 0x020000 +#define CONF_EXEMPTDLINE 0x100000 #define IsIllegal(x) ((x)->status & CONF_ILLEGAL) /* aConfItem->flags */ /* Generic flags... */ -#define CONF_FLAGS_TEMPORARY 0x00800000 +#define CONF_FLAGS_TEMPORARY 0x00800000 #define CONF_FLAGS_NEED_SSL 0x00000002 -#define CONF_FLAGS_MYOPER 0x00080000 /* need to rewrite info.oper on burst */ +#define CONF_FLAGS_MYOPER 0x00080000 /* need to rewrite info.oper on burst */ /* auth{} flags... */ -#define CONF_FLAGS_NO_TILDE 0x00000004 -#define CONF_FLAGS_NEED_IDENTD 0x00000008 -#define CONF_FLAGS_EXEMPTKLINE 0x00000040 -#define CONF_FLAGS_NOLIMIT 0x00000080 -#define CONF_FLAGS_SPOOF_IP 0x00000200 +#define CONF_FLAGS_NO_TILDE 0x00000004 +#define CONF_FLAGS_NEED_IDENTD 0x00000008 +#define CONF_FLAGS_EXEMPTKLINE 0x00000040 +#define CONF_FLAGS_NOLIMIT 0x00000080 +#define CONF_FLAGS_SPOOF_IP 0x00000200 #define CONF_FLAGS_SPOOF_NOTICE 0x00000400 -#define CONF_FLAGS_REDIR 0x00000800 +#define CONF_FLAGS_REDIR 0x00000800 #define CONF_FLAGS_EXEMPTRESV 0x00002000 /* exempt from resvs */ -#define CONF_FLAGS_EXEMPTFLOOD 0x00004000 +#define CONF_FLAGS_EXEMPTFLOOD 0x00004000 #define CONF_FLAGS_EXEMPTSPAMBOT 0x00008000 #define CONF_FLAGS_EXEMPTSHIDE 0x00010000 #define CONF_FLAGS_EXEMPTJUPE 0x00020000 /* exempt from resv generating warnings */ #define CONF_FLAGS_NEED_SASL 0x00040000 #define CONF_FLAGS_EXTEND_CHANS 0x00080000 -#define CONF_FLAGS_ENCRYPTED 0x00200000 +#define CONF_FLAGS_ENCRYPTED 0x00200000 #define CONF_FLAGS_EXEMPTDNSBL 0x04000000 #define CONF_FLAGS_EXEMPTPROXY 0x08000000 diff --git a/include/s_newconf.h b/include/s_newconf.h index b23c6364d..a1858b7f8 100644 --- a/include/s_newconf.h +++ b/include/s_newconf.h @@ -138,11 +138,11 @@ extern void propagate_generic(struct Client *source_p, const char *command, extern void cluster_generic(struct Client *, const char *, int cltype, int cap, const char *format, ...); -#define OPER_ENCRYPTED 0x00001 -#define OPER_NEEDSSL 0x80000 -/* 0x400000 and above are in client.h */ +/* Other client flags are in client.h */ +#define OPER_ENCRYPTED 0x10000000 +#define OPER_NEEDSSL 0x20000000 -#define OPER_FLAGS 0 /* no oper privs in Client.flags2/oper_conf.flags currently */ +#define OPER_FLAGS 0 /* no oper privs in Client.flags/oper_conf.flags currently */ #define IsOperConfEncrypted(x) ((x)->flags & OPER_ENCRYPTED) #define IsOperConfNeedSSL(x) ((x)->flags & OPER_NEEDSSL) diff --git a/ircd/client.c b/ircd/client.c index 11e20e395..de0be150a 100644 --- a/ircd/client.c +++ b/ircd/client.c @@ -1077,9 +1077,9 @@ free_exited_clients(void *unused) { s_assert(0); sendto_realops_snomask(SNO_GENERAL, L_ALL, - "On abort_list: %s stat: %u flags: %u/%u handler: %c", + "On abort_list: %s stat: %u flags: %llu handler: %c", target_p->name, (unsigned int) target_p->status, - target_p->flags, target_p->flags2, target_p->handler); + target_p->flags, target_p->handler); sendto_realops_snomask(SNO_GENERAL, L_ALL, "Please report this to the charybdis developers!"); found++; @@ -1221,9 +1221,9 @@ exit_aborted_clients(void *unused) { s_assert(0); sendto_realops_snomask(SNO_GENERAL, L_ALL, - "On dead_list: %s stat: %u flags: %u/%u handler: %c", + "On dead_list: %s stat: %u flags: %llu handler: %c", abt->client->name, (unsigned int) abt->client->status, - abt->client->flags, abt->client->flags2, abt->client->handler); + abt->client->flags, abt->client->handler); sendto_realops_snomask(SNO_GENERAL, L_ALL, "Please report this to the charybdis developers!"); continue; diff --git a/ircd/s_user.c b/ircd/s_user.c index a3c34c94e..b695b41f1 100644 --- a/ircd/s_user.c +++ b/ircd/s_user.c @@ -1083,7 +1083,7 @@ user_mode(struct Client *client_p, struct Client *source_p, int parc, const char source_p->snomask = 0; showsnomask = true; } - source_p->flags2 &= ~OPER_FLAGS; + source_p->flags &= ~OPER_FLAGS; rb_free(source_p->localClient->opername); source_p->localClient->opername = NULL; @@ -1376,7 +1376,7 @@ oper_up(struct Client *source_p, struct oper_conf *oper_p) SetExtendChans(source_p); SetExemptKline(source_p); - source_p->flags2 |= oper_p->flags; + source_p->flags |= oper_p->flags; source_p->localClient->opername = rb_strdup(oper_p->name); source_p->localClient->privset = privilegeset_ref(oper_p->privset); diff --git a/modules/m_privs.c b/modules/m_privs.c index d8a32ebbe..c71327dce 100644 --- a/modules/m_privs.c +++ b/modules/m_privs.c @@ -55,22 +55,26 @@ mapi_clist_av1 privs_clist[] = { NULL }; -/* XXX this is a copy, not so nice */ +/* XXX this is a copy, not so nice + * + * Sort of... it's int in newconf.c since oper confs don't need 64-bit wide flags. + * --Elizafox + */ struct mode_table { const char *name; - unsigned int mode; + uint64_t mode; }; /* there is no such table like this anywhere else */ static struct mode_table auth_client_table[] = { - {"resv_exempt", FLAGS2_EXEMPTRESV }, - {"kline_exempt", FLAGS2_EXEMPTKLINE }, - {"flood_exempt", FLAGS2_EXEMPTFLOOD }, - {"spambot_exempt", FLAGS2_EXEMPTSPAMBOT }, - {"shide_exempt", FLAGS2_EXEMPTSHIDE }, - {"jupe_exempt", FLAGS2_EXEMPTJUPE }, - {"extend_chans", FLAGS2_EXTENDCHANS }, + {"resv_exempt", FLAGS_EXEMPTRESV }, + {"kline_exempt", FLAGS_EXEMPTKLINE }, + {"flood_exempt", FLAGS_EXEMPTFLOOD }, + {"spambot_exempt", FLAGS_EXEMPTSPAMBOT }, + {"shide_exempt", FLAGS_EXEMPTSHIDE }, + {"jupe_exempt", FLAGS_EXEMPTJUPE }, + {"extend_chans", FLAGS_EXTENDCHANS }, {NULL, 0} }; @@ -102,7 +106,7 @@ static void show_privs(struct Client *source_p, struct Client *target_p) p = &auth_client_table[0]; while (p->name != NULL) { - if (target_p->flags2 & p->mode) + if (target_p->flags & p->mode) { if (buf[0] != '\0') rb_strlcat(buf, " ", sizeof buf);