Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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));
        }
Пример #4
0
        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);
        }
Пример #5
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);
        }
Пример #6
0
        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));
        }