public static void Main()
IWindowsUser adUser = new IWindowsUser();
adUser.DomainLoginName = "Pugnet\\TCulter";
adUser.UserPrincipalName = "TCulter@Pugnet.com";
string personLoginName = "TCulter@Pugnet.com";
Console.WriteLine("TEST-1: Compare TCulter@Pugnet - TCulter@Pugnet");
bool domainMatches = ValidateAdUserDomainMatchesPersonLoginName(adUser, personLoginName);
Console.WriteLine("No match");
Console.WriteLine("Match");
personLoginName = "Pugnet\\TCulter";
Console.WriteLine("TEST-2: Compare Pugnet\\TCulter - TCulter@Pugnet");
domainMatches = ValidateAdUserDomainMatchesPersonLoginName(adUser, personLoginName);
Console.WriteLine("No match");
Console.WriteLine("Match");
private static bool ValidateAdUserDomainMatchesPersonLoginName(IWindowsUser adUser, string personLoginName)
var domainMatches = true;
string personAdDomainName;
Username.Split(personLoginName, out personAdUserName, out personAdDomainName);
var personLoginNameIsSlashFormat = personLoginName.Contains("\\");
var personLoginNameIsAtFormat = personLoginName.Contains("@");
if ((personLoginNameIsSlashFormat && personLoginName.ToUpperInvariant() != adUser.DomainLoginName.ToUpperInvariant()) || (personLoginNameIsAtFormat && (adUser.UserPrincipalName == null || (adUser.UserPrincipalName != null && adUser.UserPrincipalName.ToUpperInvariant() != personLoginName.ToUpperInvariant()))))
private class IWindowsUser
public string DomainLoginName { get; set; }
public string UserPrincipalName { get; set; }
public static class Username
public static void Split(string username, out string principal, out string authority)
throw new ArgumentNullException("username");
string[] parts = username.Split(Seperators.All);
else if (parts.Length == 2)
if (username.IndexOf(Seperators.Internet) != -1)
throw new ArgumentOutOfRangeException("username", "Login name can contain no more than one @ or \\ character.");
private static class Seperators
char[] all = {WindowsNT, Internet};
public static char Internet
public static char WindowsNT