private Dictionary<Guid, ADGroupMember> GetADGroupMembers(DirectoryEntry group, SyncTree syncTree)
{
var members = new Dictionary<Guid, ADGroupMember>();
var memberCount = group.Properties["member"].Count;
AdLog.LogADObject(string.Format("Group contains {0} member(s).", memberCount), group.Path);
for (int i = 0; i < memberCount; i++)
{
string sMemberDN = group.Properties["member"][i].ToString();
var objSyncTree = GetSyncTreeForObject(sMemberDN);
if (objSyncTree == null)
{
AdLog.LogWarning(string.Format("AD group contains an object that is not contained in any of the synctrees, group's synctree will be used to retrieve the object (group: {0}, object: {1})", group.Path, sMemberDN));
objSyncTree = syncTree;
}
using (DirectoryEntry oADMember = objSyncTree.ConnectToObject(sMemberDN))
{
if (oADMember != null)
{
var guid = Common.GetADObjectGuid(oADMember, _config.GuidProp);
if (guid != null)
{
var userNameProp = oADMember.Properties[_config.UserNameProp];
var userNameValue = userNameProp == null ? null : userNameProp.Value;
if (userNameValue == null)
{
AdLog.LogError(string.Format("Property {0} of AD group member \"{1}\" is missing or value is null", _config.UserNameProp, sMemberDN));
continue;
}
members.Add(
((Guid) guid),
new ADGroupMember()
{
objType = Common.GetADObjectType(oADMember, _config.NovellSupport),
Path = oADMember.Path,
SamAccountName = userNameValue.ToString()
});
}
}
else
{
AdLog.LogWarning(string.Format("AD group member could not be retrieved (group: {0}, object: {1})", group.Path, sMemberDN));
}
}
}
return members;
}
// checks if the AD object corresponding to the given portal guid exists under synchronized path - if not, it should be deleted from portal...