Search code examples
c#active-directoryldapldap-queryactive-directory-group

While trying to resolve a cross-store reference, the SID of the target principal could not be resolved. The error code is 1332


While fetching users from group, giving exception message as "While trying to resolve a cross-store reference, the SID of the target principal could not be resolved. The error code is 1332."

        PrincipalContext ctx = null;
        if (!string.IsNullOrWhiteSpace(adUserName))
        {
            ctx = new PrincipalContext(ContextType.Domain, domainName, adUserName, adPassword);
        }
        else
        {
            ctx = new PrincipalContext(ContextType.Domain, domainName);
        }
        var groupNames = commaSeparatedGroupNames.Split(',');
        IEnumerable<Principal> users = null;
        foreach (var groupName in groupNames)
        {
            if (!string.IsNullOrWhiteSpace(groupName))
            {
                var userGroup = GroupPrincipal.FindByIdentity(ctx, groupName.Trim());
                if (userGroup == null)
                    throw new InvalidOperationException("Active Directory Group Not Found :: " + groupName);

                var usersInGroup = userGroup.GetMembers();

                if (users == null)
                {
                    users = usersInGroup;
                }
                else
                {
                    users = users.Union(usersInGroup);
                }
            }
        }

        return users;

When doing

foreach (UserPrincipal user in users)

I am getting the error. Any suggestions i can check for this error or skip this member from list during looping.


Solution

  • I just encountered this same problem yesterday, and this is the best answer I found at this link:

    IEnumerator<Principal> enumerator = members.GetEnumerator();
    while (enumerator.MoveNext())
    {
        try
        {
            Principal member = enumerator.Current;
            Console.WriteLine("{0}\r\n\t{1}\r\n\t{2}",member.ToString(),member.Guid,member.DistinguishedName);
        } catch (Exception ex) {
            Console.WriteLine(ex.Message);
        }
    }
    

    This is how you would iterate the IEnumerable collection 'manually'. It gives you a chance to attempt getting the Principal and to catch the exception if it's an undefined SID or some other issue.