On Fri, 28 Dec 2012 14:20:17 -0500 Andrew Deason <adea...@sinenomine.net> wrote:
> From what I recall, the code relies heavily on aliasing that gcc warns > about (that is, casting pointers to different structures) and does some > strange things with pointer bits. While the warnings themselves don't > necessarily mean that the code is 'bad', getting rid of the warnings > properly would probably involve the desired improvements. I can't comment about that part of the code but quite a bit of the supergroups code could benefit from refactoring. this does make maintaining the code a bit of a concern since changes to the non-supergroups portion of the code wouldnt always fix a bit in the supergroups code. example below. IsAMemberOf() is really IsAMemberOfSG() with depth=1 but the supergroup code is a copy of IsAMemberOf() with supergroups patches. diff --git a/src/ptserver/utils.c b/src/ptserver/utils.c index 732f585..d8760b8 100644 --- a/src/ptserver/utils.c +++ b/src/ptserver/utils.c @@ -19,11 +19,9 @@ #include "ptserver.h" #include "pterror.h" -#if defined(SUPERGROUPS) extern afs_int32 depthsg; afs_int32 IsAMemberOfSG(struct ubik_trans *at, afs_int32 aid, afs_int32 gid, afs_int32 depth); -#endif static afs_int32 IDHash(afs_int32 x) @@ -801,6 +799,7 @@ OwnerOf(struct ubik_trans *at, afs_int32 gid) } +#ifdef notdef afs_int32 IsAMemberOf(struct ubik_trans *at, afs_int32 aid, afs_int32 gid) { @@ -860,9 +859,18 @@ IsAMemberOf(struct ubik_trans *at, afs_int32 aid, afs_int32 gid) return 0; /* actually, should never get here */ #endif } +#endif - +afs_int32 +IsAMemberOf(struct ubik_trans *at, afs_int32 aid, afs_int32 gid) +{ #if defined(SUPERGROUPS) + return IsAMemberOfSG(at, aid, gid, depthsg); +#else + return IsAMemberOfSG(at, aid, gid, 1); +#endif +} + afs_int32 IsAMemberOfSG(struct ubik_trans *at, afs_int32 aid, afs_int32 gid, afs_int32 depth) { @@ -875,6 +883,18 @@ IsAMemberOfSG(struct ubik_trans *at, afs_int32 aid, afs_int32 gid, afs_int32 dep if (depth < 1) return 0; + + /* special case anyuser and authuser */ + if (gid == ANYUSERID) + return 1; + if (gid == AUTHUSERID && aid != ANONYMOUSID) + return 1; + /* check -localauth case */ + if (gid == SYSADMINID && aid == SYSADMINID) + return 1; + if ((gid == 0) || (aid == 0)) + return 0; + loc = FindByID(at, gid); if (!loc) return 0; @@ -890,10 +910,12 @@ IsAMemberOfSG(struct ubik_trans *at, afs_int32 aid, afs_int32 gid, afs_int32 dep return 0; if (gid == aid) return 1; +/* if (gid == ANYUSERID) return 1; if (gid == AUTHUSERID && aid != ANONYMOUSID) return 1; +*/ if (gid < 0) { #ifndef AFS_PTHREAD_ENV IOMGR_Poll(); @@ -915,10 +937,12 @@ IsAMemberOfSG(struct ubik_trans *at, afs_int32 aid, afs_int32 gid, afs_int32 dep return 0; if (gid == aid) return 1; +/* if (gid == ANYUSERID) return 1; if (gid == AUTHUSERID && aid != ANONYMOUSID) return 1; +*/ if (gid < 0) { #ifndef AFS_PTHREAD_ENV IOMGR_Poll(); @@ -932,4 +956,3 @@ IsAMemberOfSG(struct ubik_trans *at, afs_int32 aid, afs_int32 gid, afs_int32 dep } return 0; /* actually, should never get here */ } -#endif /* SUPERGROUPS */ _______________________________________________ OpenAFS-devel mailing list OpenAFS-devel@openafs.org https://lists.openafs.org/mailman/listinfo/openafs-devel