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
和Deserialize
minimal-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