public static unsafe int AcquireCredentialsHandle(string package, CredentialUse intent, ref SecureCredential authdata, out SafeFreeCredentials outCredential)
 {
     int num = -1;
     IntPtr certContextArray = authdata.certContextArray;
     try
     {
         IntPtr ptr2 = new IntPtr((void*) &certContextArray);
         if (certContextArray != IntPtr.Zero)
         {
             authdata.certContextArray = ptr2;
         }
         outCredential = new SafeFreeCredentials();
         RuntimeHelpers.PrepareConstrainedRegions();
         try
         {
         }
         finally
         {
             long num2;
             num = AcquireCredentialsHandleW(null, package, (int) intent, null, ref authdata, null, null, ref outCredential._handle, out num2);
             if (num != 0)
             {
                 outCredential.SetHandleAsInvalid();
             }
         }
     }
     finally
     {
         authdata.certContextArray = certContextArray;
     }
     return num;
 }
Example #2
0
        public static unsafe int AcquireCredentialsHandle(string package, CredentialUse intent, ref SecureCredential authdata, out SafeFreeCredentials outCredential)
        {
            int    num = -1;
            IntPtr certContextArray = authdata.certContextArray;

            try
            {
                IntPtr ptr2 = new IntPtr((void *)&certContextArray);
                if (certContextArray != IntPtr.Zero)
                {
                    authdata.certContextArray = ptr2;
                }
                outCredential = new SafeFreeCredentials();
                RuntimeHelpers.PrepareConstrainedRegions();
                try
                {
                }
                finally
                {
                    long num2;
                    num = AcquireCredentialsHandleW(null, package, (int)intent, null, ref authdata, null, null, ref outCredential._handle, out num2);
                    if (num != 0)
                    {
                        outCredential.SetHandleAsInvalid();
                    }
                }
            }
            finally
            {
                authdata.certContextArray = certContextArray;
            }
            return(num);
        }
        AcquireCredentialsHandle(SSPIInterface SecModule,
                                 string package,
                                 CredentialUse intent,
                                 AuthIdentity authdata
                                 )
        {
            GlobalLog.Print("SSPIWrapper::AcquireCredentialsHandle#2(): using " + package);

            CredentialsHandle credentialsHandle = new CredentialsHandle(SecModule);
            int errorCode = SecModule.AcquireCredentialsHandle(null,
                                                               package,
                                                               (int)intent,
                                                               0,
                                                               authdata,
                                                               0,
                                                               0,
                                                               ref credentialsHandle.Handle,
                                                               ref credentialsHandle.TimeStamp
                                                               );

            if (errorCode != 0)
            {
#if TRAVE
                GlobalLog.Print("SSPIWrapper::AcquireCredentialsHandle#2(): error " + SecureChannel.MapSecurityStatus((uint)errorCode));
#endif
                throw new Win32Exception(errorCode);
            }
            return(credentialsHandle);
        }
        AcquireCredentialsHandle(SSPIInterface SecModule,
                                 string package,
                                 CredentialUse intent,
                                 SChannelCred scc
                                 )
        {
            GlobalLog.Print("SSPIWrapper::AcquireCredentialsHandle#3(): using " + package);

            CredentialsHandle credentialsHandle      = new CredentialsHandle(SecModule);
            GCHandle          pinnedCertificateArray = new GCHandle();

            if (scc.certContextArray != IntPtr.Zero)
            {
                //
                // We hide the fact that this array must be marshalled
                //  and Pinned, we convert the single value into a pined array
                //  for the Unmanaged call
                //

                IntPtr [] certContextArray = new IntPtr[1] {
                    scc.certContextArray
                };

                pinnedCertificateArray = GCHandle.Alloc(certContextArray, GCHandleType.Pinned);

                //
                // Its now pinned, so get a ptr to its base
                //  this is needed because the Common Language Runtime doesn't support this natively
                //

                scc.certContextArray = pinnedCertificateArray.AddrOfPinnedObject();
            }

            int errorCode = SecModule.AcquireCredentialsHandle(
                null,
                package,
                (int)intent,
                0,
                ref scc,
                0,
                0,
                ref credentialsHandle.Handle,
                ref credentialsHandle.TimeStamp
                );

            if (pinnedCertificateArray.IsAllocated)
            {
                pinnedCertificateArray.Free();
            }

            if (errorCode != 0)
            {
#if TRAVE
                GlobalLog.Print("SSPIWrapper::AcquireCredentialsHandle#3(): error " + SecureChannel.MapSecurityStatus((uint)errorCode));
#endif
                throw new Win32Exception(errorCode);
            }
            GlobalLog.Print("SSPIWrapper::AcquireCredentialsHandle#3(): cred handle = 0x" + String.Format("{0:x}", credentialsHandle.Handle));
            return(credentialsHandle);
        }
