PERFORCE change 40226 for review

Robert Watson rwatson at FreeBSD.org
Thu Oct 23 01:33:11 GMT 2003


http://perforce.freebsd.org/chv.cgi?CH=40226

Change 40226 by rwatson at rwatson_paprika on 2003/10/22 18:32:46

	Fix capability-related syntax, reformat to match original layout.
	Re-spell capability.h.  This now builds.

Affected files ...

.. //depot/projects/trustedbsd/sebsd/sys/gnu/ext2fs/ext2_vfsops.c#5 edit
.. //depot/projects/trustedbsd/sebsd/sys/gnu/ext2fs/ext2_vnops.c#5 edit

Differences ...

==== //depot/projects/trustedbsd/sebsd/sys/gnu/ext2fs/ext2_vfsops.c#5 (text+ko) ====

@@ -54,7 +54,7 @@
 #include <sys/malloc.h>
 #include <sys/stat.h>
 #include <sys/mutex.h>
-#include <sys/capabililty.h>
+#include <sys/capability.h>
 
 #include <gnu/ext2fs/ext2_mount.h>
 #include <gnu/ext2fs/inode.h>
@@ -234,7 +234,7 @@
 			 * If upgrade to read-write by non-root, then verify
 			 * that user has necessary permissions on the device.
 			 */
-			if (cap_check(td, CAP_MKNOD)) {
+			if (cap_check(td, CAP_MKNOD) != 0) {
 				vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY, td);
 				if ((error = VOP_ACCESS(devvp, VREAD | VWRITE,
 				    td->td_ucred, td)) != 0) {
@@ -291,7 +291,7 @@
 	 * If mount by non-root, then verify that user has necessary
 	 * permissions on the device.
 	 */
-	if (cap_check(td, CAP_MKNOD)) {
+	if (cap_check(td, CAP_MKNOD) != 0) {
 		accessmode = VREAD;
 		if ((mp->mnt_flag & MNT_RDONLY) == 0)
 			accessmode |= VWRITE;

==== //depot/projects/trustedbsd/sebsd/sys/gnu/ext2fs/ext2_vnops.c#5 (text+ko) ====

@@ -66,7 +66,7 @@
 #include <sys/event.h>
 #include <sys/conf.h>
 #include <sys/file.h>
-#include <sys/capabililty.h>
+#include <sys/capability.h>
 
 #include <vm/vm.h>
 #include <vm/vm_extern.h>
@@ -485,7 +485,8 @@
 		 * Privileged non-jail processes may not modify system flags
 		 * if securelevel > 0 and any existing system flags are set.
 		 */
-		if (!cap_check_cred(cred, NULL, CAP_SYS_SETFFLAG, PRISON_ROOT)) {
+		if (cap_check_cred(cred, NULL, CAP_SYS_SETFFLAG, PRISON_ROOT)
+		    == 0) {
 			if (ip->i_flags
 			    & (SF_NOUNLINK | SF_IMMUTABLE | SF_APPEND)) {
 				error = securelevel_gt(cred, 0);
@@ -599,15 +600,22 @@
 	 */
 	if ((error = VOP_ACCESS(vp, VADMIN, cred, td)))
 		return (error);
-	/* Privileged processes may set the sticky bit on non-directories */
-	if (vp->v_type != VDIR && (mode & S_ISTXT) && cap_check_cred(cred, NULL, CAP_SYS_RAWIO, 0))
-	  return (EFTYPE);
+	/*
+	 * Privileged processes may set the sticky bit on non-directories.
+	 */
+	if (vp->v_type != VDIR && (mode & S_ISTXT)) {
+		if (cap_check_cred(cred, NULL, CAP_SYS_RAWIO, 0) != 0)
+		    return (EFTYPE);
+	}
 
-	/* CAP_FSETID is required to set suid or sgid on non-owned files */
-	if (((!groupmember(ip->i_gid, cred) && (mode & ISGID)) ||
-	     ((mode & ISUID) && ip->i_uid != cred->cr_uid))
-	    && cap_check_cred (cred, NULL, CAP_FSETID, PRISON_ROOT))
-	  return (EPERM);
+	/*
+	 * CAP_FSETID is required to set suid or sgid on non-owned files.
+	 */
+	if (((mode & ISGID) && !groupmember(ip->i_gid, cred)) ||
+	     ((mode & ISUID) && ip->i_uid != cred->cr_uid)) {
+		if (cap_check_cred (cred, NULL, CAP_FSETID, PRISON_ROOT) != 0)
+			return (EPERM);
+	}
 
 	ip->i_mode &= ~ALLPERMS;
 	ip->i_mode |= (mode & ALLPERMS);
@@ -648,19 +656,25 @@
 	 * have privilege.
 	 */
 	if ((uid != ip->i_uid || 
-	    (gid != ip->i_gid && !groupmember(gid, cred))) &&
-	    (error = cap_check_cred(cred, NULL, CAP_FOWNER, PRISON_ROOT)))
-		return (error);
+	    (gid != ip->i_gid && !groupmember(gid, cred)))) {
+		error = cap_check_cred(cred, NULL, CAP_FOWNER, PRISON_ROOT);
+		if (error)
+			return (error);
+	}
 	ogid = ip->i_gid;
 	ouid = ip->i_uid;
 	ip->i_gid = gid;
 	ip->i_uid = uid;
 	ip->i_flag |= IN_CHANGE;
 
-	/* Processes without CAP_FSETID clear suid and sgid when owner/groups change */
-	if ((ouid != uid || ogid != gid) && (ip->i_mode & (ISUID | ISGID)) &&
-	    cap_check_cred (cred, NULL, CAP_FSETID, PRISON_ROOT))
-	  ip->i_mode &= ~(ISUID | ISGID);
+	/*
+	 * Processes without CAP_FSETID clear suid and sgid when owner/groups
+	 * change.
+	 */
+	if ((ouid != uid || ogid != gid) && (ip->i_mode & (ISUID | ISGID))) {
+		if (cap_check_cred (cred, NULL, CAP_FSETID, PRISON_ROOT) != 0)
+			ip->i_mode &= ~(ISUID | ISGID);
+	}
 	return (0);
 }
 
@@ -1832,9 +1846,11 @@
 	ip->i_mode = mode;
 	tvp->v_type = IFTOVT(mode);	/* Rest init'd in getnewvnode(). */
 	ip->i_nlink = 1;
-	if ((ip->i_mode & ISGID) && !groupmember(ip->i_gid, cnp->cn_cred) &&
-	    cap_check_cred(cnp->cn_cred, NULL, CAP_FSETOD, PRISON_ROOT))
-		ip->i_mode &= ~ISGID;
+	if ((ip->i_mode & ISGID) && !groupmember(ip->i_gid, cnp->cn_cred)) {
+		if (cap_check_cred(cnp->cn_cred, NULL, CAP_FSETID,
+		    PRISON_ROOT) != 0)
+			ip->i_mode &= ~ISGID;
+	}
 
 	if (cnp->cn_flags & ISWHITEOUT)
 		ip->i_flags |= UF_OPAQUE;
To Unsubscribe: send mail to majordomo at trustedbsd.org
with "unsubscribe trustedbsd-cvs" in the body of the message



More information about the trustedbsd-cvs mailing list