Fix PAGs for all platforms without Linux keyrings
authorSimon Wilkinson <sxw@inf.ed.ac.uk>
Sat, 19 Dec 2009 21:53:54 +0000 (21:53 +0000)
committerDerrick Brashear <shadow|account-1000005@unknown>
Sun, 20 Dec 2009 18:04:52 +0000 (10:04 -0800)
The changes in 7b272177de4c6f78db7f2315f4e30e85ab7660bb sadly break
all platforms which aren't Linux. This is because the logic in PagInCred
doesn't handle the non-Linux case at all. Fix this so that we call
afs_get_group_pag whenever we're not running on Linux.

The code also doesn't match the comment - Linux kernels which don't
have keyrings should use afs_get_group_pag(), regardless of whether
STRUCT_TASK_HAS_CRED. It's unlikely this bit would ever bite anyone
though, kernels with cred support almost certainly require keyrings.

Change-Id: I5373da51151229dc13b6dc60c3cf10700f0f881a
Reviewed-on: http://gerrit.openafs.org/1006
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Tested-by: Derrick Brashear <shadow@dementia.org>

src/afs/afs_osi_pag.c

index 4a8eb44..4db10a8 100644 (file)
@@ -609,6 +609,7 @@ PagInCred(afs_ucred_t *cred)
     if (cred == NULL || cred == afs_osi_credp) {
        return NOPAG;
     }
+#if defined(AFS_LINUX26_ENV) && defined(LINUX_KEYRING_SUPPORT)
     /*
      * If linux keyrings are in use and we carry the session keyring in our credentials
      * structure, they should be the only criteria for determining
@@ -617,12 +618,13 @@ PagInCred(afs_ucred_t *cred)
      * With keyrings but no kernel credentials, look at groups first and fall back
      * to looking at the keyrings.
      */
-#if defined(AFS_LINUX26_ENV) && !defined(STRUCT_TASK_HAS_CRED)
+# if !defined(STRUCT_TASK_HAS_CRED)
     pag = afs_get_group_pag(cred);
-#endif
-#if defined(AFS_LINUX26_ENV) && defined(LINUX_KEYRING_SUPPORT)
+# endif
     if (pag == NOPAG)
-        pag = osi_get_keyring_pag(cred);
+       pag = osi_get_keyring_pag(cred);
+#else
+    pag = afs_get_group_pag(cred);
 #endif
     return pag;
 }