summaryrefslogtreecommitdiffstats
path: root/crypto/kerberosIV/lib/krb/ticket_memory.c
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/kerberosIV/lib/krb/ticket_memory.c')
-rw-r--r--crypto/kerberosIV/lib/krb/ticket_memory.c86
1 files changed, 44 insertions, 42 deletions
diff --git a/crypto/kerberosIV/lib/krb/ticket_memory.c b/crypto/kerberosIV/lib/krb/ticket_memory.c
index 04e20b6..d1fab2e 100644
--- a/crypto/kerberosIV/lib/krb/ticket_memory.c
+++ b/crypto/kerberosIV/lib/krb/ticket_memory.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 1996, 1997 Kungliga Tekniska Högskolan
+ * Copyright (c) 1995, 1996, 1997, 1998 Kungliga Tekniska Högskolan
* (Royal Institute of Technology, Stockholm, Sweden).
* All rights reserved.
*
@@ -45,7 +45,7 @@
#include "krb_locl.h"
#include "ticket_memory.h"
-RCSID("$Id: ticket_memory.c,v 1.9 1997/04/20 18:07:36 assar Exp $");
+RCSID("$Id: ticket_memory.c,v 1.13 1998/08/23 18:07:41 assar Exp $");
void msg(char *text, int error);
@@ -55,40 +55,36 @@ tktmem *SharedMemory;
static int CredIndex = -1;
+void PostUpdateMessage(void);
+
int
newTktMem(const char *tf_name)
{
- if(!SharedMemory)
- {
- unsigned int MemorySize = sizeof(tktmem);
- unsigned int MemorySizeHi = sizeof(tktmem)>>16;
- unsigned int MemorySizeLo = MemorySize&0xFFFF;
- SharedMemoryHandle = CreateFileMapping((HANDLE)(int)-1, 0,
+ if(!SharedMemory){
+ SharedMemoryHandle = CreateFileMapping((HANDLE)-1, 0,
PAGE_READWRITE,
- MemorySizeHi, MemorySizeLo,
+ sizeof(tktmem) >> 16,
+ sizeof(tktmem) & 0xffff,
"krb_memory");
-
- if(!SharedMemoryHandle)
- {
+
+ if(!SharedMemoryHandle){
msg("Could not create shared memory.", GetLastError());
return KFAILURE;
}
SharedMemory = MapViewOfFile(SharedMemoryHandle,
FILE_MAP_WRITE, 0, 0, 0);
- if(!SharedMemory)
- {
+ if(!SharedMemory){
msg("Unable to alloc shared memory.", GetLastError());
return KFAILURE;
}
- if(GetLastError() != ERROR_ALREADY_EXISTS)
- {
+ if(GetLastError() != ERROR_ALREADY_EXISTS) {
+ memset(SharedMemory, 0, sizeof(*SharedMemory));
if(tf_name)
- strcpy(SharedMemory->tmname, tf_name);
- SharedMemory->last_cred_no = 0;
+ strcpy_truncate(SharedMemory->tmname,
+ tf_name, sizeof(SharedMemory->tmname));
}
}
-
CredIndex = 0;
return KSUCCESS;
}
@@ -96,8 +92,7 @@ newTktMem(const char *tf_name)
int
freeTktMem(const char *tf_name)
{
- if(SharedMemory)
- {
+ if(SharedMemory) {
UnmapViewOfFile(SharedMemory);
CloseHandle(SharedMemoryHandle);
}
@@ -184,9 +179,8 @@ in_tkt(char *pname, char *pinst)
int
dest_tkt(void)
{
- /* Here goes code to destroy tickets in shared memory. */
- /* Not implemented yet. */
- return KFAILURE;
+ memset(getTktMem(0), 0, sizeof(tktmem));
+ return 0;
}
/* Short description of routines:
@@ -265,9 +259,9 @@ tf_get_pname(char *p)
if(!(TktStore = getTktMem(0)))
return KFAILURE;
- if(!TktStore->pname)
+ if(!TktStore->pname[0])
return KFAILURE;
- strcpy(p, TktStore->pname);
+ strcpy_truncate(p, TktStore->pname, ANAME_SZ);
return KSUCCESS;
}
@@ -283,9 +277,7 @@ tf_put_pname(char *p)
if(!(TktStore = getTktMem(0)))
return KFAILURE;
- if(!TktStore->pname)
- return KFAILURE;
- strcpy(TktStore->pname, p);
+ strcpy_truncate(TktStore->pname, p, sizeof(TktStore->pname));
return KSUCCESS;
}
@@ -306,9 +298,7 @@ tf_get_pinst(char *inst)
if(!(TktStore = getTktMem(0)))
return KFAILURE;
- if(!TktStore->pinst)
- return KFAILURE;
- strcpy(inst, TktStore->pinst);
+ strcpy_truncate(inst, TktStore->pinst, INST_SZ);
return KSUCCESS;
}
@@ -324,9 +314,7 @@ tf_put_pinst(char *inst)
if(!(TktStore = getTktMem(0)))
return KFAILURE;
- if(!TktStore->pinst)
- return KFAILURE;
- strcpy(TktStore->pinst, inst);
+ strcpy_truncate(TktStore->pinst, inst, sizeof(TktStore->pinst));
return KSUCCESS;
}
@@ -350,10 +338,11 @@ tf_get_cred(CREDENTIALS *c)
if(!(TktStore = getTktMem(0)))
return KFAILURE;
+ krb_set_kdc_time_diff(TktStore->kdc_diff);
if((index = nextCredIndex()) == -1)
return EOF;
if(!(cred = TktStore->cred_vec+index))
- return KFAILURE;
+ return KFAILURE;
if(!c)
return KFAILURE;
memcpy(c, cred, sizeof(*c));
@@ -402,20 +391,31 @@ tf_save_cred(char *service, /* Service name */
if(last == -1)
return KFAILURE;
cred = mem->cred_vec+last;
- strcpy(cred->service, service);
- strcpy(cred->instance, instance);
- strcpy(cred->realm, realm);
- strcpy(cred->session, session);
+ strcpy_truncate(cred->service, service, sizeof(cred->service));
+ strcpy_truncate(cred->instance, instance, sizeof(cred->instance));
+ strcpy_truncate(cred->realm, realm, sizeof(cred->realm));
+ memcpy(cred->session, session, sizeof(cred->session));
cred->lifetime = lifetime;
cred->kvno = kvno;
memcpy(&(cred->ticket_st), ticket, sizeof(*ticket));
cred->issue_date = issue_date;
- strcpy(cred->pname, mem->pname);
- strcpy(cred->pinst, mem->pinst);
+ strcpy_truncate(cred->pname, mem->pname, sizeof(cred->pname));
+ strcpy_truncate(cred->pinst, mem->pinst, sizeof(cred->pinst));
+ PostUpdateMessage();
return KSUCCESS;
}
+static void
+set_time_diff(time_t diff)
+{
+ tktmem *TktStore = getTktMem(0);
+ if(TktStore == NULL)
+ return;
+ TktStore->kdc_diff = diff;
+}
+
+
int
tf_setup(CREDENTIALS *cred, char *pname, char *pinst)
{
@@ -430,6 +430,8 @@ tf_setup(CREDENTIALS *cred, char *pname, char *pinst)
return INTK_ERR;
}
+ set_time_diff(krb_get_kdc_time_diff());
+
ret = tf_save_cred(cred->service, cred->instance, cred->realm,
cred->session, cred->lifetime, cred->kvno,
&cred->ticket_st, cred->issue_date);
OpenPOWER on IntegriCloud