This is an automated email from the git hooks/post-receive script.

guillem pushed a commit to branch master
in repository dpkg.

commit 8ffbe5f5c0012c740e1b61c460cea093ac080dea
Author: Guillem Jover <guil...@debian.org>
Date:   Sat Apr 22 18:48:10 2017 +0200

    dpkg-maintscript-helper: Print all unowned files from a directory
    
    Add a new internal command that is not part of the public interface,
    that takes care of checking whether a pathname is owned by a package.
    
    This internal command has some logic to prevent external abuse, by
    checking whether the parent has set a specific environment variable
    with a token that changes per release.
    
    The code will list all unowned files because xargs does not short-circuit
    on the first command erroring out, as long these do not terminate with an
    exit code of 255.
    
    Closes: #813454, #860238
    Based-on-patch-by: Bastien ROUCARIÈS <roucaries.bast...@gmail.com>
---
 debian/changelog                   |  4 ++++
 scripts/dpkg-maintscript-helper.sh | 31 +++++++++++++++++++++++--------
 2 files changed, 27 insertions(+), 8 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index 92b2b27..d582817 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -6,6 +6,10 @@ dpkg (1.18.24) UNRELEASED; urgency=medium
     when scanning symbols/shlibs files. This was causing generation of bogus
     dependencies when multiple packages provide the same SONAME on different
     directories. Regression introduced in dpkg 1.18.17. Closes: #860979
+  * Make dpkg-maintscript-helper print all unowned files from a directory
+    when printing the error message, to ease debugging those problems after
+    the fact. Closes: #813454, #860238
+    Based on a patch by Bastien ROUCARIÈS <roucaries.bast...@gmail.com>.
   * Architecture support:
     - Add support for ARM64 ILP32. Closes: #824742
       Thanks to Wookey <woo...@wookware.org>.
diff --git a/scripts/dpkg-maintscript-helper.sh 
b/scripts/dpkg-maintscript-helper.sh
index 1a0459f..378d03c 100755
--- a/scripts/dpkg-maintscript-helper.sh
+++ b/scripts/dpkg-maintscript-helper.sh
@@ -414,16 +414,12 @@ prepare_dir_to_symlink()
 
        # If there are locally created files or files owned by another package
        # we should not perform the switch.
-       find "$PATHNAME" -print0 | xargs -0 -n1 sh -c '
-               package="$1"
-               file="$2"
-               if ! dpkg-query -L "$package" | grep -F -q -x "$file"; then
-                       exit 1
-               fi
-               exit 0
-       ' check-files-ownership "$PACKAGE" || \
+       export DPKG_MAINTSCRIPT_HELPER_INTERNAL_API="$version"
+       find "$PATHNAME" -print0 | \
+               xargs -0 -n1 $0 _internal_pkg_must_own_file "$PACKAGE" || \
                error "directory '$PATHNAME' contains files not owned by" \
                      "package $PACKAGE, cannot switch to symlink"
+       unset DPKG_MAINTSCRIPT_HELPER_INTERNAL_API
 
        # At this point, we know that the directory either contains no files,
        # or only non-conffiles owned by the package.
@@ -517,6 +513,21 @@ ensure_package_owns_file() {
        return 0
 }
 
+internal_pkg_must_own_file()
+{
+       local PACKAGE="$1"
+       local FILE="$2"
+
+       if [ "$DPKG_MAINTSCRIPT_HELPER_INTERNAL_API" != "$version" ]; then
+               error "internal API used by external command"
+       fi
+
+       if ! ensure_package_owns_file "$PACKAGE" "$FILE"; then
+               error "file '$FILE' not owned by package '$PACKAGE'"
+       fi
+       return 0
+}
+
 symlink_match()
 {
        local SYMLINK="$1"
@@ -612,6 +623,10 @@ symlink_to_dir)
 dir_to_symlink)
        dir_to_symlink "$@"
        ;;
+_internal_pkg_must_own_file)
+       # This is an internal command, must not be used outside this program.
+       internal_pkg_must_own_file "$@"
+       ;;
 --help|help|-?)
        usage
        ;;

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/dpkg/dpkg.git

Reply via email to