mirror of
https://github.com/samba-team/samba.git
synced 2025-01-08 21:18:16 +03:00
Add nss getgrnam to the himmelblau daemon
Signed-off-by: David Mulder <dmulder@samba.org> Reviewed-by: Alexander Bokovoy <ab@samba.org>
This commit is contained in:
parent
a5e330ee90
commit
3c55599e99
@ -216,6 +216,9 @@ pub(crate) async fn handle_client(
|
||||
}
|
||||
Request::NssAccountByUid(uid) => resolver.getpwuid(uid).await?,
|
||||
Request::NssGroups => resolver.getgrent().await?,
|
||||
Request::NssGroupByName(grp_id) => {
|
||||
resolver.getgrnam(&grp_id).await?
|
||||
}
|
||||
_ => todo!(),
|
||||
};
|
||||
reqs.send(resp).await?;
|
||||
@ -228,6 +231,7 @@ pub(crate) async fn handle_client(
|
||||
}
|
||||
|
||||
mod himmelblaud_getgrent;
|
||||
mod himmelblaud_getgrnam;
|
||||
mod himmelblaud_getpwent;
|
||||
mod himmelblaud_getpwnam;
|
||||
mod himmelblaud_getpwuid;
|
||||
|
52
himmelblaud/src/himmelblaud/himmelblaud_getgrnam.rs
Normal file
52
himmelblaud/src/himmelblaud/himmelblaud_getgrnam.rs
Normal file
@ -0,0 +1,52 @@
|
||||
/*
|
||||
Unix SMB/CIFS implementation.
|
||||
|
||||
Himmelblau daemon implementation for nss getgrnam
|
||||
|
||||
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 dbg::DBG_ERR;
|
||||
use ntstatus_gen::*;
|
||||
use sock::{Group, Response};
|
||||
|
||||
impl Resolver {
|
||||
pub(crate) async fn getgrnam(
|
||||
&mut self,
|
||||
grp_id: &str,
|
||||
) -> Result<Response, Box<NTSTATUS>> {
|
||||
let entry = match self.group_cache.fetch(grp_id) {
|
||||
Some(entry) => entry,
|
||||
None => return Ok(Response::NssGroup(None)),
|
||||
};
|
||||
let gid = self
|
||||
.idmap
|
||||
.gen_to_unix(&self.tenant_id, &entry.uuid.to_uppercase())
|
||||
.map_err(|e| {
|
||||
DBG_ERR!("{:?}", e);
|
||||
Box::new(NT_STATUS_INVALID_TOKEN)
|
||||
})?;
|
||||
// Store the calculated gid -> uuid map in the cache
|
||||
self.uid_cache.store(gid, &entry.uuid.to_uppercase())?;
|
||||
let group = Group {
|
||||
name: entry.uuid.clone(),
|
||||
passwd: "x".to_string(),
|
||||
gid,
|
||||
members: entry.members(),
|
||||
};
|
||||
return Ok(Response::NssGroup(Some(group)));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user