Skip to content

Commit

Permalink
Myrtille 2.9.0 (stable)
Browse files Browse the repository at this point in the history
  • Loading branch information
cedrozor committed Sep 20, 2020
1 parent 9c6697b commit 47c9795
Show file tree
Hide file tree
Showing 37 changed files with 2,110 additions and 1,551 deletions.
10 changes: 9 additions & 1 deletion CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
2020-06-24 Version 2.9.0 (beta)
2020-09-20 Version 2.9.0 (stable)
added a virtual on-screen keyboard (multi-languages)
popups are now draggable
showing the toolbar no longer shifts the display down
the rendering quality can now tweaked from the toolbar (lower quality = lower bandwidth usage), in addition to the default value defined in config.js
display updates are now consolidated instead of dropped when the available bandwidth gets low (config.js)
websocket can now be configured to handle both user inputs and display updates on the same instance (duplex, default) or use separate instances (dual) [experimental]
added support of event source (SSE) as an alternative to long-polling (requires HTML5 and not compatible with old IE/Edge browsers) [experimental]
Expand All @@ -8,6 +12,10 @@
fixed random freezes while requesting fullscreen updates
the disconnect command is now given priority in xhr mode
long-polling is now an http handler
messages are serialized in JSON instead of raw text
fixed an issue with messages containing the ";" character
fixed an issue with file transfer when using a domain (thanks camjcorley)
fixed an issue with the tab key in SSH mode (this also fixes shell autocompletion)
refactoring

2020-04-20 Version 2.8.1 (stable)
Expand Down
8 changes: 7 additions & 1 deletion DOCUMENTATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ In addition to 2fa, an access control could be enforced to allow connections onl

The adapter has been written to use a platform provided by Olive Innovations and named OASIS. It's free to use up to 10 users; to use this service follow these instructions:

- Visit https://www.oliveinnovations.com and register for free
- Visit https://www.oliveinnovations.com and register for free at https://www.oasis2fa.com
- Once logged in, create a User Group (into the menu select User Groups), then click New, input a Name (i.e. Myrtille) and save
- Create a user (choose Users from the menu), then click New, input user details and tick the box to send register by email (**IMPORTANT** the username must be the same as the username you will login with myrtille; when registering via email, the user will have a link to complete the registration) and save. Into the user details page, select the user group created in Step 2
NOTE: If you have enabled Enterprise Mode and wish to sync your Active Directory with OASIS, visit https://www.oliveinnovations.com, go to download area and download the Gateway application; instructions for configuration can be found into the docs on the same website
Expand Down Expand Up @@ -366,6 +366,12 @@ See the Myrtille.Admin.Web **mockup** to see how to implement Myrtille into your

- the clipboard synchronization requires Chrome (or async clipboard API support) and HTTPS connection and is limited to text only and 1MB max

- The left mouse button sometimes doesn't work on Windows Server 2019 (despite the event being sent), when connected to a standard (enhanced mode disabled) Hyper-V console session

- Hyper-V Linux VMs don't support enhanced mode (except if using xRDP with Ubuntu, see https://c-nergy.be/blog/?p=12429)

- When the Hyper-V enhanced mode is disabled, the keyboard mapping is limited to en-US only (using RDP scancodes instead of unicode) and the keyboard layout must therefore be configured in en-US (qwerty) in the remote session

## Troubleshoot
First at all, ensure the Myrtille prerequisites are met (see "Installation").

