Como posso determinar se um grupo de anúncios contém um determinado DirectoryEntry de outro domínio (confiável)?

StackOverflow https://stackoverflow.com/questions/371947

Pergunta

Eu estou tentando reforçar o meu código que determina se um usuário é um membro de um determinado grupo de anúncios. Ele funciona essencialmente exceto quando o membro do grupo passa a ser de outro domínio (confiável), porque ele é armazenado como um foreignsecurityprincipal.

Uma vez que eu tenho um objeto DirectoryEntry válida tanto para o Grupo Quero teste, ea Conta Quero verificar para, eu preciso de uma seqüência DirectorySearcher filtro que irá permitir-me para confirmar que a conta é nesse grupo, mesmo Se a conta for uma foreignsecurityprincipal.

(código VB.NET Amostra demonstrando a questão)

Dim ContainerGroup as DirectoryEntry = ... Code to get Group
Dim UserToCheckFor as DirectoryEntry = ... Code to get User

DSearcher = New DirectorySearcher(ContainerGroup, "(WHATCANIPUTINHERE)", New String() {"member;Range=0-5000"}, SearchScope.Base)
DSearcher.AttributeScopeQuery = "member"

'If an object is found, the account was in the group
Return (DSearcher.FindOne() IsNot Nothing)  
Foi útil?

Solução

Ok. Encontrei. Aqui está o truque.

Eu estou tentando reforçar o meu código que determina se um usuário é um membro de um determinado grupo de anúncios. Ele funciona essencialmente exceto quando o membro do grupo passa a ser de outro domínio (confiável), porque ele é armazenado como um foreignsecurityprincipal.

(código VB.NET Amostra)

Dim ContainerGroup as DirectoryEntry = ... Code to get Group
Dim UserToCheckFor as DirectoryEntry = ... Code to get User

DSearcher = New DirectorySearcher
Dim DSearcher As New DirectorySearcher(ContainerGroup, getLDAPQueryStringUsingSID(containedGroup), New String() {"member;Range=0-5000"}, SearchScope.Base)

Return (DSearcher.FindOne() IsNot Nothing) 


** Helper Methods **

Private Function getLDAPQueryStringUsingSID(ByVal DEObject As DirectoryEntry) As String            
  Return "(objectSid=" + getSDDLSidForDirectoryEntry(DEObject) + ")"
End Function

Private Function getSDDLSidForDirectoryEntry(ByVal DEObject As DirectoryEntry) As String
      Dim bytes As Byte() = CType(DEObject.Properties("objectSid").Value, Byte())
      Dim sid As New System.Security.Principal.SecurityIdentifier(bytes, 0)
      Return sid.ToString
End Function
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top