-/* main.c - srvx
+/* main.c - 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
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
#include "modcmd.h"
#include "saxdb.h"
#include "sendmail.h"
+#include "spamserv.h"
+#include "shun.h"
#include "timeq.h"
#include "chanserv.h"
{ "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_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_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_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_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 }
};
{
struct uplinkNode *uplink = malloc(sizeof(struct uplinkNode));
struct record_data *rd = data;
+ struct addrinfo hints, *ai;
int enabled = 1;
char *str;
- struct sockaddr_in *sin;
- unsigned long addr;
if(!uplink)
{
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;
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);
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
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;
- 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;
modcmd_init();
saxdb_init();
gline_init();
+ shun_init();
sendmail_init();
helpfile_init();
conf_globals(); /* initializes the core services */