perform crosschan check only for some commands
authorpk910 <philipp@zoelle1.de>
Mon, 30 Jan 2012 20:23:50 +0000 (21:23 +0100)
committerpk910 <philipp@zoelle1.de>
Mon, 30 Jan 2012 20:25:19 +0000 (21:25 +0100)
src/cmd_global_modcmd.c
src/commands.c
src/modcmd.c
src/modcmd.h

index cc242f94a66096e55a60e88298c20df01901662d..1506a358076b2b85a64e3563ef6c930741403f51 100644 (file)
@@ -112,6 +112,7 @@ static const struct {
     {"OPLOG",               CMDFLAG_OPLOG},
     {"FUNCMD",              CMDFLAG_FUNCMD},
     {"ESCAPED_ARGS",        CMDFLAG_ESCAPE_ARGS},       //allows arguments to be escaped ("a\ b" = "a b" as one argument)
+    {"NO_CROSSCHAN",        CMDFLAG_NO_CROSSCHAN},
     {NULL, 0}
 };
 
index 3a1906c7adebecadabb5fc8207a2427d015cf755..8705b81236c99405163b1ee8d040818f93785bf7 100644 (file)
@@ -70,7 +70,7 @@ void register_commands() {
     USER_COMMAND("deluser",      neonserv_cmd_deluser,   1, "#channel_candel",      CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
     USER_COMMAND("clvl",         neonserv_cmd_clvl,      2, "#channel_canclvl",     CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
     USER_COMMAND("access",       neonserv_cmd_access,    0, NULL,                   CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_LOG);
-    USER_COMMAND("users",        neonserv_cmd_users,     0, NULL,                   CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN);
+    USER_COMMAND("users",        neonserv_cmd_users,     0, NULL,                   CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_NO_CROSSCHAN);
     USER_COMMAND("suspend",      neonserv_cmd_suspend,   1, "#channel_cansuspend",  CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
     USER_COMMAND("unsuspend",    neonserv_cmd_unsuspend, 1, "#channel_cansuspend",  CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
     USER_COMMAND("delme",        neonserv_cmd_delme,     0,  "1",                   CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
@@ -109,8 +109,8 @@ void register_commands() {
     USER_COMMAND("resync",       neonserv_cmd_resync,    0, "#channel_canresync",   CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
     USER_COMMAND("addtimeban",   neonserv_cmd_addtimeban,2, "#channel_staticban",   CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
     USER_COMMAND("mode",         neonserv_cmd_mode,      1, "#channel_getop",       CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
-    USER_COMMAND("peek",         neonserv_cmd_peek,      0, NULL,                   CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN);
-    USER_COMMAND("uset",         neonserv_cmd_uset,      0, NULL,                   CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH);
+    USER_COMMAND("peek",         neonserv_cmd_peek,      0, NULL,                   CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_NO_CROSSCHAN);
+    USER_COMMAND("uset",         neonserv_cmd_uset,      0, NULL,                   CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_NO_CROSSCHAN);
     USER_COMMAND("unban",        neonserv_cmd_unban,     1, "#channel_canban",      CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
     USER_COMMAND("unbanall",     neonserv_cmd_unbanall,  0, "#channel_canban",      CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
     USER_COMMAND("unbanme",      neonserv_cmd_unbanme,   0, "#channel_canban",      CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
@@ -118,7 +118,7 @@ void register_commands() {
     USER_COMMAND("inviteme",     neonserv_cmd_inviteme,  0, "#channel_getinvite",   CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
     USER_COMMAND("help",         neonserv_cmd_help,      0, NULL,                   0);
     USER_COMMAND("events",       neonserv_cmd_events,    0, "1",                    CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH);
-    USER_COMMAND("info",         neonserv_cmd_info,      0, NULL,                   CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN);
+    USER_COMMAND("info",         neonserv_cmd_info,      0, NULL,                   CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_NO_CROSSCHAN);
     USER_COMMAND("extscript",    neonserv_cmd_extscript, 0, NULL,                   CMDFLAG_EMPTY_ARGS | CMDFLAG_CHAN_PARAM);
     USER_COMMAND("nicklist",     neonserv_cmd_nicklist,  0, "1",                    CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH);
     #undef USER_COMMAND
index 629435d9a672e2f64e359bd9164fe2fbdd7d0265..5ece7b0839c8a2e7ab40642105b72dfbbcaf97de 100644 (file)
@@ -391,7 +391,7 @@ static void handle_command_async(struct ClientSocket *client, struct UserNode *u
         reply(tmp_text_client, user, "MODCMD_AUTH_REQUIRED");
         return;
     }
-    if(chan && sent_chan != chan && !isUserOnChan(user, chan)) {
+    if(chan && sent_chan != chan && (BIND_FLAGS(cbind) & CMDFLAG_NO_CROSSCHAN) && !isUserOnChan(user, chan)) {
         char user_in_chan = 0;
         if((user->flags & USERFLAG_ISAUTHED)) {
             //maybe there's another user authed to user->auth on the channel...
index 38e3be18124c87f665568c0c971da618831dcc1f..7465254d0615cd3dd457ad0579789384c9e72c61 100644 (file)
@@ -35,6 +35,7 @@
 #define CMDFLAG_TEMPONARY_BIND          0x1000
 #define CMDFLAG_FUNCMD                  0x2000
 #define CMDFLAG_ESCAPE_ARGS             0x4000
+#define CMDFLAG_NO_CROSSCHAN            0x8000
 
 struct ClientSocket;
 struct UserNode;