2个版本
| 0.1.1 | 2023年7月20日 |
|---|---|
| 0.1.0 | 2023年7月14日 |
#199 in Unix API
11,898每月下载量
用于 35 个crate(2个直接使用)
69KB
1.5K SLoC
Unix <pwd.h> 和 <grp.h> 的安全接口
这个crate提供了一个简单、安全、灵活的包装器,用于读取用户和组信息的标准Unix函数。
示例
let pwent = pwd_grp::getpwnam("root").unwrap().unwrap();
assert_eq!(pwent.uid, 0);
线程安全
这个库是线程安全的。它使用 getpwuid_r 和朋友。
不幸的是,没有提供遍历条目的接口。这是因为 getpwent_r 和 getgrent_r 几乎完全无用:它们仍然涉及数据库的全局游标!
Unicode和字符集处理
这个库中的免费函数坚持要求密码和组条目只包含有效的UTF-8。当不是这种情况时,它们会返回一个错误。
为了在系统中处理passwd和group数据库中找到的字节,在那些不是总是有效的UTF-8的系统上,请使用PwdGrp(通过 PwdGrpProvider)的方法。
Cargo功能
以下Cargo功能可用
full:元功能。启用所有合理、非实验性功能。serde:为Passwd和Group实现Serialize和Deserializeminimal-1:最小功能集。必须启用。
《test-with-lmock》功能是内部的。它只在 cfg(test) 时有效,即在这个crate的测试期间。它需要Nightly Rust,并用于与miri一起进行测试。
稳定性
API 尚未稳定,但我们打算在2023年某个时候发布1.0版本。请报告您发现的API缺陷!
MSRV 和 MSRV 策略
derive-adhoc的最小支持Rust版本是1.54。
我们期望谨慎地提高它。(然而,MSRV的提高将是一个小版本升级。)
此库的替代方案
您也可能在考虑
-
nix::unistd::User等:是庞大且通常有用的nix库的一部分。nix在数据有效性和表示方面做出了不同的决策,并且缺乏pwd-grp模拟功能。 -
sysinfo:一个更大的crate;一个奇特的API,需要手动预先填充信息。 -
users:不提供对所有passwd字段的访问。没有方便的UTF-8 API。(在撰写本文时)未维护。然而,它有一个内置的缓存机制。 -
pwd:不是线程安全的(使用getpwnam,而不是getpwnam_r)。无法访问非UTF-8数据。错误处理不佳。 -
libc::getpwuid_r等:这些低级不安全函数需要您管理缓冲区和分配,并将类型转换为Rust结构。这可能会很困难,而且效率不高。
依赖关系
~3.5MB
~70K SLoC