Skip to content

Commit 467d287

Browse files
authored
Merge pull request #3 from nvm-windows/fix-firewall-block-source
fix(firewall): label which store supplied a security setting
2 parents 3701232 + 44fbffd commit 467d287

2 files changed

Lines changed: 74 additions & 0 deletions

File tree

‎settings/firewall_settings_test.go‎

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package settings_test
22

33
import (
44
prefs "common/preferences"
5+
"common/registry"
56
"common/settings"
67
"os/exec"
78
"reflect"
@@ -10,6 +11,43 @@ import (
1011

1112
const firewallSettingsTestRoot = "HKCU/Software/NVMTest/firewall_settings"
1213

14+
func TestEnforcementSource(t *testing.T) {
15+
oldSecurity := append([]string(nil), prefs.SECURITY_POLICY_ROOTS...)
16+
oldMachine := prefs.MACHINE_PREFERENCE_ROOT
17+
oldUser := prefs.USER_PREFERENCE_ROOT
18+
root := "HKCU/Software/NVMTest/enforcement_source"
19+
prefs.SECURITY_POLICY_ROOTS = []string{root + "/policy"}
20+
prefs.MACHINE_PREFERENCE_ROOT = root + "/machine"
21+
prefs.USER_PREFERENCE_ROOT = root + "/user"
22+
t.Cleanup(func() {
23+
_ = exec.Command("reg", "delete", `HKCU\Software\NVMTest\enforcement_source`, "/f").Run()
24+
prefs.SECURITY_POLICY_ROOTS = oldSecurity
25+
prefs.MACHINE_PREFERENCE_ROOT = oldMachine
26+
prefs.USER_PREFERENCE_ROOT = oldUser
27+
})
28+
29+
if err := registry.Put([]string{"https://user.example/trust"}, root+"/user/ApprovedModules"); err != nil {
30+
t.Fatalf("seed user: %v", err)
31+
}
32+
if got := settings.EnforcementSource("approved_modules"); got != "your settings" {
33+
t.Fatalf("user source=%q", got)
34+
}
35+
36+
if err := registry.Put([]string{"https://machine.example/trust"}, root+"/machine/ApprovedModules"); err != nil {
37+
t.Fatalf("seed machine: %v", err)
38+
}
39+
if got := settings.EnforcementSource("approved_modules"); got != "machine settings" {
40+
t.Fatalf("machine source=%q", got)
41+
}
42+
43+
if err := registry.Put([]string{"https://policy.example/trust"}, root+"/policy/ApprovedModules"); err != nil {
44+
t.Fatalf("seed policy: %v", err)
45+
}
46+
if got := settings.EnforcementSource("approved_modules"); got != "machine policy" {
47+
t.Fatalf("policy source=%q", got)
48+
}
49+
}
50+
1351
func withFirewallPrefs(t *testing.T) {
1452
t.Helper()
1553

‎settings/settings.go‎

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,42 @@ func securityPolicyLookupKeys(name string) []string {
262262
return keys
263263
}
264264

265+
// EnforcementSource names the store that supplied a security setting.
266+
// machine policy, machine settings, or your settings.
267+
func EnforcementSource(name string) string {
268+
keys := securityPolicyLookupKeys(name)
269+
policyCount := len(securityPolicyRegKeys(name))
270+
regName := key(name)
271+
machineKey := joinedRegKey(prefs.MACHINE_PREFERENCE_ROOT, regName)
272+
userKey := joinedRegKey(prefs.USER_PREFERENCE_ROOT, regName)
273+
for i, k := range keys {
274+
_, exists, err := registry.Get(k)
275+
if err != nil || !exists {
276+
continue
277+
}
278+
switch {
279+
case i < policyCount:
280+
return "machine policy"
281+
case k == machineKey:
282+
return "machine settings"
283+
case k == userKey:
284+
return "your settings"
285+
default:
286+
return "your settings"
287+
}
288+
}
289+
return "your settings"
290+
}
291+
292+
func joinedRegKey(root, name string) string {
293+
root = strings.TrimRight(strings.TrimSpace(root), "/")
294+
name = strings.TrimSpace(name)
295+
if root == "" || name == "" {
296+
return ""
297+
}
298+
return root + "/" + name
299+
}
300+
265301
func applySecurityPolicyOverrides() {
266302
if len(prefs.SECURITY_POLICY_ROOTS) == 0 {
267303
return

0 commit comments

Comments
 (0)