private static KrbPrincipalName SplitX500(string principal, string realm, PrincipalNameType type) { var x500 = new X500DistinguishedName(principal); var nameSplit = x500.Name.Split(',').ToList(); if (!string.IsNullOrWhiteSpace(realm)) { var last = nameSplit.Last(); if (!last.StartsWith("DC=")) { var realmSplit = realm.Split('.'); foreach (var sub in realmSplit) { nameSplit.Add($"DC={sub}"); } } } return(new KrbPrincipalName { Type = type, Name = nameSplit.ToArray() }); }
public static KrbPrincipalName FromPrincipal( IKerberosPrincipal principal, PrincipalNameType type = PrincipalNameType.NT_PRINCIPAL, string realm = null ) { return(FromString(principal.PrincipalName, type, realm)); }
private static string MakeFullName(IEnumerable <string> names, PrincipalNameType type, bool normalizeAlias = false) { var seperator = NameTypeSeperator[(int)type]; using (var enumerator = names.GetEnumerator()) { if (!enumerator.MoveNext()) { return(""); } var sb = new StringBuilder(); string firstPortion = enumerator.Current; if (seperator == "/" && normalizeAlias) { if (ServiceAliases.TryGetValue(firstPortion.ToLowerInvariant(), out string alias)) { firstPortion = alias; } } sb.Append(firstPortion); if (enumerator.MoveNext()) { sb.Append(seperator); sb.Append(enumerator.Current); } while (enumerator.MoveNext()) { if (enumerator.Current != null) { if (seperator != ",") { sb.Append("@"); } else { sb.Append(seperator); } sb.Append(enumerator.Current); } } return(sb.ToString()); } }
public static KrbPrincipalName FromPrincipal( IKerberosPrincipal principal, PrincipalNameType type = PrincipalNameType.NT_PRINCIPAL, string realm = null ) { var nameSplit = principal.PrincipalName.Split('@'); var name = nameSplit[0]; if (string.IsNullOrWhiteSpace(realm) && nameSplit.Length > 0) { realm = nameSplit[1]; } return(new KrbPrincipalName { Type = type, Name = new[] { name, realm.ToUpperInvariant() } }); }
private static KrbPrincipalName SplitAsUpn(string principal, string realm, PrincipalNameType type) { var nameSplit = principal.Split('@').ToList(); if (!string.IsNullOrWhiteSpace(realm) && nameSplit.Count == 1) { nameSplit.Add(realm); } if (type == PrincipalNameType.NT_SRV_INST) { return(new KrbPrincipalName { Type = type, Name = nameSplit.ToArray() }); } return(new KrbPrincipalName { Type = type, Name = new[] { MakeFullName(nameSplit, PrincipalNameType.NT_PRINCIPAL) } }); }
private static KrbPrincipalName SplitAsService(string principal, string realm, PrincipalNameType type) { var principalSplit = principal.Split('/'); var name = new List <string> { principalSplit[0] }; if (principalSplit.Length > 1) { var nameSplit = SplitAsUpn(principalSplit[1], realm, type); name.AddRange(nameSplit.Name); } else { if (!string.IsNullOrWhiteSpace(realm)) { name.Add(realm); } } return(new KrbPrincipalName { Type = type, Name = name.ToArray() }); }
public PrincipalName(PrincipalNameType Type, string realm, IEnumerable <string> names) { this.Type = Type; this.Realm = realm; this.Name = names.ToArray(); }
public PrincipalName(PrincipalNameType nameType, string realm, IEnumerable <string> names) { NameType = nameType; Realm = realm; this.names = new List <string>(names); }