Compile Function IFX_LDAP_GROUPS_FOR_USER(inUser, inDomain)

$Insert REVDOTNETEQUATES

Declare subroutine Set_Property.Net
Declare Function   Active_Directory_Services, Unassigned, RetStack, GetNetworkUsername
    
    Ans = ''
    If Not(Unassigned(inUser)) Then
         If Unassigned(inUser) Then inUser = ''
         If inUser = '' Then inUser = GetNetworkUsername()
         If Unassigned(inDomain) Then inDomain = ''
         If inDomain Eq '' Then inDomain = Active_Directory_Services('GetComputerDomain')
         Domain             = inDomain
         Username           = inUser
         ADGroups           = ''
         DotNetHandle       = StartDotNet("","4.0")
         DotNetDir          = CheckDotNet('4.0'):'\'
         AccountMgmtDllPath = DotNetDir:'System.DirectoryServices.AccountManagement.dll'
         Set_Property.Net(DotNetHandle, "AssemblyName", AccountMgmtDllPath)
         If Not(Get_Status(errCode)) then
             Params             = 'Domain':@FM:Domain
             ParamTypes         = 'System.DirectoryServices.AccountManagement.ContextType':@FM:'System.String'
             objPC              = Create_Class.Net(DotNetHandle, "System.DirectoryServices.AccountManagement.PrincipalContext", 0, Params, ParamTypes)
             If Not(Get_Status(errCode)) then
                 objUserPrincipal = Create_Class.Net(DotNetHandle, "System.DirectoryServices.AccountManagement.UserPrincipal", 0, objPC, 'RevDotNet')
                 If Not(Get_Status(errCode)) then
                     Set_Property.Net(objUserPrincipal, 'Name', Username)
                     objPrinSearcher = Create_Class.Net(DotNetHandle, "System.DirectoryServices.AccountManagement.PrincipalSearcher", 0, objUserPrincipal, 'RevDotNet')
                     If Not(Get_Status(errCode)) then
                         objPrin = Send_Message.Net(objPrinSearcher, 'FindOne', '', '', 1)
                         If Not(Get_Status(errCode)) then
                             Name                = Get_Property.Net(objPrin, 'Name', 0)
                             objPrinSearchResult = Send_Message.Net(objPrin, 'GetGroups', '', '', 1)
                             If Not(Get_Status(errCode)) then
                                 objEnum = Send_Message.Net(objPrinSearchResult, 'GetEnumerator', '', '', 1)
                                 If Not(Get_Status(errCode)) then
                                     Loop
                                         Done = Send_Message.Net(objEnum, 'MoveNext', '', '', 0)
                                     Until Done EQ 'False'
                                         If Not(Get_Status(errCode)) then
                                             objCurrPrin = Get_Property.Net(objEnum, 'Current', 1)
                                             If Not(Get_Status(errCode)) then
                                                 CurrPrinName = Get_Property.Net(objCurrPrin, 'Name', 0)                                                 
                                                 If CurrPrinName NE 'Domain Users' then
                                                     Locate CurrPrinName in ADGroups using @FM setting fPos else 
                                                        ADGroups<-1> = CurrPrinName
                                                     end
                                                 end
                                                 Free_Class.Net(objCurrPrin)
                                             end
                                         end
                                     Repeat
                                     Free_Class.Net(objEnum)
                                 end
                                 Free_Class.Net(objPrinSearchResult)
                             end
                             Free_Class.Net(objPrin)
                         end
                         Free_class.Net(objPrinSearcher)
                     end
                     Free_Class.Net(objUserPrincipal)
                 end
                 Free_Class.Net(objPC)
             end
         End
         Free_Class.Net()
         Ans = ADGroups
    End
    
     Swap @FM With @VM In Ans 
    
Return Ans
