summaryrefslogtreecommitdiffstats
path: root/crypto/heimdal/lib/kafs/afskrb.c
diff options
context:
space:
mode:
authornectar <nectar@FreeBSD.org>2003-10-09 19:36:20 +0000
committernectar <nectar@FreeBSD.org>2003-10-09 19:36:20 +0000
commit5c90662d441c12cd30c694eb1172d6fea2f8f282 (patch)
treecb08d962a1d1ff9fd191e67849a7057861f42a50 /crypto/heimdal/lib/kafs/afskrb.c
parent12eb3dee85137da9effa7d2df35e855dd0a3814a (diff)
downloadFreeBSD-src-5c90662d441c12cd30c694eb1172d6fea2f8f282.zip
FreeBSD-src-5c90662d441c12cd30c694eb1172d6fea2f8f282.tar.gz
Vendor import of Heimdal 0.6.
Diffstat (limited to 'crypto/heimdal/lib/kafs/afskrb.c')
-rw-r--r--crypto/heimdal/lib/kafs/afskrb.c54
1 files changed, 45 insertions, 9 deletions
diff --git a/crypto/heimdal/lib/kafs/afskrb.c b/crypto/heimdal/lib/kafs/afskrb.c
index 038a2ad..523a7b9 100644
--- a/crypto/heimdal/lib/kafs/afskrb.c
+++ b/crypto/heimdal/lib/kafs/afskrb.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995 - 2001 Kungliga Tekniska Högskolan
+ * Copyright (c) 1995 - 2001, 2003 Kungliga Tekniska Högskolan
* (Royal Institute of Technology, Stockholm, Sweden).
* All rights reserved.
*
@@ -33,7 +33,9 @@
#include "kafs_locl.h"
-RCSID("$Id: afskrb.c,v 1.15 2001/10/24 19:36:27 assar Exp $");
+RCSID("$Id: afskrb.c,v 1.17 2003/04/14 08:32:11 lha Exp $");
+
+#ifdef KRB4
struct krb_kafs_data {
const char *realm;
@@ -41,16 +43,19 @@ struct krb_kafs_data {
static int
get_cred(kafs_data *data, const char *name, const char *inst,
- const char *realm, CREDENTIALS *c)
+ const char *realm, uid_t uid, struct kafs_token *kt)
{
+ CREDENTIALS c;
KTEXT_ST tkt;
- int ret = krb_get_cred((char*)name, (char*)inst, (char*)realm, c);
+ int ret = krb_get_cred((char*)name, (char*)inst, (char*)realm, &c);
if (ret) {
ret = krb_mk_req(&tkt, (char*)name, (char*)inst, (char*)realm, 0);
if (ret == KSUCCESS)
- ret = krb_get_cred((char*)name, (char*)inst, (char*)realm, c);
+ ret = krb_get_cred((char*)name, (char*)inst, (char*)realm, &c);
}
+ if (ret == 0)
+ ret = _kafs_v4_to_kt(&c, uid, kt);
return ret;
}
@@ -62,11 +67,13 @@ afslog_uid_int(kafs_data *data,
const char *homedir)
{
int ret;
- CREDENTIALS c;
+ struct kafs_token kt;
char name[ANAME_SZ];
char inst[INST_SZ];
char realm[REALM_SZ];
+ kt.ticket = NULL;
+
if (cell == 0 || cell[0] == 0)
return _kafs_afslog_all_local_cells (data, uid, homedir);
@@ -75,10 +82,13 @@ afslog_uid_int(kafs_data *data,
if (ret != KSUCCESS)
return ret;
- ret = _kafs_get_cred(data, cell, realm_hint, realm, &c);
+ kt.ticket = NULL;
+ ret = _kafs_get_cred(data, cell, realm_hint, realm, uid, &kt);
- if (ret == 0)
- ret = kafs_settoken(cell, uid, &c);
+ if (ret == 0) {
+ ret = kafs_settoken_rxkad(cell, &kt.ct, kt.ticket, kt.ticket_len);
+ free(kt.ticket);
+ }
return ret;
}
@@ -98,6 +108,7 @@ krb_afslog_uid_home(const char *cell, const char *realm_hint, uid_t uid,
{
kafs_data kd;
+ kd.name = "krb4";
kd.afslog_uid = afslog_uid_int;
kd.get_cred = get_cred;
kd.get_realm = get_realm;
@@ -132,6 +143,31 @@ krb_realm_of_cell(const char *cell, char **realm)
{
kafs_data kd;
+ kd.name = "krb4";
kd.get_realm = get_realm;
return _kafs_realm_of_cell(&kd, cell, realm);
}
+
+int
+kafs_settoken(const char *cell, uid_t uid, CREDENTIALS *c)
+{
+ struct kafs_token kt;
+ int ret;
+
+ kt.ticket = NULL;
+
+ ret = _kafs_v4_to_kt(c, uid, &kt);
+ if (ret)
+ return ret;
+
+ if (kt.ct.EndTimestamp < time(NULL)) {
+ free(kt.ticket);
+ return 0;
+ }
+
+ ret = kafs_settoken_rxkad(cell, &kt.ct, kt.ticket, kt.ticket_len);
+ free(kt.ticket);
+ return ret;
+}
+
+#endif /* KRB4 */
OpenPOWER on IntegriCloud