Example #5
0
        public static SafeCredHandle SafeAcquireCredentialsHandle(string package, CredentialUse credentialUse)
        {
            CredHandle credHandle;
            long       num;

            Secur32Dll.AcquireCredentialsHandleA(null, package, (int)credentialUse, null, null, null, null, out credHandle, out num);
            return(new SafeCredHandle(credHandle));
        }
        public static unsafe int AcquireCredentialsHandle(SecurDll dll, string package, CredentialUse intent, ref SecureCredential authdata, out SafeFreeCredentials outCredential)
        {
            int num = -1;
            IntPtr certContextArray = authdata.certContextArray;
            try
            {
                long num2;
                IntPtr ptr2 = new IntPtr((void*) &certContextArray);
                if (certContextArray != IntPtr.Zero)
                {
                    authdata.certContextArray = ptr2;
                }
                switch (dll)
                {
                    case SecurDll.SECURITY:
                        outCredential = new SafeFreeCredential_SECURITY();
                        RuntimeHelpers.PrepareConstrainedRegions();
                        try
                        {
                            goto Label_00C5;
                        }
                        finally
                        {
                            num = UnsafeNclNativeMethods.SafeNetHandles_SECURITY.AcquireCredentialsHandleW(null, package, (int) intent, null, ref authdata, null, null, ref outCredential._handle, out num2);
                        }
                        break;

                    case SecurDll.SCHANNEL:
                        break;

                    default:
                        goto Label_0093;
                }
                outCredential = new SafeFreeCredential_SCHANNEL();
                RuntimeHelpers.PrepareConstrainedRegions();
                try
                {
                    goto Label_00C5;
                }
                finally
                {
                    num = UnsafeNclNativeMethods.SafeNetHandles_SCHANNEL.AcquireCredentialsHandleA(null, package, (int) intent, null, ref authdata, null, null, ref outCredential._handle, out num2);
                }
            Label_0093:;
                throw new ArgumentException(SR.GetString("net_invalid_enum", new object[] { "SecurDll" }), "Dll");
            }
            finally
            {
                authdata.certContextArray = certContextArray;
            }
        Label_00C5:
            if (num != 0)
            {
                outCredential.SetHandleAsInvalid();
            }
            return num;
        }
Example #7
0
        /// <summary>
        /// Initializes a new instance of the <see cref="SecurityCredential" /> class.
        /// </summary>
        /// <param name="package">The security package to use.</param>
        /// <param name="use">The manner in which the credential will be used.</param>
        /// <exception cref="ArgumentNullException"><paramref name="package" /> is null.</exception>
        protected SecurityCredential(SecurityPackageInfo package, CredentialUse use)
        {
            PackageInfo = package ?? throw new ArgumentNullException(nameof(package));

            _safeCredentialHandle = new SafeCredentialHandle();
            _safeCredentialHandle.AcquireCredentialHandle(package.Name, use);

            _principleName = new Lazy <string>(() => _safeCredentialHandle.GetPrincipleName());
        }
        public CredentialsContext(string package, CredentialUse intent)
        {
            this.Handle.Reset();
            int num = UnsafeNclNativeMethods.NativeNTSSPI.AcquireCredentialsHandleW(null, package, (int)intent, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, ref this.Handle, ref this.TimeStamp);

            if (num != 0)
            {
                throw new Win32Exception(num);
            }
        }
 public static SafeFreeCredentials AcquireCredentialsHandle(string package, CredentialUse intent, ref IntPtr ppAuthIdentity)
 {
     SafeFreeCredentials outCredential = null;
     int error = SafeFreeCredentials.AcquireCredentialsHandle(package, intent, ref ppAuthIdentity, out outCredential);
     if (error != 0)
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new Win32Exception(error));
     }
     return outCredential;
 }
 public static SafeFreeCredentials AcquireDefaultCredential(string package, CredentialUse intent, params string[] additionalPackages)
 {
     SafeFreeCredentials outCredential = null;
     AuthIdentityEx authIdentity = new AuthIdentityEx(null, null, null, additionalPackages);
     int error = SafeFreeCredentials.AcquireDefaultCredential(package, intent, ref authIdentity, out outCredential);
     if (error != 0)
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new Win32Exception(error));
     }
     return outCredential;
 }
Example #11
0
        public static SafeFreeCredentials AcquireCredentialsHandle(string package, CredentialUse intent, ref IntPtr ppAuthIdentity)
        {
            SafeFreeCredentials safeFreeCredential = null;
            int num = SafeFreeCredentials.AcquireCredentialsHandle(package, intent, ref ppAuthIdentity, out safeFreeCredential);

            if (num != 0)
            {
                throw new Win32Exception(num);
            }
            return(safeFreeCredential);
        }
 internal static extern SecurityStatus AcquireCredentialsHandle(
     string principleName,
     string packageName,
     CredentialUse credentialUse,
     IntPtr loginId,
     IntPtr packageData,
     IntPtr getKeyFunc,
     IntPtr getKeyData,
     ref RawSspiHandle credentialHandle,
     ref TimeStamp expiry
 );
 internal static extern SecurityStatus AcquireCredentialsHandle_AuthData(
     string principleName,
     string packageName,
     CredentialUse credentialUse,
     IntPtr loginId,
     ref NativeAuthData authData,
     IntPtr getKeyFunc,
     IntPtr getKeyData,
     ref RawSspiHandle credentialHandle,
     ref TimeStamp expiry
     );
Example #14
0
        /// <summary>
        /// Acquires the credential handle.
        /// </summary>
        /// <param name="packageName">The package name to use.</param>
        /// <param name="use">The intended use for the credential.</param>
        /// <exception cref="SspiException">The underlying operation failed.</exception>
        public void AcquireCredentialHandle(string packageName, CredentialUse use)
        {
            Timestamp      expiry = new Timestamp();
            SecurityStatus status = NativeMethods.AcquireCredentialsHandle(
                null, packageName, use, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, ref RawHandle, ref expiry);

            if (status != SecurityStatus.Ok)
            {
                throw new SspiException("Failed to acquire credential handle.");
            }
        }
        public static SafeFreeCredentials AcquireCredentialsHandle(string package, CredentialUse intent, ref IntPtr ppAuthIdentity)
        {
            SafeFreeCredentials outCredential = null;
            int error = SafeFreeCredentials.AcquireCredentialsHandle(package, intent, ref ppAuthIdentity, out outCredential);

            if (error != 0)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new Win32Exception(error));
            }
            return(outCredential);
        }
