1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-22 13:34:15 +03:00

Add nss getpwuid to the himmelblau daemon

Signed-off-by: David Mulder <dmulder@samba.org>
Reviewed-by: Alexander Bokovoy <ab@samba.org>
This commit is contained in:
David Mulder 2024-07-31 10:36:56 -06:00
parent 94e4d005b5
commit 71b96f78df
2 changed files with 47 additions and 0 deletions

View File

@ -214,6 +214,7 @@ pub(crate) async fn handle_client(
Request::NssAccountByName(account_id) => {
resolver.getpwnam(&account_id).await?
}
Request::NssAccountByUid(uid) => resolver.getpwuid(uid).await?,
_ => todo!(),
};
reqs.send(resp).await?;
@ -227,4 +228,5 @@ pub(crate) async fn handle_client(
mod himmelblaud_getpwent;
mod himmelblaud_getpwnam;
mod himmelblaud_getpwuid;
mod himmelblaud_pam_auth;

View File

@ -0,0 +1,45 @@
/*
Unix SMB/CIFS implementation.
Himmelblau daemon implementation for nss getpwuid
Copyright (C) David Mulder 2024
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
use crate::himmelblaud::Resolver;
use libc::uid_t;
use ntstatus_gen::NTSTATUS;
use sock::Response;
impl Resolver {
pub(crate) async fn getpwuid(
&mut self,
uid: uid_t,
) -> Result<Response, Box<NTSTATUS>> {
if let Some(upn) = self.uid_cache.fetch(uid) {
if let Some(entry) = self.user_cache.fetch(&upn) {
Ok(Response::NssAccount(Some(
self.create_passwd_from_upn(&entry.upn, &entry.name)?,
)))
} else {
Ok(Response::NssAccount(Some(
self.create_passwd_from_upn(&upn, "")?,
)))
}
} else {
Ok(Response::NssAccount(None))
}
}
}