Compare commits

..

5 Commits

Author SHA1 Message Date
3830dfdc03 Fix SC2162 2024-12-01 23:30:03 -06:00
d6a35ccfcf set -u 2024-12-01 23:24:22 -06:00
5730d3c060 Buffer file before modifying it 2024-12-01 23:21:43 -06:00
1dee476771 Provide exit code on explicit exit 2024-12-01 23:19:19 -06:00
b7e10dccb9 Fix reading empty lines
I'm pretty sure shadow(5) guarantees this won't happen but best to be safe
2024-12-01 23:18:55 -06:00

View File

@@ -24,8 +24,7 @@
# that the cause is this disparity and that it will be smoothed out when
# systemd-sysusers next runs
#
set -e
set -o pipefail
set -euo pipefail
# Iterate over each file we're interested in
for file in /etc/shadow /etc/gshadow; do
@@ -42,7 +41,10 @@ for file in /etc/shadow /etc/gshadow; do
# Prelim checks succeeded, move forward
echo "Parsing $file for junk"
# Read each line in the file to iterate over it
while read line; do
while read -r line; do
# This should never happen, but if for some reason we get an empty line,
# continue
[ -z "$line" ] && continue
# Per shadow(5), we are guaranteed that all characters leading up to the
# first colon are the user's/group's name. To that end, we'll do a bash
# string substitution to extract that first column.
@@ -59,7 +61,7 @@ for file in /etc/shadow /etc/gshadow; do
;;
*)
echo "Unknown file to parse for junk: $file"
exit
exit 101
;;
esac
# Now, we use getent to find a match for the shadow entry. It's at this point
@@ -108,5 +110,7 @@ for file in /etc/shadow /etc/gshadow; do
"/^$name:/d" \
"$file"
fi
done < "$file"
# Not useless use of cat. We're buffering the file here to avoid conditions
# where we edit the file we're reading and face issues.
done < <(cat "$file")
done