Я использую библиотеку Novell.Directory.Ldap, потому что мне нужен этот код для запуска на машине Linux.
Код: Выделить всё
using (var ldapConnection = new LdapConnection { SecureSocketLayer = false })
{
ldapConnection.Connect(_ldapHost, _ldapPort);
ldapConnection.Bind(_loginDN, _password);
var constraints = new LdapSearchConstraints();
constraints.SetControls(new LdapControl("1.2.840.113556.1.4.801", true
, new byte[] {48, 3, 2, 1, 7}));
ldapConnection.Constraints = constraints;
var searchFilter = "(objectClass=user)";
var searchResults = ldapConnection.Search(
_searchBase,
LdapConnection.ScopeSub,
searchFilter,
null,
false
);
var accessRules = new List();
while (searchResults.HasMore())
{
var nextEntry = searchResults.Next();
var userAttributes = nextEntry.GetAttributeSet();
var acl = userAttributes.GetAttribute("ntSecurityDescriptor");
var byteValue = userAttributes.GetAttribute("nTSecurityDescriptor").ByteValue;
var security = new CommonSecurityDescriptor(true, true, byteValue, 0);
foreach (var acl in security.DiscretionaryAcl)
{
var accessRule = new ActiveDirectoryAccessRule(
((KnownAce)acl).AccessMask,
((KnownAce)acl).SecurityIdentifier.Value,
((QualifiedAce)acl).AceQualifier,
acl.IsInherited,
acl is ObjectAce ? ((ObjectAce)acl).ObjectAceType : Guid.Empty,
acl is ObjectAce ? ((ObjectAce)acl).InheritedObjectAceType : Guid.Empty,
acl is ObjectAce ? ((ObjectAce)acl).ObjectAceFlags : ObjectAceFlags.None,
acl.PropagationFlags
);
accessRules.Add( accessRule );
}
}
}
Код: Выделить всё
CommonSecurityDescriptorКак я могу получить эту информацию в Linux машина?
Подробнее здесь: https://stackoverflow.com/questions/787 ... n-linux-ma
Мобильная версия