X-Git-Url: https://jfr.im/git/irc/evilnet/x3.git/blobdiff_plain/de9510bcaba3fc0377e09259f8b49921c421d269..ec311f39148004a0a43ce45371bd02c61f19f886:/src/main.c diff --git a/src/main.c b/src/main.c index bc378c1..e272957 100644 --- a/src/main.c +++ b/src/main.c @@ -26,6 +26,7 @@ #include "modcmd.h" #include "saxdb.h" #include "sendmail.h" +#include "shun.h" #include "timeq.h" #include "chanserv.h" @@ -95,6 +96,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_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." }, @@ -142,10 +144,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 addrinfo hints, *ai; int enabled = 1; char *str; - struct sockaddr_in *sin; - unsigned long addr; if(!uplink) { @@ -175,15 +176,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->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; @@ -566,12 +569,13 @@ conf_globals(void) 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; @@ -830,6 +834,7 @@ int main(int argc, char *argv[]) modcmd_init(); saxdb_init(); gline_init(); + shun_init(); sendmail_init(); helpfile_init(); conf_globals(); /* initializes the core services */