# 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
:
