# Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

bad_bin_owner_check() {
	# Warn about globally-installed executables (in /bin, /usr/bin, /sbin,
	# /usr/sbin, or /opt/bin) that are owned by a nonzero UID.

	# This check doesn't work on non-root prefix installations at
	# the moment, because every executable therein is owned by a
	# nonzero UID.
	[[ "${EUID}" -ne "0" || "${PORTAGE_INST_UID}" -ne "0" ]] && return

	local d f found=()

	for d in "${ED%/}/opt/bin" "${ED%/}/bin"  "${ED%/}/usr/bin" \
							   "${ED%/}/sbin" "${ED%/}/usr/sbin"; do
		[[ -d "${d}" ]] || continue

		# Read the results of the "find" command into the "found" bash array.
		#
		# Use -L to catch symlinks whose targets are owned by a non-root user,
		# even though it won't catch ABSOLUTE symlinks until the package
		# is RE-installed (the first time around, the target won't exist).
		#
		# We do want to list non-superuser setuid executables, because
		# they can be exploited. The owner can simply wipe the setuid
		# bit, and then alter the contents of the file. The superuser
		# will then have a time bomb in his $PATH.
		while read -r -d '' f; do
			found+=( "${f}" )
		done < <(find -L "${d}"   \
					-maxdepth 1   \
					-type f       \
					! -uid 0      \
					-print0)
	done

	if [[ ${found[@]} ]]; then
		eqawarn "system executables owned by nonzero uid:"
		for f in "${found[@]}"; do
			# Strip off the leading destdir before outputting the path.
			eqawarn "  ${f#${D%/}}"
		done
	fi
}

bad_bin_owner_check
:
