svn commit: r224660 - head/tools/regression/security/cap_test

Jonathan Anderson jonathan at FreeBSD.org
Fri Aug 5 17:43:12 UTC 2011


Author: jonathan
Date: Fri Aug  5 17:43:11 2011
New Revision: 224660
URL: http://svn.freebsd.org/changeset/base/224660

Log:
  Expect fchflags(2) to fail with EOPNOTSUPP on NFS.
  
  Even if we have CAP_FCHFLAGS, fchflags(2) fails on NFS. This is normal
  and expected, so don't fail the test because of it.
  
  Note that, whether or not we are on NFS, fchflags(2) should always fail
  with ENOTCAPABLE if we are using a capability that does not have the
  CAP_FCHFLAGS right.
  
  Approved by: re (kib), mentor (rwatson)
  Sponsored by: Google Inc

Modified:
  head/tools/regression/security/cap_test/cap_test_capabilities.c

Modified: head/tools/regression/security/cap_test/cap_test_capabilities.c
==============================================================================
--- head/tools/regression/security/cap_test/cap_test_capabilities.c	Fri Aug  5 17:33:12 2011	(r224659)
+++ head/tools/regression/security/cap_test/cap_test_capabilities.c	Fri Aug  5 17:43:11 2011	(r224660)
@@ -44,6 +44,7 @@ __FBSDID("$FreeBSD$");
 #include <fcntl.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <unistd.h>
 
 #include "cap_test.h"
@@ -102,9 +103,13 @@ try_file_ops(int fd, cap_rights_t rights
 	off_t off;
 	void *p;
 	char ch;
-	int ret;
+	int ret, is_nfs;
 	int success = PASSED;
 
+	REQUIRE(fstatfs(fd, &sf));
+	is_nfs = (strncmp("nfs", sf.f_fstypename, sizeof(sf.f_fstypename))
+	    == 0);
+
 	REQUIRE(fd_cap = cap_new(fd, rights));
 	REQUIRE(fd_capcap = cap_new(fd_cap, rights));
 	CHECK(fd_capcap != fd_cap);
@@ -126,8 +131,12 @@ try_file_ops(int fd, cap_rights_t rights
 	off = lseek(fd_cap, 0, SEEK_SET);
 	CHECK_RESULT(lseek, CAP_SEEK, off >= 0);
 
+	/*
+	 * Note: this is not expected to work over NFS.
+	 */
 	ret = fchflags(fd_cap, UF_NODUMP);
-	CHECK_RESULT(fchflags, CAP_FCHFLAGS, ret == 0);
+	CHECK_RESULT(fchflags, CAP_FCHFLAGS,
+	    (ret == 0) || (is_nfs && (errno == EOPNOTSUPP)));
 
 	ret = fstat(fd_cap, &sb);
 	CHECK_RESULT(fstat, CAP_FSTAT, ret == 0);


More information about the svn-src-all mailing list