0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-11-18 07:50:57 +01:00

Get rid of flags2.

It seems to come from an era where long long didn't exist and 64-bit
machines weren't common. 32-bit machines are still common but I can't
imagine this will have much performance impact there.

This "fixes" #179 in title only, but see comments within.
This commit is contained in:
Elizabeth Myers 2016-04-07 07:40:55 -05:00
parent 9057170ce8
commit 66f7fe673b
6 changed files with 85 additions and 87 deletions

View file

@ -115,8 +115,7 @@ struct Client
time_t tsinfo; /* TS on the nick, SVINFO on server */ time_t tsinfo; /* TS on the nick, SVINFO on server */
unsigned int umodes; /* opers, normal users subset */ unsigned int umodes; /* opers, normal users subset */
unsigned int flags; /* client flags */ uint64_t flags; /* client flags */
unsigned int flags2; /* ugh. overflow */
unsigned int snomask; /* server notice mask */ unsigned int snomask; /* server notice mask */
@ -388,26 +387,35 @@ struct ListClient
/* housekeeping flags */ /* housekeeping flags */
#define FLAGS_PINGSENT 0x0001 /* Unreplied ping sent */ #define FLAGS_PINGSENT 0x00000001 /* Unreplied ping sent */
#define FLAGS_DEAD 0x0002 /* Local socket is dead--Exiting soon */ #define FLAGS_DEAD 0x00000002 /* Local socket is dead--Exiting soon */
#define FLAGS_KILLED 0x0004 /* Prevents "QUIT" from being sent for this */ #define FLAGS_KILLED 0x00000004 /* Prevents "QUIT" from being sent for this */
#define FLAGS_SENTUSER 0x0008 /* Client sent a USER command. */ #define FLAGS_SENTUSER 0x00000008 /* Client sent a USER command. */
#define FLAGS_CLICAP 0x0010 /* In CAP negotiation, wait for CAP END */ #define FLAGS_CLICAP 0x00000010 /* In CAP negotiation, wait for CAP END */
#define FLAGS_CLOSING 0x0020 /* set when closing to suppress errors */ #define FLAGS_CLOSING 0x00000020 /* set when closing to suppress errors */
#define FLAGS_PING_COOKIE 0x0040 /* has sent ping cookie */ #define FLAGS_PING_COOKIE 0x00000040 /* has sent ping cookie */
#define FLAGS_GOTID 0x0080 /* successful ident lookup achieved */ #define FLAGS_GOTID 0x00000080 /* successful ident lookup achieved */
#define FLAGS_FLOODDONE 0x0100 /* flood grace period over / reported */ #define FLAGS_FLOODDONE 0x00000100 /* flood grace period over / reported */
#define FLAGS_NORMALEX 0x0400 /* Client exited normally */ #define FLAGS_NORMALEX 0x00000200 /* Client exited normally */
#define FLAGS_MARK 0x10000 /* marked client */ #define FLAGS_MARK 0x00000400 /* marked client */
#define FLAGS_HIDDEN 0x20000 /* hidden server */ #define FLAGS_HIDDEN 0x00000800 /* hidden server */
#define FLAGS_EOB 0x40000 /* EOB */ #define FLAGS_EOB 0x00001000 /* EOB */
#define FLAGS_MYCONNECT 0x80000 /* MyConnect */ #define FLAGS_MYCONNECT 0x00002000 /* MyConnect */
#define FLAGS_IOERROR 0x100000 /* IO error */ #define FLAGS_IOERROR 0x00004000 /* IO error */
#define FLAGS_SERVICE 0x200000 /* network service */ #define FLAGS_SERVICE 0x00008000 /* network service */
#define FLAGS_TGCHANGE 0x400000 /* we're allowed to clear something */ #define FLAGS_TGCHANGE 0x00010000 /* we're allowed to clear something */
#define FLAGS_DYNSPOOF 0x800000 /* dynamic spoof, only opers see ip */ #define FLAGS_DYNSPOOF 0x00020000 /* dynamic spoof, only opers see ip */
#define FLAGS_TGEXCESSIVE 0x1000000 /* whether the client has attemped to change targets excessively fast */ #define FLAGS_TGEXCESSIVE 0x00040000 /* whether the client has attemped to change targets excessively fast */
#define FLAGS_CLICAP_DATA 0x2000000 /* requested CAP LS 302 */ #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 */ /* flags for local clients, this needs stuff moved from above to here at some point */
#define LFLAGS_SSL 0x00000001 #define LFLAGS_SSL 0x00000001
@ -432,17 +440,6 @@ struct ListClient
#define UMODE_ADMIN 0x2000 /* Admin on server */ #define UMODE_ADMIN 0x2000 /* Admin on server */
#define UMODE_SSLCLIENT 0x4000 /* using SSL */ #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 | \ #define DEFAULT_OPER_UMODES (UMODE_SERVNOTICE | UMODE_OPERWALL | \
UMODE_WALLOP | UMODE_LOCOPS) UMODE_WALLOP | UMODE_LOCOPS)
#define DEFAULT_OPER_SNOMASK SNO_GENERAL #define DEFAULT_OPER_SNOMASK SNO_GENERAL
@ -524,25 +521,22 @@ struct ListClient
#define SetGotId(x) ((x)->flags |= FLAGS_GOTID) #define SetGotId(x) ((x)->flags |= FLAGS_GOTID)
#define IsGotId(x) (((x)->flags & FLAGS_GOTID) != 0) #define IsGotId(x) (((x)->flags & FLAGS_GOTID) != 0)
/* #define IsExemptKline(x) ((x)->flags & FLAGS_EXEMPTKLINE)
* flags2 macros. #define SetExemptKline(x) ((x)->flags |= FLAGS_EXEMPTKLINE)
*/ #define IsExemptFlood(x) ((x)->flags & FLAGS_EXEMPTFLOOD)
#define IsExemptKline(x) ((x)->flags2 & FLAGS2_EXEMPTKLINE) #define SetExemptFlood(x) ((x)->flags |= FLAGS_EXEMPTFLOOD)
#define SetExemptKline(x) ((x)->flags2 |= FLAGS2_EXEMPTKLINE) #define IsExemptSpambot(x) ((x)->flags & FLAGS_EXEMPTSPAMBOT)
#define IsExemptFlood(x) ((x)->flags2 & FLAGS2_EXEMPTFLOOD) #define SetExemptSpambot(x) ((x)->flags |= FLAGS_EXEMPTSPAMBOT)
#define SetExemptFlood(x) ((x)->flags2 |= FLAGS2_EXEMPTFLOOD) #define IsExemptShide(x) ((x)->flags & FLAGS_EXEMPTSHIDE)
#define IsExemptSpambot(x) ((x)->flags2 & FLAGS2_EXEMPTSPAMBOT) #define SetExemptShide(x) ((x)->flags |= FLAGS_EXEMPTSHIDE)
#define SetExemptSpambot(x) ((x)->flags2 |= FLAGS2_EXEMPTSPAMBOT) #define IsExemptJupe(x) ((x)->flags & FLAGS_EXEMPTJUPE)
#define IsExemptShide(x) ((x)->flags2 & FLAGS2_EXEMPTSHIDE) #define SetExemptJupe(x) ((x)->flags |= FLAGS_EXEMPTJUPE)
#define SetExemptShide(x) ((x)->flags2 |= FLAGS2_EXEMPTSHIDE) #define IsExemptResv(x) ((x)->flags & FLAGS_EXEMPTRESV)
#define IsExemptJupe(x) ((x)->flags2 & FLAGS2_EXEMPTJUPE) #define SetExemptResv(x) ((x)->flags |= FLAGS_EXEMPTRESV)
#define SetExemptJupe(x) ((x)->flags2 |= FLAGS2_EXEMPTJUPE) #define IsIPSpoof(x) ((x)->flags & FLAGS_IP_SPOOFING)
#define IsExemptResv(x) ((x)->flags2 & FLAGS2_EXEMPTRESV) #define SetIPSpoof(x) ((x)->flags |= FLAGS_IP_SPOOFING)
#define SetExemptResv(x) ((x)->flags2 |= FLAGS2_EXEMPTRESV) #define IsExtendChans(x) ((x)->flags & FLAGS_EXTENDCHANS)
#define IsIPSpoof(x) ((x)->flags2 & FLAGS2_IP_SPOOFING) #define SetExtendChans(x) ((x)->flags |= FLAGS_EXTENDCHANS)
#define SetIPSpoof(x) ((x)->flags2 |= FLAGS2_IP_SPOOFING)
#define IsExtendChans(x) ((x)->flags2 & FLAGS2_EXTENDCHANS)
#define SetExtendChans(x) ((x)->flags2 |= FLAGS2_EXTENDCHANS)
/* for local users: flood grace period is over /* for local users: flood grace period is over
* for servers: mentioned in networknotice.c notice * for servers: mentioned in networknotice.c notice

View file

@ -82,7 +82,7 @@ struct ConfItem
#define CONF_RESV_NICK 0x0200 #define CONF_RESV_NICK 0x0200
#define CONF_RESV (CONF_RESV_CHANNEL | CONF_RESV_NICK) #define CONF_RESV (CONF_RESV_CHANNEL | CONF_RESV_NICK)
#define CONF_DLINE 0x20000 #define CONF_DLINE 0x020000
#define CONF_EXEMPTDLINE 0x100000 #define CONF_EXEMPTDLINE 0x100000
#define IsIllegal(x) ((x)->status & CONF_ILLEGAL) #define IsIllegal(x) ((x)->status & CONF_ILLEGAL)

View file

@ -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, extern void cluster_generic(struct Client *, const char *, int cltype,
int cap, const char *format, ...); int cap, const char *format, ...);
#define OPER_ENCRYPTED 0x00001 /* Other client flags are in client.h */
#define OPER_NEEDSSL 0x80000 #define OPER_ENCRYPTED 0x10000000
/* 0x400000 and above are in client.h */ #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 IsOperConfEncrypted(x) ((x)->flags & OPER_ENCRYPTED)
#define IsOperConfNeedSSL(x) ((x)->flags & OPER_NEEDSSL) #define IsOperConfNeedSSL(x) ((x)->flags & OPER_NEEDSSL)

