freebsd-skq/eBones/krb/mk_err.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

64 lines
1.7 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: mk_err.c,v 4.4 88/11/15 16:33:36 jtkohl Exp $
* $Id: mk_err.c,v 1.2 1994/07/19 19:25:54 g89r4222 Exp $
*/
#ifndef lint
static char *rcsid =
"$Id: mk_err.c,v 1.2 1994/07/19 19:25:54 g89r4222 Exp $";
#endif /* lint */
#include <sys/types.h>
#include <krb.h>
#include <prot.h>
#include <strings.h>
/*
* This routine creates a general purpose error reply message. It
* doesn't use KTEXT because application protocol may have long
* messages, and may want this part of buffer contiguous to other
* stuff.
*
* The error reply is built in "p", using the error code "e" and
* error text "e_string" given. The length of the error reply is
* returned.
*
* The error reply is in the following format:
*
* unsigned char KRB_PROT_VERSION protocol version no.
* unsigned char AUTH_MSG_APPL_ERR message type
* (least significant
* bit of above) HOST_BYTE_ORDER local byte order
* 4 bytes e given error code
* string e_string given error text
*/
long krb_mk_err(p,e,e_string)
u_char *p; /* Where to build error packet */
long e; /* Error code */
char *e_string; /* Text of error */
{
u_char *start;
start = p;
/* Create fixed part of packet */
*p++ = (unsigned char) KRB_PROT_VERSION;
*p = (unsigned char) AUTH_MSG_APPL_ERR;
*p++ |= HOST_BYTE_ORDER;
/* Add the basic info */
bcopy((char *)&e,(char *)p,4); /* err code */
p += sizeof(e);
(void) strcpy((char *)p,e_string); /* err text */
p += strlen(e_string);
/* And return the length */
return p-start;
}