mirror of
https://github.com/fleetdm/fleet
synced 2026-05-24 01:18:42 +00:00
119 lines
4 KiB
Bash
Executable file
119 lines
4 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
# variables
|
|
LOGGED_IN_USER=$(scutil <<< "show State:/Users/ConsoleUser" | awk '/Name :/ { print $3 }')
|
|
# functions
|
|
|
|
expand_pkgid_and_map() {
|
|
local PKGID="$1"
|
|
local FUNC="$2"
|
|
if [[ "$PKGID" == *"*" ]]; then
|
|
local prefix="${PKGID%\*}"
|
|
# Convert (.*) to .* for regex matching to handle patterns like (.*).com.example.app
|
|
local regex_pattern=$(echo "$prefix" | sed 's/(\.\*)/.*/g')
|
|
echo "Expanding wildcard for PKGID: $PKGID (pattern: ^${regex_pattern})"
|
|
for receipt in $(pkgutil --pkgs | grep -E "^${regex_pattern}"); do
|
|
echo "Processing $receipt"
|
|
"$FUNC" "$receipt"
|
|
done
|
|
else
|
|
"$FUNC" "$PKGID"
|
|
fi
|
|
}
|
|
|
|
forget_pkg() {
|
|
local PKGID="$1"
|
|
expand_pkgid_and_map "$PKGID" forget_receipt
|
|
}
|
|
|
|
forget_receipt() {
|
|
local PKGID="$1"
|
|
sudo pkgutil --forget "$PKGID"
|
|
}
|
|
|
|
remove_pkg_files() {
|
|
local PKGID="$1"
|
|
expand_pkgid_and_map "$PKGID" remove_receipt_files
|
|
}
|
|
|
|
remove_receipt_files() {
|
|
local PKGID="$1"
|
|
local PKGINFO VOLUME INSTALL_LOCATION FULL_INSTALL_LOCATION
|
|
|
|
echo "pkgutil --pkg-info-plist \"$PKGID\""
|
|
PKGINFO=$(pkgutil --pkg-info-plist "$PKGID")
|
|
VOLUME=$(echo "$PKGINFO" | awk '/<key>volume<\/key>/ {getline; gsub(/.*<string>|<\/string>.*/, ""); print}')
|
|
INSTALL_LOCATION=$(echo "$PKGINFO" | awk '/<key>install-location<\/key>/ {getline; gsub(/.*<string>|<\/string>.*/, ""); print}')
|
|
|
|
if [ -z "$INSTALL_LOCATION" ] || [ "$INSTALL_LOCATION" = "/" ]; then
|
|
FULL_INSTALL_LOCATION="$VOLUME"
|
|
else
|
|
FULL_INSTALL_LOCATION="$VOLUME/$INSTALL_LOCATION"
|
|
FULL_INSTALL_LOCATION=$(echo "$FULL_INSTALL_LOCATION" | sed 's|//|/|g')
|
|
fi
|
|
|
|
echo "sudo pkgutil --only-files --files \"$PKGID\" | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" | tr '\\\\n' '\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf"
|
|
sudo pkgutil --only-files --files "$PKGID" | sed "s|^|${FULL_INSTALL_LOCATION}/|" | tr '\n' '\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf
|
|
|
|
echo "sudo pkgutil --only-dirs --files \"$PKGID\" | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" | grep '\\.app$' | tr '\\\\n' '\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf"
|
|
sudo pkgutil --only-dirs --files "$PKGID" | sed "s|^|${FULL_INSTALL_LOCATION}/|" | grep '\.app$' | tr '\n' '\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf
|
|
|
|
root_app_dir=$(
|
|
sudo pkgutil --only-dirs --files "$PKGID" \
|
|
| sed "s|^|${FULL_INSTALL_LOCATION}/|" \
|
|
| grep 'Applications' \
|
|
| awk '{ print length, $0 }' \
|
|
| sort -n \
|
|
| head -n1 \
|
|
| cut -d' ' -f2-
|
|
)
|
|
if [ -n "$root_app_dir" ]; then
|
|
echo "sudo rmdir -p \"$root_app_dir\" 2>/dev/null || :"
|
|
sudo rmdir -p "$root_app_dir" 2>/dev/null || :
|
|
fi
|
|
}
|
|
|
|
trash() {
|
|
local logged_in_user="$1"
|
|
local target_file="$2"
|
|
local timestamp="$(date +%Y-%m-%d-%s)"
|
|
local rand="$(jot -r 1 0 99999)"
|
|
|
|
# replace ~ with /Users/$logged_in_user
|
|
if [[ "$target_file" == ~* ]]; then
|
|
target_file="/Users/$logged_in_user${target_file:1}"
|
|
fi
|
|
|
|
local trash="/Users/$logged_in_user/.Trash"
|
|
local file_name="$(basename "${target_file}")"
|
|
|
|
if [[ -e "$target_file" ]]; then
|
|
echo "removing $target_file."
|
|
mv -f "$target_file" "$trash/${file_name}_${timestamp}_${rand}"
|
|
else
|
|
echo "$target_file doesn't exist."
|
|
fi
|
|
}
|
|
|
|
# Remove teleport-suite packages (handles wildcard patterns with (.*))
|
|
remove_pkg_files '(.*).com.gravitational.teleport.tctl'
|
|
forget_pkg '(.*).com.gravitational.teleport.tctl'
|
|
remove_pkg_files '(.*).com.gravitational.teleport.tsh'
|
|
forget_pkg '(.*).com.gravitational.teleport.tsh'
|
|
remove_pkg_files 'com.gravitational.teleport'
|
|
forget_pkg 'com.gravitational.teleport'
|
|
|
|
# Explicitly remove apps from /Applications (in case pkgutil removal didn't catch them)
|
|
sudo rm -rf '/Applications/tctl.app'
|
|
sudo rm -rf '/Applications/tsh.app'
|
|
|
|
# Remove binaries
|
|
sudo rm -rf '/usr/local/bin/fdpass-teleport'
|
|
sudo rm -rf '/usr/local/bin/tbot'
|
|
sudo rm -rf '/usr/local/bin/tctl'
|
|
sudo rm -rf '/usr/local/bin/teleport'
|
|
sudo rm -rf '/usr/local/bin/tsh'
|
|
|
|
# Remove user data
|
|
trash $LOGGED_IN_USER '~/.tsh'
|
|
|