From: Michael Poole Date: Tue, 21 Aug 2007 01:13:15 +0000 (+0000) Subject: Do not include unregistered +i clients in /lusers's invisible count. X-Git-Url: http://git.pk910.de/?p=ircu2.10.12-pk.git;a=commitdiff_plain;h=05eb37155a15da41eae9452cd4616598b26dd053 Do not include unregistered +i clients in /lusers's invisible count. git-svn-id: file:///home/klmitch/undernet-ircu/undernet-ircu-svn/ircu2/branches/u2_10_12_branch@1833 c9e4aea6-c8fd-4c43-8297-357d70d61c8c --- diff --git a/ChangeLog b/ChangeLog index 6d4a60a..fe17670 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2007-08-20 Michael Poole + + * ircd/s_user.c (register_user): Update inv_clients and opers + counts. Call client_set_privs() for local users. + (set_nick_name): Do not call client_set_privs() for remote users. + (set_user_mode): Move oper and invisible client checks inside the + IsRegistered() section. + 2007-08-14 Michael Poole * ircd/channel.c (DONE_*): Split key changes into _ADD and _DEL. diff --git a/ircd/s_user.c b/ircd/s_user.c index b6d5d41..a2de84f 100644 --- a/ircd/s_user.c +++ b/ircd/s_user.c @@ -439,6 +439,10 @@ int register_user(struct Client *cptr, struct Client *sptr) */ if (HasHiddenHost(sptr)) hide_hostmask(sptr, FLAG_HIDDENHOST); + if (IsInvisible(sptr)) + ++UserStats.inv_clients; + if (IsOper(sptr)) + ++UserStats.opers; tmpstr = umode_str(sptr); /* Send full IP address to IPv6-grokking servers. */ @@ -473,6 +477,7 @@ int register_user(struct Client *cptr, struct Client *sptr) FlagSet(&flags, FLAG_ACCOUNT); else FlagClr(&flags, FLAG_ACCOUNT); + client_set_privs(sptr, NULL); send_umode(cptr, sptr, &flags, ALL_UMODES); if ((cli_snomask(sptr) != SNO_DEFAULT) && HasFlag(sptr, FLAG_SERVNOTICE)) send_reply(sptr, RPL_SNOMASK, cli_snomask(sptr), cli_snomask(sptr)); @@ -529,7 +534,6 @@ int set_nick_name(struct Client* cptr, struct Client* sptr, cli_hopcount(new_client) = atoi(parv[2]); cli_lastnick(new_client) = atoi(parv[3]); - client_set_privs(new_client, NULL); /* set privs on user */ /* * Set new nick name. */ @@ -1140,28 +1144,6 @@ int set_user_mode(struct Client *cptr, struct Client *sptr, int parc, * Compare new flags with old flags and send string which * will cause servers to update correctly. */ - if (!FlagHas(&setflags, FLAG_OPER) && IsOper(sptr)) - { - /* user now oper */ - ++UserStats.opers; - client_set_privs(sptr, NULL); /* may set propagate privilege */ - } - /* remember propagate privilege setting */ - if (HasPriv(sptr, PRIV_PROPAGATE)) - prop = 1; - if (FlagHas(&setflags, FLAG_OPER) && !IsOper(sptr)) - { - /* user no longer oper */ - assert(UserStats.opers > 0); - --UserStats.opers; - client_set_privs(sptr, NULL); /* will clear propagate privilege */ - } - if (FlagHas(&setflags, FLAG_INVISIBLE) && !IsInvisible(sptr)) { - assert(UserStats.inv_clients > 0); - --UserStats.inv_clients; - } - if (!FlagHas(&setflags, FLAG_INVISIBLE) && IsInvisible(sptr)) - ++UserStats.inv_clients; if (!FlagHas(&setflags, FLAG_ACCOUNT) && IsAccount(sptr)) { int len = ACCOUNTLEN; char *ts; @@ -1176,11 +1158,35 @@ int set_user_mode(struct Client *cptr, struct Client *sptr, int parc, } if (!FlagHas(&setflags, FLAG_HIDDENHOST) && do_host_hiding && allow_modes != ALLOWMODES_DEFAULT) hide_hostmask(sptr, FLAG_HIDDENHOST); - if (IsRegistered(sptr)) + + if (IsRegistered(sptr)) { + if (!FlagHas(&setflags, FLAG_OPER) && IsOper(sptr)) { + /* user now oper */ + ++UserStats.opers; + client_set_privs(sptr, NULL); /* may set propagate privilege */ + } + /* remember propagate privilege setting */ + if (HasPriv(sptr, PRIV_PROPAGATE)) { + prop = 1; + } + if (FlagHas(&setflags, FLAG_OPER) && !IsOper(sptr)) { + /* user no longer oper */ + assert(UserStats.opers > 0); + --UserStats.opers; + client_set_privs(sptr, NULL); /* will clear propagate privilege */ + } + if (FlagHas(&setflags, FLAG_INVISIBLE) && !IsInvisible(sptr)) { + assert(UserStats.inv_clients > 0); + --UserStats.inv_clients; + } + if (!FlagHas(&setflags, FLAG_INVISIBLE) && IsInvisible(sptr)) { + ++UserStats.inv_clients; + } + assert(UserStats.opers <= UserStats.clients + UserStats.unknowns); + assert(UserStats.inv_clients <= UserStats.clients + UserStats.unknowns); send_umode_out(cptr, sptr, &setflags, prop); + } - assert(UserStats.opers <= UserStats.clients + UserStats.unknowns); - assert(UserStats.inv_clients <= UserStats.clients + UserStats.unknowns); return 0; }