Example #16
0
 internal static extern SecurityStatus AcquireCredentialsHandle
 (
     string pszPrincipal,
     string pszPackage,
     CredentialUse fCredentialUse,
     IntPtr pvLogonID,
     IntPtr pAuthData,
     IntPtr pGetKeyFn,
     IntPtr pvGetKeyArgument,
     ref RawSspiHandle phCredential,
     ref Timestamp ptsExpiry
 );
        public static SafeFreeCredentials AcquireDefaultCredential(string package, CredentialUse intent, params string[] additionalPackages)
        {
            SafeFreeCredentials outCredential = null;
            AuthIdentityEx      authIdentity  = new AuthIdentityEx(null, null, null, additionalPackages);
            int error = SafeFreeCredentials.AcquireDefaultCredential(package, intent, ref authIdentity, out outCredential);

            if (error != 0)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new Win32Exception(error));
            }
            return(outCredential);
        }
Example #18
0
        public static unsafe void AcquireCredentialsHandle(
            CredentialUse credentialUse,
            SchannelCred authData,
            out SafeCredHandle credential,
            out long expiry)
        {
            CredHandle handle;
            GCHandle   paCredHandle = new GCHandle();

            IntPtr[] paCred = null;

            if (authData.cCreds > 0)
            {
                paCred            = new IntPtr[] { authData.paCreds1 };
                paCredHandle      = GCHandle.Alloc(paCred, GCHandleType.Pinned);
                authData.paCreds1 = paCredHandle.AddrOfPinnedObject();
            }

            try
            {
                int error = Secur32Dll.AcquireCredentialsHandleA(
                    null,
                    Secur32Dll.UnispName,
                    (int)credentialUse,
                    null,
                    &authData,
                    null,
                    null,
                    out handle,
                    out expiry);

                credential = new SafeCredHandle(handle);

                if (error != 0)
                {
                    throw new SspiException(error, @"AcquireCredentialsHandleA");
                }
            }
            finally
            {
                if (paCredHandle.IsAllocated)
                {
                    paCredHandle.Free();
                }

                if (paCred != null)
                {
                    authData.paCreds1 = paCred[0];
                }
            }
        }
Example #19
0
        private SafeFreeCredentials AcquireCredentialsHandle(CredentialUse credUsage, ref SecureCredential secureCredential)
        {
            SafeFreeCredentials credentials;

            try
            {
                using (WindowsIdentity.Impersonate(IntPtr.Zero))
                {
                    credentials = SSPIWrapper.AcquireCredentialsHandle(GlobalSSPI.SSPISecureChannel, "Microsoft Unified Security Protocol Provider", credUsage, secureCredential);
                }
            }
            catch
            {
                credentials = SSPIWrapper.AcquireCredentialsHandle(GlobalSSPI.SSPISecureChannel, "Microsoft Unified Security Protocol Provider", credUsage, secureCredential);
            }
            return(credentials);
        }
Example #20
0
        public static int AcquireCredentialsHandle(SecurDll dll, string package, CredentialUse intent, ref AuthIdentity authdata, out SafeFreeCredentials outCredential)
        {
            long num2;
            int  num = -1;

            switch (dll)
            {
            case SecurDll.SECURITY:
                outCredential = new SafeFreeCredential_SECURITY();
                RuntimeHelpers.PrepareConstrainedRegions();
                try
                {
                    goto Label_008D;
                }
                finally
                {
                    num = UnsafeNclNativeMethods.SafeNetHandles_SECURITY.AcquireCredentialsHandleW(null, package, (int)intent, null, ref authdata, null, null, ref outCredential._handle, out num2);
                }
                break;

            case SecurDll.SECUR32:
                break;

            default:
                goto Label_0068;
            }
            outCredential = new SafeFreeCredential_SECUR32();
            RuntimeHelpers.PrepareConstrainedRegions();
            try
            {
                goto Label_008D;
            }
            finally
            {
                num = UnsafeNclNativeMethods.SafeNetHandles_SECUR32.AcquireCredentialsHandleA(null, package, (int)intent, null, ref authdata, null, null, ref outCredential._handle, out num2);
            }
            Label_0068 :;
            throw new ArgumentException(SR.GetString("net_invalid_enum", new object[] { "SecurDll" }), "Dll");
Label_008D:
            if (num != 0)
            {
                outCredential.SetHandleAsInvalid();
            }
            return(num);
        }
 public static SafeFreeCredentials AcquireDefaultCredential(SSPIInterface SecModule, string package, CredentialUse intent)
 {
     if (Logging.On)
     {
         Logging.PrintInfo(Logging.Web, string.Concat(new object[] { "AcquireDefaultCredential(package = ", package, ", intent  = ", intent, ")" }));
     }
     SafeFreeCredentials outCredential = null;
     int error = SecModule.AcquireDefaultCredential(package, intent, out outCredential);
     if (error == 0)
     {
         return outCredential;
     }
     if (Logging.On)
     {
         Logging.PrintError(Logging.Web, SR.GetString("net_log_operation_failed_with_error", new object[] { "AcquireDefaultCredential()", string.Format(CultureInfo.CurrentCulture, "0X{0:X}", new object[] { error }) }));
     }
     throw new Win32Exception(error);
 }
