Skip to content

Commit ba6392c

Browse files
authored
Merge pull request #49 from ComplianceAsCode/fix_prodtype
Change rule prodtype search and make tests more content change proof
2 parents 552403f + 696df04 commit ba6392c

File tree

7 files changed

+76
-46
lines changed

7 files changed

+76
-46
lines changed

ctf/DiffStruct.py

Lines changed: 46 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,42 @@ def find_rule_profiles(self, rule):
6161
if find_rule.search(line):
6262
yield profile_file
6363

64+
def find_rule_controls(self, rule):
65+
controls = []
66+
find_rule = re.compile(r"^\s*-\s*" + rule + r"\s*$", re.MULTILINE)
67+
control_folder = git_wrapper.repo_path + "/" + "controls/"
68+
# Check all yaml files in controls/
69+
for control in os.listdir(control_folder):
70+
if not control.endswith(".yml"):
71+
continue
72+
control_path = control_folder + control
73+
with open(control_path) as f:
74+
control_content = f.read()
75+
# If controls in separate directory, merge them to one string
76+
controls_dir = re.search(r"controls_dir:\s*(\w+)", control_content)
77+
if controls_dir:
78+
controls_dir = controls_dir.group(1)
79+
for c in os.listdir(control_folder + controls_dir):
80+
with open(control_folder + controls_dir + "/" + c) as cf:
81+
control_content += cf.read()
82+
# Search for rule in control content
83+
if find_rule.search(control_content):
84+
yield control.rstrip(".yml")
85+
86+
def find_control_products(self, control):
87+
products_folder = git_wrapper.repo_path + "/" + "products"
88+
find_control = re.compile(r"^\s*-\s*" + control + r":", re.MULTILINE)
89+
# Find dirs with profile files
90+
for dir_path, _, files in os.walk(products_folder):
91+
for file in files:
92+
if not file.endswith(".profile"):
93+
continue
94+
# Search if desired control is used and if so, return product
95+
with open(dir_path + "/" + file) as f:
96+
for line in f:
97+
if find_control.search(line):
98+
yield re.match(r".*/products/([^/]+)", dir_path).group(1)
99+
64100
def get_rule_ruleyml(self, rule):
65101
# Find a directory with a rule name and check if it has rule.yml file
66102
for root, dirs, files in os.walk(git_wrapper.repo_path):
@@ -83,20 +119,17 @@ def get_rule_profiles(self, rule):
83119
return profiles
84120

85121
def get_rule_products(self, rule):
122+
products = []
86123
# Parse from matched profiles product names
87-
ruleyml_path = self.get_rule_ruleyml(rule)
88-
prodtype_line = None
89-
with open(ruleyml_path) as f:
90-
for line in f.readlines():
91-
if "prodtype:" in line:
92-
prodtype_line = line
93-
break
94-
# rule.yml does not have prodtype
95-
if not prodtype_line:
96-
return None
97-
98-
prodtypes = re.match(r"\s*prodtype:\s*([\w|,]+)\s*", prodtype_line).group(1)
99-
products = prodtypes.split(",")
124+
for profile_path in self.find_rule_profiles(rule):
125+
parse_file = re.match(r".+/((?:\w|-)+)/profiles/(?:\w|-)+\.profile",
126+
profile_path)
127+
products.append(parse_file.group(1))
128+
# Find in controls and from controls get product
129+
for control in self.find_rule_controls(rule):
130+
for product in self.find_control_products(control):
131+
products.append(product)
132+
100133
products = sorted(products, key=lambda k: (k!="rhel8", k!="rhel7", k!="ocp4", k))
101134
return products
102135

tests/ansible.bats

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ prepare_repository
55

66

77
@test "Add comment line" {
8-
file="./linux_os/guide/system/software/integrity/disable_prelink/ansible/shared.yml"
8+
file="./linux_os/guide/system/software/integrity/software-integrity/rpm_verification/rpm_verify_permissions/ansible/shared.yml"
99
sed -i "\$a# comment" "$file"
1010

1111
git add "$file" && git commit -m "test commit" &>/dev/null
@@ -21,7 +21,7 @@ prepare_repository
2121
}
2222

2323
@test "Change metadata" {
24-
file="./linux_os/guide/system/software/integrity/disable_prelink/ansible/shared.yml"
24+
file="./linux_os/guide/system/software/integrity/software-integrity/rpm_verification/rpm_verify_permissions/ansible/shared.yml"
2525
sed -i 's/# reboot = false/# reboot = true/' "$file"
2626
regex_check="build_product "
2727

@@ -38,8 +38,8 @@ prepare_repository
3838
}
3939

