Age | Commit message (Collapse) | Author |
|
|
|
During implementation and tests of new dump action, I've noticed that
while non-textual values in extended attributes were properly stored in
.metadata file, retrieving them from it was simply broken, i.e.
anything beyond first null byte was zeroed.
Small quantum of solace is the fact that apparently metastore users
rarely use extended attributes or at least rarely with non-textual
values, because otherwise they would surely report such crucial bug.
Let's perform simple test to show the problem:
$ mkdir -p ~/testxattr/ && cd ~/testxattr/ && touch test
$ setfattr -n user.txt -v "tekst" test
$ setfattr -n user.bin -v 0x020100ff00 test
$ getfattr -d -e hex test
# file: test
user.bin=0x020100ff00
user.txt=0x74656b7374
$ metastore -s test
$ OFFSET=$(($(grep -abo user.bin .metadata | sed 's/:.*//')+8+1+4))
$ xxd -p -l5 -s $OFFSET .metadata
020100ff00
So far everything seems fine, i.e. user.bin xattr is properly stored.
$ metastore -c test
./test: xattr
Apparently on-disk test xattrs differ from those in metadata file,
even though they should not!
Let's apply those from metadata file and show how they look on-disk.
$ metastore -a test
./test: changing metadata
./test: removing xattr user.bin
./test: adding xattr user.bin
$ getfattr -d -e hex test
# file: test
user.bin=0x0201000000
user.txt=0x74656b7374
Oh no! Extended attribute with non-textual data has been corrupted now.
But no more, because this commit fixes it!
As long as you haven't stored corrupted xattrs in metadata file, you can
still recover on-disk ones by applying them from metadata file using
fixed version of metastore.
|
|
|
|
|
|
|
|
|
|
Turn
version 2 of the License
into
only version 2 of the License is applicable
and restore the semicolon preceding it.
|
|
Wording has been changed only in Makefile, where:
Free Software
has been fixed into proper name:
Free Software Foundation, Inc.
with trailing comma separating it from address.
|
|
|
|
|
|
|
|
canonicalize_file_name() is not portable, but it can be easily replaced.
Now we're a bit friendlier to non-GNU libcs, like musl.
|
|
Conflicts:
NEWS
|
|
|
|
This is analagous script to the pre-commit one, but it applies metadata
automatically after a git checkout.
Signed-off-by: Przemyslaw Pawelczyk <przemoc@gmail.com>
|
|
|
|
Store extradirs list ordered by pathlen descendingly, so one traversal
should be enough to remove empty dirs.
|
|
Update extradirs list after successful rmdir(), so already removed
directory won't be provided to rmdir() again.
|
|
|
|
This is analagous to the -e option to create empty directories.
It simply removes them when they are not present in the metadata.
Signed-off-by: Przemyslaw Pawelczyk <przemoc@gmail.com>
|
|
Scripts seem to be POSIX shell conformant, so no need to be specific.
Signed-off-by: Przemyslaw Pawelczyk <przemoc@gmail.com>
|
|
|
|
|
|
|
|
xattr.h from libattr is not necessary, because glibc ships its own
xattr.h for many years already (since v2.3, so it's like 13 years).
libattr's header included errno.h, thus now it needs to be included
explicitly.
Signed-off-by: Przemyslaw Pawelczyk <przemoc@gmail.com>
|
|
|
|
Literal `-` prints as a hyphen, which doesn't conform to common man page
guidelines for writing options that have a leading dash. Proper form is:
\-
Signed-off-by: Przemyslaw Pawelczyk <przemoc@gmail.com>
|
|
This removes warnings shown during build with -Wextra flag.
Signed-off-by: Przemyslaw Pawelczyk <przemoc@gmail.com>
|
|
Signed-off-by: Przemyslaw Pawelczyk <przemoc@gmail.com>
|
|
`git log` provides detailed stuff. NEWS file should only contain
user-visible or really important changes.
|
|
I think that adding this directory 3 years ago to the repository was
a mistake. If there will be a demand for it, some Makefile rule
bootstrapping debian/ directory could be devised.
|
|
New description shamelessly copied from David's software page:
http://david.hardeman.nu/software.php (https://archive.today/vW7Ar)
|
|
|
|
|
|
Remove duplicated code introduced by 47fa5ae and use settings instead.
|
|
No more passing particular options (like git or mtime) to functions.
The structure is meant to be immutable after filling during startup.
|
|
|
|
|
|
* Switch to debhelper compat level 9.
* Enable all hardening options.
* Don't overwrite environment CFLAGS, use CPPFLAGS.
* Bump Standards-Version to 3.9.3, no changes needed.
|
|
|
|
|
|
Quoting Todd A. Jacobs, https://bugs.launchpad.net/bugs/937306:
DATA LOSS WARNING: Using metastore in its current condition can lead to
loss of metadata. See below for details.
First of all, metastore provides confusing and useless feedback to the
user when storing extended attributes without defined values. To
consistently re-create this problem:
$ touch foo
$ setfattr -n user.bar foo
$ metastore -s foo
Failed to write to file: Success
$ echo $?
1
The error message and exit status imply the operation has failed, but it
has not--at least, not completely. You can see that metastore *appears*
to have succeeded as follows:
$ rm foo
$ touch foo
$ metastore -a foo
./foo: changing metadata
./foo: adding xattr user.bar
$ echo $?
0
$ getfattr -d foo
# file: foo
user.bar
So, the .metadata file seems to contains all the correct information,
but it provides this contradictory and cryptic error message to the user
on save. However, the .metadata file *is* actually broken, but you only
see it when saving multiple extended attributes where at least one of
them has no defined value.
$ rm foo; rm .metadata
$ touch foo
$ setfattr -n user.bar foo
$ setfattr -n user.baz -v quux foo
$ getfattr -d foo
# file: foo
user.bar
user.baz="quux"
$ metastore -s foo
Failed to write to file: Success
$ echo $?
1
$ rm foo
$ touch foo
$ metastore -a
Attempt to read beyond end of file, corrupt file?
$ echo $?
1
So, there are really two things that need fixing:
1. The incredibly cryptic error message on save.
What is the actual error condition it is trying to report?
2. The proper handling of extended attributes without values.
Signed-off-by: Przemyslaw Pawelczyk <przemoc@gmail.com>
|
|
|
|
|
|
* New maintainer.
* Switch (back) to a minimal rules files; restores missing examples.
* Switch to source format 3.0 (quilt).
* Add debian/watch.
* Bump Standards-Version to 3.9.1, no changes needed.
|
|
Hooks now run with stdin closed (since Git version 1.5.4) and prompting
will not work when using a high-level interface such as git-gui or Emacs
anyway.
|
|
|
|
|
|
|
|
In some situations it may be useful to have multiple sets of metadata
for the same hierarchy (e.g. representing how a file set should appear on
different hosts).
The ability to select a metadata file may be useful in this case.
Patch by Sergio Callegari <sergio.callegari@gmail.com>
|