Hi, > -----Original Message----- > From: Lev Stipakov <lstipa...@gmail.com> > Sent: Wednesday, September 2, 2020 11:37 PM > To: openvpn-devel@lists.sourceforge.net > Cc: Lev Stipakov <l...@openvpn.net> > Subject: [Openvpn-devel] [PATCH v2] openvpnmsica: make adapter renaming > non-fatal > > From: Lev Stipakov <l...@openvpn.net> > > For some users renaming adapter > > Local Area Connection > OpenVPN TAP-Windows6 > > mysteriously fails, see https://github.com/OpenVPN/openvpn- > build/issues/187 > > Since renaming is just a "nice to have", make it non-fatal > and, in case of error, only log message and don't display messagebox. > > Signed-off-by: Lev Stipakov <l...@openvpn.net> > --- > > v2: only log error, don't display messagebox > > src/openvpnmsica/dllmain.c | 2 +- > src/openvpnmsica/openvpnmsica.c | 9 +++------ > src/tapctl/main.c | 2 +- > src/tapctl/tap.c | 11 +++++++---- > src/tapctl/tap.h | 6 +++++- > 5 files changed, 17 insertions(+), 13 deletions(-) > > diff --git a/src/openvpnmsica/dllmain.c b/src/openvpnmsica/dllmain.c > index 201fd9af..34946ed8 100644 > --- a/src/openvpnmsica/dllmain.c > +++ b/src/openvpnmsica/dllmain.c > @@ -193,6 +193,6 @@ x_msg_va(const unsigned int flags, const char > *format, va_list arglist) > } > } > > - MsiProcessMessage(s->hInstall, INSTALLMESSAGE_ERROR, hRecordProg); > + MsiProcessMessage(s->hInstall, (flags & M_WARN) ? > INSTALLMESSAGE_INFO : INSTALLMESSAGE_ERROR, hRecordProg); > MsiCloseHandle(hRecordProg); > } > diff --git a/src/openvpnmsica/openvpnmsica.c > b/src/openvpnmsica/openvpnmsica.c > index 31e90bd2..f203f736 100644 > --- a/src/openvpnmsica/openvpnmsica.c > +++ b/src/openvpnmsica/openvpnmsica.c > @@ -1096,12 +1096,9 @@ ProcessDeferredAction(_In_ MSIHANDLE hInstall) > dwResult = tap_create_adapter(NULL, NULL, szHardwareId, > &bRebootRequired, &guidAdapter); > if (dwResult == ERROR_SUCCESS) > { > - /* Set adapter name. */ > - dwResult = tap_set_adapter_name(&guidAdapter, szName); > - if (dwResult != ERROR_SUCCESS) > - { > - tap_delete_adapter(NULL, &guidAdapter, > &bRebootRequired); > - } > + /* Set adapter name. May fail on some machines, but > that is not critical - use silent > + flag to mute messagebox and print error only to log > */ > + tap_set_adapter_name(&guidAdapter, szName, TRUE); > } > } > else if (wcsncmp(szArg[i], L"deleteN=", 8) == 0) > diff --git a/src/tapctl/main.c b/src/tapctl/main.c > index 31bb2ec7..d5bc7290 100644 > --- a/src/tapctl/main.c > +++ b/src/tapctl/main.c > @@ -237,7 +237,7 @@ _tmain(int argc, LPCTSTR argv[]) > } > > /* Rename the adapter. */ > - dwResult = tap_set_adapter_name(&guidAdapter, szName); > + dwResult = tap_set_adapter_name(&guidAdapter, szName, > FALSE); > if (dwResult != ERROR_SUCCESS) > { > StringFromIID((REFIID)&guidAdapter, &szAdapterId); > diff --git a/src/tapctl/tap.c b/src/tapctl/tap.c > index 7cb3dedc..0dfe239f 100644 > --- a/src/tapctl/tap.c > +++ b/src/tapctl/tap.c > @@ -1140,9 +1140,12 @@ ExecCommand(const WCHAR* cmdline) > DWORD > tap_set_adapter_name( > _In_ LPCGUID pguidAdapter, > - _In_ LPCTSTR szName) > + _In_ LPCTSTR szName, > + _In_ BOOL bSilent) > { > DWORD dwResult; > + int msg_flag = bSilent ? M_WARN : M_NONFATAL; > + msg_flag |= M_ERRNO; > > if (pguidAdapter == NULL || szName == NULL) > { > @@ -1176,7 +1179,7 @@ tap_set_adapter_name( > if (dwResult != ERROR_SUCCESS) > { > SetLastError(dwResult); /* MSDN does not mention RegOpenKeyEx() > to set GetLastError(). But we do have an error code. Set last error > manually. */ > - msg(M_NONFATAL | M_ERRNO, "%s: RegOpenKeyEx(HKLM, \"%" > PRIsLPTSTR "\") failed", __FUNCTION__, szRegKey); > + msg(msg_flag, "%s: RegOpenKeyEx(HKLM, \"%" PRIsLPTSTR "\") > failed", __FUNCTION__, szRegKey); > goto cleanup_szAdapterId; > } > > @@ -1185,7 +1188,7 @@ tap_set_adapter_name( > if (dwResult != ERROR_SUCCESS) > { > SetLastError(dwResult); > - msg(M_NONFATAL | M_ERRNO, "%s: Error reading adapter name", > __FUNCTION__); > + msg(msg_flag, "%s: Error reading adapter name", __FUNCTION__); > goto cleanup_hKey; > } > > @@ -1203,7 +1206,7 @@ tap_set_adapter_name( > if (dwResult != ERROR_SUCCESS) > { > SetLastError(dwResult); > - msg(M_NONFATAL | M_ERRNO, "%s: Error renaming adapter", > __FUNCTION__); > + msg(msg_flag, "%s: Error renaming adapter", __FUNCTION__); > goto cleanup_hKey; > } > > diff --git a/src/tapctl/tap.h b/src/tapctl/tap.h > index 102de32d..1f531cf2 100644 > --- a/src/tapctl/tap.h > +++ b/src/tapctl/tap.h > @@ -117,13 +117,17 @@ tap_enable_adapter( > * @param pguidAdapter A pointer to GUID that contains network adapter > ID. > * > * @param szName New adapter name - must be unique > + * > + * @param bSilent If true, MSI installer won't display message > box and > + * only print error to log. > * > * @return ERROR_SUCCESS on success; Win32 error code otherwise > **/ > DWORD > tap_set_adapter_name( > _In_ LPCGUID pguidAdapter, > - _In_ LPCTSTR szName); > + _In_ LPCTSTR szName, > + _In_ BOOL bSilent); > > > /** > -- > 2.17.1 > > > > _______________________________________________ > Openvpn-devel mailing list > Openvpn-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/openvpn-devel
I have reviewed the code, compiled it, built MSI, tested it. Although I could not create a phantom TUN adapter to reproduce the issue. Renaming "Ethernet" adapter to "OpenVPN TAP-Windows6" and trying to install MSI next displayed an error in evaluation phase that a foreign adapter with the same name already exists - which is expected. This patch is about solving the situation when: 1. There are no apparent TAP-Windows6 or Wintun adapters present => installation decides to create one. 2. Once adapter is created, the renaming to the desired name fails (as if the name is already taken). I agree with everybody that having a consistently named adapter after initial setup is nice, but not that essential to make the installation fail. So... Acked-by: Simon Rozman <si...@rozman.si> Regards, Simon _______________________________________________ Openvpn-devel mailing list Openvpn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openvpn-devel