tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
enum vtype forward reference
Hi,
C99 section 6.7.2.3 (Tags) Note 3 states that:
A type specifier of the form
enum identifier
without an enumerator list shall only appear after the type it specifies
is complete.
but the changes to "sys/sys/kauth.h" last year introduced an forward
declaration of "enum vtype;" which goes against that, since enum vtype is
properly defined in <sys/vnode.h>. This causes a problem with pcc, which
is being strict about it, and fixing this is a little problematic..
Initially I thought just including <sys/vnode.h> from "sys/sys/kauth.h"
would be enough, but this introduces an include-file loop, so I am not
sure how best to fix this, there are a few options I can think of
1. remove the "enum vtype" declaration to its own file, and include
it directly to avoid the loop. this is too invasive, I think, and it is
adding cruft to everywhere kauth is used (a lot, in the kernel)
2. replace the kauth_access_action() function which requires this
forward declaration with a macro which doesn't require any such
declaration, since it is only then used in files which include the
<sys/vnode.h> file with the definition.
3. change the kauth_access_action() function to accept a struct vnode *
instead; and have it find the vtype internally. This looks ok except
for a couple of usages (nfs and hfs) which are providing the type
from a vattr -- however, that has just been collected from the vnode
directly, so perhaps the v_type can be used directly?
any preferences, or other ideas?
I think option 2 is cleanest, patch is attached (though I would also
s/kauth_access_action/KAUTH_ACCESS_ACTION/ throughout, to follow usual
macro naming conventions)
regards,
iain
Index: sys/kern/kern_auth.c
===================================================================
RCS file: /cvsroot/src/sys/kern/kern_auth.c,v
retrieving revision 1.71
diff -u -p -r1.71 kern_auth.c
--- sys/kern/kern_auth.c 27 Jun 2012 12:28:28 -0000 1.71
+++ sys/kern/kern_auth.c 23 Sep 2012 11:20:38 -0000
@@ -1079,17 +1079,6 @@ kauth_mode_to_action(mode_t mode)
}
kauth_action_t
-kauth_access_action(mode_t access_mode, enum vtype vn_type, mode_t file_mode)
-{
- kauth_action_t action = kauth_mode_to_action(access_mode);
-
- if (FS_OBJECT_CAN_EXEC(vn_type, file_mode))
- action |= KAUTH_VNODE_IS_EXEC;
-
- return action;
-}
-
-kauth_action_t
kauth_extattr_action(mode_t access_mode)
{
kauth_action_t action = 0;
Index: sys/sys/kauth.h
===================================================================
RCS file: /cvsroot/src/sys/sys/kauth.h,v
retrieving revision 1.70
diff -u -p -r1.70 kauth.h
--- sys/sys/kauth.h 27 Jun 2012 12:28:28 -0000 1.70
+++ sys/sys/kauth.h 23 Sep 2012 11:20:43 -0000
@@ -45,7 +45,6 @@ struct proc;
struct tty;
struct vnode;
struct cwdinfo;
-enum vtype;
/* Types. */
typedef struct kauth_scope *kauth_scope_t;
@@ -483,9 +482,12 @@ void kauth_cred_toucred(kauth_cred_t, st
void kauth_cred_topcred(kauth_cred_t, struct ki_pcred *);
kauth_action_t kauth_mode_to_action(mode_t);
-kauth_action_t kauth_access_action(mode_t, enum vtype, mode_t);
kauth_action_t kauth_extattr_action(mode_t);
+#define kauth_access_action(access_mode, vn_vtype, file_mode) \
+ (kauth_mode_to_action(access_mode) | \
+ (FS_OBJECT_CAN_EXEC(vn_vtype, file_mode) ? KAUTH_VNODE_IS_EXEC : 0))
+
kauth_cred_t kauth_cred_get(void);
void kauth_proc_fork(struct proc *, struct proc *);
Home |
Main Index |
Thread Index |
Old Index