Blame SOURCES/scap-security-guide-0.1.20-shared-fix-set-deny-for-failed-password-attempts-remediation.patch

2b7b16
diff --git a/shared/fixes/bash/accounts_passwords_pam_faillock_deny.sh b/shared/fixes/bash/accounts_passwords_pam_faillock_deny.sh
2b7b16
index ca11120..b1dbd3a 100644
2b7b16
--- a/shared/fixes/bash/accounts_passwords_pam_faillock_deny.sh
2b7b16
+++ b/shared/fixes/bash/accounts_passwords_pam_faillock_deny.sh
2b7b16
@@ -1,18 +1,36 @@
2b7b16
 source ./templates/support.sh
2b7b16
 populate var_accounts_passwords_pam_faillock_deny
2b7b16
 
2b7b16
-for pamFile in "/etc/pam.d/system-auth /etc/pam.d/password-auth"
2b7b16
-do
2b7b16
+AUTH_FILES[0]="/etc/pam.d/system-auth"
2b7b16
+AUTH_FILES[1]="/etc/pam.d/password-auth"
2b7b16
 
2b7b16
-	if grep -q "^auth.*[default=die].*pam_faillock.so.*authfail.*deny=" $pamFile; then
2b7b16
-		sed -i --follow-symlink "s/\(^auth.*[default=die].*pam_faillock.so.*authfail.*\)\(deny *= *\).*/\1\2$var_accounts_passwords_pam_faillock_deny/" $pamFile
2b7b16
-	else
2b7b16
-		sed -i --follow-symlink "/^auth.*[default=die].*pam_faillock.so.*authfail/ s/$/ deny=$var_accounts_passwords_pam_faillock_deny/" $pamFile
2b7b16
-	fi
2b7b16
+for pamFile in "${AUTH_FILES[@]}"
2b7b16
+do
2b7b16
 	
2b7b16
-	if grep -q "^auth.*[default=die].*pam_faillock.so.*authsucc.*deny=" /etc/pam.d/system-auth; then
2b7b16
-	        sed -i --follow-symlink "s/\(^auth.*[default=die].*pam_faillock.so.*authsucc.*\)\(deny *= *\).*/\1\2$var_accounts_passwords_pam_faillock_deny/" $pamFile
2b7b16
+	# pam_faillock.so already present?
2b7b16
+	if grep -q "^auth.*pam_faillock.so.*" $pamFile; then
2b7b16
+
2b7b16
+		# pam_faillock.so present, deny directive present?
2b7b16
+		if grep -q "^auth.*[default=die].*pam_faillock.so.*authfail.*deny=" $pamFile; then
2b7b16
+
2b7b16
+			# both pam_faillock.so & deny present, just correct deny directive value
2b7b16
+			sed -i --follow-symlink "s/\(^auth.*required.*pam_faillock.so.*preauth.*silent.*\)\(deny *= *\).*/\1\2$var_accounts_passwords_pam_faillock_deny/" $pamFile
2b7b16
+			sed -i --follow-symlink "s/\(^auth.*[default=die].*pam_faillock.so.*authfail.*\)\(deny *= *\).*/\1\2$var_accounts_passwords_pam_faillock_deny/" $pamFile
2b7b16
+
2b7b16
+		# pam_faillock.so present, but deny directive not yet
2b7b16
+		else
2b7b16
+
2b7b16
+			# append correct deny value to appropriate places
2b7b16
+			sed -i --follow-symlink "/^auth.*required.*pam_faillock.so.*preauth.*silent.*/ s/$/ deny=$var_accounts_passwords_pam_faillock_deny/" $pamFile
2b7b16
+			sed -i --follow-symlink "/^auth.*[default=die].*pam_faillock.so.*authfail.*/ s/$/ deny=$var_accounts_passwords_pam_faillock_deny/" $pamFile
2b7b16
+		fi
2b7b16
+
2b7b16
+	# pam_faillock.so not present yet
2b7b16
 	else
2b7b16
-	        sed -i --follow-symlink "/^auth.*[default=die].*pam_faillock.so.*authsucc/ s/$/ deny=$var_accounts_passwords_pam_faillock_deny/" $pamFile
2b7b16
+
2b7b16
+		# insert pam_faillock.so preauth & authfail rows with proper value of the 'deny' option
2b7b16
+		sed -i --follow-symlink "/^auth.*sufficient.*pam_unix.so.*/i auth        required      pam_faillock.so preauth silent deny=$var_accounts_passwords_pam_faillock_deny" $pamFile
2b7b16
+		sed -i --follow-symlink "/^auth.*sufficient.*pam_unix.so.*/a auth        [default=die] pam_faillock.so authfail deny=$var_accounts_passwords_pam_faillock_deny" $pamFile
2b7b16
+		sed -i --follow-symlink "/^account.*required.*pam_unix.so/i account     required      pam_faillock.so" $pamFile
2b7b16
 	fi
2b7b16
 done