X-Git-Url: https://jfr.im/git/solanum.git/blobdiff_plain/394b8dde17afc174fd1432897f2e368516dd8b41..74909c9ada474bda62473cc991a989335d1c5f70:/authd/reslib.c diff --git a/authd/reslib.c b/authd/reslib.c index 6f0180db..b3b43726 100644 --- a/authd/reslib.c +++ b/authd/reslib.c @@ -76,9 +76,27 @@ * - Dianora */ +#include + +#ifndef _WIN32 + +#include + +typedef struct addrinfo rb_addrinfo; + +#else +#include "getaddrinfo.h" +#include "getnameinfo.h" +#define getaddrinfo rb_getaddrinfo +#define getnameinfo rb_getnameinfo +#define freeaddrinfo rb_freeaddrinfo + +extern const char * get_windows_nameservers(void); +typedef struct rb_addrinfo rb_addrinfo; +#endif + #include "stdinc.h" #include "ircd_defs.h" -#include "common.h" #include "ircd.h" #include "res.h" #include "reslib.h" @@ -112,7 +130,12 @@ static const char digitvalue[256] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*256*/ }; +#ifndef _WIN32 static int parse_resvconf(void); +#else +static void parse_windows_resolvers(void); +#endif + static void add_nameserver(const char *); static const char digits[] = "0123456789"; @@ -139,12 +162,31 @@ int irc_res_init(void) { irc_nscount = 0; +#ifndef _WIN32 parse_resvconf(); +#else + parse_windows_resolvers(); +#endif if (irc_nscount == 0) add_nameserver("127.0.0.1"); return 0; } +#ifdef _WIN32 +static void +parse_windows_resolvers(void) +{ + const char *ns = get_windows_nameservers(); + char *server; + char *p; + char *buf = rb_strdup(ns); + for(server = rb_strtok_r(buf, " ", &p); server != NULL;server = rb_strtok_r(NULL, " ", &p)) + { + add_nameserver(server); + } + rb_free(buf); +} +#else /* parse_resvconf() * * inputs - NONE @@ -210,6 +252,7 @@ parse_resvconf(void) fclose(file); return 0; } +#endif /* add_nameserver() * @@ -221,7 +264,7 @@ parse_resvconf(void) static void add_nameserver(const char *arg) { - struct addrinfo hints, *res; + rb_addrinfo hints, *res; /* Done max number of nameservers? */ if (irc_nscount >= IRCD_MAXNS)