authcon: Use ktc_GetTokenEx in ClientAuthToken
authorSimon Wilkinson <sxw@your-file-system.com>
Wed, 8 Sep 2010 07:12:41 +0000 (08:12 +0100)
committerDerrick Brashear <shadow@dementia.org>
Mon, 20 Sep 2010 06:49:20 +0000 (23:49 -0700)
Use ktc_GetTokenEx, and the related token utilities to check for a
users tokens, rather than using the legacy ktc_GetToken

Export the necessary symbols from libafsauthent on Windows to be able
to do this.

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

src/auth/authcon.c

index 55f0d6a..574c4d0 100644 (file)
@@ -29,6 +29,7 @@
 #include <rx/rx.h>
 #include "cellconfig.h"
 #include "keys.h"
+#include "ktc.h"
 #include "auth.h"
 
 /* return a null security object if nothing else can be done */
@@ -181,7 +182,7 @@ afsconf_ClientAuthToken(struct afsconf_cell *info,
                        afs_int32 *scIndex,
                        time_t *expires)
 {
-    struct ktc_principal sname;
+    struct ktc_setTokenData *tokenSet = NULL;
     struct ktc_token ttoken;
     int encryptLevel;
     afs_int32 code;
@@ -189,11 +190,11 @@ afsconf_ClientAuthToken(struct afsconf_cell *info,
     *sc = NULL;
     *scIndex = RX_SECIDX_NULL;
 
-    strcpy(sname.cell, info->name);
-    sname.instance[0] = 0;
-    strcpy(sname.name, "afs");
-    code = ktc_GetToken(&sname, &ttoken, sizeof(ttoken), NULL);
+    code = ktc_GetTokenEx(info->name, &tokenSet);
+    if (code)
+       goto out;
 
+    code = token_extractRxkad(tokenSet, &ttoken, NULL, NULL);
     if (code == 0) {
        /* XXX - We should think about how to handle this */
        if (ttoken.kvno < 0 || ttoken.kvno > 256) {
@@ -214,6 +215,10 @@ afsconf_ClientAuthToken(struct afsconf_cell *info,
        if (expires)
            *expires = ttoken.endTime;
     }
+
+out:
+    token_FreeSet(&tokenSet);
+
     if (*sc == NULL)
        return AFSCONF_NO_SECURITY_CLASS;