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; } } }
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); }
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); }
public static StoragePermissions GetAuthenticatedPermissions(this IStorageSecurity security) => security.GetPermissions(StorageActor.Authenticated);
public static StoragePermissions GetPublicPermissions(this IStorageSecurity security) => security.GetPermissions(StorageActor.Public);
public static IStorageSecurity UpdateGroupPermissions(this IStorageSecurity security, string id, StoragePermissions permissions) => security.UpdatePermissions(StorageActor.Group(id), permissions);
public static IStorageSecurity UpdateAuthenticatedPermissions(this IStorageSecurity security, StoragePermissions permissions) => security.UpdatePermissions(StorageActor.Authenticated, permissions);
public static IStorageSecurity UpdatePublicPermissions(this IStorageSecurity security, StoragePermissions permissions) => security.UpdatePermissions(StorageActor.Public, permissions);
public static StoragePermissions GetGroupPermissions(this IStorageSecurity security, string id) => security.GetPermissions(StorageActor.Group(id));
public static StoragePermissions GetUserPermissions(this IStorageSecurity security, string id) => security.GetPermissions(StorageActor.User(id));
public abstract Task UpdateSecurityAsync(IStorageSecurity security, IProgress progress = null, CancellationToken cancellationToken = default(CancellationToken));
public override Task UpdateSecurityAsync(IStorageSecurity security, IProgress progress = null, CancellationToken cancellationToken = default(CancellationToken)) { // FIXME: warn return(Task.CompletedTask); }