]> err.no Git - dpkg/commitdiff
Let dpkg-source -b warn about special permissions of files added
authorFrank Lichtenheld <djpig@debian.org>
Wed, 18 Jan 2006 14:27:39 +0000 (14:27 +0000)
committerFrank Lichtenheld <djpig@debian.org>
Wed, 18 Jan 2006 14:27:39 +0000 (14:27 +0000)
in the diff since these will get lost. Closes: #306125

ChangeLog
debian/changelog
scripts/dpkg-source.pl

index 2d27bd3de3e53b44f029960c07cce954fe448ef8..adf386fc7f46fbd6d222c71fa9ffbf82324618a2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
        * man/C/dselect.1: Update reference to debconf
        man page with correct section (8->1)
 
+       * scripts/dpkg-source.pl: Warn on -b if we add a file with
+       special (i.e. exectuable or set{u,g}id) permission in the
+       diff since this mode will get lost.
+
 2005-10-07  Frank Lichtenheld  <djpig@debian.org>
 
        * scripts/controllib.pl:
index a9db95f7d85b106aad1bb6e3adf0cb9ee57ddf06..8f3702fc4d1d6e80f842a30d68056d6562603c08 100644 (file)
@@ -27,6 +27,8 @@ dpkg (1.13.12~) unstable; urgency=low
   * Fix man page references to dpkg and dselect man pages. Many
     of them still had a wrong section.
     Closes: #332826
+  * Let dpkg-source -b warn about special permissions of files added
+    in the diff since these will get lost. Closes: #306125
 
  --
 
index edbbd8eb99f481b0823f0c5eafecb421a66b8a40..2c52a46d505c41f5c902d713370c5674ad47e151 100755 (executable)
@@ -34,6 +34,7 @@ $def_dscformat = "1.0"; # default format for -b
 
 use POSIX;
 use POSIX qw (:errno_h :signal_h);
+use Fcntl qw (:mode);
 
 use strict 'refs';
 
@@ -405,6 +406,7 @@ if ($opmode eq 'build') {
             next file if $fn =~ m/$diff_ignore_regexp/o;
             $fn =~ s,^\./,,;
             lstat("$dir/$fn") || &syserr("cannot stat file $dir/$fn");
+           my $mode = S_IMODE((lstat(_))[2]);
             if (-l _) {
                 $type{$fn}= 'symlink';
                 &checktype('-l') || next;
@@ -418,6 +420,13 @@ if ($opmode eq 'build') {
                 if (!lstat("$origdir/$fn")) {
                     $! == ENOENT || &syserr("cannot stat orig file $origdir/$fn");
                     $ofnread= '/dev/null';
+                   if( $mode & ( S_IXUSR | SIXGRP | S_IXOTH ) ) {
+                       &warn( sprintf( "executable mode %04o of `$fn' will not be represented in diff", $mode ) )
+                           unless $fn eq 'debian/rules';
+                   }
+                   if( $mode & ( S_ISUID | S_IGID | S_ISVTX ) ) {
+                       &warn( sprintf( "special mode %04o of `$fn' will not be represented in diff", $mode ) );
+                   }
                 } elsif (-f _) {
                     $ofnread= "$origdir/$fn";
                 } else {