Fix handling of multiple users on a +h account in the support channel(s).
authorMichael Poole <mdpoole@troilus.org>
Thu, 5 Mar 2009 04:16:51 +0000 (23:16 -0500)
committerMichael Poole <mdpoole@troilus.org>
Thu, 5 Mar 2009 04:16:51 +0000 (23:16 -0500)
Do not remove +g from a +h account when one of several users on the
account leave a support channel, which gix reported in SF#2649505.

src/chanserv.c (handle_part): Keep the +g flag if any user on the same
  account is in any support channel.
src/nickserv.c (nickserv_apply_flags): Likewise here, for flag changes.

src/chanserv.c
src/nickserv.c

index 23a55b5a08fea204cddbed9475e7ce356f99a0ed..e039fbf44d882f63e523d29cbd425d8915555bd9 100644 (file)
@@ -6695,16 +6695,11 @@ handle_part(struct modeNode *mn, UNUSED_ARG(const char *reason))
 
     if(IsHelping(mn->user) && IsSupportHelper(mn->user))
     {
-        unsigned int ii, jj;
+        unsigned int ii;
         for(ii = 0; ii < chanserv_conf.support_channels.used; ++ii)
-        {
-            for(jj = 0; jj < mn->user->channels.used; ++jj)
-                if(mn->user->channels.list[jj]->channel == chanserv_conf.support_channels.list[ii])
-                    break;
-            if(jj < mn->user->channels.used)
+             if(find_handle_in_channel(chanserv_conf.support_channels.list[ii], mn->user->handle_info, mn->user))
                 break;
-        }
-        if(ii == chanserv_conf.support_channels.used)
+         if(ii == chanserv_conf.support_channels.used)
             HANDLE_CLEAR_FLAG(mn->user->handle_info, HELPING);
     }
 }
index 024364f25f70880c7d4ad5edd49c53316425214e..4c3e931c4a3329ef7ffb490c7454fc07a3123010 100644 (file)
@@ -2171,14 +2171,10 @@ nickserv_apply_flags(struct userNode *user, struct handle_info *hi, const char *
         struct channelList *schannels;
         unsigned int ii;
         schannels = chanserv_support_channels();
-        for (uNode = hi->users; uNode; uNode = uNode->next_authed) {
-            for (ii = 0; ii < schannels->used; ++ii)
-                if (GetUserMode(schannels->list[ii], uNode))
-                    break;
-            if (ii < schannels->used)
+        for (ii = 0; ii < schannels->used; ++ii)
+            if (find_handle_in_channel(schannels->list[ii], hi, NULL))
                 break;
-        }
-        if (!uNode)
+        if (ii == schannels->used)
             HANDLE_CLEAR_FLAG(hi, HELPING);
     }