Re: [Openvpn-devel] [PATCH 5/7] wintun: add support for --dev-node

2019-12-20 Thread Lev Stipakov
Built, tested - works as expected. Probably the first time I ran two VPN
tunnels with OpenVPN-GUI.

The code has an assumption, however, that "windows-driver" power over
"dev-node" -
if --dev-node is "OpenVPNWinTun" (for example) and "windows-driver" is not
specified, we bail out.

I would add something like "if you want to use this device, add
--windows-driver wintun" (and similar for tap)
to the error message - I think it is good to tell user how to proceed in
case of error(s).

Acked-by: Lev Stipakov 



pe 20. jouluk. 2019 klo 0.40 Simon Rozman (si...@rozman.si) kirjoitti:

> Signed-off-by: Simon Rozman 
> ---
>  src/openvpn/tun.c | 38 --
>  1 file changed, 20 insertions(+), 18 deletions(-)
>
> diff --git a/src/openvpn/tun.c b/src/openvpn/tun.c
> index 9dc9b3a2..8508b9c0 100644
> --- a/src/openvpn/tun.c
> +++ b/src/openvpn/tun.c
> @@ -6194,7 +6194,6 @@ static void
>  tun_open_device(struct tuntap *tt, const char *dev_node, const char
> **device_guid)
>  {
>  struct gc_arena gc = gc_new();
> -char tuntap_device_path[256];
>  const struct tap_reg* tap_reg = get_tap_reg(&gc);
>  const struct panel_reg* panel_reg = get_panel_reg(&gc);
>  const struct device_instance_id_interface*
> device_instance_id_interface = get_device_instance_id_interface(&gc);
> @@ -6207,31 +6206,34 @@ tun_open_device(struct tuntap *tt, const char
> *dev_node, const char **device_gui
>   */
>  if (dev_node)
>  {
> +bool is_picked_device_wintun = false;
> +
>  /* Get the device GUID for the device specified with --dev-node.
> */
> -*device_guid = get_device_guid(dev_node, actual_buffer,
> sizeof(actual_buffer), NULL, tap_reg, panel_reg, &gc);
> +*device_guid = get_device_guid(dev_node, actual_buffer,
> sizeof(actual_buffer), &is_picked_device_wintun, tap_reg, panel_reg, &gc);
>
>  if (!*device_guid)
>  {
> -msg(M_FATAL, "TAP-Windows adapter '%s' not found", dev_node);
> +msg(M_FATAL, "Adapter '%s' not found", dev_node);
>  }
>
> -/* Open Windows TAP-Windows adapter */
> -openvpn_snprintf(tuntap_device_path, sizeof(tuntap_device_path),
> "%s%s%s",
> - USERMODEDEVICEDIR,
> - *device_guid,
> - TAP_WIN_SUFFIX);
> -
> -tt->hand = CreateFile(tuntap_device_path,
> -  GENERIC_READ | GENERIC_WRITE,
> -  0,/* was: FILE_SHARE_READ */
> -  0,
> -  OPEN_EXISTING,
> -  FILE_ATTRIBUTE_SYSTEM |
> FILE_FLAG_OVERLAPPED,
> -  0);
> +if (tt->wintun)
> +{
> +if (!is_picked_device_wintun)
> +{
> +msg(M_FATAL, "Adapter '%s' is TAP-Windows, Wintun
> expected", dev_node);
> +}
> +}
> +else
> +{
> +if (is_picked_device_wintun)
> +{
> +msg(M_FATAL, "Adapter '%s' is Wintun, TAP-Windows
> expected", dev_node);
> +}
> +}
>
> -if (tt->hand == INVALID_HANDLE_VALUE)
> +if (!tun_try_open_device(tt, *device_guid,
> device_instance_id_interface))
>  {
> -msg(M_ERR, "CreateFile failed on TAP device: %s",
> tuntap_device_path);
> +msg(M_FATAL, "Failed to open %s adapter: %s", tt->wintun ?
> "Wintun" : "TAP-Windows", dev_node);
>  }
>  }
>  else
> --
> 2.24.1.windows.2
>
>
>
> ___
> Openvpn-devel mailing list
> Openvpn-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/openvpn-devel
>


-- 
-Lev
___
Openvpn-devel mailing list
Openvpn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openvpn-devel


[Openvpn-devel] [PATCH 5/7] wintun: add support for --dev-node

2019-12-19 Thread Simon Rozman
Signed-off-by: Simon Rozman 
---
 src/openvpn/tun.c | 38 --
 1 file changed, 20 insertions(+), 18 deletions(-)

diff --git a/src/openvpn/tun.c b/src/openvpn/tun.c
index 9dc9b3a2..8508b9c0 100644
--- a/src/openvpn/tun.c
+++ b/src/openvpn/tun.c
@@ -6194,7 +6194,6 @@ static void
 tun_open_device(struct tuntap *tt, const char *dev_node, const char 
**device_guid)
 {
 struct gc_arena gc = gc_new();
-char tuntap_device_path[256];
 const struct tap_reg* tap_reg = get_tap_reg(&gc);
 const struct panel_reg* panel_reg = get_panel_reg(&gc);
 const struct device_instance_id_interface* device_instance_id_interface = 
get_device_instance_id_interface(&gc);
@@ -6207,31 +6206,34 @@ tun_open_device(struct tuntap *tt, const char 
*dev_node, const char **device_gui
  */
 if (dev_node)
 {
+bool is_picked_device_wintun = false;
+
 /* Get the device GUID for the device specified with --dev-node. */
-*device_guid = get_device_guid(dev_node, actual_buffer, 
sizeof(actual_buffer), NULL, tap_reg, panel_reg, &gc);
+*device_guid = get_device_guid(dev_node, actual_buffer, 
sizeof(actual_buffer), &is_picked_device_wintun, tap_reg, panel_reg, &gc);
 
 if (!*device_guid)
 {
-msg(M_FATAL, "TAP-Windows adapter '%s' not found", dev_node);
+msg(M_FATAL, "Adapter '%s' not found", dev_node);
 }
 
-/* Open Windows TAP-Windows adapter */
-openvpn_snprintf(tuntap_device_path, sizeof(tuntap_device_path), 
"%s%s%s",
- USERMODEDEVICEDIR,
- *device_guid,
- TAP_WIN_SUFFIX);
-
-tt->hand = CreateFile(tuntap_device_path,
-  GENERIC_READ | GENERIC_WRITE,
-  0,/* was: FILE_SHARE_READ */
-  0,
-  OPEN_EXISTING,
-  FILE_ATTRIBUTE_SYSTEM | FILE_FLAG_OVERLAPPED,
-  0);
+if (tt->wintun)
+{
+if (!is_picked_device_wintun)
+{
+msg(M_FATAL, "Adapter '%s' is TAP-Windows, Wintun expected", 
dev_node);
+}
+}
+else
+{
+if (is_picked_device_wintun)
+{
+msg(M_FATAL, "Adapter '%s' is Wintun, TAP-Windows expected", 
dev_node);
+}
+}
 
-if (tt->hand == INVALID_HANDLE_VALUE)
+if (!tun_try_open_device(tt, *device_guid, 
device_instance_id_interface))
 {
-msg(M_ERR, "CreateFile failed on TAP device: %s", 
tuntap_device_path);
+msg(M_FATAL, "Failed to open %s adapter: %s", tt->wintun ? 
"Wintun" : "TAP-Windows", dev_node);
 }
 }
 else
-- 
2.24.1.windows.2



___
Openvpn-devel mailing list
Openvpn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openvpn-devel