Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 32 additions & 26 deletions Secure Token Users.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/bin/zsh
#!/usr/bin/env zsh --no-rcs

# Extension attribute to report all user accounts who have a secure token
# If a user is found to have a secure token, the results will be displayed as:
Expand All @@ -11,7 +11,7 @@
# Unsupported File System: (File System Type)

# Variable to determine File System Personality
fsType="$(/usr/sbin/diskutil info / | /usr/bin/awk 'sub(/File System Personality: /,""){print $0}')"
fsType="$(/usr/sbin/diskutil info / | /usr/bin/awk '/File System Personality:/{print $4}')"

if [[ "$fsType" != *APFS* ]]; then
echo "<result>Unsupported File System: $fsType</result>"
Expand All @@ -22,36 +22,42 @@ secureTokenAdmins=()
secureTokenUsers=()

# Loop through UUIDs of secure token holders
for uuid in ${$(/usr/sbin/diskutil apfs listUsers / | /usr/bin/awk '/\+\-\-/ {print $2}')}; do
username="$(/usr/bin/dscl . -search /Users GeneratedUID ${uuid} | /usr/bin/awk 'NR==1{print $1}')"

if /usr/sbin/dseditgroup -o checkmember -m "$username" admin &>/dev/null; then
secureTokenAdmins+=($username)
else
secureTokenUsers+=($username)
for uuid in $(/usr/sbin/diskutil apfs listUsers / | /usr/bin/awk '/\+\-\-/ {print $2}'); do
username="$(/usr/bin/dscl . -search /Users GeneratedUID "$uuid" | /usr/bin/awk 'NR==1{print $1}')"

if [[ -n "$username" ]]; then
if /usr/sbin/dseditgroup -o checkmember -m "$username" admin &>/dev/null; then
secureTokenAdmins+=("$username")
else
secureTokenUsers+=("$username")
fi
fi
done

if [[ -z ${secureTokenAdmins[@]} ]]; then
stList="$(echo "Admins: None")"
if [[ -z ${secureTokenAdmins[*]} ]]; then
stList="Admins: None"
else
stList="$(echo "Admins: ${secureTokenAdmins[1]}")"

for user in ${secureTokenAdmins[@]:1}; do
stList+=", $user"
done
stList="Admins: ${secureTokenAdmins[1]}"

if ((${#secureTokenAdmins[@]} > 1 )); then
for user in $"{secureTokenAdmins[@]:1}"; do
stList+=", $user"
done
fi
fi

if [[ -z ${secureTokenAdmins[@]} ]] && [[ -z ${secureTokenUsers[@]} ]]; then
stList="$(echo "No Secure Token Users")"
elif [[ -z ${secureTokenUsers[@]} ]]; then
stList+="\n$(echo "Non-Admins: None")"
if [[ -z ${secureTokenAdmins[*]} ]] && [[ -z ${secureTokenUsers[*]} ]]; then
stList="No Secure Token Users"
elif [[ -z ${secureTokenUsers[*]} ]]; then
stList+="\nNon-Admins: None"
else
stList+="\n$(echo "Non-Admins: ${secureTokenUsers[1]}")"

for user in ${secureTokenUsers[@]:1}; do
stList+=", $user"
done
stList+="\nNon-Admins: ${secureTokenUsers[1]}"

if ((${#secureTokenUsers[@]} > 1 )); then
for user in "${secureTokenUsers[@]:1}"; do
stList+=", $user"
done
fi
fi

echo "<result>$stList</result>"
echo "<result>$stList</result>"