]> 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 ece9c1bd8953758715f2f09441920aa79a2617e8..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,10 +97,11 @@ 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_INVALID_DURATION", "Invalid time span '%s'." },
     { "MSG_NOT_TARGET_NAME", "You must provide the name of a channel or user." },
-    { "MSG_NOT_CHANNEL_NAME", "You must provide a valid channel name." },
-    { "MSG_INVALID_CHANNEL", "You must provide the name of a channel that exists." },
+    { "MSG_NOT_CHANNEL_NAME", "The channel name you specified is not a valid channel name." },
+    { "MSG_INVALID_CHANNEL", "The channel name you specified does not exist." },
     { "MSG_CHANNEL_ABSENT", "You aren't currently in $b%s$b." },
     { "MSG_CHANNEL_USER_ABSENT", "$b%s$b isn't currently in $b%s$b." },
     { "MSG_MISSING_PARAMS", "$b%s$b requires more parameters." },
     { "MSG_CHANNEL_ABSENT", "You aren't currently in $b%s$b." },
     { "MSG_CHANNEL_USER_ABSENT", "$b%s$b isn't currently in $b%s$b." },
     { "MSG_MISSING_PARAMS", "$b%s$b requires more parameters." },
@@ -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 */