From 2f35fb1fd3888bf84f586b093b450b26af86c8df Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sat, 9 Feb 2013 10:44:03 +0000 Subject: Encode binary xattr values --- summainlib.py | 10 +++++++++- tests/xattrs.script | 4 ++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/summainlib.py b/summainlib.py index 07895e1..e148760 100644 --- a/summainlib.py +++ b/summainlib.py @@ -14,6 +14,7 @@ # along with this program. If not, see . +import base64 import grp import hashlib import hmac @@ -220,7 +221,14 @@ class FilesystemObject(object): def _compute_xattrs(self): # pragma: no cover if len(self._xattrs) == 0: return '' - parts = [' %s=%s' % (k, self._xattrs[k]) for k in self._xattrs] + + def quote(s): + if s.isalnum(): + return '"%s"' % s + else: + return '0s' + base64.urlsafe_b64encode(s) + + parts = [' %s=%s' % (k, quote(self._xattrs[k])) for k in self._xattrs] return '\n' + '\n'.join(parts) def format_time(self, secs, nsecs): diff --git a/tests/xattrs.script b/tests/xattrs.script index 1d64954..c9959da 100755 --- a/tests/xattrs.script +++ b/tests/xattrs.script @@ -1,11 +1,11 @@ #!/bin/sh -set -e +set -eux umask 0002 mkdir -m 0775 "$DATADIR/xattrs" touch "$DATADIR/xattrs/file" -if setfattr -n user.foo -v bar "$DATADIR/xattrs/file" 2> /dev/null && +if setfattr -n user.foo -v "$(printf '\177')" "$DATADIR/xattrs/file" 2> /dev/null && setfattr -n user.empty -v '""' "$DATADIR/xattrs/file" 2> /dev/null then ./summain --exclude=mtime --exclude=uid --exclude=username \ -- cgit v1.2.1