tun.c: enable using wintun driver under SYSTEM

Commit 6d19775a46 has removed SYSTEM elevation hack,
but introduced regression - inability to use wintun without
interactive service.

Proceed with ring buffers registration even if iservice is unavailable
and display relevant error message.

Trac: #1318

Signed-off-by: Lev Stipakov <lev@openvpn.net>
Acked-by: Selva Nair <selva.nair@gmail.com>
Message-Id: <20200819070746.197-1-lstipakov@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg20780.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
This commit is contained in:
Lev Stipakov 2020-08-19 10:07:46 +03:00 committed by Gert Doering
parent 2da29362cc
commit ed47c097db

View file

@ -6158,12 +6158,32 @@ wintun_register_ring_buffer(struct tuntap *tt, const char *device_guid)
}
else
{
msg(M_FATAL, "ERROR: Wintun requires SYSTEM privileges and therefore "
"should be used with interactive service. If you want to "
"use openvpn from command line, you need to do SYSTEM "
"elevation yourself (for example with psexec).");
}
if (!register_ring_buffers(tt->hand,
tt->wintun_send_ring,
tt->wintun_receive_ring,
tt->rw_handle.read,
tt->rw_handle.write))
{
switch (GetLastError())
{
case ERROR_ACCESS_DENIED:
msg(M_FATAL, "ERROR: Wintun requires SYSTEM privileges and therefore "
"should be used with interactive service. If you want to "
"use openvpn from command line, you need to do SYSTEM "
"elevation yourself (for example with psexec).");
break;
case ERROR_ALREADY_INITIALIZED:
msg(M_NONFATAL, "Adapter %s is already in use", device_guid);
break;
default:
msg(M_NONFATAL | M_ERRNO, "Failed to register ring buffers");
}
ret = false;
}
}
return ret;
}