Fix SourceForge bug #1674539, and add a test for it.
[ircu2.10.12-pk.git] / ircd / m_mode.c
index 051fc630e7d606fbeeb2f14498374d9ee1ad8664..cb27ee5fb4dd37c9a53c291165a5b47f6681a67b 100644 (file)
@@ -86,6 +86,7 @@
 #include "client.h"
 #include "hash.h"
 #include "ircd.h"
+#include "ircd_features.h"
 #include "ircd_log.h"
 #include "ircd_reply.h"
 #include "ircd_string.h"
@@ -177,10 +178,15 @@ ms_mode(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
                   (MODEBUF_DEST_CHANNEL | /* Send mode to clients */
                    MODEBUF_DEST_SERVER  | /* Send mode to servers */
                    MODEBUF_DEST_HACK4));  /* Send a HACK(4) message */
+    else if (!feature_bool(FEAT_OPLEVELS))
+      modebuf_init(&mbuf, sptr, cptr, chptr,
+                  (MODEBUF_DEST_CHANNEL | /* Send mode to clients */
+                   MODEBUF_DEST_SERVER  | /* Send mode to servers */
+                   MODEBUF_DEST_HACK3));  /* Send a HACK(3) message */
     else
       /* Servers need to be able to op people who join using the Apass
-       * or upass, as well as people joining a zannel, therefore we no
-       * longer generate HACK3. */
+       * or upass, as well as people joining a zannel, therefore we do
+       * not generate HACK3 when oplevels are on. */
       modebuf_init(&mbuf, sptr, cptr, chptr,
                   (MODEBUF_DEST_CHANNEL | /* Send mode to clients */
                    MODEBUF_DEST_SERVER));   /* Send mode to servers */
@@ -191,9 +197,7 @@ ms_mode(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
                MODE_PARSE_FORCE),  /* And force it to be accepted */
                NULL);
   } else {
-    if (!(member = find_member_link(chptr, sptr))
-        /* Allow people to op themselves on an empty channel. */
-        || (!IsChanOp(member) && chptr->users > 1)) {
+    if (!(member = find_member_link(chptr, sptr)) || !IsChanOp(member)) {
       modebuf_init(&mbuf, sptr, cptr, chptr,
                   (MODEBUF_DEST_SERVER |  /* Send mode to server */
                    MODEBUF_DEST_HACK2  |  /* Send a HACK(2) message */