#std #networking #file #api

cap-std

基于能力的 Rust 标准库版本

80 个版本 (21 个稳定版本)

3.2.0 2024 年 7 月 8 日
3.0.0 2024 年 1 月 11 日
2.0.1 2024 年 1 月 2 日
2.0.0 2023 年 6 月 30 日
0.0.0 2020 年 6 月 25 日

#18文件系统

Download history 39231/week @ 2024-05-04 45838/week @ 2024-05-11 41967/week @ 2024-05-18 40116/week @ 2024-05-25 37360/week @ 2024-06-01 40271/week @ 2024-06-08 46112/week @ 2024-06-15 44087/week @ 2024-06-22 38515/week @ 2024-06-29 43918/week @ 2024-07-06 42848/week @ 2024-07-13 49476/week @ 2024-07-20 46005/week @ 2024-07-27 37696/week @ 2024-08-03 44616/week @ 2024-08-10 44497/week @ 2024-08-17

每月 180,093 次下载
用于 222 个 Crates (28 个直接使用)

Apache-2.0…

570KB
12K SLoC

cap-std

基于能力的 Rust 标准库版本

Github Actions CI Status crates.io page docs.rs docs

此包提供了一个基于能力的 std 版本,提供了沙盒化的文件系统、网络和时钟 API。有关使用基于能力的安全性进行沙盒化的更多信息,请参阅 顶级 README.md

文件系统模块 cap_std::fs、网络模块 cap_std::net 和时间模块 cap_std::time 目前支持 Linux、macOS、FreeBSD 和 Windows。WASI 支持正在开发中,但尚未可用。

Dir 的文件系统访问示例

use std::io;
use cap_std::fs::Dir;

/// Open files relative to `dir`.
fn dir_example(dir: &Dir) -> io::Result<()> {
    // This works (assuming symlinks don't lead outside of `dir`).
    let file = dir.open("the/thing.txt")?;

    // This fails, since `..` leads outside of `dir`.
    let hidden = dir.open("../hidden.txt")?;

    // This fails, as creating symlinks to absolute paths is not permitted.
    dir.symlink("/hidden.txt", "misdirection.txt")?;

    // However, even if the symlink had succeeded, or, if there is a
    // pre-existing symlink to an absolute directory, following a
    // symlink which would lead outside the sandbox also fails.
    let secret = dir.open("misdirection.txt")?;

    Ok(())
}

Pool 的网络访问示例

use std::io;
use cap_std::net::Pool;

/// Open network addresses within `pool`.
fn pool_example(pool: &Pool) -> io::Result<()> {
    // Connect to an address. This succeeds only if the given address and
    // port are present in `pool`.
    let stream = pool.connect_tcp_stream("localhost:3333")?;

    Ok(())
}

依赖项

~2–10MB
~116K SLoC