Add BR perl-podlators for pod2man in F19 development or just BR perl

- Add some other importants BR: doxygen flex xz-devel po4a dotconf-devel
- Fix packages names which are debianized, so packages will be: dpkg-perl
and dpkg-dev (and dpkg-devel for headers of dpkg).
- Some clean ups.
by Oron Peled:
- Bump version to Debian/wheezy
- Call autoreconf: make sure we don't reuse Debian packaged
  stuff (config.guess, etc.)
- CVE patches not needed -- is already fixed upstream
- Removed dpkg-change-libdir.patch:
  - Patching Makefile.in is wrong (can patch Makefile.am with autoreconf)
  - Less patch churn for non-critical paths
  - Accept /usr/lib/dpkg/parsechangelog
  - Accept /usr/lib/dpkg/methods
epel9
Sérgio Basto 12 years ago
parent dbd49825a9
commit 82d53b78b2

@ -1,268 +0,0 @@
diff -ruN dpkg-1.15.5.6.orig/dselect/Makefile.in dpkg-1.15.5.6/dselect/Makefile.in
--- dpkg-1.15.5.6.orig/dselect/Makefile.in 2010-01-08 20:02:49.000000000 +0200
+++ dpkg-1.15.5.6/dselect/Makefile.in 2010-02-14 10:11:43.052023614 +0200
@@ -276,7 +276,7 @@
AM_CPPFLAGS = \
-DLOCALEDIR=\"$(localedir)\" \
-DADMINDIR=\"$(admindir)\" -DLIBDIR=\"$(pkglibdir)\" \
- -DLOCALLIBDIR=\"/usr/local/lib/dpkg\" \
+ -DLOCALLIBDIR=\"/usr/local/share/dpkg\" \
-idirafter $(top_srcdir)/lib/compat \
-iquote $(builddir) \
-I$(top_builddir) \
diff -ruN dpkg-1.15.5.6.orig/dselect/methods/Debian/Dselect/Ftp.pm dpkg-1.15.5.6/dselect/methods/Debian/Dselect/Ftp.pm
--- dpkg-1.15.5.6.orig/dselect/methods/Debian/Dselect/Ftp.pm 2010-01-08 10:00:34.000000000 +0200
+++ dpkg-1.15.5.6/dselect/methods/Debian/Dselect/Ftp.pm 2010-02-14 09:16:24.669895188 +0200
@@ -57,12 +57,12 @@
}
sub view_mirrors {
- if (-f '/usr/lib/dpkg/methods/ftp/README.mirrors.txt') {
- system('/usr/bin/pager', '/usr/lib/dpkg/methods/ftp/README.mirrors.txt');
- } elsif (-f '/usr/lib/dpkg/methods/ftp/README.mirrors.txt.gz') {
- system('gzip -dc /usr/lib/dpkg/methods/ftp/README.mirrors.txt.gz | pager');
+ if (-f '/usr/share/dpkg/methods/ftp/README.mirrors.txt') {
+ system('/usr/bin/pager', '/usr/share/dpkg/methods/ftp/README.mirrors.txt');
+ } elsif (-f '/usr/share/dpkg/methods/ftp/README.mirrors.txt.gz') {
+ system('gzip -dc /usr/share/dpkg/methods/ftp/README.mirrors.txt.gz | pager');
} else {
- print "/usr/lib/dpkg/methods/ftp/README.mirrors.txt(.gz): file not found.\n";
+ print "/usr/share/dpkg/methods/ftp/README.mirrors.txt(.gz): file not found.\n";
}
}
diff -ruN dpkg-1.15.5.6.orig/man/de/dpkg-parsechangelog.1 dpkg-1.15.5.6/man/de/dpkg-parsechangelog.1
--- dpkg-1.15.5.6.orig/man/de/dpkg-parsechangelog.1 2010-01-08 20:05:23.000000000 +0200
+++ dpkg-1.15.5.6/man/de/dpkg-parsechangelog.1 2010-02-14 09:22:07.409881825 +0200
@@ -30,8 +30,8 @@
\fB\-L\fP\fIlibverzeichnis\fP
Spezifiziere ein zusätzliches Verzeichnis, dass nach Parser\-Skripten
durchsucht werden soll. Diese Verzeichnis wird vor den
-Standardverzeichnissen (derzeit \fB/usr/local/lib/dpkg/parsechangelog\fP und
-\fB/usr/lib/dpkg/parsechangelog\fP) durchsucht.
+Standardverzeichnissen (derzeit \fB/usr/local/share/dpkg/parsechangelog\fP und
+\fB/usr/share/dpkg/parsechangelog\fP) durchsucht.
.TP
\fB\-h\fP, \fB\-\-help\fP
Zeige den Bedienungshinweis und beende.
diff -ruN dpkg-1.15.5.6.orig/man/dpkg-parsechangelog.1 dpkg-1.15.5.6/man/dpkg-parsechangelog.1
--- dpkg-1.15.5.6.orig/man/dpkg-parsechangelog.1 2010-01-08 10:00:34.000000000 +0200
+++ dpkg-1.15.5.6/man/dpkg-parsechangelog.1 2010-02-14 09:17:34.013861295 +0200
@@ -28,8 +28,8 @@
Specify an additional directory to search for parser scripts.
This directory is searched before the default directories
which are currently
-.BR /usr/local/lib/dpkg/parsechangelog " and "
-.BR /usr/lib/dpkg/parsechangelog .
+.BR /usr/share/dpkg/parsechangelog " and "
+.BR /usr/local/share/dpkg/parsechangelog .
.TP
.BR \-h ", " \-\-help
Show the usage message and exit.
diff -ruN dpkg-1.15.5.6.orig/man/fr/dpkg-parsechangelog.1 dpkg-1.15.5.6/man/fr/dpkg-parsechangelog.1
--- dpkg-1.15.5.6.orig/man/fr/dpkg-parsechangelog.1 2010-01-08 20:05:23.000000000 +0200
+++ dpkg-1.15.5.6/man/fr/dpkg-parsechangelog.1 2010-02-14 09:22:29.321880079 +0200
@@ -29,8 +29,8 @@
\fB\-L\fP\fIrep_lib\fP
Spécifie un répertoire supplémentaire pour la recherche de scripts
d'analyse. Ce répertoire est examiné avant les répertoires par défaut qui
-sont \fB/usr/local/lib/dpkg/parsechangelog\fP et
-\fB/usr/lib/dpkg/parsechangelog\fP.
+sont \fB/usr/local/share/dpkg/parsechangelog\fP et
+\fB/usr/share/dpkg/parsechangelog\fP.
.TP
\fB\-h\fP, \fB\-\-help\fP
Affiche un message d'aide puis quitte.
diff -ruN dpkg-1.15.5.6.orig/man/pl/dpkg-parsechangelog.1 dpkg-1.15.5.6/man/pl/dpkg-parsechangelog.1
--- dpkg-1.15.5.6.orig/man/pl/dpkg-parsechangelog.1 2010-01-08 20:05:23.000000000 +0200
+++ dpkg-1.15.5.6/man/pl/dpkg-parsechangelog.1 2010-02-14 09:21:02.338880496 +0200
@@ -29,8 +29,8 @@
\fB\-L\fP\fIkatalog\-lib\fP
Okre¶la dodatkowy katalog, w którym bêd± wyszukiwane skrypty
parsera. Katalog ten jest przeszukiwany przed domy¶lnymi katalogami, którymi
-obecnie s± \fB/usr/local/lib/dpkg/parsechangelog\fP oraz
-\fB/usr/lib/dpkg/parsechangelog\fP.
+obecnie s± \fB/usr/local/share/dpkg/parsechangelog\fP oraz
+\fB/usr/share/dpkg/parsechangelog\fP.
.TP
\fB\-h\fP, \fB\-\-help\fP
Wy¶wietla informacjê o u¿ytkowaniu i koñczy dzia³anie.
diff -ruN dpkg-1.15.5.6.orig/man/po/de.po dpkg-1.15.5.6/man/po/de.po
--- dpkg-1.15.5.6.orig/man/po/de.po 2010-01-08 20:05:23.000000000 +0200
+++ dpkg-1.15.5.6/man/po/de.po 2010-02-14 09:26:20.671868793 +0200
@@ -7747,12 +7747,12 @@
msgid ""
"Specify an additional directory to search for parser scripts. This "
"directory is searched before the default directories which are currently B</"
-"usr/local/lib/dpkg/parsechangelog> and B</usr/lib/dpkg/parsechangelog>."
+"usr/local/share/dpkg/parsechangelog> and B</usr/share/dpkg/parsechangelog>."
msgstr ""
"Spezifiziere ein zusätzliches Verzeichnis, dass nach Parser-Skripten "
"durchsucht werden soll. Diese Verzeichnis wird vor den "
-"Standardverzeichnissen (derzeit B</usr/local/lib/dpkg/parsechangelog> und B</"
-"usr/lib/dpkg/parsechangelog>) durchsucht."
+"Standardverzeichnissen (derzeit B</usr/local/share/dpkg/parsechangelog> und B</"
+"usr/share/dpkg/parsechangelog>) durchsucht."
#. type: SS
#: dpkg-parsechangelog.1:39
diff -ruN dpkg-1.15.5.6.orig/man/po/dpkg-man.pot dpkg-1.15.5.6/man/po/dpkg-man.pot
--- dpkg-1.15.5.6.orig/man/po/dpkg-man.pot 2010-01-08 19:23:01.000000000 +0200
+++ dpkg-1.15.5.6/man/po/dpkg-man.pot 2010-02-14 09:30:59.909878930 +0200
@@ -6216,7 +6216,7 @@
msgid ""
"Specify an additional directory to search for parser scripts. This "
"directory is searched before the default directories which are currently "
-"B</usr/local/lib/dpkg/parsechangelog> and B</usr/lib/dpkg/parsechangelog>."
+"B</usr/local/share/dpkg/parsechangelog> and B</usr/share/dpkg/parsechangelog>."
msgstr ""
#. type: SS
diff -ruN dpkg-1.15.5.6.orig/man/po/es.po dpkg-1.15.5.6/man/po/es.po
--- dpkg-1.15.5.6.orig/man/po/es.po 2010-01-08 20:05:23.000000000 +0200
+++ dpkg-1.15.5.6/man/po/es.po 2010-02-14 09:30:16.053872999 +0200
@@ -7517,7 +7517,7 @@
msgid ""
"Specify an additional directory to search for parser scripts. This "
"directory is searched before the default directories which are currently B</"
-"usr/local/lib/dpkg/parsechangelog> and B</usr/lib/dpkg/parsechangelog>."
+"usr/local/share/dpkg/parsechangelog> and B</usr/share/dpkg/parsechangelog>."
msgstr ""
#. type: SS
diff -ruN dpkg-1.15.5.6.orig/man/po/fr.po dpkg-1.15.5.6/man/po/fr.po
--- dpkg-1.15.5.6.orig/man/po/fr.po 2010-01-08 20:05:23.000000000 +0200
+++ dpkg-1.15.5.6/man/po/fr.po 2010-02-14 09:24:19.351874142 +0200
@@ -7737,11 +7737,11 @@
msgid ""
"Specify an additional directory to search for parser scripts. This "
"directory is searched before the default directories which are currently B</"
-"usr/local/lib/dpkg/parsechangelog> and B</usr/lib/dpkg/parsechangelog>."
+"usr/local/share/dpkg/parsechangelog> and B</usr/share/dpkg/parsechangelog>."
msgstr ""
"Spécifie un répertoire supplémentaire pour la recherche de scripts "
"d'analyse. Ce répertoire est examiné avant les répertoires par défaut qui "
-"sont B</usr/local/lib/dpkg/parsechangelog> et B</usr/lib/dpkg/"
+"sont B</usr/local/share/dpkg/parsechangelog> et B</usr/share/dpkg/"
"parsechangelog>."
#. type: SS
diff -ruN dpkg-1.15.5.6.orig/man/po/hu.po dpkg-1.15.5.6/man/po/hu.po
--- dpkg-1.15.5.6.orig/man/po/hu.po 2010-01-08 20:05:23.000000000 +0200
+++ dpkg-1.15.5.6/man/po/hu.po 2010-02-14 09:26:50.311874455 +0200
@@ -6542,7 +6542,7 @@
msgid ""
"Specify an additional directory to search for parser scripts. This "
"directory is searched before the default directories which are currently B</"
-"usr/local/lib/dpkg/parsechangelog> and B</usr/lib/dpkg/parsechangelog>."
+"usr/local/share/dpkg/parsechangelog> and B</usr/share/dpkg/parsechangelog>."
msgstr ""
#. type: SS
diff -ruN dpkg-1.15.5.6.orig/man/po/ja.po dpkg-1.15.5.6/man/po/ja.po
--- dpkg-1.15.5.6.orig/man/po/ja.po 2010-01-08 20:05:23.000000000 +0200
+++ dpkg-1.15.5.6/man/po/ja.po 2010-02-14 09:28:46.064874305 +0200
@@ -7055,7 +7055,7 @@
msgid ""
"Specify an additional directory to search for parser scripts. This "
"directory is searched before the default directories which are currently B</"
-"usr/local/lib/dpkg/parsechangelog> and B</usr/lib/dpkg/parsechangelog>."
+"usr/local/share/dpkg/parsechangelog> and B</usr/share/dpkg/parsechangelog>."
msgstr ""
#. type: SS
diff -ruN dpkg-1.15.5.6.orig/man/po/pl.po dpkg-1.15.5.6/man/po/pl.po
--- dpkg-1.15.5.6.orig/man/po/pl.po 2010-01-08 20:05:23.000000000 +0200
+++ dpkg-1.15.5.6/man/po/pl.po 2010-02-14 09:27:38.024873694 +0200
@@ -7819,11 +7819,11 @@
msgid ""
"Specify an additional directory to search for parser scripts. This "
"directory is searched before the default directories which are currently B</"
-"usr/local/lib/dpkg/parsechangelog> and B</usr/lib/dpkg/parsechangelog>."
+"usr/local/share/dpkg/parsechangelog> and B</usr/share/dpkg/parsechangelog>."
msgstr ""
"OkreÅla dodatkowy katalog, w którym bÄ™dÄ… wyszukiwane skrypty parsera. "
"Katalog ten jest przeszukiwany przed domyÅlnymi katalogami, którymi obecnie "
-"sÄ… B</usr/local/lib/dpkg/parsechangelog> oraz B</usr/lib/dpkg/"
+"sÄ… B</usr/local/share/dpkg/parsechangelog> oraz B</usr/share/dpkg/"
"parsechangelog>."
#. type: SS
diff -ruN dpkg-1.15.5.6.orig/man/po/pt_BR.po dpkg-1.15.5.6/man/po/pt_BR.po
--- dpkg-1.15.5.6.orig/man/po/pt_BR.po 2010-01-08 20:05:23.000000000 +0200
+++ dpkg-1.15.5.6/man/po/pt_BR.po 2010-02-14 09:28:12.583874117 +0200
@@ -6687,7 +6687,7 @@
msgid ""
"Specify an additional directory to search for parser scripts. This "
"directory is searched before the default directories which are currently B</"
-"usr/local/lib/dpkg/parsechangelog> and B</usr/lib/dpkg/parsechangelog>."
+"usr/local/share/dpkg/parsechangelog> and B</usr/share/dpkg/parsechangelog>."
msgstr ""
#. type: SS
diff -ruN dpkg-1.15.5.6.orig/man/po/ru.po dpkg-1.15.5.6/man/po/ru.po
--- dpkg-1.15.5.6.orig/man/po/ru.po 2010-01-08 20:05:23.000000000 +0200
+++ dpkg-1.15.5.6/man/po/ru.po 2010-02-14 09:25:17.556873843 +0200
@@ -6823,7 +6823,7 @@
msgid ""
"Specify an additional directory to search for parser scripts. This "
"directory is searched before the default directories which are currently B</"
-"usr/local/lib/dpkg/parsechangelog> and B</usr/lib/dpkg/parsechangelog>."
+"usr/local/share/dpkg/parsechangelog> and B</usr/share/dpkg/parsechangelog>."
msgstr ""
#. type: SS
diff -ruN dpkg-1.15.5.6.orig/man/po/sv.po dpkg-1.15.5.6/man/po/sv.po
--- dpkg-1.15.5.6.orig/man/po/sv.po 2010-01-08 20:05:23.000000000 +0200
+++ dpkg-1.15.5.6/man/po/sv.po 2010-02-14 09:29:32.735874132 +0200
@@ -7552,11 +7552,11 @@
msgid ""
"Specify an additional directory to search for parser scripts. This "
"directory is searched before the default directories which are currently B</"
-"usr/local/lib/dpkg/parsechangelog> and B</usr/lib/dpkg/parsechangelog>."
+"usr/local/share/dpkg/parsechangelog> and B</usr/share/dpkg/parsechangelog>."
msgstr ""
"Ange en ytterligare katalog att söka i efter parserskript. Katalogen söks "
-"genom innan standardkatalogerna, vilka för närvarande är B</usr/local/lib/"
-"dpkg/parsechangelog> och B</usr/lib/dpkg/parsechangelog>."
+"genom innan standardkatalogerna, vilka för närvarande är B</usr/local/share/"
+"dpkg/parsechangelog> och B</usr/share/dpkg/parsechangelog>."
#. type: SS
#: dpkg-parsechangelog.1:39
diff -ruN dpkg-1.15.5.6.orig/man/sv/dpkg-parsechangelog.1 dpkg-1.15.5.6/man/sv/dpkg-parsechangelog.1
--- dpkg-1.15.5.6.orig/man/sv/dpkg-parsechangelog.1 2010-01-08 20:05:23.000000000 +0200
+++ dpkg-1.15.5.6/man/sv/dpkg-parsechangelog.1 2010-02-14 09:22:54.488880085 +0200
@@ -29,7 +29,7 @@
\fB\-L\fP\fIbibliotekskatalog\fP
Ange en ytterligare katalog att söka i efter parserskript. Katalogen söks
genom innan standardkatalogerna, vilka för närvarande är
-\fB/usr/local/lib/dpkg/parsechangelog\fP och \fB/usr/lib/dpkg/parsechangelog\fP.
+\fB/usr/local/share/dpkg/parsechangelog\fP och \fB/usr/share/dpkg/parsechangelog\fP.
.TP
\fB\-h\fP, \fB\-\-help\fP
Visar hjälpskärm och avslutar.
diff -ruN dpkg-1.15.5.6.orig/scripts/Dpkg/Changelog/Parse.pm dpkg-1.15.5.6/scripts/Dpkg/Changelog/Parse.pm
--- dpkg-1.15.5.6.orig/scripts/Dpkg/Changelog/Parse.pm 2010-01-08 10:00:34.000000000 +0200
+++ dpkg-1.15.5.6/scripts/Dpkg/Changelog/Parse.pm 2010-02-14 09:14:27.550879827 +0200
@@ -50,7 +50,7 @@
The parsing itself is done by an external program (searched in the
following list of directories: $opt{libdir},
-/usr/local/lib/dpkg/parsechangelog, /usr/lib/dpkg/parsechangelog) That
+/usr/local/share/dpkg/parsechangelogusr) That
program is named according to the format that it's able to parse. By
default it's either "debian" or the format name lookep up in the 40 last
lines of the changelog itself (extracted with this perl regular expression
@@ -70,9 +70,8 @@
sub changelog_parse {
my (%options) = @_;
- my @parserpath = ("/usr/local/lib/dpkg/parsechangelog",
- "$dpkglibdir/parsechangelog",
- "/usr/lib/dpkg/parsechangelog");
+ my @parserpath = ( "$dpkglibdir/parsechangelog",
+ "/usr/local/share/dpkg/parsechangelog");
my $format = "debian";
my $changelogfile = "debian/changelog";
my $force = 0;

@ -1,6 +1,6 @@
Name: dpkg Name: dpkg
Version: 1.15.5.6 Version: 1.16.10
Release: 10%{?dist} Release: 1%{?dist}
Summary: Package maintenance system for Debian Linux Summary: Package maintenance system for Debian Linux
Group: System Environment/Base Group: System Environment/Base
# The entire source code is GPLv2+ with exception of the following # The entire source code is GPLv2+ with exception of the following
@ -11,19 +11,17 @@ Group: System Environment/Base
# lib/compat/obstack.h, lib/compat/gettext.h,lib/compat/obstack.c - LGPLv2+ # lib/compat/obstack.h, lib/compat/gettext.h,lib/compat/obstack.c - LGPLv2+
License: GPLv2 and GPLv2+ and LGPLv2+ and Public Domain and BSD License: GPLv2 and GPLv2+ and LGPLv2+ and Public Domain and BSD
URL: http://packages.debian.org/unstable/admin/dpkg URL: http://packages.debian.org/unstable/admin/dpkg
Source0: http://ftp.debian.org/debian/pool/main/d/dpkg/%{name}_%{version}.tar.bz2 Source0: http://ftp.debian.org/debian/pool/main/d/dpkg/%{name}_%{version}.tar.xz
# obtained from dpkg-source -x dpkg_1.15.5.6.dsc
Source1: dpkg.archtable
# Fedora specific patch to store files under /usr/share/dpkg, not these are not binary
# libs. and set user search path to /usr/local/share/dpkg
Patch1: dpkg-change-libdir-path.patch
# Fixes CVE-2010-0396 bugzilla #572522
Patch2: fedora-fix-CVE-2010-0396-00.patch
Patch3: fedora-fix-CVE-2010-0396-01.patch
Patch4: fedora-bug642160-empty-argv.patch
Patch5: fedora-fix-CVE-2010-1679_CVE-2011-0402.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: zlib-devel, bzip2-devel, libselinux-devel, gettext, ncurses-devel BuildRequires: zlib-devel bzip2-devel libselinux-devel gettext ncurses-devel
BuildRequires: autoconf automake gettext-devel
BuildRequires: doxygen flex xz-devel po4a dotconf-devel
# for /usr/bin/pod2man
%if 0%{?fedora} > 18
BuildRequires: perl-podlators
%else
BuildRequires: perl
%endif
%description %description
@ -40,16 +38,55 @@ dpkg and dselect will certainly be non-functional on a rpm-based system
because packages dependencies will likely be unmet. because packages dependencies will likely be unmet.
%package devel %package devel
Summary: Debian package management static library
Group: Development/System
%description devel
This package provides the header files and static library necessary to
develop software using dpkg, the same library used internally by dpkg.
Note though, that the API is to be considered volatile, and might change
at any time, use at your own risk.
%package -n dpkg-dev
Summary: Debian package development tools Summary: Debian package development tools
Group: Development/System Group: Development/System
Requires: %{name} = %{version}-%{release} Requires: dpkg-perl = %{version}-%{release}
Requires: perl, patch, make, binutils, bzip2, lzma Requires: patch, make, binutils, bzip2, lzma, xz
BuildArch: noarch BuildArch: noarch
%description devel %description -n dpkg-dev
This package provides the development tools (including dpkg-source). This package provides the development tools (including dpkg-source).
Required to unpack, build and upload Debian source packages Required to unpack, build and upload Debian source packages
%package perl
Summary: Dpkg perl modules
Group: System Environment/Base
Requires: %{name} = %{version}-%{release}
Requires: perl, perl-TimeDate
BuildArch: noarch
%description perl
This package provides the perl modules used by the scripts
in dpkg-dev. They cover a wide range of functionalities. Among them
there are the following modules:
- Dpkg::Arch: manipulate Debian architecture information
- Dpkg::BuildOptions: parse and manipulate DEB_BUILD_OPTIONS
- Dpkg::Changelog: parse Debian changelogs
- Dpkg::Checksums: generate and parse checksums
- Dpkg::Compression::Process: wrapper around compression tools
- Dpkg::Compression::FileHandle: transparently (de)compress files
- Dpkg::Control: parse and manipulate Debian control information
(.dsc, .changes, Packages/Sources entries, etc.)
- Dpkg::Deps: parse and manipulate dependencies
- Dpkg::ErrorHandling: common error functions
- Dpkg::Index: collections of Dpkg::Control (Packages/Sources files for
example)
- Dpkg::IPC: spawn sub-processes and feed/retrieve data
- Dpkg::Substvars: substitute variables in strings
- Dpkg::Vendor: identify current distribution vendor
- Dpkg::Version: parse and manipulate Debian package versions
%package -n dselect %package -n dselect
Summary: Debian package management front-end Summary: Debian package management front-end
@ -62,12 +99,6 @@ dselect is a high-level interface for the installation/removal of debs .
%prep %prep
%setup -q %setup -q
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
# Filter unwanted Requires: # Filter unwanted Requires:
cat << \EOF > %{name}-req cat << \EOF > %{name}-req
#!/bin/sh #!/bin/sh
@ -79,39 +110,43 @@ EOF
chmod +x %{__perl_requires} chmod +x %{__perl_requires}
%build %build
%configure --without-start-stop-daemon \ autoreconf -fiv
%configure --disable-start-stop-daemon \
--disable-linker-optimisations \ --disable-linker-optimisations \
--with-admindir=%{_localstatedir}/lib/dpkg \ --with-admindir=%{_localstatedir}/lib/dpkg \
--libdir=%{_datadir} \
--with-selinux \ --with-selinux \
--with-zlib \ --with-zlib \
--with-bz2 \ --with-bz2
--disable-silent-rules
make %{?_smp_mflags} make %{?_smp_mflags}
%install %install
rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT make install DESTDIR=$RPM_BUILD_ROOT
install -pm0644 %SOURCE1 $RPM_BUILD_ROOT/%{_datadir}/dpkg/archtable
# from debian/dpkg.install
install -pm0644 debian/archtable $RPM_BUILD_ROOT/%{_datadir}/dpkg/archtable
install -pm0644 debian/dpkg.cfg $RPM_BUILD_ROOT/%{_sysconfdir}/dpkg.cfg
%find_lang dpkg %find_lang dpkg
%find_lang dpkg-dev %find_lang dpkg-dev
%find_lang dselect %find_lang dselect
# fedora has its own implementation # fedora has its own implementation
rm -rf $RPM_BUILD_ROOT%{_bindir}/update-alternatives rm $RPM_BUILD_ROOT%{_bindir}/update-alternatives
rm $RPM_BUILD_ROOT%{_mandir}/man8/update-alternatives.8
rm -rf $RPM_BUILD_ROOT%{_mandir}/*/man8/update-alternatives.8
rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/alternatives/ rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/alternatives/
%clean #fedora has own implemenation
rm -rf $RPM_BUILD_ROOT #FIXME should we remove this ?
rm -rf $RPM_BUILD_ROOT%{_sbindir}/install-info
%files -f dpkg.lang %files -f dpkg.lang
%defattr(-,root,root,-) %defattr(-,root,root,-)
%doc debian/changelog README AUTHORS COPYING THANKS TODO %doc debian/changelog README AUTHORS COPYING THANKS TODO
%dir %{_sysconfdir}/dpkg %dir %{_sysconfdir}/dpkg
%config(noreplace) %{_sysconfdir}/dpkg.cfg
%{_bindir}/dpkg %{_bindir}/dpkg
%{_bindir}/dpkg-deb %{_bindir}/dpkg-deb
%{_bindir}/dpkg-query %{_bindir}/dpkg-query
@ -119,9 +154,10 @@ rm -rf $RPM_BUILD_ROOT
%{_bindir}/dpkg-trigger %{_bindir}/dpkg-trigger
%{_bindir}/dpkg-divert %{_bindir}/dpkg-divert
%{_bindir}/dpkg-statoverride %{_bindir}/dpkg-statoverride
%{_sbindir}/* %{_bindir}/dpkg-buildflags
%{_bindir}/dpkg-maintscript-helper
%{_bindir}/dpkg-mergechangelogs
%dir %{_datadir}/dpkg %dir %{_datadir}/dpkg
%{_datadir}/dpkg/mksplit
%{_datadir}/dpkg/archtable %{_datadir}/dpkg/archtable
%{_datadir}/dpkg/cputable %{_datadir}/dpkg/cputable
%{_datadir}/dpkg/ostable %{_datadir}/dpkg/ostable
@ -129,20 +165,64 @@ rm -rf $RPM_BUILD_ROOT
%{perl_vendorlib}/Dpkg.pm %{perl_vendorlib}/Dpkg.pm
%dir %{perl_vendorlib}/Dpkg %dir %{perl_vendorlib}/Dpkg
%{perl_vendorlib}/Dpkg/Gettext.pm %{perl_vendorlib}/Dpkg/Gettext.pm
%{_mandir}/man1/dpkg.1.gz
%{_mandir}/man1/dpkg-architecture.1.gz
%{_mandir}/man1/dpkg-buildflags.1.gz
%{_mandir}/man1/dpkg-buildpackage.1.gz
%{_mandir}/man1/dpkg-checkbuilddeps.1.gz
%{_mandir}/man1/dpkg-deb.1.gz %{_mandir}/man1/dpkg-deb.1.gz
%{_mandir}/man1/dpkg-distaddfile.1.gz
%{_mandir}/man1/dpkg-genchanges.1.gz
%{_mandir}/man1/dpkg-gencontrol.1.gz
%{_mandir}/man1/dpkg-gensymbols.1.gz
%{_mandir}/man1/dpkg-maintscript-helper.1.gz
%{_mandir}/man1/dpkg-mergechangelogs.1.gz
%{_mandir}/man1/dpkg-name.1.gz
%{_mandir}/man1/dpkg-parsechangelog.1.gz
%{_mandir}/man1/dpkg-query.1.gz %{_mandir}/man1/dpkg-query.1.gz
%{_mandir}/man1/dpkg-scanpackages.1.gz
%{_mandir}/man1/dpkg-scansources.1.gz
%{_mandir}/man1/dpkg-shlibdeps.1.gz
%{_mandir}/man1/dpkg-source.1.gz
%{_mandir}/man1/dpkg-split.1.gz %{_mandir}/man1/dpkg-split.1.gz
%{_mandir}/man1/dpkg-trigger.1.gz %{_mandir}/man1/dpkg-trigger.1.gz
%{_mandir}/man1/dpkg.1.gz %{_mandir}/man1/dpkg-vendor.1.gz
%{_mandir}/man5/dpkg.cfg.5.gz %{_mandir}/man5/dpkg.cfg.5.gz
%{_mandir}/man8/dpkg-divert.8.gz %{_mandir}/man8/dpkg-divert.8.gz
%{_mandir}/man8/dpkg-statoverride.8.gz %{_mandir}/man8/dpkg-statoverride.8.gz
#fedora has own implemenation %{_mandir}/*/man1/dpkg.1.gz
%exclude %{_sbindir}/install-info %{_mandir}/*/man1/dpkg-architecture.1.gz
#fedora has own implemenation %{_mandir}/*/man1/dpkg-buildflags.1.gz
%exclude %{_mandir}/man8/update-alternatives.8.gz %{_mandir}/*/man1/dpkg-buildpackage.1.gz
%{_mandir}/*/man1/dpkg-checkbuilddeps.1.gz
%{_mandir}/*/man1/dpkg-deb.1.gz
%{_mandir}/*/man1/dpkg-distaddfile.1.gz
%{_mandir}/*/man1/dpkg-genchanges.1.gz
%{_mandir}/*/man1/dpkg-gencontrol.1.gz
%{_mandir}/*/man1/dpkg-gensymbols.1.gz
%{_mandir}/*/man1/dpkg-maintscript-helper.1.gz
%{_mandir}/*/man1/dpkg-mergechangelogs.1.gz
%{_mandir}/*/man1/dpkg-name.1.gz
%{_mandir}/*/man1/dpkg-parsechangelog.1.gz
%{_mandir}/*/man1/dpkg-query.1.gz
%{_mandir}/*/man1/dpkg-scanpackages.1.gz
%{_mandir}/*/man1/dpkg-scansources.1.gz
%{_mandir}/*/man1/dpkg-shlibdeps.1.gz
%{_mandir}/*/man1/dpkg-source.1.gz
%{_mandir}/*/man1/dpkg-split.1.gz
%{_mandir}/*/man1/dpkg-trigger.1.gz
%{_mandir}/*/man1/dpkg-vendor.1.gz
%{_mandir}/*/man5/dpkg.cfg.5.gz
%{_mandir}/*/man8/dpkg-divert.8.gz
%{_mandir}/*/man8/dpkg-statoverride.8.gz
%files devel
%defattr(-,root,root,-)
%{_libdir}/libdpkg.a
%{_libdir}/pkgconfig/libdpkg.pc
%{_includedir}/dpkg/*.h
%files devel -f dpkg-dev.lang %files -n dpkg-dev -f dpkg-dev.lang
%defattr(-,root,root,-) %defattr(-,root,root,-)
%doc doc/README.api %doc doc/README.api
%{_bindir}/dpkg-architecture %{_bindir}/dpkg-architecture
@ -159,15 +239,13 @@ rm -rf $RPM_BUILD_ROOT
%{_bindir}/dpkg-shlibdeps %{_bindir}/dpkg-shlibdeps
%{_bindir}/dpkg-source %{_bindir}/dpkg-source
%{_bindir}/dpkg-vendor %{_bindir}/dpkg-vendor
%dir %{_datadir}/dpkg/parsechangelog # FIXME: what are these?
%{_datadir}/dpkg/parsechangelog/* %{_datadir}/dpkg/abitable
%exclude %{perl_vendorlib}/Dpkg/Gettext.pm %{_datadir}/dpkg/architecture.mk
%{perl_vendorlib}/Dpkg/*.pm %{_datadir}/dpkg/buildflags.mk
%{perl_vendorlib}/Dpkg/Changelog %{_datadir}/dpkg/default.mk
%{perl_vendorlib}/Dpkg/Shlibs %{_datadir}/dpkg/pkg-info.mk
%{perl_vendorlib}/Dpkg/Source %{_datadir}/dpkg/vendor.mk
%{perl_vendorlib}/Dpkg/Vendor
%{perl_vendorlib}/Dpkg/Control
%{_mandir}/man1/dpkg-architecture.1.gz %{_mandir}/man1/dpkg-architecture.1.gz
%{_mandir}/man1/dpkg-buildpackage.1.gz %{_mandir}/man1/dpkg-buildpackage.1.gz
%{_mandir}/man1/dpkg-checkbuilddeps.1.gz %{_mandir}/man1/dpkg-checkbuilddeps.1.gz
@ -183,15 +261,93 @@ rm -rf $RPM_BUILD_ROOT
%{_mandir}/man1/dpkg-source.1.gz %{_mandir}/man1/dpkg-source.1.gz
%{_mandir}/man1/dpkg-vendor.1.gz %{_mandir}/man1/dpkg-vendor.1.gz
%{_mandir}/man5/deb-control.5.gz %{_mandir}/man5/deb-control.5.gz
%{_mandir}/man5/deb-extra-override.5.gz
%{_mandir}/man5/deb-old.5.gz %{_mandir}/man5/deb-old.5.gz
%{_mandir}/man5/deb-origin.5.gz
%{_mandir}/man5/deb-override.5.gz %{_mandir}/man5/deb-override.5.gz
%{_mandir}/man5/deb-extra-override.5.gz
%{_mandir}/man5/deb-shlibs.5.gz %{_mandir}/man5/deb-shlibs.5.gz
%{_mandir}/man5/deb-split.5.gz
%{_mandir}/man5/deb-src-control.5.gz
%{_mandir}/man5/deb-substvars.5.gz %{_mandir}/man5/deb-substvars.5.gz
%{_mandir}/man5/deb-symbols.5.gz %{_mandir}/man5/deb-symbols.5.gz
%{_mandir}/man5/deb-triggers.5.gz %{_mandir}/man5/deb-triggers.5.gz
%{_mandir}/man5/deb-version.5.gz %{_mandir}/man5/deb-version.5.gz
%{_mandir}/man5/deb.5.gz %{_mandir}/man5/deb.5.gz
%{_mandir}/*/man1/dpkg-architecture.1.gz
%{_mandir}/*/man1/dpkg-buildpackage.1.gz
%{_mandir}/*/man1/dpkg-checkbuilddeps.1.gz
%{_mandir}/*/man1/dpkg-distaddfile.1.gz
%{_mandir}/*/man1/dpkg-genchanges.1.gz
%{_mandir}/*/man1/dpkg-gencontrol.1.gz
%{_mandir}/*/man1/dpkg-gensymbols.1.gz
%{_mandir}/*/man1/dpkg-name.1.gz
%{_mandir}/*/man1/dpkg-parsechangelog.1.gz
%{_mandir}/*/man1/dpkg-scanpackages.1.gz
%{_mandir}/*/man1/dpkg-scansources.1.gz
%{_mandir}/*/man1/dpkg-shlibdeps.1.gz
%{_mandir}/*/man1/dpkg-source.1.gz
%{_mandir}/*/man1/dpkg-vendor.1.gz
%{_mandir}/*/man5/deb-control.5.gz
%{_mandir}/*/man5/deb-extra-override.5.gz
%{_mandir}/*/man5/deb-old.5.gz
%{_mandir}/*/man5/deb-origin.5.gz
%{_mandir}/*/man5/deb-override.5.gz
%{_mandir}/*/man5/deb-shlibs.5.gz
%{_mandir}/*/man5/deb-split.5.gz
%{_mandir}/*/man5/deb-src-control.5.gz
%{_mandir}/*/man5/deb-substvars.5.gz
%{_mandir}/*/man5/deb-symbols.5.gz
%{_mandir}/*/man5/deb-triggers.5.gz
%{_mandir}/*/man5/deb-version.5.gz
%{_mandir}/*/man5/deb.5.gz
%files perl
%defattr(-,root,root,-)
%dir %{_libdir}/dpkg/parsechangelog
%{_libdir}/dpkg/parsechangelog/*
#FIXME other imbarecing exclude why we should exclude this one ?
#exclude %{perl_vendorlib}/Dpkg/Gettext.pm
%{perl_vendorlib}/Dpkg/*.pm
%{perl_vendorlib}/Dpkg/Changelog
%{perl_vendorlib}/Dpkg/Shlibs
%{perl_vendorlib}/Dpkg/Source
%{perl_vendorlib}/Dpkg/Vendor
%{perl_vendorlib}/Dpkg/Control
%{perl_vendorlib}/Dpkg/Compression/*.pm
%{perl_vendorlib}/Dpkg/Interface/*.pm
%{_mandir}/man3/Dpkg::BuildEnv.3.gz
%{_mandir}/man3/Dpkg::BuildFlags.3.gz
%{_mandir}/man3/Dpkg::BuildOptions.3.gz
%{_mandir}/man3/Dpkg::Changelog.3.gz
%{_mandir}/man3/Dpkg::Changelog::Debian.3.gz
%{_mandir}/man3/Dpkg::Changelog::Entry.3.gz
%{_mandir}/man3/Dpkg::Changelog::Entry::Debian.3.gz
%{_mandir}/man3/Dpkg::Changelog::Parse.3.gz
%{_mandir}/man3/Dpkg::Checksums.3.gz
%{_mandir}/man3/Dpkg::Compression.3.gz
%{_mandir}/man3/Dpkg::Compression::FileHandle.3.gz
%{_mandir}/man3/Dpkg::Compression::Process.3.gz
%{_mandir}/man3/Dpkg::Conf.3.gz
%{_mandir}/man3/Dpkg::Control.3.gz
%{_mandir}/man3/Dpkg::Control::Changelog.3.gz
%{_mandir}/man3/Dpkg::Control::Fields.3.gz
%{_mandir}/man3/Dpkg::Control::Hash.3.gz
%{_mandir}/man3/Dpkg::Control::Info.3.gz
%{_mandir}/man3/Dpkg::Control::Types.3.gz
%{_mandir}/man3/Dpkg::Deps.3.gz
%{_mandir}/man3/Dpkg::IPC.3.gz
%{_mandir}/man3/Dpkg::Index.3.gz
%{_mandir}/man3/Dpkg::Interface::Storable.3.gz
%{_mandir}/man3/Dpkg::Path.3.gz
%{_mandir}/man3/Dpkg::Source::Package.3.gz
%{_mandir}/man3/Dpkg::Substvars.3.gz
%{_mandir}/man3/Dpkg::Vendor.3.gz
%{_mandir}/man3/Dpkg::Vendor::Debian.3.gz
%{_mandir}/man3/Dpkg::Vendor::Default.3.gz
%{_mandir}/man3/Dpkg::Vendor::Ubuntu.3.gz
%{_mandir}/man3/Dpkg::Version.3.gz
%files -n dselect -f dselect.lang %files -n dselect -f dselect.lang
@ -199,12 +355,33 @@ rm -rf $RPM_BUILD_ROOT
%doc dselect/methods/multicd/README.multicd dselect/methods/ftp/README.mirrors.txt %doc dselect/methods/multicd/README.multicd dselect/methods/ftp/README.mirrors.txt
%{_bindir}/dselect %{_bindir}/dselect
%{perl_vendorlib}/Debian %{perl_vendorlib}/Debian
%{_datadir}/dpkg/methods %{_libdir}/dpkg/methods
%{_mandir}/man*/dselect*.gz %{_mandir}/man1/dselect.1.gz
%{_mandir}/*/man1/dselect.1.gz
%{_mandir}/man5/dselect.cfg.5.gz
%{_mandir}/*/man5/dselect.cfg.5.gz
%changelog %changelog
* Thu May 16 2013 Sérgio Basto <sergio@serjux.com> - 1.16.10-1
- Add BR perl-podlators for pod2man in F19 development or just BR perl
- Add some other importants BR: doxygen flex xz-devel po4a dotconf-devel
- Fix packages names which are debianized, so packages will be: dpkg-perl
and dpkg-dev (and dpkg-devel for headers of dpkg).
- Some clean ups.
* Sat May 4 2013 Oron Peled <oron@actcom.co.il>
- Bump version to Debian/wheezy
- Call autoreconf: make sure we don't reuse Debian packaged
stuff (config.guess, etc.)
- CVE patches not needed -- is already fixed upstream
- Removed dpkg-change-libdir.patch:
- Patching Makefile.in is wrong (can patch Makefile.am with autoreconf)
- Less patch churn for non-critical paths
- Accept /usr/lib/dpkg/parsechangelog
- Accept /usr/lib/dpkg/methods
* Wed Feb 13 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.15.5.6-10 * Wed Feb 13 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.15.5.6-10
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild - Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild

@ -1,15 +0,0 @@
diff -ur dpkg-1.15.5.6.orig/scripts/Dpkg/Arch.pm dpkg-1.15.5.6/scripts/Dpkg/Arch.pm
--- dpkg-1.15.5.6.orig/scripts/Dpkg/Arch.pm 2010-01-08 08:00:34.000000000 +0000
+++ dpkg-1.15.5.6/scripts/Dpkg/Arch.pm 2010-10-17 12:29:46.916000478 +0100
@@ -47,8 +47,9 @@
return $build_arch if defined $build_arch;
my $build_arch = `dpkg --print-architecture`;
- # FIXME: Handle bootstrapping
- syserr("dpkg --print-architecture failed") if $? >> 8;
+ if ($? >> 8 || $build_arch =~ /^\s*$/) {
+ $build_arch = get_raw_host_arch();
+ }
chomp $build_arch;
return $build_arch;

@ -1,43 +0,0 @@
diff --git a/scripts/Dpkg/Source/Patch.pm b/scripts/Dpkg/Source/Patch.pm
--- a/scripts/Dpkg/Source/Patch.pm
+++ b/scripts/Dpkg/Source/Patch.pm
@@ -322,8 +322,9 @@ sub analyze {
error(_g("expected ^--- in line %d of diff `%s'"), $., $diff);
}
$_ = strip_ts($_);
- if ($_ eq '/dev/null' or s{^(\./)?[^/]+/}{$destdir/}) {
+ if ($_ eq '/dev/null' or s{^[^/]+/}{$destdir/}) {
$fn = $_;
+ error(_g("%s contains an insecure path: %s"), $diff, $_) if m{/\.\./};
}
if (/\.dpkg-orig$/) {
error(_g("diff `%s' patches file with name ending .dpkg-orig"), $diff);
@@ -336,8 +337,9 @@ sub analyze {
error(_g("line after --- isn't as expected in diff `%s' (line %d)"), $diff, $.);
}
$_ = strip_ts($_);
- if ($_ eq '/dev/null' or s{^(\./)?[^/]+/}{$destdir/}) {
+ if ($_ eq '/dev/null' or s{^[^/]+/}{$destdir/}) {
$fn2 = $_;
+ error(_g("%s contains an insecure path: %s"), $diff, $_) if m{/\.\./};
} else {
unless (defined $fn) {
error(_g("none of the filenames in ---/+++ are relative in diff `%s' (line %d)"),
@@ -363,6 +365,17 @@ sub analyze {
if ($dirname =~ s{/[^/]+$}{} && not -d $dirname) {
$dirtocreate{$dirname} = 1;
}
+
+ # Sanity check, refuse to patch through a symlink
+ $dirname = $fn;
+ while (1) {
+ if (-l $dirname) {
+ error(_g("diff %s modifies file %s through a symlink: %s"),
+ $diff, $fn, $dirname);
+ }
+ last unless $dirname =~ s{/[^/]+$}{};
+ }
+
if (-e $fn and not -f _) {
error(_g("diff `%s' patches something which is not a plain file"), $diff);
}

@ -1,11 +0,0 @@
diff --git a/scripts/Dpkg/Source/Package/V3/quilt.pm b/scripts/Dpkg/Source/Package/V3/quilt.pm
--- a/scripts/Dpkg/Source/Package/V3/quilt.pm
+++ b/scripts/Dpkg/Source/Package/V3/quilt.pm
@@ -123,6 +123,7 @@ sub read_patch_list {
}
}
next if $opts{"skip_auto"} and $_ eq $auto_patch;
+ error(_g("%s contains an insecure path: %s"), $file, $_) if m{(^|/)\.\./};
push @patches, $_;
}
close(SERIES);

@ -1,176 +0,0 @@
diff -ruN dpkg-1.15.5.6ubuntu4/scripts/Dpkg/Source/Archive.pm dpkg-1.15.5.6ubuntu4.5//scripts/Dpkg/Source/Archive.pm
--- dpkg-1.15.5.6ubuntu4/scripts/Dpkg/Source/Archive.pm 2010-04-15 13:38:58.000000000 +0200
+++ dpkg-1.15.5.6ubuntu4.5//scripts/Dpkg/Source/Archive.pm 2011-01-06 21:08:30.000000000 +0200
@@ -119,7 +119,7 @@
# Call tar extraction process
$fork_opts{"delete_env"} = [ "TAR_OPTIONS" ];
$fork_opts{'exec'} = [ 'tar', '--no-same-owner', '--no-same-permissions',
- @{$opts{"options"}}, '-xkf', '-' ];
+ @{$opts{"options"}}, '-xf', '-' ];
fork_and_exec(%fork_opts);
$self->cleanup_after_open();
@@ -142,7 +142,7 @@
closedir(D);
my $done = 0;
erasedir($dest);
- if (scalar(@entries) == 1 && -d "$tmp/$entries[0]") {
+ if (scalar(@entries) == 1 && ! -l "$tmp/$entries[0]" && -d _) {
rename("$tmp/$entries[0]", $dest) ||
syserr(_g("Unable to rename %s to %s"),
"$tmp/$entries[0]", $dest);
diff -ruN dpkg-1.15.5.6ubuntu4/scripts/Dpkg/Source/Package/V2.pm dpkg-1.15.5.6ubuntu4.5//scripts/Dpkg/Source/Package/V2.pm
--- dpkg-1.15.5.6ubuntu4/scripts/Dpkg/Source/Package/V2.pm 2010-04-15 13:38:58.000000000 +0200
+++ dpkg-1.15.5.6ubuntu4.5//scripts/Dpkg/Source/Package/V2.pm 2011-01-06 21:08:30.000000000 +0200
@@ -115,7 +115,12 @@
# Extract main tarball
info(_g("unpacking %s"), $tarfile);
my $tar = Dpkg::Source::Archive->new(filename => "$dscdir$tarfile");
- $tar->extract($newdirectory, no_fixperms => 1);
+ $tar->extract($newdirectory, no_fixperms => 1,
+ options => [ "--anchored", "--no-wildcards-match-slash",
+ "--exclude", "*/.pc", "--exclude", ".pc" ]);
+ # The .pc exclusion is only needed for 3.0 (quilt) and to avoid
+ # having an upstream tarball provide a directory with symlinks
+ # that would be blindly followed when applying the patches
# Extract additional orig tarballs
foreach my $subdir (keys %origtar) {
diff -ruN dpkg-1.15.5.6ubuntu4/scripts/Dpkg/Source/Patch.pm dpkg-1.15.5.6ubuntu4.5//scripts/Dpkg/Source/Patch.pm
--- dpkg-1.15.5.6ubuntu4/scripts/Dpkg/Source/Patch.pm 2010-04-15 13:38:58.000000000 +0200
+++ dpkg-1.15.5.6ubuntu4.5//scripts/Dpkg/Source/Patch.pm 2011-01-06 21:08:30.000000000 +0200
@@ -313,11 +313,42 @@
$header =~ s/\s.*// unless ($header =~ s/\t.*//);
return $header;
}
+
+ sub intuit_file_patched {
+ my ($old, $new) = @_;
+ return $new unless defined $old;
+ return $old unless defined $new;
+ return $new if -e $new and not -e $old;
+ return $old if -e $old and not -e $new;
+ # We don't consider the case where both files are non-existent and
+ # where patch picks the one with the fewest directories to create
+ # since dpkg-source will pre-create the required directories
+ #
+ # Precalculate metrics used by patch
+ my ($tmp_o, $tmp_n) = ($old, $new);
+ my ($len_o, $len_n) = (length($old), length($new));
+ $tmp_o =~ s{[/\\]+}{/}g;
+ $tmp_n =~ s{[/\\]+}{/}g;
+ my $nb_comp_o = ($tmp_o =~ tr{/}{/});
+ my $nb_comp_n = ($tmp_n =~ tr{/}{/});
+ $tmp_o =~ s{^.*/}{};
+ $tmp_n =~ s{^.*/}{};
+ my ($blen_o, $blen_n) = (length($tmp_o), length($tmp_n));
+ # Decide like patch would
+ if ($nb_comp_o != $nb_comp_n) {
+ return ($nb_comp_o < $nb_comp_n) ? $old : $new;
+ } elsif ($blen_o != $blen_n) {
+ return ($blen_o < $blen_n) ? $old : $new;
+ } elsif ($len_o != $len_n) {
+ return ($len_o < $len_n) ? $old : $new;
+ }
+ return $old;
+ }
$_ = getline($diff_handle);
HUNK:
while (defined($_) || not eof($diff_handle)) {
- my ($fn, $fn2);
+ my (%path, %fn);
# skip comments leading up to patch (if any)
until (/^--- /) {
last HUNK if not defined($_ = getline($diff_handle));
@@ -327,11 +358,8 @@
unless(s/^--- //) {
error(_g("expected ^--- in line %d of diff `%s'"), $., $diff);
}
- $_ = strip_ts($_);
- if ($_ eq '/dev/null' or s{^[^/]+/}{$destdir/}) {
- $fn = $_;
- error(_g("%s contains an insecure path: %s"), $diff, $_) if m{/\.\./};
- }
+ $path{'old'} = $_ = strip_ts($_);
+ $fn{'old'} = $_ if $_ ne '/dev/null' and s{^[^/]*/+}{$destdir/};
if (/\.dpkg-orig$/) {
error(_g("diff `%s' patches file with name ending .dpkg-orig"), $diff);
}
@@ -342,46 +370,47 @@
unless (s/^\+\+\+ //) {
error(_g("line after --- isn't as expected in diff `%s' (line %d)"), $diff, $.);
}
- $_ = strip_ts($_);
- if ($_ eq '/dev/null' or s{^[^/]+/}{$destdir/}) {
- $fn2 = $_;
- error(_g("%s contains an insecure path: %s"), $diff, $_) if m{/\.\./};
- } else {
- unless (defined $fn) {
- error(_g("none of the filenames in ---/+++ are relative in diff `%s' (line %d)"),
- $diff, $.);
- }
- }
+ $path{'new'} = $_ = strip_ts($_);
+ $fn{'new'} = $_ if $_ ne '/dev/null' and s{^[^/]*/+}{$destdir/};
+
+ unless (defined $fn{'old'} or defined $fn{'new'}) {
+ error(_g("none of the filenames in ---/+++ are valid in diff '%s' (line %d)"),
+ $diff, $.);
+ }
- if (defined($fn) and $fn eq '/dev/null') {
+ # Safety checks on both filenames that patch could use
+ foreach my $key ("old", "new") {
+ next unless defined $fn{$key};
+ if ($path{$key} =~ m{/\.\./}) {
+ error(_g("%s contains an insecure path: %s"), $diff, $path{$key});
+ }
+ my $path = $fn{$key};
+ while (1) {
+ if (-l $path) {
+ error(_g("diff %s modifies file %s through a symlink: %s"),
+ $diff, $fn{$key}, $path);
+ }
+ last unless $path =~ s{/+[^/]*$}{};
+ last if length($path) <= length($destdir); # $destdir is assumed safe
+ }
+ }
+
+ if ($path{'old'} eq '/dev/null' and $path{'new'} eq '/dev/null') {
error(_g("original and modified files are /dev/null in diff `%s' (line %d)"),
- $diff, $.) if (defined($fn2) and $fn2 eq '/dev/null');
- $fn = $fn2;
- } elsif (defined($fn2) and $fn2 ne '/dev/null') {
- $fn = $fn2 unless defined $fn;
- $fn = $fn2 if ((not -e $fn) and -e $fn2);
- } elsif (defined($fn2) and $fn2 eq '/dev/null') {
+ $diff, $.);
+ } elsif ($path{'new'} eq '/dev/null') {
error(_g("file removal without proper filename in diff `%s' (line %d)"),
- $diff, $. - 1) unless defined $fn;
+ $diff, $. - 1) unless defined $fn{'old'};
warning(_g("diff %s removes a non-existing file %s (line %d)"),
- $diff, $fn, $.) unless -e $fn;
+ $diff, $fn{'old'}, $.) unless -e $fn{'old'};
}
+ my $fn = intuit_file_patched($fn{'old'}, $fn{'new'});
my $dirname = $fn;
if ($dirname =~ s{/[^/]+$}{} && not -d $dirname) {
$dirtocreate{$dirname} = 1;
}
- # Sanity check, refuse to patch through a symlink
- $dirname = $fn;
- while (1) {
- if (-l $dirname) {
- error(_g("diff %s modifies file %s through a symlink: %s"),
- $diff, $fn, $dirname);
- }
- last unless $dirname =~ s{/[^/]+$}{};
- }
-
if (-e $fn and not -f _) {
error(_g("diff `%s' patches something which is not a plain file"), $diff);
}
Loading…
Cancel
Save