← Back to team overview

ecryptfs team mailing list archive

[Bug 322532] Re: ecryptfs does not handle symlinks within bzr

 

Thanks for the bug report Jamie, this one would have been easily to slip
by.

It looks like an off-by-one error in the eCryptfs kernel code.  We're
tacking on an extra byte to the symlink target.  Dustin pointed this out
to me and I was able to verify it with `strace readlink -n bar`.  Here's
the interesting line:

readlink("bar", "foo", 64)              = 4

It is reading 4 chars, but since we're adding an extra NULL character
(string terminator), most applications don't care.  I'm guessing that
only something like a version control system would have caught it.  :)

Working to trace down the problem now.

-- 
ecryptfs does not handle symlinks within bzr
https://bugs.launchpad.net/bugs/322532
You received this bug notification because you are a member of eCryptfs,
which is subscribed to ecryptfs-utils in ubuntu.

Status in “bzr” source package in Ubuntu: New
Status in “ecryptfs-utils” source package in Ubuntu: Confirmed
Status in “linux” source package in Ubuntu: New

Bug description:
Binary package hint: ecryptfs-utils

I have an encrypted ~/Private directory. If I have a bzr tree with symlinks in it, then the bzr tree is corrupted and unusable.  Attached is a tarball of a bzr tree. Here is how to reproduce:

$ tar -zxvf ./bzr_links.tar.gz 
bzr_links/
bzr_links/.bzr/
bzr_links/.bzr/repository/
...
bzr_links/bar
bzr_links/foo
$ cd bzr_links/
$ bzr status
modified:
  bar@
$ bzr diff
bzr: ERROR: The dirstate file (DirState(u'/home/jamie/Private/tmp/bzr_links/.bzr/checkout/dirstate')) appears to be corrupt: Bad parse, we expected to end on \n, not: 51 jamie@xxxxxxxxxxxxx-20090128230411-z2544pvd154m265m: (('', 'bar', 'bar-20090128230356-oc73poh1gp2zfkho-1'), [('l', 'foo', 0L, 0, 'n'), ('AAAAA0mA6eVJgOnlAAAAGQAQow4AAKH/', 'l', 0L, 0, 'n')])

Do the above in a non-encrypted directory (on an ext3 partition) yields:
$ tar -zxvf ./bzr_links.tar.gz 
bzr_links/
bzr_links/.bzr/
bzr_links/.bzr/repository/
...
bzr_links/bar
bzr_links/foo
$ cd bzr_links/
$ bzr status
$ bzr diff
$

The bzr tree was created like so:
$ mkdir bzr_links
$ cd bzr_links
$ bzr init
$ touch foo
$ bzr add
$ bzr ci
$ ln -s foo bar
$ bzr add
$ bzr ci
$ cd ../
$ tar -zcvf ./bzr_links.tar.gz ./bzr_links



References