]> jfr.im git - irc/evilnet/x3.git/blobdiff - src/main.c
LOC fix for non-ldap LOC where ldap is available
[irc/evilnet/x3.git] / src / main.c
index 155d20b83a85635df98266d97eb5e2eddc05214d..920ef58148d330a0b574df316aaf00761765f280 100644 (file)
@@ -1,11 +1,11 @@
-/* main.c - srvx
+/* main.c - X3
  * Copyright 2000-2004 srvx Development Team
  *
  * This file is part of x3.
  *
  * Copyright 2000-2004 srvx Development Team
  *
  * This file is part of x3.
  *
- * srvx is free software; you can redistribute it and/or modify
+ * x3 is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * the Free Software Foundation; either version 3 of the License, or
  * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
  * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
@@ -26,6 +26,8 @@
 #include "modcmd.h"
 #include "saxdb.h"
 #include "sendmail.h"
 #include "modcmd.h"
 #include "saxdb.h"
 #include "sendmail.h"
+#include "spamserv.h"
+#include "shun.h"
 #include "timeq.h"
 
 #include "chanserv.h"
 #include "timeq.h"
 
 #include "chanserv.h"
@@ -77,6 +79,7 @@ static const struct message_entry msgtab[] = {
     { "MSG_ON", "On" },
     { "MSG_OFF", "Off" },
     { "MSG_NEVER", "Never" },
     { "MSG_ON", "On" },
     { "MSG_OFF", "Off" },
     { "MSG_NEVER", "Never" },
+    { "MSG_BAR", "----------------------------------------" },
     { "MSG_SERVICE_IMMUNE", "$b%s$b may not be kicked, killed, banned, or deopped." },
     { "MSG_SERVICE_PRIVILEGED", "$b%s$b is a privileged service." },
     { "MSG_NOT_A_SERVICE", "$b%s$b is not a service bot." },
     { "MSG_SERVICE_IMMUNE", "$b%s$b may not be kicked, killed, banned, or deopped." },
     { "MSG_SERVICE_PRIVILEGED", "$b%s$b is a privileged service." },
     { "MSG_NOT_A_SERVICE", "$b%s$b is not a service bot." },
@@ -94,6 +97,7 @@ static const struct message_entry msgtab[] = {
     { "MSG_MODULE_UNKNOWN", "No module has been registered with name $b%s$b." },
     { "MSG_INVALID_MODES", "$b%s$b is an invalid set of channel modes." },
     { "MSG_INVALID_GLINE", "Invalid G-line '%s'." },
     { "MSG_MODULE_UNKNOWN", "No module has been registered with name $b%s$b." },
     { "MSG_INVALID_MODES", "$b%s$b is an invalid set of channel modes." },
     { "MSG_INVALID_GLINE", "Invalid G-line '%s'." },
+    { "MSG_INVALID_SHUN", "Invalid Shun '%s'." },
     { "MSG_INVALID_DURATION", "Invalid time span '%s'." },
     { "MSG_NOT_TARGET_NAME", "You must provide the name of a channel or user." },
     { "MSG_NOT_CHANNEL_NAME", "The channel name you specified is not a valid channel name." },
     { "MSG_INVALID_DURATION", "Invalid time span '%s'." },
     { "MSG_NOT_TARGET_NAME", "You must provide the name of a channel or user." },
     { "MSG_NOT_CHANNEL_NAME", "The channel name you specified is not a valid channel name." },
@@ -107,7 +111,7 @@ static const struct message_entry msgtab[] = {
     { "MSG_STUPID_ACCESS_CHANGE", "Please ask someone $belse$b to demote you." },
     { "MSG_NO_SEARCH_ACCESS", "You do not have enough access to search based on $b%s$b." },
     { "MSG_INVALID_CRITERIA", "$b%s$b is an invalid search criteria." },
     { "MSG_STUPID_ACCESS_CHANGE", "Please ask someone $belse$b to demote you." },
     { "MSG_NO_SEARCH_ACCESS", "You do not have enough access to search based on $b%s$b." },
     { "MSG_INVALID_CRITERIA", "$b%s$b is an invalid search criteria." },
-    { "MSG_MATCH_COUNT", "Found $b%u$b matches." },
+    { "MSG_MATCH_COUNT", "-----------Found $b%3u$b Matches------------" },
     { "MSG_NO_MATCHES", "Nothing matched the criteria of your search." },
     { "MSG_TOPIC_UNKNOWN", "No help on that topic." },
     { "MSG_INVALID_BINARY", "$b%s$b is an invalid binary value." },
     { "MSG_NO_MATCHES", "Nothing matched the criteria of your search." },
     { "MSG_TOPIC_UNKNOWN", "No help on that topic." },
     { "MSG_INVALID_BINARY", "$b%s$b is an invalid binary value." },
@@ -117,20 +121,20 @@ static const struct message_entry msgtab[] = {
     { "MSG_DB_WRITE_ERROR", "Error while writing database %s." },
     { "MSG_DB_WROTE_DB", "Wrote database %s (in "FMT_TIME_T".%06lu seconds)." },
     { "MSG_DB_WROTE_ALL", "Wrote all databases (in "FMT_TIME_T".%06lu seconds)." },
     { "MSG_DB_WRITE_ERROR", "Error while writing database %s." },
     { "MSG_DB_WROTE_DB", "Wrote database %s (in "FMT_TIME_T".%06lu seconds)." },
     { "MSG_DB_WROTE_ALL", "Wrote all databases (in "FMT_TIME_T".%06lu seconds)." },
-    { "MSG_AND", "and" },
+    { "MSG_AND", "," },
     { "MSG_0_SECONDS", "0 seconds" },
     { "MSG_0_SECONDS", "0 seconds" },
-    { "MSG_YEAR", "year" },
-    { "MSG_YEARS", "years" },
-    { "MSG_WEEK", "week" },
-    { "MSG_WEEKS", "weeks" },
-    { "MSG_DAY", "day" },
-    { "MSG_DAYS", "days" },
-    { "MSG_HOUR", "hour" },
-    { "MSG_HOURS", "hours" },
-    { "MSG_MINUTE", "minute" },
-    { "MSG_MINUTES", "minutes" },
-    { "MSG_SECOND", "second" },
-    { "MSG_SECONDS", "seconds" },
+    { "MSG_YEAR", "y" },
+    { "MSG_YEARS", "y" },
+    { "MSG_WEEK", "w" },
+    { "MSG_WEEKS", "w" },
+    { "MSG_DAY", "d" },
+    { "MSG_DAYS", "d" },
+    { "MSG_HOUR", "h" },
+    { "MSG_HOURS", "h" },
+    { "MSG_MINUTE", "m" },
+    { "MSG_MINUTES", "m" },
+    { "MSG_SECOND", "s" },
+    { "MSG_SECONDS", "s" },
     { NULL, NULL }
 };
 
     { NULL, NULL }
 };
 
@@ -141,10 +145,9 @@ uplink_insert(const char *key, void *data, UNUSED_ARG(void *extra))
 {
     struct uplinkNode *uplink = malloc(sizeof(struct uplinkNode));
     struct record_data *rd = data;
 {
     struct uplinkNode *uplink = malloc(sizeof(struct uplinkNode));
     struct record_data *rd = data;
+    struct addrinfo hints, *ai;
     int enabled = 1;
     char *str;
     int enabled = 1;
     char *str;
-    struct sockaddr_in *sin;
-    unsigned long addr;
 
     if(!uplink)
     {
 
     if(!uplink)
     {
@@ -174,15 +177,17 @@ uplink_insert(const char *key, void *data, UNUSED_ARG(void *extra))
     uplink->tries = 0;
 
     str = database_get_data(rd->d.object, "bind_address", RECDB_QSTRING);
     uplink->tries = 0;
 
     str = database_get_data(rd->d.object, "bind_address", RECDB_QSTRING);
-    uplink->bind_addr_len = sizeof(*sin);
-    if (str && getipbyname(str, &addr)) 
+    memset(&hints, 0, sizeof(hints));
+    hints.ai_flags = AI_PASSIVE;
+    hints.ai_socktype = SOCK_STREAM;
+    if (!getaddrinfo(str, NULL, &hints, &ai))
     {
     {
-       sin = calloc(1, uplink->bind_addr_len);
-       sin->sin_family = AF_INET;
-       sin->sin_addr.s_addr = addr;
-       uplink->bind_addr = sin;
-    } 
-    else 
+        uplink->bind_addr_len = ai->ai_addrlen;
+        uplink->bind_addr = calloc(1, ai->ai_addrlen);
+        memcpy(uplink->bind_addr, ai->ai_addr, ai->ai_addrlen);
+        freeaddrinfo(ai);
+    }
+    else
     {
        uplink->bind_addr = NULL;
        uplink->bind_addr_len = 0;
     {
        uplink->bind_addr = NULL;
        uplink->bind_addr_len = 0;
@@ -517,21 +522,6 @@ conf_globals(void)
     const char *info;
     dict_t dict;
 
     const char *info;
     dict_t dict;
 
-    info = conf_get_data("services/global/nick", RECDB_QSTRING);
-    if (info && (info[0] == '.'))
-        info = NULL;
-    init_global(info);
-
-    info = conf_get_data("services/nickserv/nick", RECDB_QSTRING);
-    if (info && (info[0] == '.'))
-        info = NULL;
-    init_nickserv(info);
-
-    info = conf_get_data("services/chanserv/nick", RECDB_QSTRING);
-    if (info && (info[0] == '.'))
-        info = NULL;
-    init_chanserv(info);
-
     god_policer_params = policer_params_new();
     if ((dict = conf_get_data("policers/commands-god", RECDB_OBJECT))) {
         dict_foreach(dict, set_policer_param, god_policer_params);
     god_policer_params = policer_params_new();
     if ((dict = conf_get_data("policers/commands-god", RECDB_OBJECT))) {
         dict_foreach(dict, set_policer_param, god_policer_params);
@@ -558,6 +548,26 @@ conf_globals(void)
     if (info && (info[0] == '.'))
         info = NULL;
     init_opserv(info);
     if (info && (info[0] == '.'))
         info = NULL;
     init_opserv(info);
+
+    info = conf_get_data("services/global/nick", RECDB_QSTRING);
+    if (info && (info[0] == '.'))
+        info = NULL;
+    init_global(info);
+
+    info = conf_get_data("services/nickserv/nick", RECDB_QSTRING);
+    if (info && (info[0] == '.'))
+        info = NULL;
+    init_nickserv(info);
+
+    info = conf_get_data("services/chanserv/nick", RECDB_QSTRING);
+    if (info && (info[0] == '.'))
+        info = NULL;
+    init_chanserv(info);
+
+    info = conf_get_data("services/spamserv/nick", RECDB_QSTRING);
+    if (info && (info[0] == '.'))
+        info = NULL;
+    init_spamserv(info);
 }
 
 #ifdef HAVE_SYS_RESOURCE_H
 }
 
 #ifdef HAVE_SYS_RESOURCE_H
@@ -565,12 +575,13 @@ conf_globals(void)
 static int
 set_item_rlimit(const char *name, void *data, void *extra)
 {
 static int
 set_item_rlimit(const char *name, void *data, void *extra)
 {
-    int rsrc, found;
+    long rsrc;
+    int found;
     struct record_data *rd = data;
     struct rlimit rlim;
     const char *str;
 
     struct record_data *rd = data;
     struct rlimit rlim;
     const char *str;
 
-    rsrc = (int)dict_find(extra, name, &found);
+    rsrc = (long)dict_find(extra, name, &found);
     if (!found) {
         log_module(MAIN_LOG, LOG_ERROR, "Invalid rlimit \"%s\" in rlimits section.", name);
         return 0;
     if (!found) {
         log_module(MAIN_LOG, LOG_ERROR, "Invalid rlimit \"%s\" in rlimits section.", name);
         return 0;
@@ -664,7 +675,7 @@ void license() {
     printf("\n"
            "This program is free software; you can redistribute it and/or modify\n"
            "it under the terms of the GNU General Public License as published by\n"
     printf("\n"
            "This program is free software; you can redistribute it and/or modify\n"
            "it under the terms of the GNU General Public License as published by\n"
-           "the Free Software Foundation; either version 2 of the License, or\n"
+           "the Free Software Foundation; either version 3 of the License, or\n"
            "(at your option) any later version.\n"
            "\n"
            "This program is distributed in the hope that it will be useful,\n"
            "(at your option) any later version.\n"
            "\n"
            "This program is distributed in the hope that it will be useful,\n"
@@ -829,6 +840,7 @@ int main(int argc, char *argv[])
     modcmd_init();
     saxdb_init();
     gline_init();
     modcmd_init();
     saxdb_init();
     gline_init();
+    shun_init();
     sendmail_init();
     helpfile_init();
     conf_globals(); /* initializes the core services */
     sendmail_init();
     helpfile_init();
     conf_globals(); /* initializes the core services */