Module Name: src
Committed By: elad
Date: Wed Oct 7 01:31:41 UTC 2009
Modified Files:
src/sys/secmodel/suser: secmodel_suser.c
Log Message:
Extract usermount policy to its own routine.
To generate a diff of this commit:
cvs rdiff -u -r1.29 -r1.30 src/sys/secmodel/suser/secmodel_suser.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/secmodel/suser/secmodel_suser.c
diff -u src/sys/secmodel/suser/secmodel_suser.c:1.29 src/sys/secmodel/suser/secmodel_suser.c:1.30
--- src/sys/secmodel/suser/secmodel_suser.c:1.29 Tue Oct 6 21:07:06 2009
+++ src/sys/secmodel/suser/secmodel_suser.c Wed Oct 7 01:31:41 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: secmodel_suser.c,v 1.29 2009/10/06 21:07:06 elad Exp $ */
+/* $NetBSD: secmodel_suser.c,v 1.30 2009/10/07 01:31:41 elad Exp $ */
/*-
* Copyright (c) 2006 Elad Efrat <[email protected]>
* All rights reserved.
@@ -38,7 +38,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: secmodel_suser.c,v 1.29 2009/10/06 21:07:06 elad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: secmodel_suser.c,v 1.30 2009/10/07 01:31:41 elad Exp $");
#include <sys/types.h>
#include <sys/param.h>
@@ -252,6 +252,64 @@
return (result);
}
+static int
+suser_usermount_policy(kauth_cred_t cred, enum kauth_system_req req, void *arg1,
+ void *arg2)
+{
+ struct mount *mp;
+ u_long flags;
+ int result;
+
+ result = KAUTH_RESULT_DEFER;
+
+ if (!dovfsusermount)
+ return result;
+
+ switch (req) {
+ case KAUTH_REQ_SYSTEM_MOUNT_NEW:
+ mp = ((struct vnode *)arg1)->v_mount;
+ flags= (u_long)arg2;
+
+ if (usermount_common_policy(mp, flags) != 0)
+ break;
+
+ result = KAUTH_RESULT_ALLOW;
+
+ break;
+
+ case KAUTH_REQ_SYSTEM_MOUNT_UNMOUNT:
+ mp = arg1;
+
+ /* Must own the mount. */
+ if (mp->mnt_stat.f_owner != kauth_cred_geteuid(cred))
+ break;
+
+ result = KAUTH_RESULT_ALLOW;
+
+ break;
+
+ case KAUTH_REQ_SYSTEM_MOUNT_UPDATE:
+ mp = arg1;
+ flags = (u_long)arg2;
+
+ /* Must own the mount. */
+ if (mp->mnt_stat.f_owner != kauth_cred_geteuid(cred))
+ break;
+
+ if (usermount_common_policy(mp, flags) != 0)
+ break;
+
+ result = KAUTH_RESULT_ALLOW;
+
+ break;
+
+ default:
+ break;
+ }
+
+ return result;
+}
+
/*
* kauth(9) listener
*
@@ -312,69 +370,17 @@
break;
- case KAUTH_REQ_SYSTEM_MOUNT_NEW: {
- struct mount *mp = ((struct vnode *)arg1)->v_mount;
- u_long flags = (u_long)arg2;
-
+ case KAUTH_REQ_SYSTEM_MOUNT_NEW:
+ case KAUTH_REQ_SYSTEM_MOUNT_UNMOUNT:
+ case KAUTH_REQ_SYSTEM_MOUNT_UPDATE:
if (isroot) {
result = KAUTH_RESULT_ALLOW;
break;
}
- if (!dovfsusermount)
- break;
-
- if (usermount_common_policy(mp, flags) != 0)
- break;
-
- result = KAUTH_RESULT_ALLOW;
-
- break;
- }
-
- case KAUTH_REQ_SYSTEM_MOUNT_UNMOUNT: {
- struct mount *mp = arg1;
-
- if (isroot) {
- result = KAUTH_RESULT_ALLOW;
- break;
- }
-
- if (!dovfsusermount)
- break;
-
- /* Must own the mount. */
- if (mp->mnt_stat.f_owner != kauth_cred_geteuid(cred))
- break;
-
- result = KAUTH_RESULT_ALLOW;
+ result = suser_usermount_policy(cred, req, arg1, arg2);
break;
- }
-
- case KAUTH_REQ_SYSTEM_MOUNT_UPDATE: {
- struct mount *mp = arg1;
- u_long flags = (u_long)arg2;
-
- if (isroot) {
- result = KAUTH_RESULT_ALLOW;
- break;
- }
-
- if (!dovfsusermount)
- break;
-
- /* Must own the mount. */
- if (mp->mnt_stat.f_owner != kauth_cred_geteuid(cred))
- break;
-
- if (usermount_common_policy(mp, flags) != 0)
- break;
-
- result = KAUTH_RESULT_ALLOW;
-
- break;
- }
default:
break;