summaryrefslogtreecommitdiff
path: root/dpkg-deb
diff options
context:
space:
mode:
Diffstat (limited to 'dpkg-deb')
-rw-r--r--dpkg-deb/build.c6
-rw-r--r--dpkg-deb/dpkg-deb.h2
-rw-r--r--dpkg-deb/extract.c13
3 files changed, 17 insertions, 4 deletions
diff --git a/dpkg-deb/build.c b/dpkg-deb/build.c
index c49dbc0e3..e816e0ab6 100644
--- a/dpkg-deb/build.c
+++ b/dpkg-deb/build.c
@@ -552,10 +552,14 @@ do_build(const char *const *argv)
debar, err.str);
} else if (deb_format.major == 2) {
const char deb_magic[] = ARCHIVEVERSION "\n";
+ char adminmember[16 + 1];
+
+ sprintf(adminmember, "%s%s", ADMINMEMBER,
+ compressor_get_extension(compressor_type_gzip));
dpkg_ar_put_magic(debar, arfd);
dpkg_ar_member_put_mem(debar, arfd, DEBMAGIC, deb_magic, strlen(deb_magic));
- dpkg_ar_member_put_file(debar, arfd, ADMINMEMBER, gzfd, -1);
+ dpkg_ar_member_put_file(debar, arfd, adminmember, gzfd, -1);
} else {
internerr("unknown deb format version %d.%d", deb_format.major, deb_format.minor);
}
diff --git a/dpkg-deb/dpkg-deb.h b/dpkg-deb/dpkg-deb.h
index 13106be44..1238d1407 100644
--- a/dpkg-deb/dpkg-deb.h
+++ b/dpkg-deb/dpkg-deb.h
@@ -70,7 +70,7 @@ extern struct compress_params compress_params;
#define OLDOLDDEBDIR ".DEBIAN"
#define DEBMAGIC "debian-binary"
-#define ADMINMEMBER "control.tar.gz"
+#define ADMINMEMBER "control.tar"
#define DATAMEMBER "data.tar"
#define MAXFILENAME 2048
diff --git a/dpkg-deb/extract.c b/dpkg-deb/extract.c
index 4b1e1f26d..55fdfcb19 100644
--- a/dpkg-deb/extract.c
+++ b/dpkg-deb/extract.c
@@ -178,9 +178,18 @@ extracthalf(const char *debar, const char *dir,
if (fd_skip(arfd, memberlen + (memberlen & 1), &err) < 0)
ohshit(_("cannot skip archive member from '%s': %s"), debar, err.str);
} else {
- if (strncmp(arh.ar_name, ADMINMEMBER, sizeof(arh.ar_name)) == 0)
+ if (strncmp(arh.ar_name, ADMINMEMBER, strlen(ADMINMEMBER)) == 0) {
+ const char *extension = arh.ar_name + strlen(ADMINMEMBER);
+
adminmember = 1;
- else {
+ decompressor = compressor_find_by_extension(extension);
+ if (decompressor != compressor_type_none &&
+ decompressor != compressor_type_gzip &&
+ decompressor != compressor_type_xz)
+ ohshit(_("archive '%s' uses unknown compression for member '%.*s', "
+ "giving up"),
+ debar, (int)sizeof(arh.ar_name), arh.ar_name);
+ } else {
if (adminmember != 1)
ohshit(_("archive '%s' has premature member '%.*s' before '%s', "
"giving up"),