freebsd-dev/eBones/kerberos/cr_err_reply.c
Geoff Rehmet 60643d379b Initial import of eBones.
(Including all changes for FreeBSD - importing the original eBones distribution
would be too complex at this stage, since I don't have access to Piero's 
CVS.)
(If you want to include eBones in your system, don't forget to include
MAKE_EBONES in /etc/make.conf.)
(This stuff is now also suppable from braae.ru.ac.za.)

Bones originally from MIT SIPB.
Original port to FreeBSD 1.x  by Piero Serini.
Moved to FreeBSD 2.0 by Doug Rabson and Geoff Rehmet.
Nice bug fixes from Doug Rabson.
1994-09-30 14:50:09 +00:00

96 lines
2.8 KiB
C

/*
* Copyright 1985, 1986, 1987, 1988 by the Massachusetts Institute
* of Technology.
* For copying and distribution information, please see the file
* <Copyright.MIT>.
*
* from: cr_err_reply.c,v 4.10 89/01/10 11:34:42 steiner Exp $
* $Id: cr_err_reply.c,v 1.1 1994/07/19 19:24:24 g89r4222 Exp $
*/
#ifndef lint
static char rcsid[] =
"$Id: cr_err_reply.c,v 1.1 1994/07/19 19:24:24 g89r4222 Exp $";
#endif /* lint */
#include <sys/types.h>
#include <krb.h>
#include <prot.h>
#include <strings.h>
extern int req_act_vno; /* this is defined in the kerberos
* server code */
/*
* This routine is used by the Kerberos authentication server to
* create an error reply packet to send back to its client.
*
* It takes a pointer to the packet to be built, the name, instance,
* and realm of the principal, the client's timestamp, an error code
* and an error string as arguments. Its return value is undefined.
*
* The packet is built in the following format:
*
* type variable data
* or constant
* ---- ----------- ----
*
* unsigned char req_ack_vno protocol version number
*
* unsigned char AUTH_MSG_ERR_REPLY protocol message type
*
* [least significant HOST_BYTE_ORDER sender's (server's) byte
* bit of above field] order
*
* string pname principal's name
*
* string pinst principal's instance
*
* string prealm principal's realm
*
* unsigned long time_ws client's timestamp
*
* unsigned long e error code
*
* string e_string error text
*/
void
cr_err_reply(pkt,pname,pinst,prealm,time_ws,e,e_string)
KTEXT pkt;
char *pname; /* Principal's name */
char *pinst; /* Principal's instance */
char *prealm; /* Principal's authentication domain */
u_long time_ws; /* Workstation time */
u_long e; /* Error code */
char *e_string; /* Text of error */
{
u_char *v = (u_char *) pkt->dat; /* Prot vers number */
u_char *t = (u_char *)(pkt->dat+1); /* Prot message type */
/* Create fixed part of packet */
*v = (unsigned char) req_act_vno; /* KRB_PROT_VERSION; */
*t = (unsigned char) AUTH_MSG_ERR_REPLY;
*t |= HOST_BYTE_ORDER;
/* Add the basic info */
(void) strcpy((char *) (pkt->dat+2),pname);
pkt->length = 3 + strlen(pname);
(void) strcpy((char *)(pkt->dat+pkt->length),pinst);
pkt->length += 1 + strlen(pinst);
(void) strcpy((char *)(pkt->dat+pkt->length),prealm);
pkt->length += 1 + strlen(prealm);
/* ws timestamp */
bcopy((char *) &time_ws,(char *)(pkt->dat+pkt->length),4);
pkt->length += 4;
/* err code */
bcopy((char *) &e,(char *)(pkt->dat+pkt->length),4);
pkt->length += 4;
/* err text */
(void) strcpy((char *)(pkt->dat+pkt->length),e_string);
pkt->length += 1 + strlen(e_string);
/* And return */
return;
}