in Lib/Collectors/FileSystemUtils.cs [130:209]
public static string GetFilePermissions(FileSystemInfo fileInfo)
{
if (fileInfo != null)
{
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) || RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
{
var filename = fileInfo.FullName;
FileAccessPermissions permissions = default(FileAccessPermissions);
try
{
if (fileInfo is FileInfo)
{
permissions = new UnixFileInfo(filename).FileAccessPermissions;
}
else if (fileInfo is DirectoryInfo)
{
permissions = new UnixDirectoryInfo(filename).FileAccessPermissions;
}
}
catch (Exception e) when (
e is IOException
|| e is InvalidOperationException
)
{
Log.Verbose("Unable to get access control for {0}: {1}", fileInfo.FullName, e.GetType().ToString());
}
catch (Exception e)
{
Log.Debug($"Error Getting File Permissions {e.GetType().ToString()}");
}
return permissions.ToString();
}
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
var filename = fileInfo.FullName;
if (filename.Length >= 260 && !filename.StartsWith(@"\\?\"))
{
filename = $"\\?{filename}";
}
try
{
if (fileInfo is FileInfo)
{
return new FileSecurity(filename, AccessControlSections.All).GetSecurityDescriptorSddlForm(AccessControlSections.All);
}
else if (fileInfo is DirectoryInfo)
{
return new DirectorySecurity(filename, AccessControlSections.All).GetSecurityDescriptorSddlForm(AccessControlSections.All);
}
}
catch (Exception e) when (
e is ArgumentException
|| e is ArgumentNullException
|| e is DirectoryNotFoundException
|| e is FileNotFoundException
|| e is IOException
|| e is NotSupportedException
|| e is PlatformNotSupportedException
|| e is PathTooLongException
|| e is PrivilegeNotHeldException
|| e is SystemException
|| e is UnauthorizedAccessException)
{
var InfoType = fileInfo is FileInfo ? "FileSecurity" : "DirectorySecurity";
Log.Verbose($"Error parsing {InfoType} for {fileInfo.FullName} {e.GetType().ToString()}");
}
catch (Exception e)
{
Log.Debug($"Error Getting File Permissions {e.GetType().ToString()}");
}
return string.Empty;
}
}
return string.Empty;
}