From 9f481f128dd6d23dd933fa0d1330bd6d6d0d7be9 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 18 Jan 2016 12:38:41 -0700 Subject: [PATCH] Use O_SEARCH on systems without O_PATH if present. It can be used for a similar purpose. --- src/sudo_edit.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/sudo_edit.c b/src/sudo_edit.c index d22f109fb..6e7162423 100644 --- a/src/sudo_edit.c +++ b/src/sudo_edit.c @@ -331,16 +331,24 @@ 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) -# 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) -# define DIR_OPEN_FLAGS (O_RDONLY|O_DIRECTORY) +#if defined(O_PATH) +# if defined(O_DIRECTORY) +# define DIR_OPEN_FLAGS (O_PATH|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) +# define DIR_OPEN_FLAGS (O_RDONLY|O_NONBLOCK) #endif static int