svn commit: r184467 - head/sys/security/mac_bsdextended
Robert Watson
rwatson at FreeBSD.org
Thu Oct 30 03:13:53 PDT 2008
Author: rwatson
Date: Thu Oct 30 10:13:53 2008
New Revision: 184467
URL: http://svn.freebsd.org/changeset/base/184467
Log:
The V* flags passed using an accmode_t to the access() and open()
access control checks in mac_bsdextended are not in the same
namespace as the MBI_ flags used in ugidfw policies, so add an
explicit conversion routine to get from one to the other.
Obtained from: TrustedBSD Project
Modified:
head/sys/security/mac_bsdextended/mac_bsdextended.c
head/sys/security/mac_bsdextended/ugidfw_internal.h
head/sys/security/mac_bsdextended/ugidfw_vnode.c
Modified: head/sys/security/mac_bsdextended/mac_bsdextended.c
==============================================================================
--- head/sys/security/mac_bsdextended/mac_bsdextended.c Thu Oct 30 08:32:18 2008 (r184466)
+++ head/sys/security/mac_bsdextended/mac_bsdextended.c Thu Oct 30 10:13:53 2008 (r184467)
@@ -1,5 +1,5 @@
/*-
- * Copyright (c) 1999-2002, 2007 Robert N. M. Watson
+ * Copyright (c) 1999-2002, 2007-2008 Robert N. M. Watson
* Copyright (c) 2001-2005 Networks Associates Technology, Inc.
* Copyright (c) 2005 Tom Rhodes
* Copyright (c) 2006 SPARTA, Inc.
@@ -465,6 +465,27 @@ ugidfw_check_vp(struct ucred *cred, stru
return (ugidfw_check(cred, vp, &vap, acc_mode));
}
+int
+ugidfw_accmode2mbi(accmode_t accmode)
+{
+ int mbi;
+
+ mbi = 0;
+ if (accmode & VEXEC)
+ mbi |= MBI_EXEC;
+ if (accmode & VWRITE)
+ mbi |= MBI_WRITE;
+ if (accmode & VREAD)
+ mbi |= MBI_READ;
+ if (accmode & VADMIN)
+ mbi |= MBI_ADMIN;
+ if (accmode & VSTAT)
+ mbi |= MBI_STAT;
+ if (accmode & VAPPEND)
+ mbi |= MBI_APPEND;
+ return (mbi);
+}
+
static struct mac_policy_ops ugidfw_ops =
{
.mpo_destroy = ugidfw_destroy,
Modified: head/sys/security/mac_bsdextended/ugidfw_internal.h
==============================================================================
--- head/sys/security/mac_bsdextended/ugidfw_internal.h Thu Oct 30 08:32:18 2008 (r184466)
+++ head/sys/security/mac_bsdextended/ugidfw_internal.h Thu Oct 30 10:13:53 2008 (r184467)
@@ -34,6 +34,7 @@
/*
* Central access control routines used by object-specific checks.
*/
+int ugidfw_accmode2mbi(accmode_t accmode);
int ugidfw_check(struct ucred *cred, struct vnode *vp, struct vattr *vap,
int acc_mode);
int ugidfw_check_vp(struct ucred *cred, struct vnode *vp, int acc_mode);
Modified: head/sys/security/mac_bsdextended/ugidfw_vnode.c
==============================================================================
--- head/sys/security/mac_bsdextended/ugidfw_vnode.c Thu Oct 30 08:32:18 2008 (r184466)
+++ head/sys/security/mac_bsdextended/ugidfw_vnode.c Thu Oct 30 10:13:53 2008 (r184467)
@@ -1,5 +1,5 @@
/*-
- * Copyright (c) 1999-2002, 2007 Robert N. M. Watson
+ * Copyright (c) 1999-2002, 2007-2008 Robert N. M. Watson
* Copyright (c) 2001-2005 Networks Associates Technology, Inc.
* Copyright (c) 2005 Tom Rhodes
* Copyright (c) 2006 SPARTA, Inc.
@@ -65,11 +65,7 @@ ugidfw_vnode_check_access(struct ucred *
struct label *vplabel, accmode_t accmode)
{
- /*
- * XXX: We pass accmode_t variable containing V* constants
- * as an int containing MBI_* constants.
- */
- return (ugidfw_check_vp(cred, vp, (int)accmode));
+ return (ugidfw_check_vp(cred, vp, ugidfw_accmode2mbi(accmode)));
}
int
@@ -175,11 +171,7 @@ ugidfw_vnode_check_open(struct ucred *cr
struct label *vplabel, accmode_t accmode)
{
- /*
- * XXX: We pass accmode_t variable containing V* constants
- * as an int containing MBI_* constants.
- */
- return (ugidfw_check_vp(cred, vp, (int)accmode));
+ return (ugidfw_check_vp(cred, vp, ugidfw_accmode2mbi(accmode)));
}
int
More information about the svn-src-all
mailing list