diff options
| author | Odd Stranne <odd@mullvad.net> | 2019-04-12 08:36:27 +0200 |
|---|---|---|
| committer | Odd Stranne <odd@mullvad.net> | 2019-04-16 18:10:28 +0200 |
| commit | 7feb5f4c7517b7b125a60f32b201998950d8112f (patch) | |
| tree | 764cc24c2425a7af07f8e13f8317eae8bd0f6643 | |
| parent | d792973126c55c10dec80cb249b28f8312cacd74 (diff) | |
| download | mullvadvpn-7feb5f4c7517b7b125a60f32b201998950d8112f.tar.xz mullvadvpn-7feb5f4c7517b7b125a60f32b201998950d8112f.zip | |
Update installer with new TAP renaming logic
| -rw-r--r-- | dist-assets/windows/installer.nsh | 72 |
1 files changed, 70 insertions, 2 deletions
diff --git a/dist-assets/windows/installer.nsh b/dist-assets/windows/installer.nsh index 5b37f99a8d..5133944978 100644 --- a/dist-assets/windows/installer.nsh +++ b/dist-assets/windows/installer.nsh @@ -76,6 +76,66 @@ !define ExtractDriver '!insertmacro "ExtractDriver"' # +# ForceRenameAdapter +# +# For when there's a broken TAP adapter present, such that the adapter name +# we're trying to use is already taken. +# +# This function will iteratively find a name that is not taken. +# Names tried follow the pattern "NewAdapterBaseName-1", "NewAdapterBaseName-2", etc. +# +# Returns: 0 in $R0 on success, otherwise an error message in $R0 +# +!macro ForceRenameAdapter CurrentAdapterName NewAdapterBaseName + + Var /GLOBAL ForceRenameAdapter_Counter + + log::Log "ForceRenameAdapter()" + + Push $0 + Push $1 + + Push 0 + Pop $ForceRenameAdapter_Counter + + ForceRenameAdapter_retry: + + ${If} $ForceRenameAdapter_Counter == 10 + StrCpy $R0 "Exhausted namespace when forcing adapter rename" + log::Log $R0 + Goto ForceRenameAdapter_return + ${EndIf} + + IntOp $ForceRenameAdapter_Counter $ForceRenameAdapter_Counter + 1 + StrCpy $0 "${NewAdapterBaseName}-$ForceRenameAdapter_Counter" + log::Log "Renaming adapter to $\"$0$\"" + + nsExec::ExecToStack '"$SYSDIR\netsh.exe" interface set interface name = "${CurrentAdapterName}" newname = "$0"' + + Pop $0 + Pop $1 + + ${If} $0 != 0 + StrCpy $R0 "Failed to rename virtual adapter: error $0" + log::LogWithDetails $R0 $1 + Goto ForceRenameAdapter_retry + ${EndIf} + + log::Log "ForceRenameAdapter() completed successfully" + + Push 0 + Pop $R0 + + ForceRenameAdapter_return: + + Pop $1 + Pop $0 + +!macroend + +!define ForceRenameAdapter '!insertmacro "ForceRenameAdapter"' + +# # InstallDriver # # Install tunnel driver or update it if already present on the system @@ -85,6 +145,7 @@ !macro InstallDriver Var /GLOBAL InstallDriver_BaselineStatus + Var /GLOBAL InstallDriver_TapName log::Log "InstallDriver()" @@ -170,9 +231,11 @@ Goto InstallDriver_return ${EndIf} - log::Log "New virtual adapter is named $\"$1$\"" + StrCpy $InstallDriver_TapName $1 + log::Log "New virtual adapter is named $\"$1$\"" log::Log "Renaming adapter to $\"Mullvad$\"" + nsExec::ExecToStack '"$SYSDIR\netsh.exe" interface set interface name = "$1" newname = "Mullvad"' Pop $0 @@ -181,7 +244,12 @@ ${If} $0 != 0 StrCpy $R0 "Failed to rename virtual adapter: error $0" log::LogWithDetails $R0 $1 - Goto InstallDriver_return + + ${ForceRenameAdapter} $InstallDriver_TapName "Mullvad" + + ${If} $R0 != 0 + Goto InstallDriver_return + ${EndIf} ${EndIf} InstallDriver_return_success: |
