(metadata: Option<&Metadata>, directive_security_context: Option<&SecurityContextKind>)
| 287 | } |
| 288 | |
| 289 | fn check_security_context(metadata: Option<&Metadata>, directive_security_context: Option<&SecurityContextKind>) -> Result<(), DscError> { |
| 290 | if metadata.is_none() && directive_security_context.is_none() { |
| 291 | return Ok(()); |
| 292 | } |
| 293 | |
| 294 | let mut security_context_required: Option<&SecurityContextKind> = None; |
| 295 | if let Some(metadata) = &metadata |
| 296 | && let Some(microsoft_dsc) = &metadata.microsoft |
| 297 | && let Some(required_security_context) = µsoft_dsc.security_context { |
| 298 | warn!("{}", t!("configure.mod.securityContextInMetadataDeprecated")); |
| 299 | security_context_required = Some(required_security_context); |
| 300 | } |
| 301 | |
| 302 | if let Some(directive_security_context) = directive_security_context { |
| 303 | if let Some(security_context_required) = security_context_required |
| 304 | && security_context_required != directive_security_context { |
| 305 | return Err(DscError::SecurityContext(t!( |
| 306 | "configure.mod.conflictingSecurityContext", |
| 307 | metadata = security_context_required, |
| 308 | directive = directive_security_context |
| 309 | ).to_string())); |
| 310 | } |
| 311 | security_context_required = Some(directive_security_context); |
| 312 | } |
| 313 | |
| 314 | match security_context_required { |
| 315 | Some(SecurityContextKind::Elevated) => { |
| 316 | if get_security_context() != SecurityContext::Admin { |
| 317 | return Err(DscError::SecurityContext(t!("configure.mod.elevationRequired").to_string())); |
| 318 | } |
| 319 | }, |
| 320 | Some(SecurityContextKind::Restricted) => { |
| 321 | if get_security_context() != SecurityContext::User { |
| 322 | return Err(DscError::SecurityContext(t!("configure.mod.restrictedRequired").to_string())); |
| 323 | } |
| 324 | }, |
| 325 | None | Some(SecurityContextKind::Current) => { |
| 326 | // no check needed |
| 327 | }, |
| 328 | } |
| 329 | |
| 330 | Ok(()) |
| 331 | } |
| 332 | |
| 333 | fn get_metadata_from_result(mut context: Option<&mut Context>, properties: &mut Value, metadata: &mut Metadata, execution_information: &mut ExecutionInformation) -> Result<(), DscError> { |
| 334 | if let Some(restart_required) = properties.get("_restartRequired") { |
no test coverage detected