pub struct ExtendedUserMapping {
admin_secret_handling: AdministrativeSecretHandling,
non_admin_secret_handling: NonAdministrativeSecretHandling,
connections: HashSet<BackendConnection>,
user_mapping: UserMapping,
}Expand description
A UserMapping centric view of a SignstarConfig.
Wraps a single UserMapping, as well as the system-wide AdministrativeSecretHandling,
NonAdministrativeSecretHandling and BackendConnections.
Fields§
§admin_secret_handling: AdministrativeSecretHandling§non_admin_secret_handling: NonAdministrativeSecretHandling§connections: HashSet<BackendConnection>§user_mapping: UserMappingImplementations§
Source§impl ExtendedUserMapping
impl ExtendedUserMapping
Sourcepub fn new(
admin_secret_handling: AdministrativeSecretHandling,
non_admin_secret_handling: NonAdministrativeSecretHandling,
connections: HashSet<BackendConnection>,
user_mapping: UserMapping,
) -> Self
pub fn new( admin_secret_handling: AdministrativeSecretHandling, non_admin_secret_handling: NonAdministrativeSecretHandling, connections: HashSet<BackendConnection>, user_mapping: UserMapping, ) -> Self
Creates a new ExtendedUserMapping.
Sourcepub fn get_admin_secret_handling(&self) -> AdministrativeSecretHandling
pub fn get_admin_secret_handling(&self) -> AdministrativeSecretHandling
Returns the AdministrativeSecretHandling.
Sourcepub fn get_connections(&self) -> HashSet<BackendConnection>
pub fn get_connections(&self) -> HashSet<BackendConnection>
Returns the BackendConnections.
Sourcepub fn get_non_admin_secret_handling(&self) -> NonAdministrativeSecretHandling
pub fn get_non_admin_secret_handling(&self) -> NonAdministrativeSecretHandling
Returns the NonAdministrativeSecretHandling.
Sourcepub fn get_user_mapping(&self) -> &UserMapping
pub fn get_user_mapping(&self) -> &UserMapping
Returns the UserMapping.
Sourcepub fn load_credentials(&self) -> Result<CredentialsLoading, Error>
pub fn load_credentials(&self) -> Result<CredentialsLoading, Error>
Loads credentials for each backend user associated with a SystemUserId.
The SystemUserId of the mapping must be equal to the current system user calling this
function.
Relies on get_plaintext_secret_file and get_systemd_creds_secret_file to retrieve
the specific path to a secrets file for each backend user name mapped to a SystemUserId.
Returns a CredentialsLoading, which may contain critical errors related to loading a
passphrase from a secrets file for each available backend user.
§Note
The caller is expected to handle any errors tracked in the returned object based on context.
§Errors
Returns an error if
- the
ExtendedUserMappingprovides noSystemUserId, - no system user equal to the
SystemUserIdexists, - the
SystemUserIdis not equal to the currently calling system user, - or the systemd-creds command is not available when trying to decrypt secrets.
Sourcepub fn create_secrets_dir(&self) -> Result<(), Error>
pub fn create_secrets_dir(&self) -> Result<(), Error>
Creates secrets directories for all non-administrative mappings.
Matches the SystemUserId in a mapping with an actual user on the system.
Creates the passphrase directory for the user and ensures correct ownership of it and all
parent directories up until the user’s home directory.
§Errors
Returns an error if
- no system user is available in the mapping,
- the system user of the mapping is not available on the system,
- the directory could not be created,
- the ownership of any directory between the user’s home and the passphrase directory can not be changed.
Sourcepub fn create_non_administrative_secrets(
&self,
) -> Result<Vec<Box<dyn UserWithPassphrase>>, Error>
pub fn create_non_administrative_secrets( &self, ) -> Result<Vec<Box<dyn UserWithPassphrase>>, Error>
Creates passphrases for all non-administrative mappings.
If the targeted UserMapping is that of non-administrative backend user(s), a new random
passphrase (see Passphrase::generate) is created for each of those backend user(s).
Each passphrase is written to disk and finally the list of credentials are returned.
- If
selfis configured to useNonAdministrativeSecretHandling::Plaintext, the passphrase is stored in a secrets file, defined byget_plaintext_secret_file. - If
selfis configured to useNonAdministrativeSecretHandling::SystemdCreds, the passphrase is encrypted using systemd-creds and stored in a secrets file, defined byget_systemd_creds_secret_file.
§Errors
Returns an error if
- the targeted system user does not exist in the mapping or on the system,
- the function is called using a non-root user,
- the systemd-creds command is not available when trying to encrypt the passphrase,
- the encryption of the passphrase using systemd-creds fails,
- the secrets file can not be created,
- the secrets file can not be written to,
- or the ownership and permissions of the secrets file can not be changed.
Trait Implementations§
Source§impl Clone for ExtendedUserMapping
impl Clone for ExtendedUserMapping
Source§fn clone(&self) -> ExtendedUserMapping
fn clone(&self) -> ExtendedUserMapping
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ExtendedUserMapping
impl Debug for ExtendedUserMapping
Source§impl<'de> Deserialize<'de> for ExtendedUserMapping
impl<'de> Deserialize<'de> for ExtendedUserMapping
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl PartialEq for ExtendedUserMapping
impl PartialEq for ExtendedUserMapping
Source§impl Serialize for ExtendedUserMapping
impl Serialize for ExtendedUserMapping
impl Eq for ExtendedUserMapping
impl StructuralPartialEq for ExtendedUserMapping
Auto Trait Implementations§
impl Freeze for ExtendedUserMapping
impl RefUnwindSafe for ExtendedUserMapping
impl Send for ExtendedUserMapping
impl Sync for ExtendedUserMapping
impl Unpin for ExtendedUserMapping
impl UnwindSafe for ExtendedUserMapping
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.