]> jfr.im git - irc/evilnet/x3.git/blobdiff - src/opserv.c
adding bantimeout to help
[irc/evilnet/x3.git] / src / opserv.c
index 1acde4c27157f30dd02f731423c745c3c914cf74..626afda39c3a5d32458eee19ce22750579ac16eb 100644 (file)
@@ -76,6 +76,7 @@
 #define KEY_BLOCK_GLINE_DURATION "block_gline_duration"
 #define KEY_ISSUER "issuer"
 #define KEY_ISSUED "issued"
+#define KEY_ADMIN_LEVEL "admin_level"
 
 #define IDENT_FORMAT           "%s [%s@%s/%s]"
 #define IDENT_DATA(user)       user->nick, user->ident, user->hostname, inet_ntoa(user->ip)
@@ -203,7 +204,8 @@ static const struct message_entry msgtab[] = {
     { "OSMSG_USER_SEARCH_RESULTS", "The following users were found:" },
     { "OSMSG_USER_SEARCH_HEADER", "Nick                  User@Host   (Account)" },
     { "OSMSG_USER_SEARCH_BAR",    "-------------------------------------------" },
-    { "OSMSG_USER_SEARCH_COUNT",  "------------ Found %4u matches -----------" },
+    { "OSMSG_USER_SEARCH_COUNT",  "There were %4u matches" },
+    { "OSMSG_USER_SEARCH_COUNT_BAR",  "------------ Found %4u matches -----------" },
     { "OSMSG_CHANNEL_SEARCH_RESULTS", "The following channels were found:" },
     { "OSMSG_GLINE_SEARCH_RESULTS", "The following glines were found:" },
     { "OSMSG_LOG_SEARCH_RESULTS", "The following log entries were found:" },
@@ -271,7 +273,7 @@ static const struct message_entry msgtab[] = {
     { NULL, NULL }
 };
 
-#define OPSERV_SYNTAX() svccmd_send_help(user, opserv, cmd)
+#define OPSERV_SYNTAX() svccmd_send_help_brief(user, opserv, cmd)
 
 typedef int (*discrim_search_func)(struct userNode *match, void *extra);
 
@@ -303,6 +305,7 @@ static struct {
     unsigned long purge_lock_delay;
     unsigned long join_flood_moderate;
     unsigned long join_flood_moderate_threshold;
+    unsigned long admin_level;
 } opserv_conf;
 
 struct trusted_host {
@@ -1956,9 +1959,10 @@ int
 opserv_bad_channel(const char *name)
 {
     unsigned int found;
+    int present;
 
-    dict_find(opserv_exempt_channels, name, &found);
-    if (found)
+    dict_find(opserv_exempt_channels, name, &present);
+    if (present)
         return 0;
 
     if (gline_find(name))
@@ -2737,9 +2741,14 @@ opserv_add_user_alert(struct userNode *req, const char *name, opserv_alert_react
         alert->discrim->reason = strdup(name);
     alert->reaction = reaction;
     dict_insert(opserv_user_alerts, name_dup, alert);
-    if (alert->discrim->channel)
+    /* Stick the alert into the appropriate additional alert dict(s).
+     * For channel alerts, we only use channels and min_channels;
+     * max_channels would have to be checked on /part, which we do not
+     * yet do, and which seems of questionable value.
+     */
+    if (alert->discrim->channel || alert->discrim->min_channels)
         dict_insert(opserv_channel_alerts, name_dup, alert);
-    else if (alert->discrim->mask_nick)
+    if (alert->discrim->mask_nick)
         dict_insert(opserv_nick_based_alerts, name_dup, alert);
     return alert;
 }
@@ -3568,7 +3577,7 @@ static MODCMD_FUNC(cmd_trace)
 
     if (action == trace_print_func)
     {
-       reply("OSMSG_USER_SEARCH_RESULTS");
+        reply("OSMSG_USER_SEARCH_RESULTS");
         reply("OSMSG_USER_SEARCH_BAR");
         reply("OSMSG_USER_SEARCH_HEADER");
         reply("OSMSG_USER_SEARCH_BAR");
@@ -3590,9 +3599,14 @@ static MODCMD_FUNC(cmd_trace)
         dict_foreach(das.dict, opserv_show_hostinfo, &das);
 
     if (matches)
-       reply("OSMSG_USER_SEARCH_COUNT", matches);
+    {
+        if(action == trace_print_func)
+           reply("OSMSG_USER_SEARCH_COUNT_BAR", matches);
+        else
+            reply("OSMSG_USER_SEARCH_COUNT", matches);
+    }
     else
-       reply("MSG_NO_MATCHES");
+           reply("MSG_NO_MATCHES");
 
     if (das.discrim->channel)
         UnlockChannel(das.discrim->channel);
@@ -4143,6 +4157,10 @@ opserv_conf_read(void)
     } else {
         opserv_conf.staff_auth_channel = NULL;
     }
+
+    str = database_get_data(conf_node, KEY_ADMIN_LEVEL, RECDB_QSTRING);
+    opserv_conf.admin_level = str ? strtoul(str, NULL, 0): 800;
+
     str = database_get_data(conf_node, KEY_UNTRUSTED_MAX, RECDB_QSTRING);
     opserv_conf.untrusted_max = str ? strtoul(str, NULL, 0) : 5;
     str = database_get_data(conf_node, KEY_PURGE_LOCK_DELAY, RECDB_QSTRING);
@@ -4181,6 +4199,13 @@ opserv_conf_read(void)
        dict_foreach(child, set_policer_param, pp);
 }
 
+/* lame way to export opserv_conf value to nickserv.c ... */
+unsigned int 
+opserv_conf_admin_level()
+{
+    return(opserv_conf.admin_level);
+}
+
 static void
 opserv_db_init(void) {
     /* set up opserv_trusted_hosts dict */