From 5b2d9e2f8788a38521ed9fe6fbf12cba21b2bcef Mon Sep 17 00:00:00 2001 From: Waqas Hussain Date: Sat, 31 Oct 2009 04:58:23 +0500 Subject: util.windows: Initial commit. Adds support for querying the windows DNS API for nameservers. --- util-src/windows.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 util-src/windows.c (limited to 'util-src/windows.c') diff --git a/util-src/windows.c b/util-src/windows.c new file mode 100644 index 00000000..7fb96312 --- /dev/null +++ b/util-src/windows.c @@ -0,0 +1,45 @@ + +#include +#include +#include + +#include "lua.h" +#include "lauxlib.h" + +static int Lget_nameservers(lua_State *L) { + char stack_buffer[1024]; // stack allocated buffer + IP4_ARRAY* ips = (IP4_ARRAY*) stack_buffer; + DWORD len = sizeof(stack_buffer); + DNS_STATUS status; + + status = DnsQueryConfig(DnsConfigDnsServerList, FALSE, NULL, NULL, ips, &len); + if (status == 0) { + DWORD i; + lua_createtable(L, ips->AddrCount, 0); + for (i = 0; i < ips->AddrCount; i++) { + DWORD ip = ips->AddrArray[i]; + char ip_str[16] = ""; + sprintf_s(ip_str, sizeof(ip_str), "%d.%d.%d.%d", (ip >> 0) & 255, (ip >> 8) & 255, (ip >> 16) & 255, (ip >> 24) & 255); + lua_pushstring(L, ip_str); + lua_rawseti(L, -2, i+1); + } + return 1; + } else { + luaL_error(L, "DnsQueryConfig returned %d", status); + return 0; // unreachable, but prevents a compiler warning + } +} + +static const luaL_Reg Reg[] = +{ + { "get_nameservers", Lget_nameservers }, + { NULL, NULL } +}; + +LUALIB_API int luaopen_util_windows(lua_State *L) { + luaL_register(L, "windows", Reg); + lua_pushliteral(L, "version"); /** version */ + lua_pushliteral(L, "-3.14"); + lua_settable(L,-3); + return 1; +} -- cgit v1.2.3