View file

@ -1077,9 +1077,9 @@ free_exited_clients(void *unused)
{ {
s_assert(0); s_assert(0);
sendto_realops_snomask(SNO_GENERAL, L_ALL, 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->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, sendto_realops_snomask(SNO_GENERAL, L_ALL,
"Please report this to the charybdis developers!"); "Please report this to the charybdis developers!");
found++; found++;
@ -1221,9 +1221,9 @@ exit_aborted_clients(void *unused)
{ {
s_assert(0); s_assert(0);
sendto_realops_snomask(SNO_GENERAL, L_ALL, 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->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, sendto_realops_snomask(SNO_GENERAL, L_ALL,
"Please report this to the charybdis developers!"); "Please report this to the charybdis developers!");
continue; continue;

View file

@ -1083,7 +1083,7 @@ user_mode(struct Client *client_p, struct Client *source_p, int parc, const char
source_p->snomask = 0; source_p->snomask = 0;
showsnomask = true; showsnomask = true;
} }
source_p->flags2 &= ~OPER_FLAGS; source_p->flags &= ~OPER_FLAGS;
rb_free(source_p->localClient->opername); rb_free(source_p->localClient->opername);
source_p->localClient->opername = NULL; source_p->localClient->opername = NULL;
@ -1376,7 +1376,7 @@ oper_up(struct Client *source_p, struct oper_conf *oper_p)
SetExtendChans(source_p); SetExtendChans(source_p);
SetExemptKline(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->opername = rb_strdup(oper_p->name);
source_p->localClient->privset = privilegeset_ref(oper_p->privset); source_p->localClient->privset = privilegeset_ref(oper_p->privset);

View file

@ -55,22 +55,26 @@ mapi_clist_av1 privs_clist[] = {
NULL 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 struct mode_table
{ {
const char *name; const char *name;
unsigned int mode; uint64_t mode;
}; };
/* there is no such table like this anywhere else */ /* there is no such table like this anywhere else */
static struct mode_table auth_client_table[] = { static struct mode_table auth_client_table[] = {
{"resv_exempt", FLAGS2_EXEMPTRESV }, {"resv_exempt", FLAGS_EXEMPTRESV },
{"kline_exempt", FLAGS2_EXEMPTKLINE }, {"kline_exempt", FLAGS_EXEMPTKLINE },
{"flood_exempt", FLAGS2_EXEMPTFLOOD }, {"flood_exempt", FLAGS_EXEMPTFLOOD },
{"spambot_exempt", FLAGS2_EXEMPTSPAMBOT }, {"spambot_exempt", FLAGS_EXEMPTSPAMBOT },
{"shide_exempt", FLAGS2_EXEMPTSHIDE }, {"shide_exempt", FLAGS_EXEMPTSHIDE },
{"jupe_exempt", FLAGS2_EXEMPTJUPE }, {"jupe_exempt", FLAGS_EXEMPTJUPE },
{"extend_chans", FLAGS2_EXTENDCHANS }, {"extend_chans", FLAGS_EXTENDCHANS },
{NULL, 0} {NULL, 0}
}; };
@ -102,7 +106,7 @@ static void show_privs(struct Client *source_p, struct Client *target_p)
p = &auth_client_table[0]; p = &auth_client_table[0];
while (p->name != NULL) while (p->name != NULL)
{ {
if (target_p->flags2 & p->mode) if (target_p->flags & p->mode)
{ {
if (buf[0] != '\0') if (buf[0] != '\0')
rb_strlcat(buf, " ", sizeof buf); rb_strlcat(buf, " ", sizeof buf);