]> jfr.im git - solanum.git/blobdiff - authd/reslib.c
authd: add provider data getter/setter functions
[solanum.git] / authd / reslib.c
index 3b669601b6c6eeccf1fd9ca189177139c734e10d..b3b43726277934bca66fee76889d8ad62907bb75 100644 (file)
  * - Dianora
  */
 
+#include <rb_lib.h>
+
+#ifndef _WIN32
+
+#include <netdb.h>
+
+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"
 #define DNS_LABELTYPE_BITSTRING 0x41
 #define DNS_MAXLINE 128
 
-/* $Id: reslib.c 1695 2006-06-27 15:11:23Z jilles $ */
-/* from Hybrid Id: reslib.c 177 2005-10-22 09:05:05Z michael $ */
-
 struct rb_sockaddr_storage irc_nsaddr_list[IRCD_MAXNS];
 int irc_nscount = 0;
 char irc_domain[IRCD_RES_HOSTLEN + 1];
@@ -115,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";
@@ -142,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
@@ -213,6 +252,7 @@ parse_resvconf(void)
   fclose(file);
   return 0;
 }
+#endif
 
 /* add_nameserver()
  *
@@ -224,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)
@@ -1114,9 +1154,9 @@ irc_dn_find(const unsigned char *domain, const unsigned char *msg,
 }
 
 /*
- *  *  Thinking in noninternationalized USASCII (per the DNS spec),
- *   *  convert this character to lower case if it's upper case.
- *    */
+ *  Thinking in noninternationalized USASCII (per the DNS spec),
+ *  convert this character to lower case if it's upper case.
+ */
 static int
 mklower(int ch)
 {