diff --git a/AUTHORS b/AUTHORS index 03580aeec..5e94346a8 100644 --- a/AUTHORS +++ b/AUTHORS @@ -29,3 +29,4 @@ List of contributors, in chronological order: * Clemens Rabe (https://github.com/seeraven) * TJ Merritt (https://github.com/tjmerritt) * Matt Martyn (https://github.com/MMartyn) +* Ross Guario (https://github.com/rlguarino) diff --git a/deb/deb.go b/deb/deb.go index 26db3a1df..f2ea788f6 100644 --- a/deb/deb.go +++ b/deb/deb.go @@ -44,14 +44,20 @@ func GetControlFileFromDeb(packageFile string) (Stanza, error) { return nil, fmt.Errorf("unable to read .deb archive %s: %s", packageFile, err) } - if header.Name == "control.tar.gz" { - ungzip, err := gzip.NewReader(library) - if err != nil { - return nil, fmt.Errorf("unable to ungzip control file from %s. Error: %s", packageFile, err) + if strings.HasPrefix(header.Name, "control.tar") { + var src io.Reader + if strings.HasSuffix(header.Name, ".gz") { + ungzip, err := gzip.NewReader(library) + if err != nil { + return nil, fmt.Errorf("unable to ungzip control file from %s. Error: %s", packageFile, err) + } + defer ungzip.Close() + src = ungzip + } else { + src = library } - defer ungzip.Close() - untar := tar.NewReader(ungzip) + untar := tar.NewReader(src) for { tarHeader, err := untar.Next() if err == io.EOF { diff --git a/deb/deb_test.go b/deb/deb_test.go index 9ffd74c75..b8ebec6a4 100644 --- a/deb/deb_test.go +++ b/deb/deb_test.go @@ -11,7 +11,7 @@ import ( ) type DebSuite struct { - debFile, debFile2, dscFile, dscFileNoSign string + debFile, debFile2, debFile3, dscFile, dscFileNoSign string } var _ = Suite(&DebSuite{}) @@ -20,6 +20,7 @@ func (s *DebSuite) SetUpSuite(c *C) { _, _File, _, _ := runtime.Caller(0) s.debFile = filepath.Join(filepath.Dir(_File), "../system/files/libboost-program-options-dev_1.49.0.1_i386.deb") s.debFile2 = filepath.Join(filepath.Dir(_File), "../system/changes/hardlink_0.2.1_amd64.deb") + s.debFile3 = filepath.Join(filepath.Dir(_File), "../system/files/test_tar_control.deb") s.dscFile = filepath.Join(filepath.Dir(_File), "../system/files/pyspi_0.6.1-1.3.dsc") s.dscFileNoSign = filepath.Join(filepath.Dir(_File), "../system/files/pyspi-0.6.1-1.3.stripped.dsc") } @@ -36,6 +37,12 @@ func (s *DebSuite) TestGetControlFileFromDeb(c *C) { c.Check(err, IsNil) c.Check(st["Version"], Equals, "1.49.0.1") c.Check(st["Package"], Equals, "libboost-program-options-dev") + + st, err = GetControlFileFromDeb(s.debFile3) + c.Check(err, IsNil) + c.Check(st["Version"], Equals, "1.2.3") + c.Check(st["Package"], Equals, "test") + } func (s *DebSuite) TestGetControlFileFromDsc(c *C) { diff --git a/system/files/test_tar_control.deb b/system/files/test_tar_control.deb new file mode 100755 index 000000000..b820510bf Binary files /dev/null and b/system/files/test_tar_control.deb differ