]> granicus.if.org Git - sudo/commitdiff
Handle the case where O_PATH or O_SEARCH is defined but O_DIRECTORY
authorTodd C. Miller <Todd.Miller@sudo.ws>
Sat, 18 Aug 2018 13:06:54 +0000 (07:06 -0600)
committerTodd C. Miller <Todd.Miller@sudo.ws>
Sat, 18 Aug 2018 13:06:54 +0000 (07:06 -0600)
is not.  In theory, O_DIRECTORY is redundant when O_SEARCH is
specified but it is legal for O_EXEC and O_SEARCH to have the same
value.  Bug #844

src/sudo_edit.c

index 7b01fc44ba464744dd51ceab1620866c656b27a2..acf0280507304b50b800672c5057edf287727c8f 100644 (file)
@@ -379,13 +379,21 @@ done:
  * Use O_SEARCH/O_PATH and/or O_DIRECTORY where possible.
  */
 #if defined(O_SEARCH)
-# define DIR_OPEN_FLAGS        (O_SEARCH|O_DIRECTORY)
+# if defined(O_DIRECTORY)
+#  define DIR_OPEN_FLAGS       (O_SEARCH|O_DIRECTORY)
+# else
+#  define DIR_OPEN_FLAGS       (O_SEARCH)
+# endif
 #elif defined(O_PATH)
-# define DIR_OPEN_FLAGS        (O_PATH|O_DIRECTORY)
+# if defined(O_DIRECTORY)
+#  define DIR_OPEN_FLAGS       (O_PATH|O_DIRECTORY)
+# else
+#  define DIR_OPEN_FLAGS       (O_PATH)
+# endif
 #elif defined(O_DIRECTORY)
-# define DIR_OPEN_FLAGS        (O_RDONLY|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