MCPcopy Create free account
hub / github.com/PowerShell/DSC / set_rules

Function set_rules

resources/windows_firewall/src/firewall.rs:405–460  ·  view source on GitHub ↗
(input: &FirewallRuleList)

Source from the content-addressed store, hash-verified

403}
404
405pub fn set_rules(input: &FirewallRuleList) -> Result<FirewallRuleList, FirewallError> {
406 if input.rules.is_empty() {
407 return Err(t!("set.rulesArrayEmpty").to_string().into());
408 }
409
410 let store = FirewallStore::open()?;
411 let mut results = Vec::new();
412
413 for desired in &input.rules {
414 if desired.selector_name().is_none() {
415 return Err(t!("set.selectorRequired").to_string().into());
416 }
417
418 match store.find_by_selector(desired)? {
419 Some(rule) => {
420 let current = rule_to_model(&rule)?;
421 let rule_name = current.name.clone().unwrap_or_else(|| desired.selector_name().unwrap_or_default().to_string());
422
423 if desired.exist == Some(false) {
424 store.remove_rule(&rule_name)?;
425 results.push(desired.missing_from_input());
426 continue;
427 }
428
429 apply_rule_properties(&rule, desired, current.protocol)?;
430 results.push(rule_to_model(&rule)?);
431 }
432 None => {
433 if desired.exist == Some(false) {
434 results.push(desired.missing_from_input());
435 continue;
436 }
437
438 let rule_name = desired.name.clone()
439 .ok_or_else(|| t!("set.selectorRequired").to_string())?;
440 let rule = store.create_rule_object()?;
441 unsafe { rule.SetName(&BSTR::from(rule_name.as_str())) }
442 .map_err(|error| t!("firewall.ruleAddFailed", name = rule_name.as_str(), error = error.to_string()).to_string())?;
443
444 apply_rule_properties(&rule, desired, None)?;
445 unsafe { store.rules.Add(&rule) }
446 .map_err(|error| t!("firewall.ruleAddFailed", name = rule_name.as_str(), error = error.to_string()).to_string())?;
447
448 let created = store
449 .find_by_selector(&FirewallRule {
450 name: Some(rule_name),
451 ..FirewallRule::default()
452 })?
453 .ok_or_else(|| t!("firewall.ruleLookupFailed", name = desired.selector_name().unwrap_or("<unknown>"), error = "created rule not found").to_string())?;
454 results.push(rule_to_model(&created)?);
455 }
456 }
457 }
458
459 Ok(FirewallRuleList { rules: results })
460}
461
462pub fn export_rules(filters: Option<&FirewallRuleList>) -> Result<FirewallRuleList, FirewallError> {

Callers 1

mainFunction · 0.85

Calls 11

rule_to_modelFunction · 0.85
apply_rule_propertiesFunction · 0.85
selector_nameMethod · 0.80
find_by_selectorMethod · 0.80
remove_ruleMethod · 0.80
missing_from_inputMethod · 0.80
create_rule_objectMethod · 0.80
as_strMethod · 0.80
newFunction · 0.50
defaultFunction · 0.50
is_emptyMethod · 0.45

Tested by

no test coverage detected