Example #22
0
        public static SafeFreeCredentials AcquireCredentialsHandle(
            string package,
            CredentialUse intent,
            ref AuthIdentityEx authdata)
        {
            SafeFreeCredentials credentialsHandle = null;
            int errorCode = SafeFreeCredentials.AcquireCredentialsHandle(package,
                                                                         intent,
                                                                         ref authdata,
                                                                         out credentialsHandle
                                                                         );

            if (errorCode != 0)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new Win32Exception(errorCode));
            }
            return(credentialsHandle);
        }
        public static int AcquireCredentialsHandle(SecurDll dll, string package, CredentialUse intent, ref AuthIdentity authdata, out SafeFreeCredentials outCredential)
        {
            long num2;
            int num = -1;
            switch (dll)
            {
                case SecurDll.SECURITY:
                    outCredential = new SafeFreeCredential_SECURITY();
                    RuntimeHelpers.PrepareConstrainedRegions();
                    try
                    {
                        goto Label_008D;
                    }
                    finally
                    {
                        num = UnsafeNclNativeMethods.SafeNetHandles_SECURITY.AcquireCredentialsHandleW(null, package, (int) intent, null, ref authdata, null, null, ref outCredential._handle, out num2);
                    }
                    break;

                case SecurDll.SECUR32:
                    break;

                default:
                    goto Label_0068;
            }
            outCredential = new SafeFreeCredential_SECUR32();
            RuntimeHelpers.PrepareConstrainedRegions();
            try
            {
                goto Label_008D;
            }
            finally
            {
                num = UnsafeNclNativeMethods.SafeNetHandles_SECUR32.AcquireCredentialsHandleA(null, package, (int) intent, null, ref authdata, null, null, ref outCredential._handle, out num2);
            }
        Label_0068:;
            throw new ArgumentException(SR.GetString("net_invalid_enum", new object[] { "SecurDll" }), "Dll");
        Label_008D:
            if (num != 0)
            {
                outCredential.SetHandleAsInvalid();
            }
            return num;
        }
 public static int AcquireCredentialsHandle(string package, CredentialUse intent, ref IntPtr ppAuthIdentity, out SafeFreeCredentials outCredential)
 {
     int num = -1;
     outCredential = new SafeFreeCredentials();
     RuntimeHelpers.PrepareConstrainedRegions();
     try
     {
     }
     finally
     {
         long num2;
         num = AcquireCredentialsHandleW(null, package, (int) intent, null, ppAuthIdentity, null, null, ref outCredential._handle, out num2);
         if (num != 0)
         {
             outCredential.SetHandleAsInvalid();
         }
     }
     return num;
 }
Example #25
0
        public static SafeFreeCredentials AcquireCredentialsHandle(
            string package,
            CredentialUse intent,
            SecureCredential scc)
        {
            SafeFreeCredentials outCredential = null;
            int errorCode = SafeFreeCredentials.AcquireCredentialsHandle(
                package,
                intent,
                ref scc,
                out outCredential
                );

            if (errorCode != 0)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new Win32Exception(errorCode));
            }
            return(outCredential);
        }
        public static SafeFreeCredentials AcquireDefaultCredential(SSPIInterface SecModule, string package, CredentialUse intent) {
            GlobalLog.Print("SSPIWrapper::AcquireDefaultCredential(): using " + package);
            if (Logging.On) Logging.PrintInfo(Logging.Web, 
                "AcquireDefaultCredential(" +
                "package = " + package + ", " +
                "intent  = " + intent + ")");


            SafeFreeCredentials outCredential = null;
            int errorCode = SecModule.AcquireDefaultCredential(package, intent, out outCredential );

            if (errorCode != 0) {
#if TRAVE
                GlobalLog.Print("SSPIWrapper::AcquireDefaultCredential(): error " + SecureChannel.MapSecurityStatus((uint)errorCode));
#endif
                if (Logging.On) Logging.PrintError(Logging.Web, SR.GetString(SR.net_log_operation_failed_with_error, "AcquireDefaultCredential()", String.Format(CultureInfo.CurrentCulture, "0X{0:X}", errorCode)));
                throw new Win32Exception(errorCode);
            }
            return outCredential;
        }
Example #27
0
        public static int AcquireCredentialsHandle(string package, CredentialUse intent, ref IntPtr ppAuthIdentity, out SafeFreeCredentials outCredential)
        {
            int num = -1;

            outCredential = new SafeFreeCredentials();
            RuntimeHelpers.PrepareConstrainedRegions();
            try
            {
            }
            finally
            {
                long num2;
                num = AcquireCredentialsHandleW(null, package, (int)intent, null, ppAuthIdentity, null, null, ref outCredential._handle, out num2);
                if (num != 0)
                {
                    outCredential.SetHandleAsInvalid();
                }
            }
            return(num);
        }
