|
|
1.1 ! root 1: /* ! 2: * $Source: /usr/src/kerberosIV/krb/RCS/add_ticket.c,v $ ! 3: * $Author: kfall $ ! 4: * ! 5: * Copyright 1985, 1986, 1987, 1988 by the Massachusetts Institute ! 6: * of Technology. ! 7: * ! 8: * For copying and distribution information, please see the file ! 9: * <mit-copyright.h>. ! 10: */ ! 11: ! 12: #ifndef lint ! 13: static char *rcsid_add_ticket_c = ! 14: "$Header: /usr/src/kerberosIV/krb/RCS/add_ticket.c,v 1.1 90/06/25 20:54:59 kfall Exp $"; ! 15: #endif /* lint */ ! 16: ! 17: #include <mit-copyright.h> ! 18: #include <krb.h> ! 19: #include <prot.h> ! 20: #include <strings.h> ! 21: ! 22: /* ! 23: * This routine is now obsolete. It used to be possible to request ! 24: * more than one ticket at a time from the authentication server, and ! 25: * it looks like this routine was used by the server to package the ! 26: * tickets to be returned to the client. ! 27: */ ! 28: ! 29: /* ! 30: * This routine adds a new ticket to the ciphertext to be returned to ! 31: * the client. The routine takes the ciphertext (which doesn't get ! 32: * encrypted till later), the number of the ticket (i.e. 1st, 2nd, ! 33: * etc) the session key which goes in the ticket and is sent back to ! 34: * the user, the lifetime for the ticket, the service name, the ! 35: * instance, the realm, the key version number, and the ticket itself. ! 36: * ! 37: * This routine returns 0 (KSUCCESS) on success, and 1 (KFAILURE) on ! 38: * failure. On failure, which occurs when there isn't enough room ! 39: * for the ticket, a 0 length ticket is added. ! 40: * ! 41: * Notes: This routine must be called with successive values of n. ! 42: * i.e. the ticket must be added in order. The corresponding routine ! 43: * on the client side is extract ticket. ! 44: */ ! 45: ! 46: /* XXX they aren't all used; to avoid incompatible changes we will ! 47: * fool lint for the moment */ ! 48: /*ARGSUSED */ ! 49: add_ticket(cipher,n,session,lifetime,sname,instance,realm,kvno,ticket) ! 50: KTEXT cipher; /* Ciphertext info for ticket */ ! 51: char *sname; /* Service name */ ! 52: char *instance; /* Instance */ ! 53: int n; /* Relative position of this ticket */ ! 54: char *session; /* Session key for this tkt */ ! 55: int lifetime; /* Lifetime of this ticket */ ! 56: char *realm; /* Realm in which ticket is valid */ ! 57: int kvno; /* Key version number of service key */ ! 58: KTEXT ticket; /* The ticket itself */ ! 59: { ! 60: ! 61: /* Note, the 42 is a temporary hack; it will have to be changed. */ ! 62: ! 63: /* Begin check of ticket length */ ! 64: if ((cipher->length + ticket->length + 4 + 42 + ! 65: (*(cipher->dat)+1-n)*(11+strlen(realm))) > ! 66: MAX_KTXT_LEN) { ! 67: bcopy(session,(char *)(cipher->dat+cipher->length),8); ! 68: *(cipher->dat+cipher->length+8) = (char) lifetime; ! 69: *(cipher->dat+cipher->length+9) = (char) kvno; ! 70: (void) strcpy((char *)(cipher->dat+cipher->length+10),realm); ! 71: cipher->length += 11 + strlen(realm); ! 72: *(cipher->dat+n) = 0; ! 73: return(KFAILURE); ! 74: } ! 75: /* End check of ticket length */ ! 76: ! 77: /* Add the session key, lifetime, kvno, ticket to the ciphertext */ ! 78: bcopy(session,(char *)(cipher->dat+cipher->length),8); ! 79: *(cipher->dat+cipher->length+8) = (char) lifetime; ! 80: *(cipher->dat+cipher->length+9) = (char) kvno; ! 81: (void) strcpy((char *)(cipher->dat+cipher->length+10),realm); ! 82: cipher->length += 11 + strlen(realm); ! 83: bcopy((char *)(ticket->dat),(char *)(cipher->dat+cipher->length), ! 84: ticket->length); ! 85: cipher->length += ticket->length; ! 86: ! 87: /* Set the ticket length at beginning of ciphertext */ ! 88: *(cipher->dat+n) = ticket->length; ! 89: return(KSUCCESS); ! 90: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.