#!/bin/busybox sh

# remove links that has been relocated or removed
# - generate a list of all symlinks in bin dirs and a list with all busybox
#   applets
# - sort the list and print all lines that are unique. This is the list of
#   symlinks that does not exist in the busybox applets list.
# - use stat to find the target of those symlinks printed as:
#     '/path/to/symlink' -> '/path/to/target'
#   The "2>/dev/null" is used to stop "can't stat" warnings appearing on
#   the console for each new command added by the new version of the
#   busybox package.
# - use awk to print the symlinks that points to '/bin/busybox'
# - use sed to strip the leading and training ' chars
# - finally pass the list to rm for removing the symlinks that points to
#   busybox but does not exist in the `busybox --list-all` list. On /usr-merged
#   systems find duplicates some of the symlinks, so pass -f to silence the
#   errors.
#   TODO: remove the -f flag after busybox is installed solely under /usr,
#   see #17423 and #17642
{ find bin sbin usr/bin usr/sbin -maxdepth 1 -type l; busybox --list-all; } \
	| sort | uniq -u \
	| xargs -r stat -c "%N" 2>/dev/null \
	| awk "\$3 == \"'/bin/busybox'\" {print \$1}" \
	| sed "s/^'//; s/'$//" \
	| xargs -r rm -f

for link in /bin/ping /bin/ping6; do
	if [ -L "$link" ] && [ "$(readlink $link)" = "/bin/bbsuid" ]; then
		rm "$link"
	fi
done

# We need the symlinks early
/bin/busybox --install -s || exit 1

# can't be in pre-upgrade since adduser/group may not available then
addgroup -S klogd 2>/dev/null
adduser -S -D -H -h /dev/null -s /sbin/nologin -G klogd -g klogd klogd 2>/dev/null

exit 0