Example #28
0
        private void Init(NativeAuthData authData, string secPackage, CredentialUse use)
        {
            string         packageName;
            TimeStamp      rawExpiry = new TimeStamp();
            SecurityStatus status    = SecurityStatus.InternalError;

            // -- Package --
            // Copy off for the call, since this.SecurityPackage is a property.
            packageName = this.SecurityPackage;

            this.Handle = new SafeCredentialHandle();


            // The finally clause is the actual constrained region. The VM pre-allocates any stack space,
            // performs any allocations it needs to prepare methods for execution, and postpones any
            // instances of the 'uncatchable' exceptions (ThreadAbort, StackOverflow, OutOfMemory).
            RuntimeHelpers.PrepareConstrainedRegions();
            try { }
            finally
            {
                status = CredentialNativeMethods.AcquireCredentialsHandle_AuthData(
                    null,
                    packageName,
                    use,
                    IntPtr.Zero,
                    ref authData,
                    IntPtr.Zero,
                    IntPtr.Zero,
                    ref this.Handle.rawHandle,
                    ref rawExpiry
                    );
            }

            if (status != SecurityStatus.OK)
            {
                throw new SSPIException("Failed to call AcquireCredentialHandle", status);
            }

            this.Expiry = rawExpiry.ToDateTime();
        }
        private void Init( CredentialUse use )
        {
            string packageName;
            TimeStamp rawExpiry = new TimeStamp();
            SecurityStatus status = SecurityStatus.InternalError;

            // -- Package --
            // Copy off for the call, since this.SecurityPackage is a property.
            packageName = this.SecurityPackage;

            this.Handle = new SafeCredentialHandle();

            // The finally clause is the actual constrained region. The VM pre-allocates any stack space,
            // performs any allocations it needs to prepare methods for execution, and postpones any 
            // instances of the 'uncatchable' exceptions (ThreadAbort, StackOverflow, OutOfMemory).
            RuntimeHelpers.PrepareConstrainedRegions();
            try { }
            finally
            {
                status = CredentialNativeMethods.AcquireCredentialsHandle(
                   null,
                   packageName,
                   use,
                   IntPtr.Zero,
                   IntPtr.Zero,
                   IntPtr.Zero,
                   IntPtr.Zero,
                   ref this.Handle.rawHandle,
                   ref rawExpiry
               );
            }

            if ( status != SecurityStatus.OK )
            {
                throw new SspiException( "Failed to call AcquireCredentialHandle", status );
            }

            this.Expiry = rawExpiry.ToDateTime();
        }
Example #30
0
        public unsafe static void AcquireCredentialsHandle(CredentialUse credentialUse, SchannelCred authData, out SafeCredHandle credential, out long expiry)
        {
            GCHandle gCHandle = default(GCHandle);

            IntPtr[] array = null;
            if (authData.cCreds > 0)
            {
                array = new IntPtr[]
                {
                    authData.paCreds1
                };
                gCHandle          = GCHandle.Alloc(array, GCHandleType.Pinned);
                authData.paCreds1 = gCHandle.AddrOfPinnedObject();
            }
            try
            {
                CredHandle credHandle;
                int        num = Secur32Dll.AcquireCredentialsHandleA(null, "Microsoft Unified Security Protocol Provider", (int)credentialUse, null, (void *)(&authData), null, null, out credHandle, out expiry);
                if (num != 0)
                {
                    throw new SspiException(num, "AcquireCredentialsHandleA");
                }
                credential = new SafeCredHandle(credHandle);
            }
            finally
            {
                if (gCHandle.IsAllocated)
                {
                    gCHandle.Free();
                }
                if (array != null)
                {
                    authData.paCreds1 = array[0];
                }
            }
        }
        public static SafeFreeCredentials AcquireDefaultCredential(SSPIInterface SecModule, string package, CredentialUse intent)
        {
            if (Logging.On)
            {
                Logging.PrintInfo(Logging.Web, string.Concat(new object[] { "AcquireDefaultCredential(package = ", package, ", intent  = ", intent, ")" }));
            }
            SafeFreeCredentials outCredential = null;
            int error = SecModule.AcquireDefaultCredential(package, intent, out outCredential);

            if (error == 0)
            {
                return(outCredential);
            }
            if (Logging.On)
            {
                Logging.PrintError(Logging.Web, SR.GetString("net_log_operation_failed_with_error", new object[] { "AcquireDefaultCredential()", string.Format(CultureInfo.CurrentCulture, "0X{0:X}", new object[] { error }) }));
            }
            throw new Win32Exception(error);
        }
        public unsafe static int AcquireDefaultCredential( SecurDll dll,
                                                    string package,
                                                    CredentialUse intent,
                                                    out SafeFreeCredentials outCredential
                                                    )
        {

            GlobalLog.Print("SafeFreeCredentials::AcquireDefaultCredential("
                            + dll + ","
                            + package + ", "
                            + intent + ")"
                            );

            int errorCode = -1;
            long timeStamp;

            switch (dll) {
            case SecurDll.SECURITY:
                        outCredential = new SafeFreeCredential_SECURITY();

                        RuntimeHelpers.PrepareConstrainedRegions();
                        try {} finally {

                            errorCode = UnsafeNclNativeMethods.SafeNetHandles_SECURITY.AcquireCredentialsHandleW(
                                                               null,
                                                               package,
                                                               (int)intent,
                                                               null,
                                                               IntPtr.Zero,
                                                               null,
                                                               null,
                                                               ref outCredential._handle,
                                                               out timeStamp
                                                               );
                        }
                        break;

            default:  throw new ArgumentException(SR.GetString(SR.net_invalid_enum, "SecurDll"), "Dll");
            }

#if TRAVE
            GlobalLog.Print("Unmanaged::AcquireCredentialsHandle() returns 0x"
                            + errorCode.ToString("x")
                            + ", handle = " + outCredential.ToString()
                            );
#endif

            if (errorCode != 0) {
                outCredential.SetHandleAsInvalid();
            }
            return errorCode;

        }
 public int AcquireCredentialsHandle(string moduleName, CredentialUse usage, ref SecureCredential authdata, out SafeFreeCredentials outCredential) {
     return SafeFreeCredentials.AcquireCredentialsHandle(Library, moduleName, usage, ref authdata, out outCredential);
 }
 /// <summary>
 /// Initializes a new instance of the CurrentCredential class.
 /// </summary>
 /// <param name="securityPackage">The security package to acquire the credential handle
 /// from.</param>
 /// <param name="use">The manner in which the credentials will be used - Inbound typically
 /// represents servers, outbound typically represent clients.</param>
 public CurrentCredential(string securityPackage, CredentialUse use) :
     base(securityPackage)
 {
     Init(use);
 }
