tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
revert broken O_SEARCH
The following (untested) patch reverts the defective O_SEARCH
implementation that was committed along with the *at calls back in
November.
I am currently building and testing it and will commit it when that
finishes.
I have left O_SEARCH defined and visible and made open() explicitly
ignore it. This way, most code that tries to use it will continue to
build and run. I've also arranged lib/libc/c063/t_o_search.c so that
the tests that make use of the O_SEARCH semantics will disappear until
O_SEARCH comes back, and fixed some mistakes and/or incorrect hacks
that were causing some of these to succeed despite the broken O_SEARCH
implementation.
The man page changes at the end are essentially all the same.
------
diff -r 660c8bed4e78 sys/kern/vfs_syscalls.c
--- a/sys/kern/vfs_syscalls.c Sat Jan 12 15:03:39 2013 -0500
+++ b/sys/kern/vfs_syscalls.c Sat Jan 12 18:24:09 2013 -0500
@@ -181,14 +181,6 @@
if ((error = fd_getvnode(fdat, &dfp)) != 0)
goto out;
- if (!(dfp->f_flag & FSEARCH)) {
- vn_lock(dfp->f_data, LK_EXCLUSIVE);
- error = VOP_ACCESS(dfp->f_data, VEXEC, l->l_cred);
- VOP_UNLOCK(dfp->f_data);
- if (error)
- goto cleanup;
- }
-
NDAT(ndp, dfp->f_data);
}
@@ -213,14 +205,6 @@
if ((error = fd_getvnode(fdat, &dfp)) != 0)
goto out;
- if (!(dfp->f_flag & FSEARCH)) {
- vn_lock(dfp->f_data, LK_EXCLUSIVE);
- error = VOP_ACCESS(dfp->f_data, VEXEC, l->l_cred);
- VOP_UNLOCK(dfp->f_data);
- if (error)
- goto cleanup;
- }
-
dvp = dfp->f_data;
} else {
dvp = NULL;
@@ -1577,6 +1561,10 @@
int indx, error;
struct nameidata nd;
+ if (open_flags & O_SEARCH) {
+ open_flags &= ~(int)O_SEARCH;
+ }
+
flags = FFLAGS(open_flags);
if ((flags & (FREAD | FWRITE)) == 0)
return EINVAL;
@@ -1641,7 +1629,6 @@
/*
* Check permissions, allocate an open file structure,
* and call the device open routine if any.
- * XXX implement O_SEARCH
*/
static int
do_sys_openat(lwp_t *l, int fdat, const char *path, int flags,
@@ -1662,19 +1649,10 @@
goto out;
dvp = dfp->f_data;
-
- if (!(dfp->f_flag & FSEARCH)) {
- vn_lock(dfp->f_data, LK_EXCLUSIVE);
- error = VOP_ACCESS(dfp->f_data, VEXEC, l->l_cred);
- VOP_UNLOCK(dfp->f_data);
- if (error)
- goto cleanup;
- }
}
error = do_open(l, dvp, pb, flags, mode, fd);
-cleanup:
if (dfp != NULL)
fd_putfile(fdat);
out:
@@ -1988,6 +1966,10 @@
0, NULL, NULL, NULL)))
return (error);
+ if (oflags & O_SEARCH) {
+ oflags &= ~(int)O_SEARCH;
+ }
+
flags = FFLAGS(oflags);
if ((flags & (FREAD | FWRITE)) == 0)
return (EINVAL);
diff -r 660c8bed4e78 sys/sys/fcntl.h
--- a/sys/sys/fcntl.h Sat Jan 12 15:03:39 2013 -0500
+++ b/sys/sys/fcntl.h Sat Jan 12 18:24:09 2013 -0500
@@ -131,7 +131,7 @@
#define O_MASK
(O_ACCMODE|O_NONBLOCK|O_APPEND|O_SHLOCK|O_EXLOCK|\
O_ASYNC|O_SYNC|O_CREAT|O_TRUNC|O_EXCL|O_DSYNC|\
O_RSYNC|O_NOCTTY|O_ALT_IO|O_NOFOLLOW|O_DIRECT|\
- O_DIRECTORY|O_CLOEXEC|O_NOSIGPIPE|O_SEARCH)
+ O_DIRECTORY|O_CLOEXEC|O_NOSIGPIPE)
#define FMARK 0x00001000 /* mark during gc() */
#define FDEFER 0x00002000 /* defer for next gc pass */
@@ -141,7 +141,7 @@
#define FKIOCTL 0x80000000 /* kernel originated ioctl */
/* bits settable by fcntl(F_SETFL, ...) */
#define FCNTLFLAGS
(FAPPEND|FASYNC|FFSYNC|FNONBLOCK|FDSYNC|FRSYNC|FALTIO|\
- FDIRECT|FNOSIGPIPE|FSEARCH)
+ FDIRECT|FNOSIGPIPE)
/* bits to save after open(2) */
#define FMASK (FREAD|FWRITE|FCNTLFLAGS)
#endif /* _KERNEL */
@@ -166,7 +166,6 @@
#define FRSYNC O_RSYNC /* kernel */
#define FALTIO O_ALT_IO /* kernel */
#define FDIRECT O_DIRECT /* kernel */
-#define FSEARCH O_SEARCH /* kernel */
#endif
/*
diff -r 660c8bed4e78 tests/lib/libc/c063/t_o_search.c
--- a/tests/lib/libc/c063/t_o_search.c Sat Jan 12 15:03:39 2013 -0500
+++ b/tests/lib/libc/c063/t_o_search.c Sat Jan 12 18:24:09 2013 -0500
@@ -42,14 +42,24 @@
#include <pwd.h>
#include <sys/param.h>
+/*
+ * dholland 20130112: disable tests that require O_SEARCH semantics
+ * until a decision is reached about the semantics of O_SEARCH and a
+ * non-broken implementation is available.
+ */
+#if (O_MASK & O_SEARCH) != 0
+#define USE_O_SEARCH
+#endif
+
#define DIR "dir"
#define FILE "dir/o_search"
#define BASEFILE "o_search"
+
ATF_TC_WITH_CLEANUP(o_search_perm1);
ATF_TC_HEAD(o_search_perm1, tc)
{
- atf_tc_set_md_var(tc, "descr", "See that openat enforce search
permission");
+ atf_tc_set_md_var(tc, "descr", "See that openat enforces search
permission");
atf_tc_set_md_var(tc, "require.user", "unprivileged");
}
@@ -81,10 +91,13 @@
(void)rmdir(DIR);
}
+
+#ifdef USE_O_SEARCH
+
ATF_TC_WITH_CLEANUP(o_search_root_flag1);
ATF_TC_HEAD(o_search_root_flag1, tc)
{
- atf_tc_set_md_var(tc, "descr", "See that openat honours O_SEARCH");
+ atf_tc_set_md_var(tc, "descr", "See that root openat honours O_SEARCH");
atf_tc_set_md_var(tc, "require.user", "root");
}
@@ -120,6 +133,7 @@
(void)rmdir(DIR);
}
+
ATF_TC_WITH_CLEANUP(o_search_unpriv_flag1);
ATF_TC_HEAD(o_search_unpriv_flag1, tc)
{
@@ -141,14 +155,14 @@
ATF_REQUIRE((fd = openat(dfd, BASEFILE, O_RDWR, 0)) != -1);
ATF_REQUIRE(close(fd) == 0);
- ATF_REQUIRE(fchmod(dfd, 744) == 0);
+ ATF_REQUIRE(fchmod(dfd, 644) == 0);
ATF_REQUIRE((fd = openat(dfd, BASEFILE, O_RDWR, 0)) != -1);
ATF_REQUIRE(close(fd) == 0);
ATF_REQUIRE(fchmod(dfd, 444) == 0);
- ATF_REQUIRE((fd = openat(dfd, BASEFILE, O_RDWR, 0)) == -1);
+ ATF_REQUIRE((fd = openat(dfd, BASEFILE, O_RDWR, 0)) != -1);
ATF_REQUIRE(close(dfd) == 0);
}
@@ -159,10 +173,13 @@
(void)rmdir(DIR);
}
+#endif /* USE_O_SEARCH */
+
+
ATF_TC_WITH_CLEANUP(o_search_perm2);
ATF_TC_HEAD(o_search_perm2, tc)
{
- atf_tc_set_md_var(tc, "descr", "See that fstatat enforce search
permission");
+ atf_tc_set_md_var(tc, "descr", "See that faccessat enforces search
permission");
atf_tc_set_md_var(tc, "require.user", "unprivileged");
}
@@ -192,10 +209,13 @@
(void)rmdir(DIR);
}
+
+#ifdef USE_O_SEARCH
+
ATF_TC_WITH_CLEANUP(o_search_root_flag2);
ATF_TC_HEAD(o_search_root_flag2, tc)
{
- atf_tc_set_md_var(tc, "descr", "See that fstatat honours O_SEARCH");
+ atf_tc_set_md_var(tc, "descr", "See that root fstatat honours
O_SEARCH");
atf_tc_set_md_var(tc, "require.user", "root");
}
@@ -229,6 +249,7 @@
(void)rmdir(DIR);
}
+
ATF_TC_WITH_CLEANUP(o_search_unpriv_flag2);
ATF_TC_HEAD(o_search_unpriv_flag2, tc)
{
@@ -249,7 +270,7 @@
ATF_REQUIRE(faccessat(dfd, BASEFILE, W_OK, 0) == 0);
- ATF_REQUIRE(fchmod(dfd, 744) == 0);
+ ATF_REQUIRE(fchmod(dfd, 644) == 0);
ATF_REQUIRE(faccessat(dfd, BASEFILE, W_OK, 0) == 0);
@@ -264,7 +285,10 @@
{
(void)unlink(FILE);
(void)rmdir(DIR);
-}
+}
+
+#endif /* USE_O_SEARCH */
+
ATF_TC_WITH_CLEANUP(o_search_notdir);
ATF_TC_HEAD(o_search_notdir, tc)
@@ -295,11 +319,15 @@
{
ATF_TP_ADD_TC(tp, o_search_perm1);
+#ifdef USE_O_SEARCH
ATF_TP_ADD_TC(tp, o_search_root_flag1);
ATF_TP_ADD_TC(tp, o_search_unpriv_flag1);
+#endif
ATF_TP_ADD_TC(tp, o_search_perm2);
+#ifdef USE_O_SEARCH
ATF_TP_ADD_TC(tp, o_search_root_flag2);
ATF_TP_ADD_TC(tp, o_search_unpriv_flag2);
+#endif
ATF_TP_ADD_TC(tp, o_search_notdir);
return atf_no_error();
diff -r 660c8bed4e78 lib/libc/sys/access.2
--- a/lib/libc/sys/access.2 Sat Jan 12 15:03:39 2013 -0500
+++ b/lib/libc/sys/access.2 Sat Jan 12 18:24:09 2013 -0500
@@ -107,11 +107,26 @@
The file descriptor
.Fa fd
must name a directory.
-Search permission is required on this directory except if
-.Fa fd
-was opened with the
-.Dv O_SEARCH
-flag.
+Search permission is required on this directory.
+.\" (These alternatives await a decision about the semantics of O_SEARCH)
+.\" Search permission is required on this directory, except if
+.\" .Fa fd
+.\" was opened with the
+.\" .Dv O_SEARCH
+.\" flag.
+.\" - or -
+.\" The directory referred to by
+.\" .Fa fd
+.\" must have been opened with the
+.\" .Dv O_SEARCH
+.\" flag.
+.\" - or -
+.\" The directory referred to by
+.\" .Fa fd
+.\" must have been opened with the
+.\" .Dv O_SEARCH
+.\" flag or must be searchable by the current process at the time the
+.\" call is made.
.Pp
The
.Fa flags
diff -r 660c8bed4e78 lib/libc/sys/chmod.2
--- a/lib/libc/sys/chmod.2 Sat Jan 12 15:03:39 2013 -0500
+++ b/lib/libc/sys/chmod.2 Sat Jan 12 18:24:09 2013 -0500
@@ -90,7 +90,18 @@
In that case, it is looked up from a directory whose file
descriptor was passed as
.Fa fd .
-Search permission is required on
+Search permission is required on this directory.
+.\" (These alternatives await a decision about the semantics of O_SEARCH)
+.\" Search permission is required on this directory
+.\" except if
+.\" .Fa fd
+.\" was opened with the
+.\" .Dv O_SEARCH
+.\" flag.
+.\" - or -
+.\" This file descriptor must have been opened with the
+.\" .Dv O_SEARCH
+.\" flag.
.Fa fd
except if that file descriptor was opened with the
.Dv O_SEARCH
diff -r 660c8bed4e78 lib/libc/sys/chown.2
--- a/lib/libc/sys/chown.2 Sat Jan 12 15:03:39 2013 -0500
+++ b/lib/libc/sys/chown.2 Sat Jan 12 18:24:09 2013 -0500
@@ -119,11 +119,18 @@
In that case, it is looked up from a directory whose file
descriptor was passed as
.Fa fd .
-Search permission is required on
-.Fa fd
-except if that file descriptor was opened with the
-.Dv O_SEARCH
-flag.
+Search permission is required on this directory.
+.\" (These alternatives await a decision about the semantics of O_SEARCH)
+.\" Search permission is required on this directory
+.\" except if
+.\" .Fa fd
+.\" was opened with the
+.\" .Dv O_SEARCH
+.\" flag.
+.\" - or -
+.\" This file descriptor must have been opened with the
+.\" .Dv O_SEARCH
+.\" flag.
.Fa fd
can be set to
.Dv AT_FDCWD
diff -r 660c8bed4e78 lib/libc/sys/link.2
--- a/lib/libc/sys/link.2 Sat Jan 12 15:03:39 2013 -0500
+++ b/lib/libc/sys/link.2 Sat Jan 12 18:24:09 2013 -0500
@@ -94,11 +94,26 @@
.Fa fd1
(resp.
.Fa fd2 ) .
-Search permission is required on
-passed directory file descriptors
-except if they were opened with the
-.Dv O_SEARCH
-flag.
+Search permission is required on the directories named by
+.Fa fd1
+and
+.Fa fd2.
+.\" (These alternatives await a decision about the semantics of O_SEARCH)
+.\" Search permission is required on the directories named by
+.\" .Fa fd1
+.\" and
+.\" .Fa fd2
+.\" unless they were opened with the
+.\" .Dv O_SEARCH
+.\" flag.
+.\" - or -
+.\" The directories named by
+.\" .Fa fd1
+.\" and
+.\" .Fa fd2
+.\" must have been opened with the
+.\" .Dv O_SEARCH
+.\" flag.
.Fa fd1
or
.Fa fd2
diff -r 660c8bed4e78 lib/libc/sys/mkdir.2
--- a/lib/libc/sys/mkdir.2 Sat Jan 12 15:03:39 2013 -0500
+++ b/lib/libc/sys/mkdir.2 Sat Jan 12 18:24:09 2013 -0500
@@ -62,11 +62,18 @@
In that case, it is looked up from a directory whose file
descriptor was passed as
.Fa fd .
-Search permission is required on
-.Fa fd
-except if that file descriptor was opened with the
-.Dv O_SEARCH
-flag.
+Search permission is required this directory.
+.\" (These alternatives await a decision about the semantics of O_SEARCH)
+.\" Search permission is required on this directory
+.\" except if
+.\" .Fa fd
+.\" was opened with the
+.\" .Dv O_SEARCH
+.\" flag.
+.\" - or -
+.\" This file descriptor must have been opened with the
+.\" .Dv O_SEARCH
+.\" flag.
.Fa fd
can be set to
.Dv AT_FDCWD
diff -r 660c8bed4e78 lib/libc/sys/mkfifo.2
--- a/lib/libc/sys/mkfifo.2 Sat Jan 12 15:03:39 2013 -0500
+++ b/lib/libc/sys/mkfifo.2 Sat Jan 12 18:24:09 2013 -0500
@@ -64,11 +64,18 @@
In that case, it is looked up from a directory whose file
descriptor was passed as
.Fa fd .
-Search permission is required on
-.Fa fd
-except if that file descriptor was opened with the
-.Dv O_SEARCH
-flag.
+Search permission is required on this directory.
+.\" (These alternatives await a decision about the semantics of O_SEARCH)
+.\" Search permission is required on this directory
+.\" except if
+.\" .Fa fd
+.\" was opened with the
+.\" .Dv O_SEARCH
+.\" flag.
+.\" - or -
+.\" This file descriptor must have been opened with the
+.\" .Dv O_SEARCH
+.\" flag.
.Fa fd
can be set to
.Dv AT_FDCWD
diff -r 660c8bed4e78 lib/libc/sys/mknod.2
--- a/lib/libc/sys/mknod.2 Sat Jan 12 15:03:39 2013 -0500
+++ b/lib/libc/sys/mknod.2 Sat Jan 12 18:24:09 2013 -0500
@@ -67,11 +67,18 @@
In that case, it is looked up from a directory whose file
descriptor was passed as
.Fa fd .
-Search permission is required on
-.Fa fd
-except if that file descriptor was opened with the
-.Dv O_SEARCH
-option.
+Search permission is required on this directory.
+.\" (These alternatives await a decision about the semantics of O_SEARCH)
+.\" Search permission is required on this directory
+.\" except if
+.\" .Fa fd
+.\" was opened with the
+.\" .Dv O_SEARCH
+.\" flag.
+.\" - or -
+.\" This file descriptor must have been opened with the
+.\" .Dv O_SEARCH
+.\" flag.
.Fa fd
can be set to
.Dv AT_FDCWD
diff -r 660c8bed4e78 lib/libc/sys/open.2
--- a/lib/libc/sys/open.2 Sat Jan 12 15:03:39 2013 -0500
+++ b/lib/libc/sys/open.2 Sat Jan 12 18:24:09 2013 -0500
@@ -62,11 +62,18 @@
In that case, it is looked up from a directory whose file
descriptor was passed as
.Fa fd .
-Search permission is required on
-.Fa fd
-except if that file descriptor was opened with the
-.Dv O_SEARCH
-option.
+Search permission is required on this directory.
+.\" (These alternatives await a decision about the semantics of O_SEARCH)
+.\" Search permission is required on this directory
+.\" except if
+.\" .Fa fd
+.\" was opened with the
+.\" .Dv O_SEARCH
+.\" flag.
+.\" - or -
+.\" This file descriptor must have been opened with the
+.\" .Dv O_SEARCH
+.\" flag.
.Fa fd
can be set to
.Dv AT_FDCWD
@@ -187,23 +194,24 @@
signal to be sent to the process group
when I/O is possible, e.g.,
upon availability of data to be read.
-.It Dv O_SEARCH
-If opening a directory, search permission checks will not be performed on
-subsequent usage of the file descriptor for looking up relative paths by
-.Xr faccessat 2 ,
-.Xr fchmodat 2 ,
-.Xr fchownat 2 ,
-.Xr fstatat 2 ,
-.Xr linkat 2 ,
-.Xr mkdirat 2 ,
-.Xr mkfifoat 2 ,
-.Xr mknodat 2 ,
-.Xr openat 2 ,
-.Xr readlinkat 2 ,
-.Xr symlinkat 2 ,
-.Xr unlinkat 2 ,
-and
-.Xr utimensat 2 .
+.\" (This block awaits a decision about the semantics of O_SEARCH)
+.\" .It Dv O_SEARCH
+.\" If opening a directory, search permission checks will not be performed on
+.\" subsequent usage of the file descriptor for looking up relative paths by
+.\" .Xr faccessat 2 ,
+.\" .Xr fchmodat 2 ,
+.\" .Xr fchownat 2 ,
+.\" .Xr fstatat 2 ,
+.\" .Xr linkat 2 ,
+.\" .Xr mkdirat 2 ,
+.\" .Xr mkfifoat 2 ,
+.\" .Xr mknodat 2 ,
+.\" .Xr openat 2 ,
+.\" .Xr readlinkat 2 ,
+.\" .Xr symlinkat 2 ,
+.\" .Xr unlinkat 2 ,
+.\" and
+.\" .Xr utimensat 2 .
.El
.Pp
Opening a file with
@@ -437,9 +445,10 @@
.Dv O_RSYNC
are extensions defined in
.St -p1003.1b-93 .
-.Dv O_SEARCH
-is defined in
-.St -p1003.1-2008 .
+.\" (This block awaits a decision about the semantics of O_SEARCH)
+.\" .Dv O_SEARCH
+.\" is defined in
+.\" .St -p1003.1-2008 .
.Pp
The
.Dv O_SHLOCK
diff -r 660c8bed4e78 lib/libc/sys/readlink.2
--- a/lib/libc/sys/readlink.2 Sat Jan 12 15:03:39 2013 -0500
+++ b/lib/libc/sys/readlink.2 Sat Jan 12 18:24:09 2013 -0500
@@ -68,11 +68,18 @@
In that case, it is looked up from a directory whose file
descriptor was passed as
.Fa fd .
-Search permission is required on
-.Fa fd
-except if that file descriptor was opened with the
-.Dv O_SEARCH
-flag.
+Search permission is required on this directory.
+.\" (These alternatives await a decision about the semantics of O_SEARCH)
+.\" Search permission is required on this directory
+.\" except if
+.\" .Fa fd
+.\" was opened with the
+.\" .Dv O_SEARCH
+.\" flag.
+.\" - or -
+.\" This file descriptor must have been opened with the
+.\" .Dv O_SEARCH
+.\" flag.
.Fa fd
can be set to
.Dv AT_FDCWD
diff -r 660c8bed4e78 lib/libc/sys/rename.2
--- a/lib/libc/sys/rename.2 Sat Jan 12 15:03:39 2013 -0500
+++ b/lib/libc/sys/rename.2 Sat Jan 12 18:24:09 2013 -0500
@@ -93,11 +93,26 @@
.Fa fromfd
(resp.
.Fa tofd ).
-Search permission is required on
-passed directory file descriptors
-except if they were opened with the
-.Dv O_SEARCH
-option.
+Search permission is required on the directories named by
+.Fa fromfd
+and
+.Fa tofd.
+.\" (These alternatives await a decision about the semantics of O_SEARCH)
+.\" Search permission is required on the directories named by
+.\" .Fa fromfd
+.\" and
+.\" .Fa tofd
+.\" unless they were opened with the
+.\" .Dv O_SEARCH
+.\" flag.
+.\" - or -
+.\" The directories named by
+.\" .Fa fromfd
+.\" and
+.\" .Fa tofd
+.\" must have been opened with the
+.\" .Dv O_SEARCH
+.\" flag.
.Fa fromfd
or
.Fa tofd
diff -r 660c8bed4e78 lib/libc/sys/stat.2
--- a/lib/libc/sys/stat.2 Sat Jan 12 15:03:39 2013 -0500
+++ b/lib/libc/sys/stat.2 Sat Jan 12 18:24:09 2013 -0500
@@ -91,11 +91,18 @@
In that case, it is looked up from a directory whose file
descriptor was passed as
.Fa fd .
-Search permission is required on
-.Fa fd
-except if that file descriptor was opened with the
-.Dv O_SEARCH
-option.
+Search permission is required on this directory.
+.\" (These alternatives await a decision about the semantics of O_SEARCH)
+.\" Search permission is required on this directory
+.\" except if
+.\" .Fa fd
+.\" was opened with the
+.\" .Dv O_SEARCH
+.\" flag.
+.\" - or -
+.\" This file descriptor must have been opened with the
+.\" .Dv O_SEARCH
+.\" flag.
.Fa fd
can be set to
.Dv AT_FDCWD
diff -r 660c8bed4e78 lib/libc/sys/symlink.2
--- a/lib/libc/sys/symlink.2 Sat Jan 12 15:03:39 2013 -0500
+++ b/lib/libc/sys/symlink.2 Sat Jan 12 18:24:09 2013 -0500
@@ -67,11 +67,18 @@
In that case, it is looked up from a directory whose file
descriptor was passed as
.Fa fd .
-Search permission is required on
-.Fa fd
-except if that file descriptor was opened with the
-.Dv O_SEARCH
-flag.
+Search permission is required on this directory.
+.\" (These alternatives await a decision about the semantics of O_SEARCH)
+.\" Search permission is required on this directory
+.\" except if
+.\" .Fa fd
+.\" was opened with the
+.\" .Dv O_SEARCH
+.\" flag.
+.\" - or -
+.\" This file descriptor must have been opened with the
+.\" .Dv O_SEARCH
+.\" flag.
.Fa fd
can be set to
.Dv AT_FDCWD
diff -r 660c8bed4e78 lib/libc/sys/unlink.2
--- a/lib/libc/sys/unlink.2 Sat Jan 12 15:03:39 2013 -0500
+++ b/lib/libc/sys/unlink.2 Sat Jan 12 18:24:09 2013 -0500
@@ -70,11 +70,18 @@
In that case, it is looked up from a directory whose file
descriptor was passed as
.Fa fd .
-Search permission is required on
-.Fa fd
-except if that file descriptor was opened with the
-.Dv O_SEARCH
-option.
+Search permission is required on this directory.
+.\" (These alternatives await a decision about the semantics of O_SEARCH)
+.\" Search permission is required on this directory
+.\" except if
+.\" .Fa fd
+.\" was opened with the
+.\" .Dv O_SEARCH
+.\" flag.
+.\" - or -
+.\" This file descriptor must have been opened with the
+.\" .Dv O_SEARCH
+.\" flag.
.Fa fd
can be set to
.Dv AT_FDCWD
diff -r 660c8bed4e78 lib/libc/sys/utimes.2
--- a/lib/libc/sys/utimes.2 Sat Jan 12 15:03:39 2013 -0500
+++ b/lib/libc/sys/utimes.2 Sat Jan 12 18:24:09 2013 -0500
@@ -129,11 +129,18 @@
In that case, it is looked up from a directory whose file
descriptor was passed as
.Fa fd .
-Search permission is required on
-.Fa fd
-except if that file descriptor was opened with the
-.Dv O_SEARCH
-option.
+Search permission is required on this directory.
+.\" (These alternatives await a decision about the semantics of O_SEARCH)
+.\" Search permission is required on this directory
+.\" except if
+.\" .Fa fd
+.\" was opened with the
+.\" .Dv O_SEARCH
+.\" flag.
+.\" - or -
+.\" This file descriptor must have been opened with the
+.\" .Dv O_SEARCH
+.\" flag.
.Fa fd
can be set to
.Dv AT_FDCWD
--
David A. Holland
dholland%netbsd.org@localhost
Home |
Main Index |
Thread Index |
Old Index