DokanError IDokanOperations.GetFileSecurity(string filename, out FileSystemSecurity security,
AccessControlSections sections, DokanFileInfo info)
{
//Log("GetSecurrityInfo:{0}:{1}", filename, sections);
LogFSActionInit("GetFileSecurity", filename, (SftpContext)info.Context, "Sections:{0}",sections);
var sftpattributes = (info.Context as SftpContext).Attributes;
var rights = FileSystemRights.ReadPermissions | FileSystemRights.ReadExtendedAttributes |
FileSystemRights.ReadAttributes | FileSystemRights.Synchronize;
if (UserCanRead(sftpattributes))
{
rights |= FileSystemRights.ReadData;
}
if (UserCanWrite(sftpattributes))
{
rights |= FileSystemRights.Write;
}
if (UserCanExecute(sftpattributes) && info.IsDirectory)
{
rights |= FileSystemRights.Traverse;
}
security = info.IsDirectory ? new DirectorySecurity() as FileSystemSecurity : new FileSecurity();
// if(sections.HasFlag(AccessControlSections.Access))
security.AddAccessRule(new FileSystemAccessRule("Everyone", rights, AccessControlType.Allow));
security.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl ^ rights,
AccessControlType.Deny));
//not sure this works at all, needs testing
// if (sections.HasFlag(AccessControlSections.Owner))
security.SetOwner(new NTAccount("None"));
// if (sections.HasFlag(AccessControlSections.Group))
security.SetGroup(new NTAccount("None"));
LogFSActionSuccess("GetFileSecurity", filename, (SftpContext)info.Context, "Sections:{0} Rights:{1}", sections, rights);
return DokanError.ErrorSuccess;
}