2个版本

0.1.1 2023年7月20日
0.1.0 2023年7月14日

#199 in Unix API

Download history 1784/week @ 2024-04-23 1890/week @ 2024-04-30 1608/week @ 2024-05-07 1812/week @ 2024-05-14 1382/week @ 2024-05-21 1516/week @ 2024-05-28 1533/week @ 2024-06-04 1916/week @ 2024-06-11 2173/week @ 2024-06-18 2344/week @ 2024-06-25 1734/week @ 2024-07-02 1991/week @ 2024-07-09 2077/week @ 2024-07-16 2655/week @ 2024-07-23 3612/week @ 2024-07-30 3056/week @ 2024-08-06

11,898每月下载量
用于 35 个crate(2个直接使用)

MIT许可证

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_rgetgrent_r 几乎完全无用:它们仍然涉及数据库的全局游标!

Unicode和字符集处理

这个库中的免费函数坚持要求密码和组条目只包含有效的UTF-8。当不是这种情况时,它们会返回一个错误。

为了在系统中处理passwd和group数据库中找到的字节,在那些不是总是有效的UTF-8的系统上,请使用PwdGrp(通过 PwdGrpProvider)的方法。

Cargo功能

以下Cargo功能可用

  • full:元功能。启用所有合理、非实验性功能。
  • serde:为 PasswdGroup 实现 SerializeDeserialize
  • 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