| File: System\DirectoryServices\AccountManagement\NetCred.cs | Web Access |
| Project: src\runtime\src\libraries\System.DirectoryServices.AccountManagement\src\System.DirectoryServices.AccountManagement.csproj (System.DirectoryServices.AccountManagement) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.Diagnostics; using System.Globalization; using System.Net; using System.Runtime.InteropServices; using System.Text; namespace System.DirectoryServices.AccountManagement { internal sealed class NetCred { public NetCred(string username, string password) { _username = username; _password = password; } public string UserName { get { return _username; } } public string Password { get { return _password; } } public string ParsedUserName { get { if (null == _parsedUserName) { SplitUsername(_username, ref _parsedUserName, ref _domainname); } return _parsedUserName; } } public string Domain { get { if (null == _parsedUserName) { SplitUsername(_username, ref _parsedUserName, ref _domainname); } return _domainname; } } private unsafe void SplitUsername(string username, ref string parsedUserName, ref string parsedDomainName) { // If the user has passed null creds then parsed components should also be null. if (username == null) { parsedDomainName = null; parsedUserName = null; return; } // Logon user expects the username in UPN or to have the username and domain split to the separate parameters. // It does not work properly with NT4 style name formats. This function will put the username in the proper format. fixed (char* splitUsername = new char[Interop.Credui.CRED_MAX_USERNAME_LENGTH]) fixed (char* splitDomain = new char[Interop.Credui.CRED_MAX_DOMAIN_TARGET_LENGTH]) { int result = Interop.Credui.CredUIParseUserName( username, splitUsername, Interop.Credui.CRED_MAX_USERNAME_LENGTH, splitDomain, Interop.Credui.CRED_MAX_DOMAIN_TARGET_LENGTH); // If CredUiParseUsername fails then username format must have been in a format it does not expect. // Just pass then entire username as the user passed it with a null domain string. if (result != 0) { parsedDomainName = null; parsedUserName = username; } else { parsedDomainName = new string(splitDomain); parsedUserName = new string(splitUsername); } } } // private readonly string _username; private readonly string _password; private string _domainname; private string _parsedUserName; } }