4040
@test "Change name" {
41-
file="./linux_os/guide/system/software/integrity/disable_prelink/ansible/shared.yml"
42-
sed -i 's/- name: Disable.*/- name: some name/' "$file"
41+
file="./linux_os/guide/system/software/integrity/software-integrity/rpm_verification/rpm_verify_permissions/ansible/shared.yml"
42+
sed -i 's/- name: .*/- name: some name/' "$file"
4343

4444
git add "$file" && git commit -m "test commit" &>/dev/null
4545

@@ -54,10 +54,10 @@ prepare_repository
5454
}
5555

5656
@test "Change remediation part" {
57-
file="./linux_os/guide/system/software/integrity/disable_prelink/ansible/shared.yml"
58-
sed -i 's;path: .*;path: /some/path/;' "$file"
57+
file="./linux_os/guide/system/software/integrity/software-integrity/rpm_verification/rpm_verify_permissions/ansible/shared.yml"
58+
sed -i 's/command: .*/command: ls/' "$file"
5959
regex_check_1="build_product "
60-
regex_check_2=".*test_suite\.py rule.*disable_prelink"
60+
regex_check_2=".*test_suite\.py rule.*rpm_verify_permissions"
6161

6262
git add "$file" && git commit -m "test commit" &>/dev/null
6363

@@ -98,7 +98,7 @@ prepare_repository
9898
}
9999

