|
|
1.1 root 1: /*
2: * $Source: /usr/src/kerberosIV/krb/RCS/cr_err_reply.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_cr_err_reply_c =
14: "$Header: /usr/src/kerberosIV/krb/RCS/cr_err_reply.c,v 4.11 90/06/25 20:55:11 kfall Exp $";
15: #endif /* lint */
16:
17: #include <mit-copyright.h>
18: #include <sys/types.h>
19: #include <des.h>
20: #include <krb.h>
21: #include <prot.h>
22: #include <strings.h>
23:
24: extern int req_act_vno; /* this is defined in the kerberos
25: * server code */
26:
27: /*
28: * This routine is used by the Kerberos authentication server to
29: * create an error reply packet to send back to its client.
30: *
31: * It takes a pointer to the packet to be built, the name, instance,
32: * and realm of the principal, the client's timestamp, an error code
33: * and an error string as arguments. Its return value is undefined.
34: *
35: * The packet is built in the following format:
36: *
37: * type variable data
38: * or constant
39: * ---- ----------- ----
40: *
41: * unsigned char req_ack_vno protocol version number
42: *
43: * unsigned char AUTH_MSG_ERR_REPLY protocol message type
44: *
45: * [least significant HOST_BYTE_ORDER sender's (server's) byte
46: * bit of above field] order
47: *
48: * string pname principal's name
49: *
50: * string pinst principal's instance
51: *
52: * string prealm principal's realm
53: *
54: * unsigned long time_ws client's timestamp
55: *
56: * unsigned long e error code
57: *
58: * string e_string error text
59: */
60:
61: void
62: cr_err_reply(pkt,pname,pinst,prealm,time_ws,e,e_string)
63: KTEXT pkt;
64: char *pname; /* Principal's name */
65: char *pinst; /* Principal's instance */
66: char *prealm; /* Principal's authentication domain */
67: u_long time_ws; /* Workstation time */
68: u_long e; /* Error code */
69: char *e_string; /* Text of error */
70: {
71: u_char *v = (u_char *) pkt->dat; /* Prot vers number */
72: u_char *t = (u_char *)(pkt->dat+1); /* Prot message type */
73:
74: /* Create fixed part of packet */
75: *v = (unsigned char) req_act_vno; /* KRB_PROT_VERSION; */
76: *t = (unsigned char) AUTH_MSG_ERR_REPLY;
77: *t |= HOST_BYTE_ORDER;
78:
79: /* Add the basic info */
80: (void) strcpy((char *) (pkt->dat+2),pname);
81: pkt->length = 3 + strlen(pname);
82: (void) strcpy((char *)(pkt->dat+pkt->length),pinst);
83: pkt->length += 1 + strlen(pinst);
84: (void) strcpy((char *)(pkt->dat+pkt->length),prealm);
85: pkt->length += 1 + strlen(prealm);
86: /* ws timestamp */
87: bcopy((char *) &time_ws,(char *)(pkt->dat+pkt->length),4);
88: pkt->length += 4;
89: /* err code */
90: bcopy((char *) &e,(char *)(pkt->dat+pkt->length),4);
91: pkt->length += 4;
92: /* err text */
93: (void) strcpy((char *)(pkt->dat+pkt->length),e_string);
94: pkt->length += 1 + strlen(e_string);
95:
96: /* And return */
97: return;
98: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.