public static bool GetFilePermissions(string path, bool followSymlinks, out UnixExternalPermissions filePermissions) { Stat sbuf; if (!StatFile(path, followSymlinks, out sbuf)) { filePermissions = (UnixExternalPermissions)FilePermissions.DEFFILEMODE; return(false); } filePermissions = MapToUnixExternalPermissions(sbuf.st_mode & FilePermissions.ALLPERMS); return(true); }
public static bool GetFileType(string path, bool followSymlinks, out UnixExternalPermissions fileType) { if (String.IsNullOrEmpty(path)) { throw new ArgumentException("must not be null or empty", nameof(path)); } Stat sbuf; if (!StatFile(path, followSymlinks, out sbuf)) { fileType = UnixExternalPermissions.IFREG; return(false); } fileType = GetFileType(sbuf); return(true); }
public bool SetEntryPermissions(ZipArchive zipArchive, string sourcePath, ulong index, EntryPermissions requestedPermissions) { var archive = zipArchive as UnixZipArchive; if (archive == null) { throw new ArgumentException("must be an instance of UnixZipArchive", nameof(zipArchive)); } UnixExternalPermissions ftype = UnixExternalPermissions.IFREG; if (!String.IsNullOrEmpty(sourcePath)) { UnixExternalPermissions ft; if (Utilities.GetFileType(sourcePath, !archive.UnixOptions.StoreSymlinks, out ft)) { ftype = ft; } } return(SetEntryPermissions(archive, index, requestedPermissions, ftype)); }
internal bool SetEntryUnixPermissions(ulong index, EntryPermissions requestedPermissions, UnixExternalPermissions unixPermissions) { var permissions = (uint)requestedPermissions | (uint)unixPermissions; int ret = Native.zip_file_set_external_attributes(ArchivePointer, index, OperationFlags.None, (byte)OperatingSystem.UNIX, permissions << 16); return(ret == 0); }
static UnixExternalPermissions MapToUnixExternalPermissions(FilePermissions fp) { UnixExternalPermissions filePermissions = 0; if (fp.HasFlag(FilePermissions.S_ISUID)) { filePermissions |= UnixExternalPermissions.ISUID; } if (fp.HasFlag(FilePermissions.S_ISGID)) { filePermissions |= UnixExternalPermissions.ISGID; } if (fp.HasFlag(FilePermissions.S_ISVTX)) { filePermissions |= UnixExternalPermissions.ISVTX; } if (fp.HasFlag(FilePermissions.S_IRUSR)) { filePermissions |= UnixExternalPermissions.IRUSR; } if (fp.HasFlag(FilePermissions.S_IWUSR)) { filePermissions |= UnixExternalPermissions.IWUSR; } if (fp.HasFlag(FilePermissions.S_IXUSR)) { filePermissions |= UnixExternalPermissions.IXUSR; } if (fp.HasFlag(FilePermissions.S_IRGRP)) { filePermissions |= UnixExternalPermissions.IRGRP; } if (fp.HasFlag(FilePermissions.S_IWGRP)) { filePermissions |= UnixExternalPermissions.IWGRP; } if (fp.HasFlag(FilePermissions.S_IXGRP)) { filePermissions |= UnixExternalPermissions.IXGRP; } if (fp.HasFlag(FilePermissions.S_IROTH)) { filePermissions |= UnixExternalPermissions.IROTH; } if (fp.HasFlag(FilePermissions.S_IWOTH)) { filePermissions |= UnixExternalPermissions.IWOTH; } if (fp.HasFlag(FilePermissions.S_IXOTH)) { filePermissions |= UnixExternalPermissions.IXOTH; } if (filePermissions == 0) { return((UnixExternalPermissions)FilePermissions.DEFFILEMODE); } return(filePermissions); }
bool SetEntryPermissions(ZipArchive archive, ulong index, EntryPermissions requestedPermissions, UnixExternalPermissions unixPermissions) { var unixArchive = archive as UnixZipArchive; if (unixArchive == null) { throw new InvalidOperationException("Expected instance of UnixZipArchive"); } return(unixArchive.SetEntryUnixPermissions(index, requestedPermissions, unixPermissions)); }