Use O_SEARCH on systems without O_PATH if present. It can be used

for a similar purpose.
This commit is contained in:
Todd C. Miller
2016-01-18 12:38:41 -07:00
parent c1b1481204
commit 9f481f128d

View File

@@ -331,13 +331,21 @@ dir_is_writable(int dfd, struct user_details *ud, struct command_details *cd)
/*
* Directory open flags for use with openat(2).
* Use O_PATH and O_DIRECTORY where possible.
* Use O_PATH/O_SEARCH and O_DIRECTORY where possible.
*/
#if defined(O_PATH) && defined(O_DIRECTORY)
#if defined(O_PATH)
# if defined(O_DIRECTORY)
# define DIR_OPEN_FLAGS (O_PATH|O_DIRECTORY)
#elif defined(O_PATH) && !defined(O_DIRECTORY)
# define DIR_OPEN_FLAGS O_PATH
#elif !defined(O_PATH) && defined(O_DIRECTORY)
# else
# define DIR_OPEN_FLAGS (O_PATH)
# endif
#elif defined(O_SEARCH)
# if defined(O_DIRECTORY)
# define DIR_OPEN_FLAGS (O_SEARCH|O_DIRECTORY)
# else
# define DIR_OPEN_FLAGS (O_SEARCH)
# endif
#elif defined(O_DIRECTORY)
# define DIR_OPEN_FLAGS (O_RDONLY|O_DIRECTORY)
#else
# define DIR_OPEN_FLAGS (O_RDONLY|O_NONBLOCK)