Do not include unregistered +i clients in /lusers's invisible count.
authorMichael Poole <mdpoole@troilus.org>
Tue, 21 Aug 2007 01:13:15 +0000 (01:13 +0000)
committerMichael Poole <mdpoole@troilus.org>
Tue, 21 Aug 2007 01:13:15 +0000 (01:13 +0000)
git-svn-id: file:///home/klmitch/undernet-ircu/undernet-ircu-svn/ircu2/branches/u2_10_12_branch@1833 c9e4aea6-c8fd-4c43-8297-357d70d61c8c

ChangeLog
ircd/s_user.c

index 6d4a60afd14fed85a1f51e4661eda9ec75ba9218..fe176702e4b6763cbfffd9de0864fea1ac00aef8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2007-08-20  Michael Poole <mdpoole@troilus.org>
+
+       * 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 <mdpoole@troilus.org>
 
        * ircd/channel.c (DONE_*): Split key changes into _ADD and _DEL.
index b6d5d41bc0ffc2856373f8fbed970b4c65b04576..a2de84f876ed7082fac055601f11ea5edc073f89 100644 (file)
@@ -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;
 }