Example #35
0
        SafeFreeCredentials AcquireCredentialsHandle(CredentialUse credUsage, ref SecureCredential secureCredential)
        {
            // First try without impersonation, if it fails, then try the process account.
            // I.E. We don't know which account the certificate context was created under.
            try {
                //
                // For v 1.1 compat We want to ensure the credential are accessed under >>process<< acount.
                //
#if FEATURE_MONO_CAS
                using (WindowsIdentity.Impersonate(IntPtr.Zero))
#endif
                {
                    return SSPIWrapper.AcquireCredentialsHandle(m_SecModule, SecurityPackage, credUsage, secureCredential);
                }
            } catch {
                return SSPIWrapper.AcquireCredentialsHandle(m_SecModule, SecurityPackage, credUsage, secureCredential);
            }
        }
        //This method should never be called for this type
        //public new IntPtr DangerousGetHandle()
        //{
        //    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException());
        //}

        public static unsafe int AcquireCredentialsHandle(
            string package,
            CredentialUse intent,
            ref AuthIdentityEx authdata,
            out SafeFreeCredentials outCredential)
        {
            int errorCode = -1;
            long timeStamp;

            outCredential = new SafeFreeCredentials();
            RuntimeHelpers.PrepareConstrainedRegions();
            try { }
            finally
            {
                // PreSharp Bug: Call 'Marshal.GetLastWin32Error' or 'Marshal.GetHRForLastWin32Error' before any other interop call. 
#pragma warning suppress 56523 // The API does not set Win32 Last Error. It returns a error code.
                errorCode = AcquireCredentialsHandleW(
                    null,
                    package,
                    (int)intent,
                    null,
                    ref authdata,
                    null,
                    null,
                    ref outCredential._handle,
                    out timeStamp
                    );
                if (errorCode != 0)
                {
                    outCredential.SetHandleAsInvalid();
                }
            }
            return errorCode;
        }
        public static SafeFreeCredentials AcquireCredentialsHandle(SSPIInterface SecModule, string package, CredentialUse intent, ref SafeSspiAuthDataHandle authdata)
        {
            if (Logging.On)
            {
                Logging.PrintInfo(Logging.Web,
                                  "AcquireCredentialsHandle(" +
                                  "package  = " + package + ", " +
                                  "intent   = " + intent + ", " +
                                  "authdata = " + authdata + ")");
            }

            SafeFreeCredentials credentialsHandle = null;
            int errorCode = SecModule.AcquireCredentialsHandle(package, intent, ref authdata, out credentialsHandle);

            if (errorCode != 0)
            {
                if (Logging.On)
                {
                    Logging.PrintError(Logging.Web, SR.GetString(SR.net_log_operation_failed_with_error, "AcquireCredentialsHandle()", String.Format(CultureInfo.CurrentCulture, "0X{0:X}", errorCode)));
                }
                throw new Win32Exception(errorCode);
            }
            return(credentialsHandle);
        }
        public static SafeFreeCredentials AcquireDefaultCredential(SSPIInterface SecModule, string package, CredentialUse intent)
        {
            SafeFreeCredentials outCredential = null;
            string currentIdentityKey         = null;
            bool   isIdentityCached;

            if (s_DefaultCredentialsHandleCacheEnabled)
            {
                currentIdentityKey = string.Format("{0}_{1}_{2}", package, intent.ToString(), WindowsIdentity.GetCurrent().Name);
                isIdentityCached   = s_DefaultCredentialsHandleCache.Value.TryGetValue(currentIdentityKey, out outCredential);
            }
            else
            {
                isIdentityCached = false;
            }

            GlobalLog.Print("SSPIWrapper::AcquireDefaultCredential(): using " + package);
            if (Logging.On)
            {
                if (currentIdentityKey == null)
                {
                    // We aren't using the cache but it's still useful to log the current identity for diagnostics.
                    currentIdentityKey = string.Format("{0}_{1}_{2}", package, intent.ToString(), WindowsIdentity.GetCurrent().Name);
                }

                Logging.PrintInfo(Logging.Web,
                                  "AcquireDefaultCredential(" +
                                  "package = " + package + ", " +
                                  "intent = " + intent + ", " +
                                  "identity = " + currentIdentityKey + ", " +
                                  "cached = " + isIdentityCached + ")");
            }

            if (!isIdentityCached)
            {
                int errorCode = SecModule.AcquireDefaultCredential(package, intent, out outCredential);

                if (errorCode != 0)
                {
#if TRAVE
                    GlobalLog.Print("SSPIWrapper::AcquireDefaultCredential(): error " + SecureChannel.MapSecurityStatus((uint)errorCode));
#endif
                    if (Logging.On)
                    {
                        Logging.PrintError(Logging.Web, SR.GetString(SR.net_log_operation_failed_with_error, "AcquireDefaultCredential()", String.Format(CultureInfo.CurrentCulture, "0X{0:X}", errorCode)));
                    }
                    throw new Win32Exception(errorCode);
                }

                if (s_DefaultCredentialsHandleCacheEnabled &&
                    s_DefaultCredentialsHandleCache.Value.Count < s_DefaultCredentialsHandleCacheSize)
                {
                    try {
                        s_DefaultCredentialsHandleCache.Value.TryAdd(currentIdentityKey, outCredential);
                    }
                    catch (OverflowException) {
                        // Unlikely to be thrown since it requires Int32.MaxValue items to already be in the cache.
                        // But we don't want to throw a new exception. So, we'll ignore this error and accept that
                        // the handle won't be cached.
                    }
                }
            }

            return(outCredential);
        }
 public static SafeFreeCredentials AcquireCredentialsHandle(
     string package,
     CredentialUse intent,
     ref AuthIdentityEx authdata)
 {
     SafeFreeCredentials credentialsHandle = null;
     int errorCode = SafeFreeCredentials.AcquireCredentialsHandle(package,
         intent,
         ref authdata,
         out credentialsHandle
         );
     if (errorCode != 0)
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new Win32Exception(errorCode));
     }
     return credentialsHandle;
 }
        public static SafeFreeCredentials AcquireDefaultCredential(SSPIInterface SecModule, string package, CredentialUse intent)
        {
            GlobalLog.Print("SSPIWrapper::AcquireDefaultCredential(): using " + package);
            if (Logging.On)
            {
                Logging.PrintInfo(Logging.Web,
                                  "AcquireDefaultCredential(" +
                                  "package = " + package + ", " +
                                  "intent  = " + intent + ")");
            }


            SafeFreeCredentials outCredential = null;
            int errorCode = SecModule.AcquireDefaultCredential(package, intent, out outCredential);

            if (errorCode != 0)
            {
#if TRAVE
                GlobalLog.Print("SSPIWrapper::AcquireDefaultCredential(): error " + SecureChannel.MapSecurityStatus((uint)errorCode));
#endif
                if (Logging.On)
                {
                    Logging.PrintError(Logging.Web, SR.GetString(SR.net_log_operation_failed_with_error, "AcquireDefaultCredential()", String.Format(CultureInfo.CurrentCulture, "0X{0:X}", errorCode)));
                }
                throw new Win32Exception(errorCode);
            }
            return(outCredential);
        }
 public static SafeFreeCredentials AcquireCredentialsHandle(
     string package,
     CredentialUse intent,
     SecureCredential scc)
 {
     SafeFreeCredentials outCredential = null;
     int errorCode = SafeFreeCredentials.AcquireCredentialsHandle(
         package,
         intent,
         ref scc,
         out outCredential
         );
     if (errorCode != 0)
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new Win32Exception(errorCode));
     }
     return outCredential;
 }
