| // Copyright 2021 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| library fuchsia.io; |
| |
| /// The common members definition behind [`Rights`] and [`Abilities`]. Some operations may apply |
| /// only to certain node types (e.g. [`Operations.MODIFY_DIRECTORY`] only applies to directories). |
| type Operations = strict bits : uint64 { |
| /// Connecting to a service in a directory. |
| CONNECT = 0x01; |
| |
| /// Read byte contents of a node or its children. |
| READ_BYTES = 0x02; |
| |
| /// Writing to the byte contents of a node or its children. |
| WRITE_BYTES = 0x04; |
| |
| /// Execute the byte contents of a node or its children. |
| EXECUTE = 0x08; |
| |
| /// Reading the attributes of a node and/or its children. |
| GET_ATTRIBUTES = 0x10; |
| |
| /// Updating the attributes of a node and/or its children. |
| UPDATE_ATTRIBUTES = 0x20; |
| |
| /// Reading the list of nodes in a directory. |
| ENUMERATE = 0x40; |
| |
| /// Opening a node from a directory. Must be specified with [`Rights.ENUMERATE`], as directory |
| /// contents can be probed by opening children. |
| TRAVERSE = 0x80; |
| |
| /// Modifying the list of nodes in a directory, e.g. creating, renaming, link/unlink, etc... |
| /// Must be specified with [`Rights.ENUMERATE`], as directory contents can be probed via name |
| /// conflicts during node creation. |
| MODIFY_DIRECTORY = 0x100; |
| }; |
| |
| /// Alias for directory permission alias r* |
| const R_STAR_DIR Operations |
| = Operations.CONNECT | Operations.ENUMERATE | Operations.TRAVERSE | Operations.READ_BYTES | Operations.GET_ATTRIBUTES; |
| |
| /// Alias for directory permission alias rw* |
| const RW_STAR_DIR Operations |
| = Operations.CONNECT | Operations.ENUMERATE | Operations.TRAVERSE | Operations.READ_BYTES | Operations.WRITE_BYTES | Operations.MODIFY_DIRECTORY | Operations.GET_ATTRIBUTES | Operations.UPDATE_ATTRIBUTES; |
| |
| /// Alias for directory permission alias rx* |
| const RX_STAR_DIR Operations |
| = Operations.CONNECT | Operations.ENUMERATE | Operations.TRAVERSE | Operations.READ_BYTES | Operations.GET_ATTRIBUTES | Operations.EXECUTE; |
| |
| /// Alias for directory permission alias w* |
| const W_STAR_DIR Operations |
| = Operations.CONNECT | Operations.ENUMERATE | Operations.TRAVERSE | Operations.WRITE_BYTES | Operations.MODIFY_DIRECTORY | Operations.UPDATE_ATTRIBUTES; |
| |
| /// Alias for directory permission alias x* |
| const X_STAR_DIR Operations |
| = Operations.CONNECT | Operations.ENUMERATE | Operations.TRAVERSE | Operations.EXECUTE; |
| |
| /// Rights are properties specific to a connection. They limit which operations are allowed on a |
| /// connection, including those which may be granted to new connections. |
| /// |
| /// Invoking an operation without the corresponding right results in `ZX_ERR_ACCESS_DENIED` |
| /// even if the node does not have support for the operation. |
| alias Rights = Operations; |
| |
| /// Abilities are properties intrinsic to a node. They specify which operations are supported by it. |
| /// |
| /// Invoking an operation on a node that does not support it results in `ZX_ERR_NOT_SUPPORTED`. |
| /// Note `ZX_ERR_ACCESS_DENIED` takes precedence over `ZX_ERR_NOT_SUPPORTED` when both apply. |
| alias Abilities = Operations; |