]> gitweb.michael.orlitzky.com - apply-default-acl.git/commit
Add safe_open() function to fix symlink traversal in non-terminal components.
authorMichael Orlitzky <michael@orlitzky.com>
Mon, 26 Feb 2018 03:11:47 +0000 (22:11 -0500)
committerMichael Orlitzky <michael@orlitzky.com>
Mon, 26 Feb 2018 19:10:29 +0000 (14:10 -0500)
commit2dee89ff5a032f896d57a353c04525c506372669
treef5ae49238170ec8da7e10dbdb8ca8a4a3204d588
parentb0131edac01695a533c4ffd33774215aec9cd03a
Add safe_open() function to fix symlink traversal in non-terminal components.

The standard library provides lots of ways to avoid symlinks in the
"baz" component of "foo/bar/baz", but very few (i.e. zero) ways to
avoid them in the "bar" component. Of course, they're just as
dangerous in either place, so it would be cool if we could ignore
symlinks entirely.

This commit adds a safe_open() function, which looks just like open()
to the caller, but which starts at the root and calls openat() one
component at-a-time. Thus if you use O_NOFOLLOW, nobody can trick you
with an intermediate component: there are no intermediate components;
it works one at-a-time. This slows things down a bit, but not fatally.
src/apply-default-acl.c