I cannot see a resolution to this problem anywhere, so I have done a little digging around in the source code. I do not have a solution, but I have identified what I think is the offending line of code.
In the file library/providers/authenticationproviders/ADSIProvider/ADSIProvider.vb is the implementation of the class DotNetNuke.Security.Authentication.ADSIProvider. One of the methods in this class looks like this…
Public Overrides Function IsAuthenticationMember(ByVal AuthenticationGroup As Authentication.GroupInfo, ByVal AuthenticationUser As Authentication.UserInfo) As Boolean
If Not AuthenticationGroup.IsPopulated Then
PopulateMembership(AuthenticationGroup)
End If
Return AuthenticationGroup.AuthenticationMember.Contains(AuthenticationUser.DistinguishedName)
End Function
I have an AD group ‘B’ that contains the AD group ‘A’ that contains me as a user. The Return statement in the above function fails because AuthenticationUser.DistinguishedName contains my distinguished name, but AuthenticationGroup.AuthenticationMember (the list of members of group B)contains only the distinguished name for group A. This line of code needs to be expanded to traverse the hierarchy of AD groups. The only problem left is that I have no idea where to start! If anyone could point me in the right direction I’ll gladly have a go at fixing the problem.
Thanks
Bill