From patchwork Wed Sep 23 20:59:15 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kristof Provost via Openvpn-devel X-Patchwork-Id: 1476 Return-Path: Delivered-To: patchwork@openvpn.net Delivered-To: patchwork@openvpn.net Received: from director11.mail.ord1d.rsapps.net ([172.31.255.6]) by backend30.mail.ord1d.rsapps.net with LMTP id iDjkFBZEbF+PAgAAIUCqbw (envelope-from ) for ; Thu, 24 Sep 2020 03:00:38 -0400 Received: from proxy17.mail.iad3b.rsapps.net ([172.31.255.6]) by director11.mail.ord1d.rsapps.net with LMTP id UK7EFBZEbF9lNgAAvGGmqA (envelope-from ) for ; Thu, 24 Sep 2020 03:00:38 -0400 Received: from smtp12.gate.iad3b ([172.31.255.6]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) by proxy17.mail.iad3b.rsapps.net with LMTPS id AGuvDRZEbF9bGgAA5ccGVQ (envelope-from ) for ; Thu, 24 Sep 2020 03:00:38 -0400 X-Spam-Threshold: 95 X-Spam-Score: 0 X-Spam-Flag: NO X-Virus-Scanned: OK X-Orig-To: openvpnslackdevel@openvpn.net X-Originating-Ip: [216.105.38.7] Authentication-Results: smtp12.gate.iad3b.rsapps.net; iprev=pass policy.iprev="216.105.38.7"; spf=pass smtp.mailfrom="openvpn-devel-bounces@lists.sourceforge.net" smtp.helo="lists.sourceforge.net"; dkim=pass header.d=lists.sourceforge.net; dkim=fail (signature verification failed) header.d=sourceforge.net; dkim=fail (signature verification failed) header.d=sf.net; dkim=fail (signature verification failed) header.d=rozman.si; dmarc=pass (p=none; dis=none) header.from=lists.sourceforge.net X-Suspicious-Flag: NO X-Classification-ID: a604834a-fe33-11ea-927e-525400ae1f9d-1-1 Received: from [216.105.38.7] ([216.105.38.7:46066] helo=lists.sourceforge.net) by smtp12.gate.iad3b.rsapps.net (envelope-from ) (ecelerity 4.2.38.62370 r(:)) with ESMTPS (cipher=DHE-RSA-AES256-GCM-SHA384) id 94/D5-14770-5144C6F5; Thu, 24 Sep 2020 03:00:37 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.sourceforge.net; s=beta; h=Content-Transfer-Encoding:Content-Type: Reply-To:From:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:Subject:MIME-Version:Message-Id:Date:To:Sender:Cc: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Owner; bh=8PiiPSo5ly0sVyn6xS6mF8wZlZIYPzyDSMAw0SR7JiA=; b=Qan7a+Z3NDh4EmEpE7R2aS8ofL DGqizLtRisJZIo31QYDMIEPiFP1PBTPi4lUyiJvgKErCt205EpxQ/TboQzlCEj2nDJrtkLjxYxyru 3Zgaa6Vzkxk04lVHBXEX5V54oSH43a3no2NEvsVlGb52XoHvkaBgevWQjwIXgw7oGKjY=; Received: from [127.0.0.1] (helo=sfs-ml-4.v29.lw.sourceforge.com) by sfs-ml-4.v29.lw.sourceforge.com with esmtp (Exim 4.90_1) (envelope-from ) id 1kLLEG-0007Zl-Ax; Thu, 24 Sep 2020 06:59:44 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-4.v29.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kLLEF-0007Zd-0u for openvpn-devel@lists.sourceforge.net; Thu, 24 Sep 2020 06:59:43 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Transfer-Encoding:MIME-Version:Message-Id: Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=X1B4v806IyGTkL1Lh0YaQeCdnr/T8lvQ4lgykJTLM78=; b=gC2+ENcNYWnH3Yd4QzPpgO0fA+ kpa0yN7vtlYig9DByPTn2xxvDeXyatYK5NHnv/lICZpd34BVUsuRxyzCKnsCLKeOCWfCB1sVc9M3Y 4pOoYeLlvu8HmV2aT3sgMUlirj0mC2nREZd5MnNInt111Y6Q9UKrW0msjDBEPZv2fVa4=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:MIME-Version:Message-Id:Date:Subject:Cc:To:From :Sender:Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To: References:List-Id:List-Help:List-Unsubscribe:List-Subscribe:List-Post: List-Owner:List-Archive; bh=X1B4v806IyGTkL1Lh0YaQeCdnr/T8lvQ4lgykJTLM78=; b=d xc5t9nFJZ4QokHotVDL72lcrhyvUEG3Hwl/Z6TP2YTUd+fEwNHF6C3t84ZdphMw3UqcTDo6043VHo C3iF6/s+N/Fs0DWzw7zY8peED88BZCiwLh61eoCGQlKWyrBd6ZPCVpHH7NK0yoIzm67wBX2xNPlNX +7JCp3Cl1VDlBzxQ=; Received: from pub5.amebis.si ([213.250.55.21]) by sfi-mx-1.v28.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92.2) id 1kLLEA-005hJC-3w for openvpn-devel@lists.sourceforge.net; Thu, 24 Sep 2020 06:59:42 +0000 Received: by pub5.amebis.si (Postfix, from userid 1000) id 63BE91002FA3; Thu, 24 Sep 2020 08:59:24 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rozman.si; s=default; t=1600930764; bh=X1B4v806IyGTkL1Lh0YaQeCdnr/T8lvQ4lgykJTLM78=; h=From:To:Cc:Subject:Date:From; b=FJixQG5EA8NZMWboOdxHJOorLJw57CAfIqX0/rOgzYEptOBFjJTkhtr6dmWgbzawU RQ5Jus29wmKnbGA6bFr1XTK3PbrUExAVhj+1mTM2CD/FZMRrCR2e6wCP6WI+pE7Lqa bm99oU9xWvHaWOzITmVweBzXBkUTVSWMpInb5vq4= X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on brana.amebis.doma X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=ALL_TRUSTED,BAYES_00 autolearn=ham autolearn_force=no version=3.4.4 Received: from SR6.amebis.doma (unknown [IPv6:2a00:ee2:209:164:8103:4a53:d5f0:1d48]) by pub5.amebis.si (Postfix) with ESMTP id DCD2B1002F9B; Thu, 24 Sep 2020 08:59:21 +0200 (CEST) To: openvpn-devel@lists.sourceforge.net Date: Thu, 24 Sep 2020 08:59:15 +0200 Message-Id: <20200924065915.164-1-simon@rozman.si> X-Mailer: git-send-email 2.28.0.windows.1 MIME-Version: 1.0 X-Spam-Report: Spam Filtering performed by mx.sourceforge.net. See http://spamassassin.org/tag/ for more details. 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: rozman.si] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid X-Headers-End: 1kLLEA-005hJC-3w Subject: [Openvpn-devel] [PATCH] openvpnmsica: Skip legacy TAP-Windows6 adapters from evaluation X-BeenThere: openvpn-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Simon Rozman via Openvpn-devel From: Kristof Provost via Openvpn-devel Reply-To: Simon Rozman Errors-To: openvpn-devel-bounces@lists.sourceforge.net X-getmail-retrieved-from-mailbox: Inbox Legacy TAP-Windows6 adapters (marked as IF_TYPE_ETHERNET_CSMACD 0x6) fail to upgrade to the new driver on Windows 7: Device cannot start (Code 10). Ignoring those adapters on Windows 7 triggers creation of a new TAP adapter on setup eliminating the need for user intervention. Signed-off-by: Simon Rozman --- src/openvpnmsica/openvpnmsica.c | 13 ++++++++++++ src/tapctl/tap.c | 37 +++++++++++++++++++++++++++++---- src/tapctl/tap.h | 3 +++ 3 files changed, 49 insertions(+), 4 deletions(-) diff --git a/src/openvpnmsica/openvpnmsica.c b/src/openvpnmsica/openvpnmsica.c index f203f736..dd6ecd74 100644 --- a/src/openvpnmsica/openvpnmsica.c +++ b/src/openvpnmsica/openvpnmsica.c @@ -303,10 +303,18 @@ find_adapters( } } + OSVERSIONINFOEX osvi = { sizeof(OSVERSIONINFOEX), HIBYTE(_WIN32_WINNT_WIN8), LOBYTE(_WIN32_WINNT_WIN8) }; + DWORDLONG const dwlConditionMask = VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_MINORVERSION, VER_GREATER_EQUAL); + BOOL bSkipLegacyAdapters = !VerifyVersionInfo(&osvi, VER_MAJORVERSION | VER_MINORVERSION, dwlConditionMask); + /* Count adapters. */ size_t adapter_count = 0; for (struct tap_adapter_node *pAdapter = pAdapterList; pAdapter; pAdapter = pAdapter->pNext) { + if (bSkipLegacyAdapters && pAdapter->dwIfType != IF_TYPE_PROP_VIRTUAL) + { + continue; + } adapter_count++; } @@ -331,6 +339,11 @@ find_adapters( for (struct tap_adapter_node *pAdapter = pAdapterList; pAdapter; pAdapter = pAdapter->pNext) { + if (bSkipLegacyAdapters && pAdapter->dwIfType != IF_TYPE_PROP_VIRTUAL) + { + continue; + } + /* Convert adapter GUID to UTF-16 string. (LPOLESTR defaults to LPWSTR) */ LPOLESTR szAdapterId = NULL; StringFromIID((REFIID)&pAdapter->guid, &szAdapterId); diff --git a/src/tapctl/tap.c b/src/tapctl/tap.c index dd4a10a3..0dfc7555 100644 --- a/src/tapctl/tap.c +++ b/src/tapctl/tap.c @@ -29,6 +29,7 @@ #include #include +#include #include #include #include @@ -551,6 +552,8 @@ get_reg_string( * * @param pguidAdapter A pointer to GUID that receives network adapter ID. * + * @param pdwIfType A pointer to DWORD that receives interface type. + * * @return ERROR_SUCCESS on success; Win32 error code otherwise **/ static DWORD @@ -558,7 +561,8 @@ get_net_adapter_guid( _In_ HDEVINFO hDeviceInfoSet, _In_ PSP_DEVINFO_DATA pDeviceInfoData, _In_ int iNumAttempts, - _Out_ LPGUID pguidAdapter) + _Out_ LPGUID pguidAdapter, + _Out_opt_ LPDWORD pdwIfType) { DWORD dwResult = ERROR_BAD_ARGUMENTS; @@ -613,6 +617,23 @@ get_net_adapter_guid( dwResult = SUCCEEDED(CLSIDFromString(szCfgGuidString, (LPCLSID)pguidAdapter)) ? ERROR_SUCCESS : ERROR_INVALID_DATA; free(szCfgGuidString); + + if (pdwIfType) + { + DWORD dwValueType = REG_NONE, dwSize = sizeof(*pdwIfType); + dwResult = RegQueryValueEx( + hKey, + TEXT("*IfType"), + NULL, + &dwValueType, + (BYTE *)pdwIfType, + &dwSize); + if (dwResult != ERROR_SUCCESS || dwValueType != REG_DWORD || dwSize != sizeof(*pdwIfType)) + { + *pdwIfType = IF_TYPE_OTHER; + } + } + break; } @@ -839,7 +860,7 @@ tap_create_adapter( } /* Get network adapter ID from registry. Retry for max 30sec. */ - dwResult = get_net_adapter_guid(hDevInfoList, &devinfo_data, 30, pguidAdapter); + dwResult = get_net_adapter_guid(hDevInfoList, &devinfo_data, 30, pguidAdapter, NULL); cleanup_remove_device: if (dwResult != ERROR_SUCCESS) @@ -981,7 +1002,7 @@ execute_on_first_adapter( /* Get adapter GUID. */ GUID guidAdapter; - dwResult = get_net_adapter_guid(hDevInfoList, &devinfo_data, 1, &guidAdapter); + dwResult = get_net_adapter_guid(hDevInfoList, &devinfo_data, 1, &guidAdapter, NULL); if (dwResult != ERROR_SUCCESS) { /* Something is wrong with this device. Skip it. */ @@ -1259,7 +1280,8 @@ tap_list_adapters( /* Get adapter GUID. */ GUID guidAdapter; - dwResult = get_net_adapter_guid(hDevInfoList, &devinfo_data, 1, &guidAdapter); + DWORD dwIfType; + dwResult = get_net_adapter_guid(hDevInfoList, &devinfo_data, 1, &guidAdapter, &dwIfType); if (dwResult != ERROR_SUCCESS) { /* Something is wrong with this device. Skip it. */ @@ -1321,6 +1343,7 @@ tap_list_adapters( memcpy(node->szzHardwareIDs, szzDeviceHardwareIDs, hwid_size); node->szName = (LPTSTR)((LPBYTE)node->szzHardwareIDs + hwid_size); memcpy(node->szName, szName, name_size); + node->dwIfType = dwIfType; node->pNext = NULL; if (pAdapterTail) { @@ -1332,6 +1355,12 @@ tap_list_adapters( *ppAdapter = pAdapterTail = node; } + if (CM_Get_DevNode_Status(&node->ulStatus, &node->ulProblemNumber, devinfo_data.DevInst, 0) != CR_SUCCESS) + { + node->ulStatus = 0; + node->ulProblemNumber = 0; + } + cleanup_szName: free(szName); cleanup_hKey: diff --git a/src/tapctl/tap.h b/src/tapctl/tap.h index 63d791c9..5d356cb6 100644 --- a/src/tapctl/tap.h +++ b/src/tapctl/tap.h @@ -138,6 +138,9 @@ struct tap_adapter_node GUID guid; /** Adapter GUID */ LPTSTR szzHardwareIDs; /** Device hardware ID(s) */ LPTSTR szName; /** Adapter name */ + DWORD dwIfType; /** Interface type. One of IF_TYPE_* constants. */ + ULONG ulStatus; /** Device status. A bitwise combination of the DN_* constants. */ + ULONG ulProblemNumber; /** When ulStatus has DN_HAS_PROBLEM set, this member is one of the CM_PROB_* constants. */ struct tap_adapter_node *pNext; /** Pointer to next adapter */ };