Example #1
0
        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()
            });
        }
Example #2
0
 public static KrbPrincipalName FromPrincipal(
     IKerberosPrincipal principal,
     PrincipalNameType type = PrincipalNameType.NT_PRINCIPAL,
     string realm           = null
     )
 {
     return(FromString(principal.PrincipalName, type, realm));
 }
Example #3
0
        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());
            }
        }
Example #4
0
        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() }
            });
        }
Example #5
0
        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) }
            });
        }
Example #6
0
        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()
            });
        }
Example #7
0
 public PrincipalName(PrincipalNameType Type, string realm, IEnumerable <string> names)
 {
     this.Type  = Type;
     this.Realm = realm;
     this.Name  = names.ToArray();
 }
Example #8
0
 public PrincipalName(PrincipalNameType nameType, string realm, IEnumerable <string> names)
 {
     NameType   = nameType;
     Realm      = realm;
     this.names = new List <string>(names);
 }