I have a todo item to add cp --parents (somebody asked for it) and I was giving
it a go, and as is completely standard for gnu/dammit features it's TERRIBLY
$ cd ~/toybox
$ mkdir -p dest/dest2/dest3
$ cd dest/dest2
$ cp --parents ../../toys/posix/cp.c dest3
That creates dest/toys/posix/cp.c. The ability to escape the destination
directory with relative paths seems kinda unsafe.
Anybody got suggestions for what it _should_ be doing?
I was also wondering how cp -s and --parents should combine (my version can
handle relative paths by prepending the appropriate number of .. entries, which
varies based on -r level...) but for the moment I'm thinking of just forbidding
the combination until somebody asks for it.
P.S. A piece of infrastructure on my todo list forever is basically "readlink
-f" on both source and dest and failing if dest isn't under source. All sorts of
stuff from tar -x to httpd should use that, and I _could_ do that here, but it's
silly expensive. I'm more likely to use lib/lib.c xabspath() and then barf if
the result starts with "../", but of course you can follow symlinks which means
the normal cp -r could follow a symlink out of the destination directory, can't
it? (Honestly a month to just focus on the darn test suite would be nice...) But
a dishonest source is more likely/alarming than a dishonest destination...
Toybox mailing list