Package: dpkg-dev Version: 1.13.13 Severity: normal Every time controllib.pl is loaded it tries to resolv uid & gid, even if the script using it does not need it. Fix by replacing global variable @fowner with function getfowner.
This patch is needed by scratchbox since it might call dpkg-architecture before /etc/passwd is set up. -- System Information: Debian Release: testing/unstable APT prefers unstable APT policy: (500, 'unstable'), (500, 'testing') Architecture: i386 (i686) Shell: /bin/sh linked to /bin/bash Kernel: Linux 2.6.17.13 Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Versions of packages dpkg-dev depends on: ii binutils 2.16.1cvs20060117-1 The GNU assembler, linker and bina ii cpio 2.6-10 GNU cpio -- a program to manage ar ii dpkg 1.13.13 package maintenance system for Deb ii make 3.81-1 The GNU version of the "make" util ii patch 2.5.9-4 Apply a diff file to an original ii perl [perl5] 5.8.8-4 Larry Wall's Practical Extraction ii perl-modules 5.8.8-4 Core Perl modules Versions of packages dpkg-dev recommends: ii bzip2 1.0.3-2 high-quality block-sorting file co ii gcc [c-compiler] 4:4.1.1-3 The GNU C compiler ii gcc-3.3 [c-compiler] 1:3.3.6-10 The GNU C compiler ii gcc-4.0 [c-compiler] 4.0.3-1 The GNU C compiler ii gcc-4.1 [c-compiler] 4.1.1-16 The GNU C compiler -- no debconf information
diff -urp dpkg-1.13.24/scripts/controllib.pl dpkg-1.13.25/scripts/controllib.pl --- dpkg-1.13.24/scripts/controllib.pl 2006-10-12 02:46:26.000000000 +0300 +++ dpkg-1.13.25/scripts/controllib.pl 2006-11-03 11:41:19.000000000 +0200 @@ -59,18 +59,21 @@ if(!defined($getlogin)) { close(SAVEIN); } -if (defined ($ENV{'LOGNAME'})) { - @fowner = getpwnam ($ENV{'LOGNAME'}); - if (! @fowner) { die (sprintf (_g('unable to get login information for username "%s"'), $ENV{'LOGNAME'})); } -} elsif (defined ($getlogin)) { - @fowner = getpwnam ($getlogin); - if (! @fowner) { die (sprintf (_g('unable to get login information for username "%s"'), $getlogin)); } -} else { - &warn (sprintf (_g('no utmp entry available and LOGNAME not defined; using uid of process (%d)'), $<)); - @fowner = getpwuid ($<); - if (! @fowner) { die (sprintf (_g('unable to get login information for uid %d'), $<)); } +sub getfowner { + if (defined ($ENV{'LOGNAME'})) { + @fowner = getpwnam ($ENV{'LOGNAME'}); + if (! @fowner) { die (sprintf (_g('unable to get login information for username "%s"'), $ENV{'LOGNAME'})); } + } elsif (defined ($getlogin)) { + @fowner = getpwnam ($getlogin); + if (! @fowner) { die (sprintf (_g('unable to get login information for username "%s"'), $getlogin)); } + } else { + &warn (sprintf (_g('no utmp entry available and LOGNAME not defined; using uid of process (%d)'), $<)); + @fowner = getpwuid ($<); + if (! @fowner) { die (sprintf (_g('unable to get login information for uid %d'), $<)); } + } + @fowner = @fowner[2,3]; + return @fowner; } [EMAIL PROTECTED] = @fowner[2,3]; sub capit { my @pieces = map { ucfirst(lc) } split /-/, $_[0]; diff -urp dpkg-1.13.24/scripts/dpkg-distaddfile.pl dpkg-1.13.25/scripts/dpkg-distaddfile.pl --- dpkg-1.13.24/scripts/dpkg-distaddfile.pl 2006-06-21 06:40:19.000000000 +0300 +++ dpkg-1.13.25/scripts/dpkg-distaddfile.pl 2006-11-03 11:41:57.000000000 +0200 @@ -60,7 +60,7 @@ while (@ARGV && $ARGV[0] =~ m/^-/) { $fileslistfile="./$fileslistfile" if $fileslistfile =~ m/^\s/; open(Y,"> $fileslistfile.new") || &syserr(_g("open new files list file")); -chown(@fowner, "$fileslistfile.new") +chown(getfowner(), "$fileslistfile.new") || &syserr(_g("chown new files list file")); if (open(X,"< $fileslistfile")) { while (<X>) { diff -urp dpkg-1.13.24/scripts/dpkg-gencontrol.pl dpkg-1.13.25/scripts/dpkg-gencontrol.pl --- dpkg-1.13.24/scripts/dpkg-gencontrol.pl 2006-06-21 05:35:01.000000000 +0300 +++ dpkg-1.13.25/scripts/dpkg-gencontrol.pl 2006-11-03 11:42:06.000000000 +0200 @@ -255,7 +255,7 @@ for $f (keys %remove) { delete $f{&capit $fileslistfile="./$fileslistfile" if $fileslistfile =~ m/^\s/; open(Y,"> $fileslistfile.new") || &syserr(_g("open new files list file")); binmode(Y); -chown(@fowner, "$fileslistfile.new") +chown(getfowner(), "$fileslistfile.new") || &syserr(_g("chown new files list file")); if (open(X,"< $fileslistfile")) { binmode(X); diff -urp dpkg-1.13.24/scripts/dpkg-shlibdeps.pl dpkg-1.13.25/scripts/dpkg-shlibdeps.pl --- dpkg-1.13.24/scripts/dpkg-shlibdeps.pl 2006-06-21 05:35:01.000000000 +0300 +++ dpkg-1.13.25/scripts/dpkg-shlibdeps.pl 2006-11-03 11:42:14.000000000 +0200 @@ -394,7 +394,7 @@ if (!$stdout) { open(Y,"> $varlistfile.new") || syserr(sprintf(_g("open new substvars file \`%s'"), "$varlistfile.new")); unless ($REAL_USER_ID) { - chown(@fowner, "$varlistfile.new") || + chown(getfowner(), "$varlistfile.new") || syserr(sprintf(_g("chown of \`%s'"), "$varlistfile.new")); } if (open(X,"< $varlistfile")) { diff -urp dpkg-1.13.24/scripts/dpkg-source.pl dpkg-1.13.25/scripts/dpkg-source.pl --- dpkg-1.13.24/scripts/dpkg-source.pl 2006-06-21 06:40:27.000000000 +0300 +++ dpkg-1.13.25/scripts/dpkg-source.pl 2006-11-03 11:42:27.000000000 +0200 @@ -749,7 +749,7 @@ if ($opmode eq 'build') { system "chmod", "g-s", $tmp; printf(_g("%s: unpacking %s")."\n", $progname, $tarfile); extracttar("$dscdir/$tarfile",$tmp,$t); - system "chown", '-R', '-f', join(':',@fowner), "$tmp/$t"; + system "chown", '-R', '-f', join(':',getfowner()), "$tmp/$t"; rename("$tmp/$t",$target) || &syserr(sprintf(_g("unable to rename `%s' to `%s'"), "$tmp/$t", $target)); rmdir($tmp)