#43: Basic windows support operational

This commit is contained in:
Erik Ekman 2009-01-25 20:39:44 +00:00 committed by Erik Ekman
parent 10fd388bb7
commit b3e8cf0554
3 changed files with 35 additions and 13 deletions

View file

@ -7,6 +7,20 @@ iodine - http://code.kryo.se/iodine
Extra README file for Win32 related stuff Extra README file for Win32 related stuff
== Running iodine on Windows:
1. Install the TAP32 driver
http://openvpn.net/index.php/downloads.html
choose OpenVPN 2.0.9 Windows Installer, when installing you can
select to install only the TAP driver.
2. Have one TAP32 interface installed
3. Name the interface "dns"
4. Run iodine/iodined as normal.
5. Enjoy!
== Building on Windows: == Building on Windows:
You need: You need:
@ -22,16 +36,15 @@ You need:
Then run "make cross-mingw" Then run "make cross-mingw"
Note that the binaries will not get a .exe suffix Note that the binaries will not get a .exe suffix
== Zlib download
You can get zlib for MinGW here (both for native and crosscompile): You can get zlib for MinGW here (both for native and crosscompile):
http://code.kryo.se/iodine/deps/zlib.zip http://code.kryo.se/iodine/deps/zlib.zip
Unzip it in your MinGW directory on Windows or in $ROOT/usr for Unzip it in your MinGW directory on Windows or in $ROOT/usr for
cross-compile. cross-compile.
== Running iodine on Windows:
Get the TAP32 driver here (choose OpenVPN 2.0.9 Windows Installer,
you can choose to get only the driver):
http://openvpn.net/index.php/downloads.html
== Results of crappy Win32 API:
The following fixable limitations apply: The following fixable limitations apply:
- The password is shown when entered - The password is shown when entered
- DNS server IP can not be fetched automatically - DNS server IP can not be fetched automatically
@ -44,3 +57,4 @@ The following (probably) un-fixable limitations apply:
- Priviligies cannot be dropped - Priviligies cannot be dropped
- chroot() cannot be used - chroot() cannot be used
- Detaching from terminal not possible - Detaching from terminal not possible

View file

@ -230,7 +230,11 @@ warn(const char *fmt, ...)
va_start(list, fmt); va_start(list, fmt);
if (fmt) fprintf(stderr, fmt, list); if (fmt) fprintf(stderr, fmt, list);
fprintf(stderr, "%s\n", strerror(errno)); if (errno == 0) {
fprintf(stderr, ": WSA error %d\n", WSAGetLastError());
} else {
fprintf(stderr, ": %s\n", strerror(errno));
}
va_end(list); va_end(list);
} }

View file

@ -424,27 +424,31 @@ tun_setip(const char *ip, int netbits)
r = DeviceIoControl(dev_handle, TAP_IOCTL_SET_MEDIA_STATUS, &status, r = DeviceIoControl(dev_handle, TAP_IOCTL_SET_MEDIA_STATUS, &status,
sizeof(status), &status, sizeof(status), &len, NULL); sizeof(status), &status, sizeof(status), &len, NULL);
if (!r) { if (!r) {
printf("Failed to enable interface\n");
return -1; return -1;
} }
ipdata[2] = (DWORD) net.s_addr;
if (inet_aton(ip, &addr)) { if (inet_aton(ip, &addr)) {
ipdata[0] = (DWORD) addr.s_addr; ipdata[0] = (DWORD) addr.s_addr; /* local ip addr */
ipdata[1] = ipdata[2] & ipdata[0]; /* Get network bits */ ipdata[1] = net.s_addr & ipdata[0]; /* network addr */
ipdata[2] = (DWORD) net.s_addr; /* netmask */
} else { } else {
return -1; return -1;
} }
/* Tell ip/networkaddr/netmask to device for arp use */ /* Tell ip/networkaddr/netmask to device for arp use */
r = DeviceIoControl(dev_handle, TAP_IOCTL_CONFIG_TUN, &ipdata, r = DeviceIoControl(dev_handle, TAP_IOCTL_CONFIG_TUN, &ipdata,
sizeof(ipdata), &ipdata, sizeof(ipdata), &len, NULL); sizeof(ipdata), &ipdata, sizeof(ipdata), &len, NULL);
if (!r) { if (!r) {
printf("Failed to set interface in TUN mode\n");
return -1; return -1;
} }
/* TODO use netsh to set ip address */ /* use netsh to set ip address */
cmdline[0] = 0; printf("Setting IP of interface '%s' to %s (can take a few seconds)...\n", if_name, ip);
return 0; snprintf(cmdline, sizeof(cmdline), "netsh interface ip set address \"%s\" static %s %s",
if_name, ip, inet_ntoa(net));
return system(cmdline);
#endif #endif
} }