100100
@test "Remove ansible remediation" {
101-
file="./linux_os/guide/services/ssh/ssh_server/sshd_use_approved_macs/ansible/shared.yml"
101+
file="./linux_os/guide/system/software/integrity/software-integrity/rpm_verification/rpm_verify_permissions/ansible/shared.yml"
102102
rm -f "$file"
103103

104104
git add "$file" && git commit -m "test commit" &>/dev/null

tests/bash.bats

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ prepare_repository
55

66

77
@test "Add comment line" {
8-
file="./linux_os/guide/services/sssd/sssd_run_as_sssd_user/bash/shared.sh"
8+
file="./linux_os/guide/system/software/integrity/software-integrity/rpm_verification/rpm_verify_permissions/bash/shared.sh"
99
sed -i "\$a# comment" "$file"
1010

1111
git add "$file" && git commit -m "test commit" &>/dev/null
@@ -38,10 +38,10 @@ prepare_repository
3838
}
3939

4040
@test "Change remediation" {
41-
file="./linux_os/guide/services/sssd/sssd_run_as_sssd_user/bash/shared.sh"
42-
sed -i "s/chmod 600/chmod 744/" "$file"
41+
file="./linux_os/guide/system/software/integrity/software-integrity/rpm_verification/rpm_verify_permissions/bash/shared.sh"
42+
sed -i "s/rpm//" "$file"
4343
regex_check_1="build_product "
44-
regex_check_2="test_suite\.py rule.*sssd_run_as_sssd_user"
44+
regex_check_2="test_suite\.py rule.*rpm_verify_permissions"
4545

4646
git add "$file" && git commit -m "test commit" &>/dev/null
4747

@@ -83,7 +83,7 @@ prepare_repository
8383

8484

8585
@test "Remove bash remediation" {
86-
file="./linux_os/guide/services/ssh/ssh_server/sshd_use_approved_macs/bash/shared.sh"
86+
file="./linux_os/guide/system/software/integrity/software-integrity/rpm_verification/rpm_verify_permissions/bash/shared.sh"
8787
rm -f "$file"
8888

8989
git add "$file" && git commit -m "test commit" &>/dev/null

tests/jinja.bats

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@ prepare_repository
88
file="./shared/macros/10-bash.jinja"
99
sed -i "/macro bash_sshd_config_set/a echo 1" "$file"
1010
regex_check_1="build_product"
11-
regex_check_2="test_suite.py rule.*sshd_use_strong_macs"
12-
regex_check_3="test_suite.py rule.*sshd_set_idle_timeout"
13-
regex_check_4="test_suite.py rule.*sshd_use_priv_separation"
11+
regex_check_2="test_suite.py rule.*sshd_set_"
12+
regex_check_3="test_suite.py rule.*sshd_use_"
1413

1514
git add "$file" && git commit -m "test commit" &>/dev/null
1615

tests/json_ansible.bats

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ prepare_repository
55

66

77
@test "Add comment line" {
8-
file="./linux_os/guide/system/software/integrity/disable_prelink/ansible/shared.yml"
8+
file="./linux_os/guide/system/software/integrity/software-integrity/rpm_verification/rpm_verify_permissions/ansible/shared.yml"
99
sed -i "\$a# comment" "$file"
1010

1111
git add "$file" && git commit -m "test commit" &>/dev/null
@@ -21,7 +21,7 @@ prepare_repository
2121
}
2222

2323
@test "Change metadata" {
24-
file="./linux_os/guide/system/software/integrity/disable_prelink/ansible/shared.yml"
24+
file="./linux_os/guide/system/software/integrity/software-integrity/rpm_verification/rpm_verify_permissions/ansible/shared.yml"
2525
sed -i 's/# reboot = false/# reboot = true/' "$file"
2626
regex_check="build_product "
2727

@@ -38,8 +38,8 @@ prepare_repository
3838
}
3939

4040
@test "Change name" {
41-
file="./linux_os/guide/system/software/integrity/disable_prelink/ansible/shared.yml"
42-
sed -i 's/- name: Disable.*/- name: some name/' "$file"
41+
file="./linux_os/guide/system/software/integrity/software-integrity/rpm_verification/rpm_verify_permissions/ansible/shared.yml"
42+
sed -i 's/- name: .*/- name: some name/' "$file"
4343

4444
git add "$file" && git commit -m "test commit" &>/dev/null
4545

@@ -54,9 +54,9 @@ prepare_repository
5454
}
5555

5656
@test "Change remediation part" {
57-
file="./linux_os/guide/system/software/integrity/disable_prelink/ansible/shared.yml"
58-
sed -i 's;path: .*;path: /some/path/;' "$file"
59-
regex_check='{.*"rules": \["disable_prelink"\].*"bash": "False".*"ansible": "True"}'
57+
file="./linux_os/guide/system/software/integrity/software-integrity/rpm_verification/rpm_verify_permissions/ansible/shared.yml"
58+
sed -i 's/command: .*/command: ls/' "$file"
59+
regex_check='{.*"rules": \["rpm_verify_permissions"\].*"bash": "False".*"ansible": "True"}'
6060

6161
git add "$file" && git commit -m "test commit" &>/dev/null
6262

@@ -88,7 +88,7 @@ prepare_repository
8888
}
8989

9090
@test "Remove ansible remediation" {
91-
file="./linux_os/guide/services/ssh/ssh_server/sshd_use_approved_macs/ansible/shared.yml"
91+
file="./linux_os/guide/system/software/integrity/software-integrity/rpm_verification/rpm_verify_permissions/ansible/shared.yml"
9292
rm -f "$file"
9393

9494
git add "$file" && git commit -m "test commit" &>/dev/null

tests/json_bash.bats

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ prepare_repository
55

66

77
@test "Add comment line" {
8-
file="./linux_os/guide/services/sssd/sssd_run_as_sssd_user/bash/shared.sh"
8+
file="./linux_os/guide/system/software/integrity/software-integrity/rpm_verification/rpm_verify_permissions/bash/shared.sh"
99
sed -i "\$a# comment" "$file"
1010

1111
git add "$file" && git commit -m "test commit" &>/dev/null
@@ -38,9 +38,9 @@ prepare_repository
3838
}
3939

4040
@test "Change remediation" {
41-
file="./linux_os/guide/services/sssd/sssd_run_as_sssd_user/bash/shared.sh"
42-
sed -i "s/chmod 600/chmod 744/" "$file"
43-
regex_check='{.*"rules": \["sssd_run_as_sssd_user"\].*"bash": "True".*"ansible": "False"}'
41+
file="./linux_os/guide/system/software/integrity/software-integrity/rpm_verification/rpm_verify_permissions/bash/shared.sh"
42+
sed -i "s/rpm//" "$file"
43+
regex_check='{.*"rules": \["rpm_verify_permissions"\].*"bash": "True".*"ansible": "False"}'
4444

4545
git add "$file" && git commit -m "test commit" &>/dev/null
4646

@@ -73,7 +73,7 @@ prepare_repository
7373

7474

7575
@test "Remove bash remediation" {
76-
file="./linux_os/guide/services/ssh/ssh_server/sshd_use_approved_macs/bash/shared.sh"
76+
file="./linux_os/guide/system/software/integrity/software-integrity/rpm_verification/rpm_verify_permissions/bash/shared.sh"
7777
rm -f "$file"
7878

7979
git add "$file" && git commit -m "test commit" &>/dev/null

tests/json_jinja.bats

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,8 @@ prepare_repository
77
@test "Change sshd macro" {
88
file="./shared/macros/10-bash.jinja"
99
sed -i "/macro bash_sshd_config_set/a echo 1" "$file"
10-
regex_check_1='{.*"rules": \[.*"sshd_use_strong_ciphers".*\].*"bash": "True".*"ansible": "False".*}'
11-
regex_check_2='{.*"rules": \[.*"sshd_use_strong_macs".*\].*"bash": "True".*"ansible": "False".*}'
12-
regex_check_3='{.*"rules": \[.*"sshd_set_keepalive".*\].*"bash": "True".*"ansible": "False".*}'
13-
regex_check_4='{.*"rules": \[.*"sshd_set_idle_timeout".*\].*"bash": "True".*"ansible": "False".*}'
10+
regex_check_1='{.*"rules": \[.*"sshd_use_.*".*\].*"bash": "True".*"ansible": "False".*}'
11+
regex_check_2='{.*"rules": \[.*"sshd_set_.*".*\].*"bash": "True".*"ansible": "False".*}'
1412

1513
git add "$file" && git commit -m "test commit" &>/dev/null
1614

0 commit comments

Comments
 (0)