fixed possibility crash
[srvx.git] / src / opserv.c
index 2776e5a05e2d185058dbb0651f6a30f77ca1e9d9..d358d57637b4c59f10a51e819e99ee32115d2e6c 100644 (file)
@@ -297,6 +297,7 @@ static const struct message_entry msgtab[] = {
     { "OSMSG_DEVNULL_SET_M", "OverrideNoAmsg:   %s" },
     { "OSMSG_DEVNULL_SET_N", "MaxSendQ:         %s" },
     { "OSMSG_DEVNULL_SET_N_i", "MaxSendQ:         %i" },
+    { "OSMSG_DEVNULL_SET_OPME", "OpMe:             %s" },
     { "OSMSG_DEVNULL_SET_DONE", "Done." },
     { "OSMSG_DEVNULL_RENAMED", "Devnull class %s renamed to %s" },
     { "OSMSG_DEVNULL_SET_INVALID", "Invalid Option for setting %s" },
@@ -4093,6 +4094,8 @@ opserv_staff_alert(struct userNode *user, UNUSED_ARG(struct handle_info *old_han
         || user->uplink->burst
         || !user->handle_info)
         return;
+    else if (IsBot(user))
+        return;
     else if (user->handle_info->opserv_level)
         type = "OPER";
     else if (IsNetworkHelper(user))
@@ -4103,9 +4106,9 @@ opserv_staff_alert(struct userNode *user, UNUSED_ARG(struct handle_info *old_han
         return;
 
     if (irc_in_addr_is_valid(user->ip))
-        send_channel_notice(opserv_conf.staff_auth_channel, opserv, IDENT_FORMAT" authed to %s account %s", IDENT_DATA(user), type, user->handle_info->handle);
+        send_channel_message(opserv_conf.staff_auth_channel, opserv, IDENT_FORMAT" authed to %s account %s", IDENT_DATA(user), type, user->handle_info->handle);
     else
-        send_channel_notice(opserv_conf.staff_auth_channel, opserv, "%s [%s@%s] authed to %s account %s", user->nick, user->ident, user->hostname, type, user->handle_info->handle);
+        send_channel_message(opserv_conf.staff_auth_channel, opserv, "%s [%s@%s] authed to %s account %s", user->nick, user->ident, user->hostname, type, user->handle_info->handle);
 }
 
 static void
@@ -4271,7 +4274,7 @@ static MODCMD_FUNC(cmd_listdevnull)
         count++;
     }
     tbl.length = count+1;
-    tbl.width = 14;
+    tbl.width = 15;
     tbl.flags = 0;
     tbl.flags = TABLE_NO_FREE;
     tbl.contents = malloc(tbl.length * sizeof(tbl.contents[0]));
@@ -4290,6 +4293,7 @@ static MODCMD_FUNC(cmd_listdevnull)
     tbl.contents[0][11] = "+S";
     tbl.contents[0][12] = "+X";
     tbl.contents[0][13] = "MaxQ";
+    tbl.contents[0][14] = "OpMe";
     if(!count)
     {
         table_send(cmd->parent->bot, user->nick, 0, NULL, tbl);
@@ -4369,6 +4373,11 @@ static MODCMD_FUNC(cmd_listdevnull)
         } else {
             tbl.contents[ii][13] = off;
         }
+        if(DEVNULL_FLAGGED(th, MODE_OPME)) {
+            tbl.contents[ii][14] = on;
+        } else {
+            tbl.contents[ii][14] = off;
+        }
     }
     table_send(cmd->parent->bot, user->nick, 0, NULL, tbl);
     for(ii = 1; ii < tbl.length; ++ii)
@@ -4405,6 +4414,7 @@ static MODCMD_FUNC(cmd_listdevnull)
        send_message_type(4, user, opserv,"+k = ChanServ Mode (mode +k)");
     send_message_type(4, user, opserv,"+S = NetServ Mode (mode +S)");
     send_message_type(4, user, opserv,"+X = XtraOp Mode (mode +X)");
+    send_message_type(4, user, opserv,"OpMe = ChanServ opme command");
     return 1;
 }
 
@@ -4612,6 +4622,17 @@ static MODCMD_FUNC(cmd_setdevnull)
                   th->maxsendq = strtoul(argv[offset+3], NULL, 0);
                   reply("OSMSG_DEVNULL_SET_DONE");
                  }
+            } 
+            else if(!strcmp("OPME",argv[offset+2])) {
+                 if (!strcmp("OFF",argv[offset+3]) || !strcmp("0",argv[offset+3])) {
+                  DEVNULL_CLEAR_FLAG(th, MODE_OPME);
+                  reply("OSMSG_DEVNULL_SET_DONE");
+                 } else if (!strcmp("ON",argv[offset+3]) || !strcmp("1",argv[offset+3])) {
+                  DEVNULL_SET_FLAG(th, MODE_OPME);
+                  reply("OSMSG_DEVNULL_SET_DONE");
+                 } else {
+                  reply("OSMSG_DEVNULL_SET_INVALID", argv[offset+3]);
+                 }
             } else {
                  reply("OSMSG_DEVNULL_SET_INVALID", argv[offset+2]);
             }
@@ -4685,6 +4706,11 @@ static MODCMD_FUNC(cmd_setdevnull)
             } else {
                 reply("OSMSG_DEVNULL_SET_N", "off");
             }
+            if(DEVNULL_FLAGGED(th, MODE_OPME)) {
+                reply("OSMSG_DEVNULL_SET_OPME", "on");
+            } else {
+                reply("OSMSG_DEVNULL_SET_OPME", "off");
+            }
         }
     } else {
         reply("OSMSG_DEVNULL_NOTFOUND", argv[offset+1]);
@@ -4781,14 +4807,17 @@ static MODCMD_FUNC(cmd_simul)
 {
     struct userNode *target;
     char *line;
-    if(!(target=GetUserH(argv[1]))) {
-        reply("OSMSG_SVSNONICK", argv[1]);
-        return 0;
+    if(argc > 2) {
+               if(!(target=GetUserH(argv[1]))) {
+                       reply("OSMSG_SVSNONICK", argv[1]);
+                       return 0;
+               }
+               line = unsplit_string(argv + 2, argc - 2, NULL);
+               irc_simul(target,line);
+               reply("OSMSG_SIMUL",target->nick,line);
+               return 1;
     }
-    line = unsplit_string(argv + 2, argc - 2, NULL);
-    irc_simul(target,line);
-    reply("OSMSG_SIMUL",target->nick,line);
-    return 1;
+    return 0;
 }
 
 static MODCMD_FUNC(cmd_relay)