Expand Down
2 changes: 1 addition & 1 deletion Myrtille.Common/Helpers/AccountHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -375,7 +375,7 @@ public static string GetUserDocumentsFolder(
{
// logon the user, domain (if defined) or local otherwise
// myrtille must be running on a machine which is part of the domain for it to work
if (LogonUser(userName, string.IsNullOrEmpty(userDomain) ? Environment.MachineName : userDomain, userPassword, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref token) != 0)
if (LogonUser(userName, string.IsNullOrEmpty(userDomain) ? Environment.MachineName : userDomain, userPassword, string.IsNullOrEmpty(userDomain) ? LOGON32_LOGON_INTERACTIVE : LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, ref token) != 0)
{
string serverName = null;
if (!string.IsNullOrEmpty(userDomain))
Expand Down
10 changes: 3 additions & 7 deletions Myrtille.SSH/PipeMessaging.cs
Original file line number Diff line number Diff line change
Expand Up @@ -92,13 +92,9 @@ public void ReadInputsPipe()
private void ProcessInputsPipeMessage(byte[] msg)
{
var message = Encoding.UTF8.GetString(msg);
var commandsWithArgs = message.Split(new[] { "\t" }, StringSplitOptions.RemoveEmptyEntries);
foreach (var commandWithArgs in commandsWithArgs)
{
var command = (RemoteSessionCommand)RemoteSessionCommandMapping.FromPrefix[commandWithArgs.Substring(0, 3)];
var data = commandWithArgs.Substring(3);
OnMessageReceivedEvent?.Invoke(command, data);
}
var command = (RemoteSessionCommand)RemoteSessionCommandMapping.FromPrefix[message.Substring(0, 3)];
var data = message.Substring(3);
OnMessageReceivedEvent?.Invoke(command, data);
}

public void SendUpdatesPipeMessage(string msg)
Expand Down
4 changes: 2 additions & 2 deletions Myrtille.SSH/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -142,8 +142,8 @@ private static void PipeMessaging_OnMessageReceivedEvent(RemoteSessionCommand co
pipeMessaging.ClosePipes();
break;
case RemoteSessionCommand.SendKeyUnicode:
WriteOutput(command, string.IsNullOrEmpty(data) ? "," : data);
HandleKeyboardInput(string.IsNullOrEmpty(data) ? "," : data);
WriteOutput(command, data);
HandleKeyboardInput(data);
break;
}
}
Expand Down
4 changes: 2 additions & 2 deletions Myrtille.Services/app.config
Original file line number Diff line number Diff line change
Expand Up @@ -209,8 +209,8 @@
<!-- log remote session events into a file (located into <Myrtille folder>\log) -->
<add key="RemoteSessionLog" value="false" />

<!-- OASIS settings, visit https://oasis.oliveinnovations.com -->
<!-- register, create an application to get details -->
<!-- OASIS settings, visit https://www.oliveinnovations.com -->
<!-- register for free at https://www.oasis2fa.com, create an application to get details -->
<!-- before doing this, you need a one time passcode generation app such as google authenticator -->
<!-- uncomment the adapter line below to use MFA -->
<!--<add key="MFAAuthAdapter" value="Myrtille.MFAProviders.OASISOTPProvider, Myrtille.MFAProviders" />-->
Expand Down
142 changes: 58 additions & 84 deletions Myrtille.Setup/Myrtille.Setup.vdproj
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
}
"Entry"
{
"MsmKey" = "8:_0540EFB748094D4F8ADE79C304B91BC0"
"MsmKey" = "8:_08023E5D358F42FEAD7560CD95422DFB"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
Expand All @@ -57,24 +57,12 @@
}
"Entry"
{
"MsmKey" = "8:_1CAF7D9058AF4E4CBD59D8D157776035"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_1EE5D98F80FD1E8988C38C20595D35F2"
"OwnerKey" = "8:_653D6FBBA167416D9037981F1E63EC6A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_2078F522166C4E658DCE9DF9A15580AF"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_22ADBD516A0D6B0686A1ADB91F100AC4"
"OwnerKey" = "8:_7BDFED357A797F9F78D2A2939058F770"
"MsmSig" = "8:_UNDEFINED"
Expand All @@ -99,6 +87,12 @@
}
"Entry"
{
"MsmKey" = "8:_3C626A04CD3E4FA6ADD051F84F6B4091"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_45CB0595F5A7C6F661B3AE7E03FF554B"
"OwnerKey" = "8:_653D6FBBA167416D9037981F1E63EC6A"
"MsmSig" = "8:_UNDEFINED"
Expand Down Expand Up @@ -183,7 +177,7 @@
}
"Entry"
{
"MsmKey" = "8:_6AC1B8C984724809988C5617A6CBB9CC"
"MsmKey" = "8:_6B6F0BEDA21C4D4BB875CFE9C0B83A38"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
Expand Down Expand Up @@ -351,6 +345,12 @@
}
"Entry"
{
"MsmKey" = "8:_8FBC14AFBDA246998BAAF76505DB949A"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_917286C9A1719DDE028EAF47B67B458B"
"OwnerKey" = "8:_8509FA2AF779A31287B4B15E10EC1B3E"
"MsmSig" = "8:_UNDEFINED"
Expand Down Expand Up @@ -513,12 +513,6 @@
}
"Entry"
{
"MsmKey" = "8:_BFAB1DC03C5D48499B2C7024A4169EEC"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_C41EB1C9257A4C089AC4EA108CA2929A"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
Expand Down Expand Up @@ -705,6 +699,12 @@
}
"Entry"
{
"MsmKey" = "8:_EB16E929CE5F43A3AD6968D11FB7BE36"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_EF7BA948A8A34B5CB515E968F9EFD966"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
Expand Down Expand Up @@ -759,12 +759,6 @@
}
"Entry"
{
"MsmKey" = "8:_F7CC53E1623541C090FEE4396022324C"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_F90B7E5C1C5C5A33AEE2446EBF2BD753"
"OwnerKey" = "8:_0229BCEE237B03C3E191CED693B70BD4"
"MsmSig" = "8:_UNDEFINED"
Expand Down Expand Up @@ -2813,26 +2807,6 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F7CC53E1623541C090FEE4396022324C"
{
"SourcePath" = "8:..\\DISCLAIMERS.md"
"TargetName" = "8:DISCLAIMERS.md"
"Tag" = "8:"
"Folder" = "8:_B8E8F5F7726243109EBB878F4275F26E"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_F90B7E5C1C5C5A33AEE2446EBF2BD753"
{
"AssemblyRegister" = "3:1"
Expand Down Expand Up @@ -4530,9 +4504,9 @@
}
"ProjectOutput"
{
"{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_0540EFB748094D4F8ADE79C304B91BC0"
"{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_08023E5D358F42FEAD7560CD95422DFB"
{
"SourcePath" = "8:..\\Myrtille.RDP\\FreeRDP\\Release\\wfreerdp.exe"
"SourcePath" = "8:..\\Myrtille.RDP\\FreeRDP\\Release\\freerdp2.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_FA146EB9AE2B44E2AB4B01E26999CAB2"
Expand All @@ -4552,7 +4526,7 @@
"ProjectOutputGroupRegister" = "3:1"
"OutputConfiguration" = "8:"
"OutputGroupCanonicalName" = "8:Built"
"OutputProjectGuid" = "8:{F8E3BE3B-70ED-3443-BCD6-52FE1E06359D}"
"OutputProjectGuid" = "8:{12E61D6F-CFA4-317E-875A-5B1269A01B53}"
"ShowKeyOutput" = "11:TRUE"
"ExcludeFilters"
{
Expand Down Expand Up @@ -4586,37 +4560,9 @@
{
}
}
"{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_1CAF7D9058AF4E4CBD59D8D157776035"
{
"SourcePath" = "8:..\\Myrtille.RDP\\FreeRDP\\Release\\freerdp-client2.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_FA146EB9AE2B44E2AB4B01E26999CAB2"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
"ProjectOutputGroupRegister" = "3:1"
"OutputConfiguration" = "8:"
"OutputGroupCanonicalName" = "8:Built"
"OutputProjectGuid" = "8:{1E82C5D0-E663-392F-91C4-8DCDEDA99005}"
"ShowKeyOutput" = "11:TRUE"
"ExcludeFilters"
{
}
}
"{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_2078F522166C4E658DCE9DF9A15580AF"
"{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_3C626A04CD3E4FA6ADD051F84F6B4091"
{
"SourcePath" = "8:..\\Myrtille.RDP\\FreeRDP\\Release\\freerdp2.dll"
"SourcePath" = "8:..\\Myrtille.RDP\\FreeRDP\\Release\\winpr2.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_FA146EB9AE2B44E2AB4B01E26999CAB2"
Expand All @@ -4636,7 +4582,7 @@
"ProjectOutputGroupRegister" = "3:1"
"OutputConfiguration" = "8:"
"OutputGroupCanonicalName" = "8:Built"
"OutputProjectGuid" = "8:{12E61D6F-CFA4-317E-875A-5B1269A01B53}"
"OutputProjectGuid" = "8:{DB81D53E-CBD5-3A9C-8F8F-6D732D251637}"
"ShowKeyOutput" = "11:TRUE"
"ExcludeFilters"
{
Expand Down Expand Up @@ -4726,9 +4672,9 @@
{
}
}
"{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_6AC1B8C984724809988C5617A6CBB9CC"
"{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_6B6F0BEDA21C4D4BB875CFE9C0B83A38"
{
"SourcePath" = "8:..\\Myrtille.RDP\\FreeRDP\\Release\\winpr2.dll"
"SourcePath" = "8:..\\Myrtille.RDP\\FreeRDP\\Release\\freerdp-client2.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_FA146EB9AE2B44E2AB4B01E26999CAB2"
Expand All @@ -4748,7 +4694,7 @@
"ProjectOutputGroupRegister" = "3:1"
"OutputConfiguration" = "8:"
"OutputGroupCanonicalName" = "8:Built"
"OutputProjectGuid" = "8:{DB81D53E-CBD5-3A9C-8F8F-6D732D251637}"
"OutputProjectGuid" = "8:{1E82C5D0-E663-392F-91C4-8DCDEDA99005}"
"ShowKeyOutput" = "11:TRUE"
"ExcludeFilters"
{
Expand Down Expand Up @@ -4838,7 +4784,7 @@
{
}
}
"{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_BFAB1DC03C5D48499B2C7024A4169EEC"
"{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_8FBC14AFBDA246998BAAF76505DB949A"
{
"SourcePath" = "8:..\\Myrtille.RDP\\FreeRDP\\Release\\winpr-tools2.dll"
"TargetName" = "8:"
Expand Down Expand Up @@ -4894,6 +4840,34 @@
{
}
}
"{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_EB16E929CE5F43A3AD6968D11FB7BE36"
{
"SourcePath" = "8:..\\Myrtille.RDP\\FreeRDP\\Release\\wfreerdp.exe"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_FA146EB9AE2B44E2AB4B01E26999CAB2"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
"ProjectOutputGroupRegister" = "3:1"
"OutputConfiguration" = "8:"
"OutputGroupCanonicalName" = "8:Built"
"OutputProjectGuid" = "8:{F8E3BE3B-70ED-3443-BCD6-52FE1E06359D}"
"ShowKeyOutput" = "11:TRUE"
"ExcludeFilters"
{
}
}
"{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_EF7BA948A8A34B5CB515E968F9EFD966"
{
"SourcePath" = "8:..\\Myrtille.Admin.Services\\obj\\Release\\Myrtille.Admin.Services.exe"
Expand Down
Loading

0 comments on commit 47c9795

Please sign in to comment.