#user #group #shadow #user-password #information #passwd #function

passwd-rs

Crate/Library providing a functions to get information about groups, users and shadow passwords

2 unstable releases

0.2.0 Oct 26, 2022
0.1.0 Oct 26, 2022

#1009 in Authentication

Download history 133/week @ 2024-11-16 33/week @ 2024-11-23 197/week @ 2024-11-30 71/week @ 2024-12-07 133/week @ 2024-12-14 37/week @ 2024-12-28 78/week @ 2025-01-04 41/week @ 2025-01-11 48/week @ 2025-01-18 166/week @ 2025-01-25 233/week @ 2025-02-01 56/week @ 2025-02-08 154/week @ 2025-02-15 137/week @ 2025-02-22 140/week @ 2025-03-01

492 downloads per month
Used in yubico_helper

MIT license

13KB
305 lines

passwd-rs

Crate/Library providing a functions to get information about groups, users and shadow passwords.

Example

use passwd_rs::{Group, User, Shadow, AccountStatus};

fn main() -> std::io::Result<()> {
	let user = User::current_user()?;
	let password;
	if user.passwd.as_ref().unwrap().eq("x") {
		// WARN! This works only if program is executed as root
		let shadow = match Shadow::new_from_username(&user.name.clone()) {
			Err(e) => {
				if e.kind() == std::io::ErrorKind::PermissionDenied {
					println!("Must be run as root to access shadow passwords");
				} else { return Err(e) };

				return Ok(());
			},
			Ok(o) => o,
		};
		if let AccountStatus::Active(passwd) = shadow.passwd {
			password = passwd;
		} else {
			password = shadow.passwd.to_string();
		}
	} else {
		password = user.passwd.unwrap();
	}

	let group = Group::new_from_gid(user.gid.clone())?;

	println!("Group details:");
	println!("Name: {}", group.name);
	println!("ID: {}", group.gid);
	println!("Members: {}", group.display_members());
	println!();
	println!("User details:");
	println!("Name: {}", user.name);
	println!("ID: {}", user.uid);
	println!("Password: {}", password);

	Ok(())
}

No runtime deps