--- ./Configure.orig 2006-01-08 14:51:03.000000000 +0000 +++ ./Configure 2006-02-01 11:31:22.000000000 +0000 @@ -98,7 +98,7 @@ paths="$paths /usr/5bin /etc /usr/gnu/bi paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin" paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb" paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /opt/ansic/bin /usr/ccs/bin" -paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib" +paths="$paths /etc /usr/lib /usr/lib64 /usr/ucblib /lib /usr/ccs/lib" paths="$paths /sbin /usr/sbin /usr/libexec" paths="$paths /system/gnu_library/bin" @@ -1259,7 +1259,7 @@ loclibpth="/usr/local/lib /opt/local/lib loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib" : general looking path for locating libraries -glibpth="/lib /usr/lib $xlibpth" +glibpth="/lib /usr/lib /lib64 /usr/lib64 $xlibpth" glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib" test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth" test -f /shlib/libc.so && glibpth="/shlib $glibpth" @@ -2290,7 +2290,7 @@ uname zip " pth=`echo $PATH | sed -e "s/$p_/ /g"` -pth="$pth /lib /usr/lib" +pth="$pth /lib /usr/lib /lib64 /usr/lib64" for file in $loclist; do eval xxx=\$$file case "$xxx" in @@ -7586,7 +7586,7 @@ EOM ;; *) case "$osname" in darwin) dflt='none' ;; - svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;; + svr4*|esix*|linux*|solaris|nonstopux) dflt='-fPIC' ;; *) dflt='-fpic' ;; esac ;; esac ;; @@ -17868,14 +17868,20 @@ int main(int argc, char *argv[]) } EOCP set try + # this is really stupid, but we have to link in the -ldb to have + # the above program succeed + _old_libs="$libs" + libs="$libs -ldb" if eval $compile_ok && $run ./try; then echo 'Looks OK.' >&4 + libs="$_old_libs" set `$run ./try 1` db_version_major=$1 db_version_minor=$2 db_version_patch=$3 else echo "I can't use Berkeley DB with your . I'll disable Berkeley DB." >&4 + libs="$_old_libs" i_db=$undef case " $libs " in *"-ldb "*) @@ -17918,7 +17924,7 @@ int main() } #endif EOCP - if $cc $ccflags -c try.c >try.out 2>&1 ; then + if $cc $ccflags -c try.c -ldb >try.out 2>&1 ; then if $contains warning try.out >>/dev/null 2>&1 ; then db_hashtype='int' else @@ -17963,7 +17969,7 @@ int main() } #endif EOCP - if $cc $ccflags -c try.c >try.out 2>&1 ; then + if $cc $ccflags -c try.c -ldb >try.out 2>&1 ; then if $contains warning try.out >>/dev/null 2>&1 ; then db_prefixtype='int' else @@ -21757,7 +21763,7 @@ passcat='$passcat' patchlevel='$patchlevel' path_sep='$path_sep' perl5='$perl5' -perl='$perl' +perl='perl' perl_patchlevel='$perl_patchlevel' perladmin='$perladmin' perllibs='$perllibs' --- ./SuSE/SuSEconfig.perl.orig 2006-02-01 11:31:22.000000000 +0000 +++ ./SuSE/SuSEconfig.perl 2006-02-01 11:31:22.000000000 +0000 @@ -0,0 +1,76 @@ +#! /bin/bash +# +# Copyright (c) 1996 S.u.S.E. Gmbh Fuerth, Germany. All rights reserved. +# +# Author: Burchard Steinbild , 1996 +# Martin Scherbaum , 5/1997 +# Ruediger Oertel , 7/1998 + +# +# Variables in /etc/sysconfig/suseconfig used by this script are: +# CREATE_PERLLOCAL_POD +# +# This script calls the scripts: +# /usr/sbin/perllocal.suse which comes from the package perl +# + +# +# check if we are started as root +# only one of UID and USER must be set correctly +# +if test "$UID" != 0 -a "$USER" != root; then + echo "You must be root to start $0." + exit 1 +fi + +# +# SuSEconfig sometimes sets the variable CHECK_NEWPACKAGE. If it is set +# to false, we don't have to do anything. +# +test "$CHECK_NEWPACKAGE" = false && exit 0 + +test -f /etc/sysconfig/suseconfig || { echo "No /etc/sysconfig/suseconfig found." && exit 1 ; } +. /etc/sysconfig/suseconfig + +# this skript only works in a running system. + +test -n "$ROOT" && exit 0 + +perl -e 'exit 0' 2>/dev/null || { echo "Perl not found." && exit 0 ; } + +# +# see if we may do any work +# +test -n "$CREATE_PERLLOCAL_POD" -a "$CREATE_PERLLOCAL_POD" = "yes" \ + || { echo "disabled in sysconfig/suseconfig" && exit 1 ; } + +# +# check if anything to add +# +PERLLOCAL_PATH=`perl -V:installarchlib | sed -e "s/.*='\(.*\)'.*/\1/"` + +NEEDED="false" + +if test -d /var/adm/perl-modules ; then + if test /var/adm/perl-modules -nt $PERLLOCAL_PATH/perllocal.pod ; then + NEEDED="true" + elif test ! -f $PERLLOCAL_PATH/perllocal.pod ; then + NEEDED="true" + fi +fi + +# +# now call the working script +# +if "$NEEDED" = "true" ; then + if test -x /usr/lib/perl5/perllocal.SuSE ; then + /usr/lib/perl5/perllocal.SuSE + pod2man $PERLLOCAL_PATH/perllocal.pod | gzip > /usr/share/man/man3/perllocal.3pm.gz + else + echo "SuSEconfig.perl: /usr/lib/perl5/perllocal.SuSE not found!" + fi +fi + +# +# end of file SuSEconfig.perl +# --- ./SuSE/perllocal.SuSE.orig 2006-02-01 11:31:22.000000000 +0000 +++ ./SuSE/perllocal.SuSE 2006-02-01 11:31:22.000000000 +0000 @@ -0,0 +1,84 @@ +#!/usr/bin/perl +# Copyright (c) 1998 S.u.S.E. Gmbh Fuerth, Germany. All rights reserved. +# +# Author: Ruediger Oertel , 1998 +# + +use Config; + +sub ReadFile { + local (*IF,*modules) = @_; + + while() { + chomp ($_); + next if (/^$/); + if (/^=head2.*$/) { + ($front,$rear) = split (': ',$_); + $front =~ s/^=head2\s*//; + $modules{$rear} = "$front"; + } elsif (/^=over [0-9]*$/) { + ($dummy,$num) = split ('\s',$_); + $curnum = 0; + } elsif (/^C<.*:.*>$/) { + $entry = $_; + $curnum++; + $modules{$rear} .= "\0$entry"; + } elsif (/^=back$/) { + ; + } elsif (/^=item \*$/) { + ; + } else { + print "SuSEconfig.perl: parsing perllocal:\n"; + print "ignoring line: $_\n"; + } + } + return %modules; +} + +local (%allmodules); + +if (open (IF, "<$Config{'installarchlib'}/perllocal.pod")) { + %allmodules = ReadFile(*IF,*allmodules); +} +close (IF); + +opendir (DIR, "/var/adm/perl-modules"); +while ($dirent = readdir(DIR)) { + next if ($dirent =~ /^\./); + open (IF , "/var/adm/perl-modules/$dirent"); + %allmodules = ReadFile(*IF,*allmodules); + close (IF); +} +closedir (DIR); + + +if (open (OF, ">$Config{'installarchlib'}/perllocal.pod")) { + foreach $key (keys(%allmodules)) { + $name = $key; + $name =~ s/^.*L\$//; + $name =~ s/::/\//; + @entries = split ('\0',$allmodules{$key}); + $ipath = $entries[1]; + $ipath =~ s/^.*\:\s//; + $ipath =~ s/>$//; + + # test if the module is really there, else skip + if ( -d "$ipath/$Config{'archname'}/auto/$name" || + -d "$Config{'installarchlib'}/auto/$name" ) { + $num = $#entries; + print OF "=head2 ",shift(@entries),": $key\n\n"; + print OF "=over $num\n\n"; + while ($_ = shift(@entries)) { + print OF "=item *\n\n"; + print OF "$_\n\n"; + } + print OF "=back\n\n"; + } + } + close (OF); +} else { + print "SuSEconfig.perl: Can't write to file $Config{'installarchlib'}/perllocal.pod !\n\n"; +} + --- ./SuSE/sysconfig.suseconfig-perl.orig 2006-02-01 11:31:22.000000000 +0000 +++ ./SuSE/sysconfig.suseconfig-perl 2006-02-01 11:31:22.000000000 +0000 @@ -0,0 +1,8 @@ +## Path: System/SuSEconfig +## Type: yesno +## Default: yes +## Config: perl +# +# May SuSEconfig modify your perllocal.pod? (yes/no) +# +CREATE_PERLLOCAL_POD="yes" --- ./ext/DynaLoader/hints/linux.pl.orig 2003-07-30 22:52:56.000000000 +0000 +++ ./ext/DynaLoader/hints/linux.pl 2006-02-01 11:31:22.000000000 +0000 @@ -2,4 +2,7 @@ # Some Linux releases like to hide their $self->{CCFLAGS} = $Config{ccflags} . ' -I/usr/include/libelf' if -f "/usr/include/libelf/nlist.h"; +# Some silly modules like mod_perl use DynaLoader.a in a shared +# module, so add cccdlflags if we're going for a shared libperl +$self->{CCFLAGS} = ($self->{CCFLAGS} || $Config{ccflags}) . " $Config{cccdlflags}" if $Config{'useshrplib'} eq 'true'; 1; --- ./ext/IPC/SysV/SysV.xs.orig 2001-06-30 18:46:07.000000000 +0000 +++ ./ext/IPC/SysV/SysV.xs 2006-02-01 11:31:22.000000000 +0000 @@ -3,9 +3,6 @@ #include "XSUB.h" #include -#ifdef __linux__ -# include -#endif #if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM) #ifndef HAS_SEM # include --- ./ext/NDBM_File/Makefile.PL.orig 2000-05-28 18:41:12.000000000 +0000 +++ ./ext/NDBM_File/Makefile.PL 2006-02-01 11:31:22.000000000 +0000 @@ -2,6 +2,7 @@ use ExtUtils::MakeMaker; WriteMakefile( NAME => 'NDBM_File', LIBS => ["-L/usr/local/lib -lndbm", "-ldbm -lucb"], + CCFLAGS => '-I/usr/include/db1 -Dbool=char -DHAS_BOOL', MAN3PODS => {}, # Pods will be built by installman. XSPROTOARG => '-noprototypes', # XXX remove later? VERSION_FROM => 'NDBM_File.pm', --- ./ext/ODBM_File/Makefile.PL.orig 1998-10-15 02:46:08.000000000 +0000 +++ ./ext/ODBM_File/Makefile.PL 2006-02-01 11:31:22.000000000 +0000 @@ -1,7 +1,7 @@ use ExtUtils::MakeMaker; WriteMakefile( NAME => 'ODBM_File', - LIBS => ["-ldbm -lucb"], + LIBS => ["-lgdbm -lucb"], MAN3PODS => {}, # Pods will be built by installman. XSPROTOARG => '-noprototypes', # XXX remove later? VERSION_FROM => 'ODBM_File.pm', --- ./ext/ODBM_File/hints/linux.pl.orig 2002-07-09 08:52:08.000000000 +0000 +++ ./ext/ODBM_File/hints/linux.pl 2006-02-01 11:31:22.000000000 +0000 @@ -1,3 +1,3 @@ # uses GDBM dbm compatibility feature - at least on SuSE 8.0 -$self->{LIBS} = ['-lgdbm']; +$self->{LIBS} = ['-lgdbm -lgdbm_compat']; --- ./ext/threads/Makefile.PL.orig 2003-04-03 06:08:54.000000000 +0000 +++ ./ext/threads/Makefile.PL 2006-02-01 11:31:22.000000000 +0000 @@ -10,7 +10,7 @@ WriteMakefile( (ABSTRACT_FROM => 'threads.pm', # retrieve abstract from module AUTHOR => 'Artur Bergman ') : ()), 'MAN3PODS' => {}, # Pods will be built by installman - 'LIBS' => [''], # e.g., '-lm' + 'LIBS' => ['-lpthread'], # e.g., '-lm' 'DEFINE' => '', # e.g., '-DHAVE_SOMETHING' # Insert -I. if you add *.h files later: # 'INC' => '', # e.g., '-I/usr/include/other' --- ./hints/linux.sh.orig 2005-11-18 01:18:45.000000000 +0000 +++ ./hints/linux.sh 2006-02-01 11:31:22.000000000 +0000 @@ -42,7 +42,9 @@ ignore_versioned_solibs='y' # BSD compatibility library no longer needed # 'kaffe' has a /usr/lib/libnet.so which is not at all relevant for perl. # bind causes issues with several reentrant functions -set `echo X "$libswanted "| sed -e 's/ bsd / /' -e 's/ net / /' -e 's/ bind / /'` +set `echo X "$libswanted "| \ + sed -e 's/ bsd / /' -e 's/ net / /' -e 's/ bind / /' \ + -e 's/ db / /' -e 's/ gdbm / /' -e 's/ ndbm / /'` shift libswanted="$*" @@ -52,7 +54,18 @@ libswanted="$*" # We don't use __GLIBC__ and __GLIBC_MINOR__ because they # are insufficiently precise to distinguish things like # libc-2.0.6 and libc-2.0.7. -if test -L /lib/libc.so.6; then +if test -e /lib64/libc.so.6; then + libc=`ls -l /lib64/libc.so.6 | awk '{print $NF}'` + libc=/lib64/$libc + #plibpth='/usr/local/lib64 /usr/lib64 /lib64' + glibpth='/lib64 /usr/lib64 /usr/local/lib64' + libspath='/usr/local/lib64 /lib64 /usr/lib64' + #libpth='/usr/local/lib64 /lib64 /usr/lib64' + loclibpth='/usr/local/lib64' + lddlflags='-shared -L/usr/local/lib64' + ldflags=' -L/usr/local/lib64' + libs='-lm -ldl -lcrypt' +elif test -L /lib/libc.so.6; then libc=`ls -l /lib/libc.so.6 | awk '{print $NF}'` libc=/lib/$libc fi @@ -101,9 +114,14 @@ case "$optimize" in optimize='-O1' ;; esac + optimize="$optimize --pipe" ;; esac +man1dir=/usr/share/man/man1 +man3dir=/usr/share/man/man3 +man3ext=3pm + # Are we using ELF? Thanks to Kenneth Albanowski # for this test. cat >try.c <<'EOM' @@ -187,6 +205,29 @@ EOM esac fi +case `uname -m` in +i?86) archname='i586-linux';; +*) archname=`uname -m`-linux;; +esac + +case $archname in +sparc64-linux) glibpth="/lib64 /usr/lib64";; +esac + +cf_email='feedback@suse.de' +#libs='-lgdbm -ldb -ldl -lm -lc' +#libs='-ldl -lm -lc' + +usedl='true' +dlsrc='dl_dlopen.xs' +d_dosuid='define' +d_bincompat3='y' + +# We don't want to add /usr/local/include and /usr/local/lib to the search +# paths, they are already searched by default. +locincpth= +loclibpth= + rm -f try.c a.out if /bin/sh -c exit; then @@ -236,6 +277,9 @@ else echo "Couldn't find tcsh. Csh-based globbing might be broken." fi fi +csh='' +d_csh='undef' +full_csh='' # Shimpei Yamashita # Message-Id: <33EF1634.B36B6500@pobox.com> @@ -304,6 +348,8 @@ $define|true|[yY]*) d_localtime_r_proto="$define" d_random_r_proto="$define" + test -e /lib64/libc.so.6 && libs='-lm -ldl -lcrypt -lpthread' + ;; esac EOCBU --- ./installperl.orig 2006-01-28 15:35:28.000000000 +0000 +++ ./installperl 2006-02-01 11:31:22.000000000 +0000 @@ -227,7 +227,7 @@ if ($Is_VMS) { # Hang in there until Fi # Do some quick sanity checks. -if (!$nonono && $d_dosuid && $>) { die "You must run as root to install suidperl\n"; } +# if (!$nonono && $d_dosuid && $>) { die "You must run as root to install suidperl\n"; } $installbin || die "No installbin directory in config.sh\n"; -d $installbin || mkpath($installbin, $verbose, 0777); @@ -370,7 +370,11 @@ else { safe_unlink("$installbin/s$perl_verbase$ver$exe_ext"); if ($d_dosuid) { copy("suidperl$exe_ext", "$installbin/s$perl_verbase$ver$exe_ext"); - chmod(04711, "$installbin/s$perl_verbase$ver$exe_ext"); + if ($>) { + chmod(0711, "$installbin/s$perl_verbase$ver$exe_ext"); + } else { + chmod(04711, "$installbin/s$perl_verbase$ver$exe_ext"); + } } # Install library files. --- ./lib/ExtUtils/Packlist.pm.orig 2002-05-17 22:35:57.000000000 +0000 +++ ./lib/ExtUtils/Packlist.pm 2006-02-01 11:31:22.000000000 +0000 @@ -149,8 +149,11 @@ foreach my $key (sort(keys(%{$self->{dat { if (! -e $key) { - push(@missing, $key); - delete($self->{data}{$key}) if ($remove); + if (($key !~ m!/man/!) || ! -e "$key.gz") + { + push(@missing, $key); + delete($self->{data}{$key}) if ($remove); + } } } return(@missing); --- ./lib/File/Path.pm.orig 2006-01-02 22:11:06.000000000 +0000 +++ ./lib/File/Path.pm 2006-02-01 11:31:22.000000000 +0000 @@ -33,7 +33,7 @@ to print the name of each directory as i =item * the numeric mode to use when creating the directories -(defaults to 0777), to be modified by the current umask. +(defaults to 0777) =back @@ -72,33 +72,17 @@ or C to remove it, or that it's =item * -a boolean value, which if TRUE will cause C to -skip any files to which you do not have delete access -(if running under VMS) or write access (if running -under another OS). This will change in the future when -a criterion for 'delete permission' under OSs other -than VMS is settled. (defaults to FALSE) +a boolean value, which if FALSE (the default for non-root users) will +cause C to adjust the mode of directories (if required) prior +to attempting to remove the contents. Note that on interruption or +failure of C, directories may be left with more permissive +modes for the owner. =back It returns the number of files successfully deleted. Symlinks are simply deleted and not followed. -B There are race conditions internal to the implementation of -C making it unsafe to use on directory trees which may be -altered or moved while C is running, and in particular on any -directory trees with any path components or subdirectories potentially -writable by untrusted users. - -Additionally, if the third parameter is not TRUE and C is -interrupted, it may leave files and directories with permissions altered -to allow deletion (and older versions of this module would even set -files and directories to world-read/writable!) - -Note also that the occurrence of errors in C can be determined I -by trapping diagnostic messages using C<$SIG{__WARN__}>; it is not apparent -from the return value. - =head1 DIAGNOSTICS =over 4 @@ -124,6 +108,7 @@ use File::Basename (); use Exporter (); use strict; use warnings; +use Cwd 'getcwd'; our $VERSION = "1.08"; our @ISA = qw( Exporter ); @@ -172,111 +157,150 @@ sub mkpath { @created; } -sub rmtree { - my($roots, $verbose, $safe) = @_; - my(@files); - my($count) = 0; - $verbose ||= 0; - $safe ||= 0; - - if ( defined($roots) && length($roots) ) { - $roots = [$roots] unless ref $roots; - } - else { - carp "No root path(s) specified\n"; - return 0; - } - - my($root); - foreach $root (@{$roots}) { - if ($Is_MacOS) { - $root = ":$root" if $root !~ /:/; - $root =~ s#([^:])\z#$1:#; - } else { - $root =~ s#/\z##; - } - (undef, undef, my $rp) = lstat $root or next; - $rp &= 07777; # don't forget setuid, setgid, sticky bits - if ( -d _ ) { - # notabene: 0700 is for making readable in the first place, - # it's also intended to change it to writable in case we have - # to recurse in which case we are better than rm -rf for - # subtrees with strange permissions - chmod($rp | 0700, ($Is_VMS ? VMS::Filespec::fileify($root) : $root)) - or carp "Can't make directory $root read+writeable: $!" - unless $safe; - - if (opendir my $d, $root) { - no strict 'refs'; - if (!defined ${"\cTAINT"} or ${"\cTAINT"}) { - # Blindly untaint dir names - @files = map { /^(.*)$/s ; $1 } readdir $d; - } else { - @files = readdir $d; - } - closedir $d; - } - else { - carp "Can't read $root: $!"; - @files = (); - } - - # Deleting large numbers of files from VMS Files-11 filesystems - # is faster if done in reverse ASCIIbetical order - @files = reverse @files if $Is_VMS; - ($root = VMS::Filespec::unixify($root)) =~ s#\.dir\z## if $Is_VMS; - if ($Is_MacOS) { - @files = map("$root$_", @files); - } else { - @files = map("$root/$_", grep $_!~/^\.{1,2}\z/s,@files); - } - $count += rmtree(\@files,$verbose,$safe); - if ($safe && - ($Is_VMS ? !&VMS::Filespec::candelete($root) : !-w $root)) { - print "skipped $root\n" if $verbose; - next; - } - chmod $rp | 0700, $root - or carp "Can't make directory $root writeable: $!" - if $force_writeable; - print "rmdir $root\n" if $verbose; - if (rmdir $root) { - ++$count; - } - else { - carp "Can't remove directory $root: $!"; - chmod($rp, ($Is_VMS ? VMS::Filespec::fileify($root) : $root)) - or carp("and can't restore permissions to " - . sprintf("0%o",$rp) . "\n"); +sub _rmtree +{ + my ($path, $prefix, $up, $up_dev, $up_ino, $verbose, $safe) = @_; + + my ($dev, $ino, $perm) = lstat $path or do { + return 0; + }; + $perm &= 07777; + + unless (-d _) + { + my $nperm; + if ($force_writeable) { + # make the file writable + $nperm = $perm | 0600; + unless ($safe or $nperm == $perm or chmod $nperm, $path) { + carp "Can't make file $prefix$path writeable: $!"; } } - else { - if ($safe && - ($Is_VMS ? !&VMS::Filespec::candelete($root) - : !(-l $root || -w $root))) - { - print "skipped $root\n" if $verbose; - next; - } - chmod $rp | 0600, $root - or carp "Can't make file $root writeable: $!" - if $force_writeable; - print "unlink $root\n" if $verbose; - # delete all versions under VMS - for (;;) { - unless (unlink $root) { - carp "Can't unlink file $root: $!"; - if ($force_writeable) { - chmod $rp, $root - or carp("and can't restore permissions to " - . sprintf("0%o",$rp) . "\n"); - } - last; + print "unlink $prefix$path\n" if $verbose; + unless (unlink $path) + { + carp "Can't remove file $prefix$path ($!)"; + if ($force_writeable) { + unless ($safe or $nperm == $perm or chmod $perm, $path) { + carp("and can't restore permissions to " + . sprintf("0%o",$perm) . "\n"); } - ++$count; - last unless $Is_VMS && lstat $root; } + return 0; + } + return 1; + } + + CHDIR: { + last CHDIR if chdir $path; + my $err = $!; + unless ($safe || ($perm & 0100)) { + # might be able to succeed by tweaking the permission + # before we chdir + last CHDIR if chmod(0700, $path) && chdir($path); + } + carp "Can't chdir to $prefix$path ($err)"; + return 0; + } + + # avoid a race condition where a directory may be replaced by a + # symlink between the initial lstat and the chdir + my ($new_dev, $new_ino) = stat '.'; + unless ("$new_dev:$new_ino" eq "$dev:$ino") + { + croak "Directory $prefix$path changed before chdir, aborting"; + } + + my $nperm = $perm | 0700; + unless ($safe or $nperm == $perm or chmod $nperm, '.') + { + carp "Can't make directory $prefix$path read+writeable ($!)"; + $nperm = $perm; + } + + my $count = 0; + if (opendir my $dir, '.') + { + my $entry; + while (defined ($entry = readdir $dir)) + { + next if $entry =~ /^\.\.?$/; + $entry =~ /^(.*)$/s; $entry = $1; # untaint + $count += _rmtree($entry, "$prefix$path/", '..', $dev, $ino, + $verbose, $safe); } + + closedir $dir; + } + + # restore directory permissions is required (in case the rmdir + # below fails) now, while we're still in the directory and may do + # so without a race via '.' + unless ($force_writeable or $safe or $nperm == $perm or chmod $perm, '.') + { + carp "Can't restore permissions on directory $prefix$path ($!)"; + } + + # don't leave the caller in an unexpected directory + unless (chdir $up) + { + croak "Can't return to $up from $prefix$path ($!)"; + } + + # ensure that a chdir .. didn't take us somewhere other than + # where we expected (see CVE-2002-0435) + unless (($new_dev, $new_ino) = stat '.' + and "$new_dev:$new_ino" eq "$up_dev:$up_ino") + { + croak "Previous directory $up changed since entering $prefix$path"; + } + + print "rmdir $prefix$path\n" if $verbose; + if (rmdir $path) + { + $count++; + } + else + { + carp "Can't remove directory $prefix$path ($!)"; + } + + return $count; +} + +sub rmtree +{ + my ($p, $verbose, $safe) = @_; + $p = [] unless defined $p and length $p; + $p = [ $p ] unless ref $p; + my @paths = grep defined && length, @$p; + + # default to "unsafe" for non-root (will chmod dirs) + $safe = ($> || $force_writeable) ? 0 : 1 unless defined $safe; + + unless (@paths) + { + carp "No root path(s) specified"; + return 0; + } + + my $oldpwd = getcwd or do { + carp "Can't fetch initial working directory"; + return 0; + }; + + my ($dev, $ino) = stat '.' or do { + carp "Can't stat initial working directory"; + return 0; + }; + + # untaint + for ($oldpwd) { /^(.*)$/s; $_ = $1 } + + my $count = 0; + for my $path (@paths) + { + $count += _rmtree($path, '', $oldpwd, $dev, $ino, $verbose, $safe); } $count; --- ./lib/autouse.pm.orig 2005-09-22 12:57:33.000000000 +0000 +++ ./lib/autouse.pm 2006-02-17 14:27:12.000000000 +0000 @@ -53,7 +53,7 @@ sub import { require $pm; vet_import $module; } - no warnings 'redefine'; + no warnings qw(redefine prototype); *$closure_import_func = \&{"${module}::$closure_func"}; print "autousing $module; " ."imported $closure_func as $closure_import_func\n" --- ./lib/perl5db.pl.orig 2005-10-29 00:03:21.000000000 +0000 +++ ./lib/perl5db.pl 2006-02-01 11:31:22.000000000 +0000 @@ -3362,6 +3362,8 @@ reading another. open( OUT, ">&STDOUT" ) # XXX: lost message || &warn("Can't restore DB::OUT"); } + # tell readline the new OUT handle + $term->Attribs()->{outstream} = *OUT if defined &Term::ReadLine::Gnu::readline; next CMD; } ## end unless ($piped = open(OUT,... @@ -3484,6 +3486,8 @@ our standard filehandles for input and o # if necessary, close(SAVEOUT); select($selected), $selected = "" unless $selected eq ""; + # tell readline the new OUT handle + $term->Attribs()->{outstream} = *OUT if defined &Term::ReadLine::Gnu::readline; # No pipes now. $piped = ""; --- ./lib/unicore/mktables.orig 2005-06-01 08:08:41.000000000 +0000 +++ ./lib/unicore/mktables 2006-02-01 11:31:22.000000000 +0000 @@ -141,7 +141,7 @@ foreach my $lib ('To', 'lib', map {File::Spec->catdir("lib",$_)} qw(gc_sc dt bc hst ea jt lb nt ccc)) { next if -d $lib; - mkdir $lib, 0755 or die "mkdir '$lib': $!"; + mkdir $lib, 0755 or $! =~ /exists/i or die "mkdir '$lib': $!"; } my $LastUnicodeCodepoint = 0x10FFFF; # As of Unicode 3.1.1. --- ./locale.c.orig 2005-09-30 15:25:03.000000000 +0000 +++ ./locale.c 2006-02-01 11:31:22.000000000 +0000 @@ -337,9 +337,13 @@ Perl_init_i18nl10n(pTHX_ int printwarn) if (setlocale_failure) { char *p; +#if 0 bool locwarn = (printwarn > 1 || (printwarn && (!(p = PerlEnv_getenv("PERL_BADLANG")) || atoi(p)))); +#else + bool locwarn = 0; +#endif if (locwarn) { #ifdef LC_ALL --- ./t/TEST.orig 2005-10-25 12:59:53.000000000 +0000 +++ ./t/TEST 2006-02-01 11:31:22.000000000 +0000 @@ -154,6 +154,7 @@ unless (@ARGV) { next if $skip{$extension}; } my $path = File::Spec->catfile($updir, $t); + next unless -e $path; push @ARGV, $path; $::path_to_name{$path} = $t; } --- ./t/harness.orig 2005-11-03 02:10:50.000000000 +0000 +++ ./t/harness 2006-02-01 11:31:22.000000000 +0000 @@ -104,7 +104,8 @@ if (@ARGV) { # XXX Do I want to warn that I'm skipping these? next if $skip{$extension}; } - push @tests, File::Spec->catfile($updir, $test); + my $t = File::Spec->catfile($updir, $test); + push @tests, $t if -e $t; } } close MANI; --- ./t/lib/h2ph.pht.orig 2004-12-27 19:55:34.000000000 +0000 +++ ./t/lib/h2ph.pht 2006-02-01 11:31:22.000000000 +0000 @@ -15,7 +15,7 @@ unless(defined(&ERROR)) { }' unless defined(&ERROR); } unless(defined(&_H2PH_H_)) { - eval 'sub _H2PH_H_ () {1;}' unless defined(&_H2PH_H_); + eval 'sub _H2PH_H_ {1;}' unless defined(&_H2PH_H_); # "$Revision h2ph.h,v 1.0 98/05/04 20:42:14 billy $" undef(&MAX) if defined(&MAX); eval 'sub MAX { @@ -33,19 +33,19 @@ unless(defined(&_H2PH_H_)) { elsif(!(defined (defined(&__SOMETHING_REALLY_REALLY_IMPORTANT) ? &__SOMETHING_REALLY_REALLY_IMPORTANT : 0))) { die("Nup, can't go on"); } else { - eval 'sub EVERYTHING_IS_OK () {1;}' unless defined(&EVERYTHING_IS_OK); + eval 'sub EVERYTHING_IS_OK {1;}' unless defined(&EVERYTHING_IS_OK); } undef(&WHATEVER) if defined(&WHATEVER); if((!((defined (defined(&__SOMETHING_TRIVIAL) ? &__SOMETHING_TRIVIAL : 0) && defined (defined(&__SOMETHING_LESS_SO) ? &__SOMETHING_LESS_SO : 0))) || defined (defined(&__SOMETHING_OVERPOWERING) ? &__SOMETHING_OVERPOWERING : 0))) { - eval 'sub WHATEVER () {6;}' unless defined(&WHATEVER); + eval 'sub WHATEVER {6;}' unless defined(&WHATEVER); } elsif(!(defined (defined(&__SOMETHING_TRIVIAL) ? &__SOMETHING_TRIVIAL : 0)) ) { - eval 'sub WHATEVER () {7;}' unless defined(&WHATEVER); + eval 'sub WHATEVER {7;}' unless defined(&WHATEVER); } elsif(!(defined (defined(&__SOMETHING_LESS_SO) ? &__SOMETHING_LESS_SO : 0)) ) { - eval 'sub WHATEVER () {8;}' unless defined(&WHATEVER); + eval 'sub WHATEVER {8;}' unless defined(&WHATEVER); } else { - eval 'sub WHATEVER () {1000;}' unless defined(&WHATEVER); + eval 'sub WHATEVER {1000;}' unless defined(&WHATEVER); } require 'sys/socket.ph'; require 'sys/ioctl.ph'; @@ -71,21 +71,21 @@ unless(defined(&_H2PH_H_)) { eval("sub Fri () { 5; }") unless defined(&Fri); eval("sub Sat () { 6; }") unless defined(&Sat); unless(defined(&_SOMETHING_TRIGRAPHIC)) { - eval 'sub _SOMETHING_TRIGRAPHIC () {1;}' unless defined(&_SOMETHING_TRIGRAPHIC); - eval 'sub SOMETHING_ELSE_TRIGRAPHIC_0 () {"|";}' unless defined(&SOMETHING_ELSE_TRIGRAPHIC_0); - eval 'sub SOMETHING_ELSE_TRIGRAPHIC_1 () {"^";}' unless defined(&SOMETHING_ELSE_TRIGRAPHIC_1); - eval 'sub SOMETHING_ELSE_TRIGRAPHIC_2 () {"[";}' unless defined(&SOMETHING_ELSE_TRIGRAPHIC_2); - eval 'sub SOMETHING_ELSE_TRIGRAPHIC_3 () {"]";}' unless defined(&SOMETHING_ELSE_TRIGRAPHIC_3); - eval 'sub SOMETHING_ELSE_TRIGRAPHIC_4 () {"~0";}' unless defined(&SOMETHING_ELSE_TRIGRAPHIC_4); - eval 'sub SOMETHING_ELSE_TRIGRAPHIC_5 () {"\\ ";}' unless defined(&SOMETHING_ELSE_TRIGRAPHIC_5); - eval 'sub SOMETHING_ELSE_TRIGRAPHIC_6 () {"{";}' unless defined(&SOMETHING_ELSE_TRIGRAPHIC_6); - eval 'sub SOMETHING_ELSE_TRIGRAPHIC_7 () {"#";}' unless defined(&SOMETHING_ELSE_TRIGRAPHIC_7); - eval 'sub SOMETHING_ELSE_TRIGRAPHIC_8 () {"}";}' unless defined(&SOMETHING_ELSE_TRIGRAPHIC_8); + eval 'sub _SOMETHING_TRIGRAPHIC {1;}' unless defined(&_SOMETHING_TRIGRAPHIC); + eval 'sub SOMETHING_ELSE_TRIGRAPHIC_0 {"|";}' unless defined(&SOMETHING_ELSE_TRIGRAPHIC_0); + eval 'sub SOMETHING_ELSE_TRIGRAPHIC_1 {"^";}' unless defined(&SOMETHING_ELSE_TRIGRAPHIC_1); + eval 'sub SOMETHING_ELSE_TRIGRAPHIC_2 {"[";}' unless defined(&SOMETHING_ELSE_TRIGRAPHIC_2); + eval 'sub SOMETHING_ELSE_TRIGRAPHIC_3 {"]";}' unless defined(&SOMETHING_ELSE_TRIGRAPHIC_3); + eval 'sub SOMETHING_ELSE_TRIGRAPHIC_4 {"~0";}' unless defined(&SOMETHING_ELSE_TRIGRAPHIC_4); + eval 'sub SOMETHING_ELSE_TRIGRAPHIC_5 {"\\ ";}' unless defined(&SOMETHING_ELSE_TRIGRAPHIC_5); + eval 'sub SOMETHING_ELSE_TRIGRAPHIC_6 {"{";}' unless defined(&SOMETHING_ELSE_TRIGRAPHIC_6); + eval 'sub SOMETHING_ELSE_TRIGRAPHIC_7 {"#";}' unless defined(&SOMETHING_ELSE_TRIGRAPHIC_7); + eval 'sub SOMETHING_ELSE_TRIGRAPHIC_8 {"}";}' unless defined(&SOMETHING_ELSE_TRIGRAPHIC_8); } if(1) { } eval("sub flim () { 0; }") unless defined(&flim); eval("sub flam () { 1; }") unless defined(&flam); - eval 'sub multiline () {"multilinestring";}' unless defined(&multiline); + eval 'sub multiline {"multilinestring";}' unless defined(&multiline); } 1; --- ./t/op/numconvert.t.orig 2001-08-29 18:23:58.000000000 +0000 +++ ./t/op/numconvert.t 2006-02-01 11:31:22.000000000 +0000 @@ -46,7 +46,7 @@ my $max_chain = $ENV{PERL_TEST_NUMCONVER # Bulk out if unsigned type is hopelessly wrong: my $max_uv1 = ~0; -my $max_uv2 = sprintf "%u", $max_uv1 ** 6; # 6 is an arbitrary number here +my $max_uv2 = sprintf "%lu", $max_uv1 ** 6; # 6 is an arbitrary number here my $big_iv = do {use integer; $max_uv1 * 16}; # 16 is an arbitrary number here my $max_uv_less3 = $max_uv1 - 3; --- ./utils/h2ph.PL.orig 2006-01-12 22:55:04.000000000 +0000 +++ ./utils/h2ph.PL 2006-02-01 11:31:22.000000000 +0000 @@ -173,11 +173,13 @@ while (defined (my $file = next_file())) if ($t ne '') { $new =~ s/(['\\])/\\$1/g; #']); + # Can't use () prototype because macro + # redefinitions would produce a warning if ($opt_h) { - print OUT $t,"eval \"\\n#line $eval_index $outfile\\n\" . 'sub $name () {",$new,";}' unless defined(\&$name);\n"; + print OUT $t,"eval \"\\n#line $eval_index $outfile\\n\" . 'sub $name {",$new,";}' unless defined(\&$name);\n"; $eval_index++; } else { - print OUT $t,"eval 'sub $name () {",$new,";}' unless defined(\&$name);\n"; + print OUT $t,"eval 'sub $name {",$new,";}' unless defined(\&$name);\n"; } } else { # Shunt around such directives as `#define FOO FOO': --- ./utils/perlbug.PL.orig 2006-01-03 19:07:41.000000000 +0000 +++ ./utils/perlbug.PL 2006-02-01 11:31:22.000000000 +0000 @@ -906,6 +906,7 @@ sendout: print SENDMAIL "Cc: $cc\n" if $cc; print SENDMAIL "Reply-To: $from\n" if $from; print SENDMAIL "Message-Id: $messageid\n" if $messageid; + print SENDMAIL "X-Webfrontend: perlbug\n"; print SENDMAIL "\n\n"; open(REP, "<$filename") or die "Couldn't open `$filename': $!\n"; while () { print SENDMAIL $_ }