Re: [Openvpn-devel] [PATCH v2 12/12] tapctl: Support multiple hardware IDs

2020-03-24 Thread Lev Stipakov
Hi,

Compiled with msvc and smoke-tested, "tapctl list" returns all
relevant adapters.

This also resolves my concert from 10/12, so I'll ack that, too.

Acked-by: Lev Stipakov 


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


[Openvpn-devel] [PATCH v2 12/12] tapctl: Support multiple hardware IDs

2020-03-10 Thread Simon Rozman
TAP-Windows6 adapters created with tapinstall/devcon.exe have hardware
ID "tap0901", where TAP-Windows6 adapters created with tapctl.exe have
hardware ID "root\\tap0901".

The enumeration of the network adapters have been extended to detect
adapters using a list of acceptable hardware IDs.

Signed-off-by: Simon Rozman 
---
 src/openvpnmsica/openvpnmsica.c | 43 ++---
 src/tapctl/main.c   | 24 +++---
 src/tapctl/tap.c| 21 
 src/tapctl/tap.h|  8 +++---
 4 files changed, 58 insertions(+), 38 deletions(-)

diff --git a/src/openvpnmsica/openvpnmsica.c b/src/openvpnmsica/openvpnmsica.c
index 28cf16b5..31e90bd2 100644
--- a/src/openvpnmsica/openvpnmsica.c
+++ b/src/openvpnmsica/openvpnmsica.c
@@ -251,7 +251,7 @@ cleanup_OpenSCManager:
 static UINT
 find_adapters(
 _In_ MSIHANDLE hInstall,
-_In_z_ LPCTSTR szHardwareId,
+_In_z_ LPCTSTR szzHardwareIDs,
 _In_z_ LPCTSTR szAdaptersPropertyName,
 _In_z_ LPCTSTR szActiveAdaptersPropertyName)
 {
@@ -259,7 +259,7 @@ find_adapters(
 
 /* Get network adapters with given hardware ID. */
 struct tap_adapter_node *pAdapterList = NULL;
-uiResult = tap_list_adapters(NULL, szHardwareId, );
+uiResult = tap_list_adapters(NULL, szzHardwareIDs, );
 if (uiResult != ERROR_SUCCESS)
 {
 return uiResult;
@@ -414,12 +414,12 @@ FindSystemInfo(_In_ MSIHANDLE hInstall)
 set_openvpnserv_state(hInstall);
 find_adapters(
 hInstall,
-TEXT("root\\") TEXT(TAP_WIN_COMPONENT_ID),
+TEXT("root\\") TEXT(TAP_WIN_COMPONENT_ID) TEXT("\0") 
TEXT(TAP_WIN_COMPONENT_ID) TEXT("\0"),
 TEXT("TAPWINDOWS6ADAPTERS"),
 TEXT("ACTIVETAPWINDOWS6ADAPTERS"));
 find_adapters(
 hInstall,
-TEXT("Wintun"),
+TEXT("Wintun") TEXT("\0"),
 TEXT("WINTUNADAPTERS"),
 TEXT("ACTIVEWINTUNADAPTERS"));
 
@@ -652,7 +652,7 @@ cleanup_pAdapterList:
  *
  * @param szDisplayName  Adapter display name
  *
- * @param szHardwareId  Adapter hardware ID
+ * @param szzHardwareIDs  String of strings with acceptable adapter hardware 
IDs
  *
  * @param iTicksPointer to an integer that represents amount of work 
(on progress
  *  indicator) the UninstallTUNTAPAdapters will take. This 
function increments
@@ -666,12 +666,12 @@ schedule_adapter_delete(
 _Inout_opt_ struct msica_arg_seq *seqCommit,
 _Inout_opt_ struct msica_arg_seq *seqRollback,
 _In_z_ LPCTSTR szDisplayName,
-_In_z_ LPCTSTR szHardwareId,
+_In_z_ LPCTSTR szzHardwareIDs,
 _Inout_ int *iTicks)
 {
 /* Get adapters with given hardware ID. */
 struct tap_adapter_node *pAdapterList = NULL;
-DWORD dwResult = tap_list_adapters(NULL, szHardwareId, );
+DWORD dwResult = tap_list_adapters(NULL, szzHardwareIDs, );
 if (dwResult != ERROR_SUCCESS)
 {
 return dwResult;
@@ -858,11 +858,16 @@ EvaluateTUNTAPAdapters(_In_ MSIHANDLE hInstall)
 szDisplayNameEx = szDisplayNameEx != NULL ? szDisplayNameEx + 1 : 
szDisplayName;
 
 /* Get adapter hardware ID (`HardwareId` is field #5). */
-LPTSTR szHardwareId = NULL;
-uiResult = msi_get_record_string(hRecord, 5, );
-if (uiResult != ERROR_SUCCESS)
+TCHAR szzHardwareIDs[0x100] = { 0 };
 {
-goto cleanup_szDisplayName;
+LPTSTR szHwId = NULL;
+uiResult = msi_get_record_string(hRecord, 5, );
+if (uiResult != ERROR_SUCCESS)
+{
+goto cleanup_szDisplayName;
+}
+memcpy_s(szzHardwareIDs, sizeof(szzHardwareIDs) - 2*sizeof(TCHAR) 
/*requires double zero termination*/, szHwId, _tcslen(szHwId)*sizeof(TCHAR));
+free(szHwId);
 }
 
 if (iAction > INSTALLSTATE_BROKEN)
@@ -876,7 +881,7 @@ EvaluateTUNTAPAdapters(_In_ MSIHANDLE hInstall)
 uiResult = msi_get_record_string(hRecord, 3, );
 if (uiResult != ERROR_SUCCESS)
 {
-goto cleanup_szHardwareId;
+goto cleanup_szDisplayName;
 }
 #ifdef __GNUC__
 /*
@@ -890,13 +895,13 @@ EvaluateTUNTAPAdapters(_In_ MSIHANDLE hInstall)
 {
 case MSICONDITION_FALSE:
 free(szValue);
-goto cleanup_szHardwareId;
+goto cleanup_szDisplayName;
 
 case MSICONDITION_ERROR:
 uiResult = ERROR_INVALID_FIELD;
 msg(M_NONFATAL | M_ERRNO, "%s: 
MsiEvaluateCondition(\"%" PRIsLPTSTR "\") failed", __FUNCTION__, szValue);
 free(szValue);
-goto cleanup_szHardwareId;
+goto cleanup_szDisplayName;
 }
 #ifdef __GNUC__
 #pragma GCC diagnostic pop
@@ -908,11 +913,11 @@ EvaluateTUNTAPAdapters(_In_ MSIHANDLE hInstall)