Linux: fix aklog -setpag to work with ktc_SetTokenEx
authorMarc Dionne <marc.c.dionne@gmail.com>
Wed, 13 Oct 2010 01:05:45 +0000 (21:05 -0400)
committerDerrick Brashear <shadow@dementia.org>
Thu, 14 Oct 2010 03:33:38 +0000 (20:33 -0700)
The bit of code that allows aklog -setpag to work with recent
linux needed to be moved along with the change from ktc_SetToken
to ktc_SetTokenEx.

While we're in this bit of code, make it depend on the definition
of the syscall in the user space headers instead of relying on a
kernel configure test.

Change-Id: I0e556b514986b5d06daabcff67ecd51b0e4becdd
Reviewed-on: http://gerrit.openafs.org/2976
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Tested-by: Derrick Brashear <shadow@dementia.org>

acinclude.m4
src/auth/ktc.c
src/cf/linux-test4.m4

index 25a013e..70b27fd 100644 (file)
@@ -886,7 +886,6 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*)
                 LINUX_POSIX_TEST_LOCK_CONFLICT_ARG
                 LINUX_KERNEL_SOCK_CREATE
                 LINUX_EXPORTS_KEY_TYPE_KEYRING
-                LINUX_KEYS_HAVE_SESSION_TO_PARENT
                 LINUX_NEED_RHCONFIG
                 LINUX_RECALC_SIGPENDING_ARG_TYPE
                 LINUX_EXPORTS_TASKLIST_LOCK
index 3478a00..a4ee597 100644 (file)
 
 #include "token.h"
 
-#if defined(LINUX_KEYRING_SUPPORT) && defined(HAVE_SESSION_TO_PARENT)
+#if defined(AFS_LINUX26_ENV)
 #include <sys/syscall.h>
+#if defined(SYS_keyctl)
+/* Open code this value to avoid a dependency on keyutils */
 #define KEYCTL_SESSION_TO_PARENT        18
 #endif
+#endif
 
 /* For malloc() */
 #include <stdlib.h>
@@ -310,14 +313,6 @@ SetToken(struct ktc_principal *aserver, struct ktc_token *atoken,
     }
 #else /* NO_AFS_CLIENT */
     code = PIOCTL(0, VIOCSETTOK, &iob, 0);
-#if defined(LINUX_KEYRING_SUPPORT) && defined(HAVE_SESSION_TO_PARENT)
-    /*
-     * If we're using keyring based PAGs and the SESSION_TO_PARENT keyctl
-     * is available, use it to copy the session keyring to the parent process
-     */
-    if (flags & AFS_SETTOK_SETPAG)
-       syscall(SYS_keyctl, KEYCTL_SESSION_TO_PARENT);
-#endif
 #endif /* NO_AFS_CLIENT */
     if (code)
        return KTC_PIOCTLFAIL;
@@ -383,6 +378,15 @@ ktc_SetTokenEx(struct ktc_setTokenData *token) {
 
     if (code)
        return KTC_PIOCTLFAIL;
+#if defined(AFS_LINUX26_ENV) && defined(SYS_keyctl)
+    else
+       /*
+        * If we're using keyring based PAGs and the SESSION_TO_PARENT keyctl
+        * is available, use it to copy the session keyring to the parent process
+        */
+       if (token->flags & AFS_SETTOK_SETPAG)
+           syscall(SYS_keyctl, KEYCTL_SESSION_TO_PARENT);
+#endif
 
     return 0;
 }
index 2a198aa..424bedf 100644 (file)
@@ -528,16 +528,6 @@ AC_DEFUN([LINUX_EXPORTS_KEY_TYPE_KEYRING], [
 ])
 
 
-AC_DEFUN([LINUX_KEYS_HAVE_SESSION_TO_PARENT], [
-  AC_CHECK_LINUX_BUILD([for KEYCTL_SESSION_TO_PARENT],
-                      [ac_cv_linux_have_session_to_parent],
-                      [#include <linux/keyctl.h>],
-                      [int i = KEYCTL_SESSION_TO_PARENT;],
-                      [HAVE_SESSION_TO_PARENT],
-                      [define if keyctl has the KEYCTL_SESSION_TO_PARENT function])
-])
-
-
 AC_DEFUN([LINUX_HAVE_TRY_TO_FREEZE], [
   AC_CHECK_LINUX_BUILD([for try_to_freeze],
                       [ac_cv_linux_have_try_to_freeze],