]> jfr.im git - irc/rqf/shadowircd.git/commitdiff
Allow opers to see other users umodes with /mode <nick>.
authorJilles Tjoelker <redacted>
Thu, 1 Jan 2009 18:24:38 +0000 (19:24 +0100)
committerJilles Tjoelker <redacted>
Thu, 1 Jan 2009 18:24:38 +0000 (19:24 +0100)
If the other user is local, the snomask is also shown.

src/s_user.c

index ca5f74ce8de8a3b342fd79fdaf58979bdf2ab3bf..f9984f40c1828a3c67e5144301a6c7a1f3d479fd 100644 (file)
@@ -854,6 +854,30 @@ report_and_set_user_flags(struct Client *source_p, struct ConfItem *aconf)
        }
 }
 
+static void
+show_other_user_mode(struct Client *source_p, struct Client *target_p)
+{
+       int i;
+       char buf[BUFSIZE];
+       char *m;
+
+       m = buf;
+       *m++ = '+';
+
+       for (i = 0; i < 128; i++) /* >= 127 is extended ascii */
+               if (target_p->umodes & user_modes[i])
+                       *m++ = (char) i;
+       *m = '\0';
+
+       if (MyConnect(target_p) && target_p->snomask != 0)
+               sendto_one_notice(source_p, ":Modes for %s are %s %s",
+                               target_p->name, buf,
+                               construct_snobuf(target_p->snomask));
+       else
+               sendto_one_notice(source_p, ":Modes for %s are %s",
+                               target_p->name, buf);
+}
+
 /*
  * user_mode - set get current users mode
  *
@@ -906,7 +930,10 @@ user_mode(struct Client *client_p, struct Client *source_p, int parc, const char
 
        if(source_p != target_p)
        {
-               sendto_one(source_p, form_str(ERR_USERSDONTMATCH), me.name, source_p->name);
+               if (MyOper(source_p) && parc < 3)
+                       show_other_user_mode(source_p, target_p);
+               else
+                       sendto_one(source_p, form_str(ERR_USERSDONTMATCH), me.name, source_p->name);
                return 0;
        }