public Task UpdateSecurityAsync(IStorageSecurity security, IProgress progress = null, CancellationToken cancellationToken = default(CancellationToken))
 {
     try
     {
         if (null != progress)
         {
             progress.Total = 1;
             progress.Value = 0;
         }
         StorageRoot.SetSecurity(LocalPath, security);
         Security = security;
         return(Task.CompletedTask);
     }
     catch (Exception exn)
     {
         return(Task.FromException(exn));
     }
     finally
     {
         if (null != progress)
         {
             progress.Value = 1;
         }
     }
 }
Example #2
0
        internal override void SetSecurity(string absolutePath, IStorageSecurity security)
        {
            if (0 != Syscall.stat(absolutePath, out var stat))
            {
                throw new LinuxIOException(Syscall.GetLastError());
            }
            var uid   = stat.st_uid;
            var uname = LinuxHelpers.GetUserName(uid);
            var gid   = stat.st_gid;
            var gname = LinuxHelpers.GetGroupName(gid);
            var ps    = default(FilePermissions);

            // FIXME: emit warnings
            foreach (var kv in security)
            {
                var actor = kv.Key;
                var sp    = kv.Value;
                switch (actor.ActorType)
                {
                case StorageActorType.Public:
                    ps |= LinuxHelpers.FromOtherPermissions(sp);
                    break;

                case StorageActorType.User when actor.Id == uname:
                    ps |= LinuxHelpers.FromOwnerPermissions(sp);
                    break;

                case StorageActorType.Group when actor.Id == gname:
                    ps |= LinuxHelpers.FromGroupPermissions(sp);
                    break;

                default:
                    // warn
                    break;
                }
            }
            if (0 != Syscall.chmod(absolutePath, ps))
            {
                throw new LinuxIOException(Syscall.GetLastError());
            }
        }
        public override async Task UpdateSecurityAsync(IStorageSecurity security, IProgress progress = null, CancellationToken cancellationToken = default(CancellationToken))
        {
            try
            {
                if (null != progress)
                {
                    progress.Total = 1;
                    progress.Value = 0;
                }
                GoogleObject = await StorageRoot.UpdateObjectAclAsync(GoogleObject, StorageRoot.CreateObjectAccessControlList(security).ToList(), cancellationToken);

                _security = security;
            }
            finally
            {
                if (null != progress)
                {
                    progress.Value = 1;
                }
            }
        }
 protected StorageItem(StorageRoot storageRoot, FsPath localPath)
     : base(storageRoot, localPath)
 {
     Security = storageRoot.GetSecurity(localPath);
 }
Example #5
0
 public static void UpdateSecurity(
     this IStorageRecord record,
     IStorageSecurity storageSecurity,
     IProgress progress = null)
 => record.UpdateSecurityAsync(storageSecurity, progress).GetAwaiter().GetResult();
 internal IEnumerable <GoogleObjectAccessControl> CreateObjectAccessControlList(IStorageSecurity storageSecurity)
 {
     foreach (var kv in storageSecurity)
     {
         var actor = kv.Key;
         var ps    = kv.Value;
         if (ps.TryGetObjectAccessControl(actor, out var ac))
         {
             yield return(ac);
         }
     }
 }
 public StorageRecord(StorageRoot storageRoot, string localPath, GoogleObject googleObject) : base(storageRoot, localPath)
 {
     GoogleObject = googleObject ?? throw new System.ArgumentNullException(nameof(googleObject));
     _security    = storageRoot.GetPermissions(GoogleObject);
 }
Example #8
0
 public static StoragePermissions GetAuthenticatedPermissions(this IStorageSecurity security)
 => security.GetPermissions(StorageActor.Authenticated);
Example #9
0
 public static StoragePermissions GetPublicPermissions(this IStorageSecurity security)
 => security.GetPermissions(StorageActor.Public);
Example #10
0
 public static IStorageSecurity UpdateGroupPermissions(this IStorageSecurity security, string id, StoragePermissions permissions)
 => security.UpdatePermissions(StorageActor.Group(id), permissions);
Example #11
0
 public static IStorageSecurity UpdateAuthenticatedPermissions(this IStorageSecurity security, StoragePermissions permissions)
 => security.UpdatePermissions(StorageActor.Authenticated, permissions);
Example #12
0
 public static IStorageSecurity UpdatePublicPermissions(this IStorageSecurity security, StoragePermissions permissions)
 => security.UpdatePermissions(StorageActor.Public, permissions);
Example #13
0
 public static StoragePermissions GetGroupPermissions(this IStorageSecurity security, string id)
 => security.GetPermissions(StorageActor.Group(id));
Example #14
0
 public static StoragePermissions GetUserPermissions(this IStorageSecurity security, string id)
 => security.GetPermissions(StorageActor.User(id));
Example #15
0
 public abstract Task UpdateSecurityAsync(IStorageSecurity security, IProgress progress = null, CancellationToken cancellationToken = default(CancellationToken));
Example #16
0
 public override Task UpdateSecurityAsync(IStorageSecurity security, IProgress progress = null, CancellationToken cancellationToken = default(CancellationToken))
 {
     // FIXME: warn
     return(Task.CompletedTask);
 }