[OpenAFS-win32-devel] [PATCH] support "instance" in client credentials GUI
Joe Buehler
jbuehler@hekimian.com
Wed, 05 May 2004 09:53:30 -0400
The below patch appears to fix the problem of not being able to authenticate with
a userid of (e.g.) "jhpb.admin". I don't think I am using kfw so that path needs
to be tested.
I know next to nothing about this -- the algorithm was lifted from klog.
--
Joe Buehler
Index: src/WINNT/client_creds/creds.cpp
===================================================================
RCS file: /cvs/openafs/src/WINNT/client_creds/creds.cpp,v
retrieving revision 1.5
diff -u -r1.5 creds.cpp
--- src/WINNT/client_creds/creds.cpp 20 Mar 2004 01:01:07 -0000 1.5
+++ src/WINNT/client_creds/creds.cpp 5 May 2004 13:51:25 -0000
@@ -43,6 +43,7 @@
typedef int (*ktc_ListTokens_t)(int cellNum, int *cellNumP, struct ktc_principal *serverName);
typedef int (*ktc_ForgetToken_t)(struct ktc_principal *server);
typedef int (*ka_UserAuthenticateGeneral_t)(int flags, char *name, char *instance, char *realm, char *password, int lifetime, int *password_expiresP, int spare, char **reasonP);
+ typedef int (*ka_ParseLoginName_t)(char *login, char *name, char *inst, char *cell);
typedef long (*cm_GetRootCellName_t)(char *namep);
}
@@ -58,6 +59,7 @@
ktc_ListTokens_t ktc_ListTokensP;
ktc_ForgetToken_t ktc_ForgetTokenP;
ka_UserAuthenticateGeneral_t ka_UserAuthenticateGeneralP;
+ ka_ParseLoginName_t ka_ParseLoginNameP;
cm_GetRootCellName_t cm_GetRootCellNameP;
} l;
@@ -68,6 +70,7 @@
#define ktc_ListTokens (*l.ktc_ListTokensP)
#define ktc_ForgetToken (*l.ktc_ForgetTokenP)
#define ka_UserAuthenticateGeneral (*l.ka_UserAuthenticateGeneralP)
+#define ka_ParseLoginName (*l.ka_ParseLoginNameP)
#define cm_GetRootCellName (*l.cm_GetRootCellNameP)
@@ -84,6 +87,7 @@
l.ktc_ListTokensP = (ktc_ListTokens_t)GetProcAddress (l.hInstLibTokens, "ktc_ListTokens");
l.ktc_ForgetTokenP = (ktc_ForgetToken_t)GetProcAddress (l.hInstLibTokens, "ktc_ForgetToken");
l.ka_UserAuthenticateGeneralP = (ka_UserAuthenticateGeneral_t)GetProcAddress (l.hInstLibTokens, "ka_UserAuthenticateGeneral");
+ l.ka_ParseLoginNameP = (ka_ParseLoginName_t)GetProcAddress (l.hInstLibTokens, "ka_ParseLoginName");
if (!l.initAFSDirPathP ||
!l.ka_InitP ||
@@ -91,7 +95,8 @@
!l.ktc_GetTokenP ||
!l.ktc_ListTokensP ||
!l.ktc_ForgetTokenP ||
- !l.ka_UserAuthenticateGeneralP)
+ !l.ka_UserAuthenticateGeneralP ||
+ !l.ka_ParseLoginNameP)
{
FreeLibrary (l.hInstLibTokens);
l.hInstLibTokens = NULL;
@@ -392,10 +397,18 @@
int Expiration = 0;
+ char name[sizeof(szNameA)];
+ char instance[sizeof(szNameA)];
+ char cell[sizeof(szNameA)];
+ name[0] = '\0';
+ instance[0] = '\0';
+ cell[0] = '\0';
+ ka_ParseLoginName(szNameA, name, instance, cell);
+
if ( KFW_is_available() )
- rc = KFW_AFS_get_cred(szNameA, NULL, szCellA, szPasswordA, 0, &Result);
+ rc = KFW_AFS_get_cred(name, instance, szCellA, szPasswordA, 0, &Result);
else
- rc = ka_UserAuthenticateGeneral(KA_USERAUTH_VERSION, szNameA, "", szCellA, szPasswordA, 0, &Expiration, 0, &Result);
+ rc = ka_UserAuthenticateGeneral(KA_USERAUTH_VERSION, name, instance, szCellA, szPasswordA, 0, &Expiration, 0, &Result);
}
if (!Silent && rc != 0)