[Docker-maint] Bug#739586: [PATCH] add debian/patches/add-tar-xattr-support.patch
Paul Tagliamonte
paultag at debian.org
Sun Feb 23 20:36:00 UTC 2014
Ping? Can we please get this merged? It's blocking docker 0.8.1
Thanks!
Paul
On Wed, Feb 19, 2014 at 11:56:10PM -0800, Johan Euphrosine wrote:
> Package: golang
> Version: 2:1.2-2
> Severity: wishlist
>
> to backport support for tar xattr from upcoming golang1.3
> ---
> debian/golang-src.install | 1 +
> debian/patches/add-tar-xattr-support.patch | 175 +++++++++++++++++++++++++++++
> debian/patches/series | 1 +
> debian/source/include-binaries | 1 +
> debian/xattrs.tar | Bin 0 -> 5120 bytes
> 5 files changed, 178 insertions(+)
> create mode 100644 debian/patches/add-tar-xattr-support.patch
> create mode 100644 debian/source/include-binaries
> create mode 100644 debian/xattrs.tar
>
> diff --git a/debian/golang-src.install b/debian/golang-src.install
> index f034ba5..726c5b4 100644
> --- a/debian/golang-src.install
> +++ b/debian/golang-src.install
> @@ -1,2 +1,3 @@
> src /usr/share/go/
> test /usr/share/go/
> +debian/xattrs.tar /usr/share/go/src/pkg/archive/tar/testdata
> diff --git a/debian/patches/add-tar-xattr-support.patch b/debian/patches/add-tar-xattr-support.patch
> new file mode 100644
> index 0000000..904e011
> --- /dev/null
> +++ b/debian/patches/add-tar-xattr-support.patch
> @@ -0,0 +1,175 @@
> +--- a/src/pkg/archive/tar/common.go
> ++++ b/src/pkg/archive/tar/common.go
> +@@ -57,6 +57,7 @@
> + Devminor int64 // minor number of character or block device
> + AccessTime time.Time // access time
> + ChangeTime time.Time // status change time
> ++ Xattrs map[string]string
> + }
> +
> + // File name constants from the tar spec.
> +@@ -189,6 +190,7 @@
> + paxSize = "size"
> + paxUid = "uid"
> + paxUname = "uname"
> ++ paxXattr = "SCHILY.xattr."
> + paxNone = ""
> + )
> +
> +--- a/src/pkg/archive/tar/reader.go
> ++++ b/src/pkg/archive/tar/reader.go
> +@@ -139,8 +139,14 @@
> + return err
> + }
> + hdr.Size = int64(size)
> ++ default:
> ++ if strings.HasPrefix(k, paxXattr) {
> ++ if hdr.Xattrs == nil {
> ++ hdr.Xattrs = make(map[string]string)
> ++ }
> ++ hdr.Xattrs[k[len(paxXattr):]] = v
> ++ }
> + }
> +-
> + }
> + return nil
> + }
> +--- a/src/pkg/archive/tar/reader_test.go
> ++++ b/src/pkg/archive/tar/reader_test.go
> +@@ -161,6 +161,46 @@
> + },
> + },
> + },
> ++ {
> ++ file: "testdata/xattrs.tar",
> ++ headers: []*Header{
> ++ {
> ++ Name: "small.txt",
> ++ Mode: 0644,
> ++ Uid: 1000,
> ++ Gid: 10,
> ++ Size: 5,
> ++ ModTime: time.Unix(1386065770, 448252320),
> ++ Typeflag: '0',
> ++ Uname: "alex",
> ++ Gname: "wheel",
> ++ AccessTime: time.Unix(1389782991, 419875220),
> ++ ChangeTime: time.Unix(1389782956, 794414986),
> ++ Xattrs: map[string]string{
> ++ "user.key": "value",
> ++ "user.key2": "value2",
> ++ // Interestingly, selinux encodes the terminating null inside the xattr
> ++ "security.selinux": "unconfined_u:object_r:default_t:s0\x00",
> ++ },
> ++ },
> ++ {
> ++ Name: "small2.txt",
> ++ Mode: 0644,
> ++ Uid: 1000,
> ++ Gid: 10,
> ++ Size: 11,
> ++ ModTime: time.Unix(1386065770, 449252304),
> ++ Typeflag: '0',
> ++ Uname: "alex",
> ++ Gname: "wheel",
> ++ AccessTime: time.Unix(1389782991, 419875220),
> ++ ChangeTime: time.Unix(1386065770, 449252304),
> ++ Xattrs: map[string]string{
> ++ "security.selinux": "unconfined_u:object_r:default_t:s0\x00",
> ++ },
> ++ },
> ++ },
> ++ },
> + }
> +
> + func TestReader(t *testing.T) {
> +@@ -180,7 +220,7 @@
> + f.Close()
> + continue testLoop
> + }
> +- if *hdr != *header {
> ++ if !reflect.DeepEqual(*hdr, *header) {
> + t.Errorf("test %d, entry %d: Incorrect header:\nhave %+v\nwant %+v",
> + i, j, *hdr, *header)
> + }
> +@@ -253,7 +293,7 @@
> + }
> +
> + // check the header
> +- if *hdr != *headers[nread] {
> ++ if !reflect.DeepEqual(*hdr, *headers[nread]) {
> + t.Errorf("Incorrect header:\nhave %+v\nwant %+v",
> + *hdr, headers[nread])
> + }
> +Binary files /dev/null and b/src/pkg/archive/tar/testdata/xattrs.tar differ
> +--- a/src/pkg/archive/tar/writer.go
> ++++ b/src/pkg/archive/tar/writer.go
> +@@ -236,6 +236,12 @@
> + return tw.err
> + }
> +
> ++ if allowPax {
> ++ for k, v := range hdr.Xattrs {
> ++ paxHeaders[paxXattr+k] = v
> ++ }
> ++ }
> ++
> + if len(paxHeaders) > 0 {
> + if !allowPax {
> + return errInvalidHeader
> +--- a/src/pkg/archive/tar/writer_test.go
> ++++ b/src/pkg/archive/tar/writer_test.go
> +@@ -10,6 +10,7 @@
> + "io"
> + "io/ioutil"
> + "os"
> ++ "reflect"
> + "strings"
> + "testing"
> + "testing/iotest"
> +@@ -338,6 +339,45 @@
> + }
> + }
> +
> ++func TestPaxXattrs(t *testing.T) {
> ++ xattrs := map[string]string{
> ++ "user.key": "value",
> ++ }
> ++
> ++ // Create an archive with an xattr
> ++ fileinfo, err := os.Stat("testdata/small.txt")
> ++ if err != nil {
> ++ t.Fatal(err)
> ++ }
> ++ hdr, err := FileInfoHeader(fileinfo, "")
> ++ if err != nil {
> ++ t.Fatalf("os.Stat: %v", err)
> ++ }
> ++ contents := "Kilts"
> ++ hdr.Xattrs = xattrs
> ++ var buf bytes.Buffer
> ++ writer := NewWriter(&buf)
> ++ if err := writer.WriteHeader(hdr); err != nil {
> ++ t.Fatal(err)
> ++ }
> ++ if _, err = writer.Write([]byte(contents)); err != nil {
> ++ t.Fatal(err)
> ++ }
> ++ if err := writer.Close(); err != nil {
> ++ t.Fatal(err)
> ++ }
> ++ // Test that we can get the xattrs back out of the archive.
> ++ reader := NewReader(&buf)
> ++ hdr, err = reader.Next()
> ++ if err != nil {
> ++ t.Fatal(err)
> ++ }
> ++ if !reflect.DeepEqual(hdr.Xattrs, xattrs) {
> ++ t.Fatalf("xattrs did not survive round trip: got %+v, want %+v",
> ++ hdr.Xattrs, xattrs)
> ++ }
> ++}
> ++
> + func TestPAXHeader(t *testing.T) {
> + medName := strings.Repeat("CD", 50)
> + longName := strings.Repeat("AB", 100)
> diff --git a/debian/patches/series b/debian/patches/series
> index 6da8b45..0a51bc1 100644
> --- a/debian/patches/series
> +++ b/debian/patches/series
> @@ -1 +1,2 @@
> add-src-pkg-debug-elf-testdata-hello.patch
> +add-tar-xattr-support.patch
> diff --git a/debian/source/include-binaries b/debian/source/include-binaries
> new file mode 100644
> index 0000000..0222ae3
> --- /dev/null
> +++ b/debian/source/include-binaries
> @@ -0,0 +1 @@
> +debian/xattrs.tar
> \ No newline at end of file
> diff --git a/debian/xattrs.tar b/debian/xattrs.tar
> new file mode 100644
> index 0000000000000000000000000000000000000000..9701950edd1f0dc82858b7117136b37391be0b08
> GIT binary patch
> literal 5120
> zcmeHJv2KGf5M|~o_yWg1+khiw>d;i}P^nX=$R$ooYd`|ilD{uBAv6g^kxC>6-(uu<
> zHg^v_-l5r}td>fyRbC(vfcdOQq}Iq(#u+Ja9X?}Dv(|CCVoJF~09ZgF;2a!G7^%~|
> zYNYoMUQ-rE=5<MfNf&^--n!;4I5LG45ME;9L at fvneeClfz=*LBI8bnFP`025LJ)!=
> zMno8J0GDDfIs&<m0>KzzBJ^EKyr-Mx-NQ4gq%k=v3zee}wOxElT`HH-ei(K*xV|_}
> zC{$GDvDu<R={PN`MVUrfx`|V at UX}Cg<y}Q)mCx5|BTH>oW?o>&odUrVuVHkt_w?IH
> zW3PV_ at V!Jxt at A^i>Yrj(>;K=H?5X8!tJS~MYVd#a^`?|QJKb&Uduf~MfN4M7$J!Lr
> zF40zZMF!9x{tqJ#0F5+;{2!=)=Knre|G(mAKU`hAc#r>!#{V(9d;sW1hxVv7 at B_zF
> ze)#eKF~#1~>@WTI`#+&4`lkel_5U6!N8h^5vRAE8lqGgr9-Ul!p=H1_U>TS&1K)l2
> B)fNB%
>
> literal 0
> HcmV?d00001
>
> --
> 1.9.0.rc1.175.g0b1dcb5
>
--
.''`. Paul Tagliamonte <paultag at debian.org> | Proud Debian Developer
: :' : 4096R / 8F04 9AD8 2C92 066C 7352 D28A 7B58 5B30 807C 2A87
`. `'` http://people.debian.org/~paultag
`- http://people.debian.org/~paultag/conduct-statement.txt
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.alioth.debian.org/pipermail/docker-maint/attachments/20140223/c73f8c38/attachment.sig>
More information about the Docker-maint
mailing list