Example #42
0
		internal static SafeFreeCredentials AcquireCredentialsHandle (SSPIInterface SecModule, string package, CredentialUse intent, SecureCredential scc)
		{
			return new SafeFreeCredentials (scc);
		}
Example #43
0
 internal static SafeFreeCredentials AcquireCredentialsHandle(SSPIInterface SecModule, string package, CredentialUse intent, SecureCredential scc)
 {
     return(new SafeFreeCredentials(scc));
 }
        // This overload is only called on Win7+ where SspiEncodeStringsAsAuthIdentity() was used to
        // create the authData blob.
        public unsafe static int AcquireCredentialsHandle(
                                                    string package,
                                                    CredentialUse intent,
                                                    ref SafeSspiAuthDataHandle authdata,
                                                    out SafeFreeCredentials outCredential
                                                    )
        {
            int errorCode = -1;
            long timeStamp;

            outCredential = new SafeFreeCredential_SECURITY();

            RuntimeHelpers.PrepareConstrainedRegions();
            try { }
            finally 
            {
                errorCode = UnsafeNclNativeMethods.SafeNetHandles_SECURITY.AcquireCredentialsHandleW(
                                                       null,
                                                       package,
                                                       (int)intent,
                                                       null,
                                                       authdata,
                                                       null,
                                                       null,
                                                       ref outCredential._handle,
                                                       out timeStamp
                                                       );
            }

            if (errorCode != 0)
            {
                outCredential.SetHandleAsInvalid();
            }
            return errorCode;
        }
 private SafeFreeCredentials AcquireCredentialsHandle(CredentialUse credUsage, ref SecureCredential secureCredential)
 {
     SafeFreeCredentials credentials;
     try
     {
         using (WindowsIdentity.Impersonate(IntPtr.Zero))
         {
             credentials = SSPIWrapper.AcquireCredentialsHandle(GlobalSSPI.SSPISecureChannel, "Microsoft Unified Security Protocol Provider", credUsage, secureCredential);
         }
     }
     catch
     {
         credentials = SSPIWrapper.AcquireCredentialsHandle(GlobalSSPI.SSPISecureChannel, "Microsoft Unified Security Protocol Provider", credUsage, secureCredential);
     }
     return credentials;
 }
        public unsafe static int AcquireCredentialsHandle( SecurDll dll,
                                                    string package,
                                                    CredentialUse intent,
                                                    ref SecureCredential authdata,
                                                    out SafeFreeCredentials outCredential
                                                    )
        {

            GlobalLog.Print("SafeFreeCredentials::AcquireCredentialsHandle#2("
                            + dll + ","
                            + package + ", "
                            + intent + ", "
                            + authdata + ")"
                            );

            int errorCode = -1;
            long timeStamp;


            // If there is a certificate, wrap it into an array.
            // Not threadsafe.
            IntPtr copiedPtr = authdata.certContextArray;
            try
            {
                IntPtr certArrayPtr = new IntPtr(&copiedPtr);
                if (copiedPtr != IntPtr.Zero) {
                    authdata.certContextArray = certArrayPtr;
                }

                switch (dll) {
                case SecurDll.SECURITY:
                            outCredential = new SafeFreeCredential_SECURITY();

                            RuntimeHelpers.PrepareConstrainedRegions();
                            try {} finally {

                                errorCode = UnsafeNclNativeMethods.SafeNetHandles_SECURITY.AcquireCredentialsHandleW(
                                                                   null,
                                                                   package,
                                                                   (int)intent,
                                                                   null,
                                                                   ref authdata,
                                                                   null,
                                                                   null,
                                                                   ref outCredential._handle,
                                                                   out timeStamp
                                                                   );
                            }
                            break;

                default:  throw new ArgumentException(SR.GetString(SR.net_invalid_enum, "SecurDll"), "Dll");
                }
            }
            finally
            {
                authdata.certContextArray = copiedPtr;
            }

#if TRAVE
            GlobalLog.Print("Unmanaged::AcquireCredentialsHandle() returns 0x"
                            + errorCode.ToString("x")
                            + ", handle = " + outCredential.ToString()
                            );
#endif

            if (errorCode != 0) {
                outCredential.SetHandleAsInvalid();
            }
            return errorCode;

        }
 /// <summary>
 /// Initializes a new instance of the CurrentCredential class.
 /// </summary>
 /// <param name="securityPackage">The security package to acquire the credential handle
 /// from.</param>
 /// <param name="use">The manner in which the credentials will be used - Inbound typically
 /// represents servers, outbound typically represent clients.</param>
 public CurrentCredential( string securityPackage, CredentialUse use ) :
     base( securityPackage )
 {
     Init( use );
 }
        public static SafeFreeCredentials AcquireCredentialsHandle(SSPIInterface SecModule, string package, CredentialUse intent, ref SafeSspiAuthDataHandle authdata) {

            if (Logging.On) Logging.PrintInfo(Logging.Web,
                "AcquireCredentialsHandle(" +
                "package  = " + package + ", " +
                "intent   = " + intent + ", " +
                "authdata = " + authdata + ")");

            SafeFreeCredentials credentialsHandle = null;
            int errorCode = SecModule.AcquireCredentialsHandle(package, intent, ref authdata, out credentialsHandle);

            if (errorCode != 0) {
                if (Logging.On) Logging.PrintError(Logging.Web, SR.GetString(SR.net_log_operation_failed_with_error, "AcquireCredentialsHandle()", String.Format(CultureInfo.CurrentCulture, "0X{0:X}", errorCode)));
                throw new Win32Exception(errorCode);
            }
            return credentialsHandle;
        }
