From 7ec3bc3f0c899c2f1cfd18f8d27439c5309ab5c9 Mon Sep 17 00:00:00 2001 From: Dietrich Date: Sun, 18 Oct 2020 20:35:53 +0200 Subject: [PATCH] first draft of username and groupname validation --- src/api.rs | 8 ++++---- src/userlib.rs | 23 +++++++++++++++++++++++ 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/api.rs b/src/api.rs index e2793a8..ef8ea44 100644 --- a/src/api.rs +++ b/src/api.rs @@ -8,10 +8,10 @@ pub trait UserDBRead { } pub trait UserDBValidation { - fn is_uid_valid_and_free(&self) -> bool; - fn is_username_valid_and_free(&self) -> bool; - fn is_gid_valid_and_free(&self) -> bool; - fn is_groupname_valid_and_free(&self) -> bool; + fn is_uid_valid_and_free(&self, uid: u32) -> bool; + fn is_username_valid_and_free(&self, name: &str) -> bool; + fn is_gid_valid_and_free(&self, gid: u32) -> bool; + fn is_groupname_valid_and_free(&self, name: &str) -> bool; } pub trait UserDBWrite { diff --git a/src/userlib.rs b/src/userlib.rs index 7ec2ea7..783a297 100644 --- a/src/userlib.rs +++ b/src/userlib.rs @@ -120,6 +120,29 @@ impl UserDBRead for UserDBLocal { } } +use crate::api::UserDBValidation; +impl UserDBValidation for UserDBLocal { + fn is_uid_valid_and_free(&self, uid: u32) -> bool { + warn!("No valid check, only free check"); + self.users.iter().all(|(_, u)| u.get_uid() != uid) + } + + fn is_username_valid_and_free(&self, name: &str) -> bool { + warn!("No valid check, only free check"); + self.get_user_by_name(name).is_none() + } + + fn is_gid_valid_and_free(&self, gid: u32) -> bool { + warn!("No valid check, only free check"); + self.groups.iter().all(|x| x.get_gid() != gid) + } + + fn is_groupname_valid_and_free(&self, name: &str) -> bool { + warn!("No valid check, only free check"); + self.groups.iter().all(|x| x.get_groupname() != name) + } +} + /// Parse a file to a string fn file_to_string(path: Option<&PathBuf>) -> String { let file = File::open(path.expect("Path cannot be None".into()))