Bug #210372 - Fix FEATURES=suidctl so that it really works again.
authorZac Medico <zmedico@gentoo.org>
Mon, 3 Mar 2008 19:24:05 +0000 (19:24 -0000)
committerZac Medico <zmedico@gentoo.org>
Mon, 3 Mar 2008 19:24:05 +0000 (19:24 -0000)
(trunk r9423)

svn path=/main/branches/2.1.2/; revision=9424

bin/misc-functions.sh

index 85d0c37c76f77b6eace8101736bf0660022294dd..680c5b1856ec801a412bf10004579cb0140ab8a1 100755 (executable)
@@ -464,27 +464,28 @@ preinst_suid_scan() {
        fi
        # total suid control.
        if hasq suidctl $FEATURES; then
+               local sfconf
                sfconf=${PORTAGE_CONFIGROOT}etc/portage/suidctl.conf
+               # sandbox prevents us from writing directly
+               # to files outside of the sandbox, but this
+               # can easly be bypassed using the addwrite() function
+               addwrite "${sfconf}"
                vecho ">>> Performing suid scan in ${D}"
                for i in $(find "${D}" -type f \( -perm -4000 -o -perm -2000 \) ); do
                        if [ -s "${sfconf}" ]; then
-                               suid="$(grep "^/${i#${D}}$" "${sfconf}")"
-                               if [ "${suid}" = "${i/${D}}" ]; then
-                                       vecho "- ${i/${D}} is an approved suid file"
+                               install_path=/${i#${D}}
+                               if grep -q "^${install_path}\$" "${sfconf}" ; then
+                                       vecho "- ${install_path} is an approved suid file"
                                else
-                                       vecho ">>> Removing sbit on non registered ${i/${D}}"
+                                       vecho ">>> Removing sbit on non registered ${install_path}"
                                        for x in 5 4 3 2 1 0; do echo -ne "\a"; sleep 0.25 ; done
                                        vecho -ne "\a"
                                        ls_ret=$(ls -ldh "${i}")
                                        chmod ugo-s "${i}"
-                                       grep "^#${i/${D}}$" "${sfconf}" > /dev/null || {
-                                               # sandbox prevents us from writing directly
-                                               # to files outside of the sandbox, but this
-                                               # can easly be bypassed using the addwrite() function
-                                               addwrite "${sfconf}"
+                                       grep "^#${install_path}$" "${sfconf}" > /dev/null || {
                                                vecho ">>> Appending commented out entry to ${sfconf} for ${PF}"
-                                               echo "## ${ls_ret%${D}*}${ls_ret#*${D}}" >> "${sfconf}"
-                                               echo "#${i/${D}}" >> "${sfconf}"
+                                               echo "## ${ls_ret%${D}*}${install_path}" >> "${sfconf}"
+                                               echo "#${install_path}" >> "${sfconf}"
                                                # no delwrite() eh?
                                                # delwrite ${sconf}
                                        }