diff --git a/CHANGELOG b/CHANGELOG index 1e8a099..f84b476 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -12,6 +12,7 @@ CHANGES: - Added syslog logging for iodined on version and login packets - Fixed segfault when encoding just one block, fixes #51. The normal code was never affected by this. + - Added win32 code to read DNS server from system, fixes #45. 2009-01-23: 0.5.0 "iPassed" - Fixed segfault in server when sending version reject. diff --git a/README-win32.txt b/README-win32.txt index a135433..38d3074 100644 --- a/README-win32.txt +++ b/README-win32.txt @@ -49,7 +49,6 @@ cross-compile. == Results of crappy Win32 API: The following fixable limitations apply: - The password is shown when entered -- DNS server IP can not be fetched automatically - Exactly one TAP32 interface must be installed - The TAP32 interface must be named "dns" and be version 0801 - Server cannot read packet destination address diff --git a/src/iodine.c b/src/iodine.c index 22a4402..1e6b94b 100644 --- a/src/iodine.c +++ b/src/iodine.c @@ -890,8 +890,9 @@ static char * get_resolvconf_addr() { static char addr[16]; - char buf[80]; char *rv; +#ifndef WINDOWS32 + char buf[80]; FILE *fp; rv = NULL; @@ -909,7 +910,26 @@ get_resolvconf_addr() } fclose(fp); +#else /* !WINDOWS32 */ + FIXED_INFO *fixed_info; + ULONG buflen; + DWORD ret; + rv = NULL; + fixed_info = malloc(sizeof(FIXED_INFO)); + buflen = sizeof(FIXED_INFO); + + if (GetNetworkParams(fixed_info, &buflen) == ERROR_BUFFER_OVERFLOW) { + /* official ugly api workaround */ + free(fixed_info); + fixed_info = malloc(buflen); + } + + ret = GetNetworkParams(fixed_info, &buflen); + if (ret == NO_ERROR) { + rv = fixed_info->DnsServerList.IpAddress.String; + } +#endif return rv; } diff --git a/src/osflags b/src/osflags index c88174a..ce423c6 100755 --- a/src/osflags +++ b/src/osflags @@ -14,7 +14,7 @@ link) echo '-lnetwork'; ;; windows32) - echo '-lws2_32'; + echo '-lws2_32 -liphlpapi'; ;; esac ;; diff --git a/src/windows.h b/src/windows.h index e859243..7f493f0 100644 --- a/src/windows.h +++ b/src/windows.h @@ -22,6 +22,7 @@ typedef unsigned int in_addr_t; #include #include #include +#include #define T_A DNS_TYPE_A #define T_NS DNS_TYPE_NS