You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.4 KiB
62 lines
1.4 KiB
#!/bin/bash
|
|
|
|
process_u() {
|
|
if [ ! -z "${2##*[!0-9]*}" ]; then
|
|
# Single shared static ID.
|
|
echo "user($1) = $2"
|
|
echo "group($1) = $2"
|
|
elif [[ $2 == *:* ]]; then
|
|
# UID:<group>.
|
|
uid=$(echo $2 | cut -d':' -f1 -)
|
|
group=$(echo $2 | cut -d':' -f2 -)
|
|
if [ ! -z "${group##*[!0-9]*}" ]; then
|
|
# UID:GID.
|
|
echo "user($1) = ${uid}"
|
|
echo "group($1) = ${group}"
|
|
else
|
|
# UID:<groupname>.
|
|
echo "user($1) = ${uid}"
|
|
echo "group(${group})"
|
|
fi
|
|
else
|
|
# Dynamic (or something else uninteresting).
|
|
echo "user($1)"
|
|
echo "group($1)"
|
|
fi
|
|
}
|
|
|
|
process_g() {
|
|
if [ ! -z "${2##*[!0-9]*}" ]; then
|
|
# Static GID.
|
|
echo "group($1) = $2"
|
|
else
|
|
# Dynamic (or something else uninteresting).
|
|
echo "group($1)"
|
|
fi
|
|
}
|
|
|
|
parse() {
|
|
while read line; do
|
|
[ "${line:0:1}" = '#' -o "${line:0:1}" = ';' ] && continue
|
|
line="${line## *}"
|
|
[ -z "$line" ] && continue
|
|
set -- $line
|
|
case "$1" in
|
|
('u')
|
|
process_u "$2" "$3"
|
|
;;
|
|
('g')
|
|
process_g "$2" "$3"
|
|
;;
|
|
('m')
|
|
echo "user($2)"
|
|
echo "group($3)"
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
while read fn; do
|
|
parse < "$fn"
|
|
done
|