Example #49
0
        /// <summary>
        /// Initializes a new instance of the PasswordCredential class.
        /// </summary>
        /// <remarks>
        /// It is possible to acquire a valid handle to credentials that do not provide a valid
        /// username-password combination. The username and password are not validation until the
        /// authentication cycle begins.
        /// </remarks>
        /// <param name="domain">The domain to authenticate to.</param>
        /// <param name="username">The username of the user to authenticate as.</param>
        /// <param name="password">The user's password.</param>
        /// <param name="secPackage">The SSPI security package to create credentials for.</param>
        /// <param name="use">
        /// Specify inbound when acquiring credentials for a server; outbound for a client.
        /// </param>
        public PasswordCredential(string domain, string username, string password, string secPackage, CredentialUse use)
            : base(secPackage)
        {
            NativeAuthData authData = new NativeAuthData(domain, username, password, NativeAuthDataFlag.Unicode);

            Init(authData, secPackage, use);
        }
Example #50
0
 public int AcquireCredentialsHandle(string moduleName, CredentialUse usage, ref SafeSspiAuthDataHandle authdata, out SafeFreeCredentials outCredential)
 {
     return(SafeFreeCredentials.AcquireCredentialsHandle(moduleName, usage, ref authdata, out outCredential));
 }
        public static unsafe int AcquireCredentialsHandle(
            string package,
            CredentialUse intent,
            ref SecureCredential authdata,
            out SafeFreeCredentials outCredential)
        {
            int errorCode = -1;
            long timeStamp;

            // If there is a certificate, wrap it into an array
            IntPtr copiedPtr = authdata.certContextArray;
            try
            {
                IntPtr certArrayPtr = new IntPtr(&copiedPtr);
                if (copiedPtr != IntPtr.Zero)
                {
                    authdata.certContextArray = certArrayPtr;
                }

                outCredential = new SafeFreeCredentials();
                RuntimeHelpers.PrepareConstrainedRegions();
                try { }
                finally
                {
                    // PreSharp Bug: Call 'Marshal.GetLastWin32Error' or 'Marshal.GetHRForLastWin32Error' before any other interop call. 
#pragma warning suppress 56523 // The API does not set Win32 Last Error. It returns a error code.
                    errorCode = AcquireCredentialsHandleW(
                                    null,
                                    package,
                                    (int)intent,
                                    null,
                                    ref authdata,
                                    null,
                                    null,
                                    ref outCredential._handle,
                                    out timeStamp
                                    );
                    if (errorCode != 0)
                    {
                        outCredential.SetHandleAsInvalid();
                    }
                }
            }
            finally
            {
                authdata.certContextArray = copiedPtr;
            }

            return errorCode;
        }
Example #52
0
 public int AcquireDefaultCredential(string moduleName, CredentialUse usage, out SafeFreeCredentials outCredential)
 {
     return(SafeFreeCredentials.AcquireDefaultCredential(Library, moduleName, usage, out outCredential));
 }
Example #53
0
 public int AcquireCredentialsHandle(string moduleName, CredentialUse usage, ref SecureCredential authdata, out SafeFreeCredentials outCredential)
 {
     return(SafeFreeCredentials.AcquireCredentialsHandle(Library, moduleName, usage, ref authdata, out outCredential));
 }
 public int AcquireCredentialsHandle(string moduleName, CredentialUse usage, ref SafeSspiAuthDataHandle authdata, out SafeFreeCredentials outCredential) {
     return SafeFreeCredentials.AcquireCredentialsHandle(moduleName, usage, ref authdata, out outCredential);
 }
 public int AcquireDefaultCredential(string moduleName, CredentialUse usage, out SafeFreeCredentials outCredential) {
     return SafeFreeCredentials.AcquireDefaultCredential(Library, moduleName, usage, out outCredential);
 }