diff --git a/mRemoteV1/Security/Security.Impersonator.cs b/mRemoteV1/Security/Security.Impersonator.cs deleted file mode 100644 index 6f27992a..00000000 --- a/mRemoteV1/Security/Security.Impersonator.cs +++ /dev/null @@ -1,112 +0,0 @@ -using System; -using System.Runtime.InteropServices; -using System.Security.Principal; -using System.Security.Permissions; -using System.Text.RegularExpressions; -using mRemoteNG.App; - - -namespace mRemoteNG.Security -{ - public class Impersonator - { - #region Logon API - private const int LOGON32_PROVIDER_DEFAULT = 0; - private const int LOGON32_LOGON_NEW_CREDENTIALS = 9; - - private const int SecurityImpersonation = 2; - - [DllImport("advapi32.dll", ExactSpelling=true, CharSet=CharSet.Auto, SetLastError=true)] - private static extern int LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken); - - private const int FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x100; - private const int FORMAT_MESSAGE_IGNORE_INSERTS = 0x200; - private const int FORMAT_MESSAGE_FROM_SYSTEM = 0x1000; - - [DllImport("kernel32.dll")]private static extern int FormatMessage(int dwFlags, ref IntPtr lpSource, int dwMessageId, int dwLanguageId, ref string lpBuffer, int nSize, ref IntPtr Arguments); - - [DllImport("kernel32.dll", ExactSpelling=true, CharSet=CharSet.Auto, SetLastError=true)] - private static extern bool CloseHandle(IntPtr handle); - - [DllImport("advapi32.dll", ExactSpelling=true, CharSet=CharSet.Auto, SetLastError=true)] - private static extern int DuplicateToken(IntPtr ExistingTokenHandle, int SECURITY_IMPERSONATION_LEVEL, ref IntPtr DuplicateTokenHandle); - #endregion - - private IntPtr tokenHandle = new IntPtr(0); - private WindowsImpersonationContext impersonatedUser = null; - - // GetErrorMessage formats and returns an error message corresponding to the input errorCode. - private string GetErrorMessage(int errorCode) - { - int messageSize = 255; - string lpMsgBuf = ""; - - int dwFlags = FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS; - - IntPtr ptrlpSource = IntPtr.Zero; - IntPtr prtArguments = IntPtr.Zero; - - int retVal = FormatMessage(dwFlags, ref ptrlpSource, errorCode, 0, ref lpMsgBuf, messageSize, ref prtArguments); - lpMsgBuf = Regex.Replace(lpMsgBuf, @"\r\n|\n|\r", " "); - return lpMsgBuf; - } - - [PermissionSetAttribute(SecurityAction.Demand, Name = "FullTrust")]public void StartImpersonation(string DomainName, string UserName, string Password) - { - try - { - if (impersonatedUser != null) - { - throw (new Exception("Already impersonating a user.")); - } - - tokenHandle = IntPtr.Zero; - - int returnValue = Convert.ToInt32(LogonUser(UserName, DomainName, Password, LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_DEFAULT, ref tokenHandle)); - - if (0 == returnValue) - { - int errCode = Marshal.GetLastWin32Error(); - string errMsg = "LogonUser failed with error code: " + errCode.ToString() + "(" + GetErrorMessage(errCode) + ")"; - ApplicationException exLogon = new ApplicationException(errMsg); - throw (exLogon); - } - - WindowsIdentity newId = new WindowsIdentity(tokenHandle); - impersonatedUser = newId.Impersonate(); - } - catch (Exception ex) - { - Runtime.MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, "Starting Impersonation failed (Sessions feature will not work)" + Environment.NewLine + ex.Message, true); - } - } - - [PermissionSetAttribute(SecurityAction.Demand, Name = "FullTrust")]public void StopImpersonation() - { - if (impersonatedUser == null) - { - return; - } - - try - { - impersonatedUser.Undo(); // Stop impersonating the user. - } - catch (Exception ex) - { - Runtime.MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, "Stopping Impersonation failed" + Environment.NewLine + ex.Message, true); - throw; - } - finally - { - - if (!System.IntPtr.Equals(tokenHandle, IntPtr.Zero)) - { - CloseHandle(tokenHandle); - } - - impersonatedUser = null; - } - } - } -} diff --git a/mRemoteV1/mRemoteV1.csproj b/mRemoteV1/mRemoteV1.csproj index 1cc36857..0eb726c5 100644 --- a/mRemoteV1/mRemoteV1.csproj +++ b/mRemoteV1/mRemoteV1.csproj @@ -377,7 +377,6 @@ Settings.settings -