freebsd-nq/eBones/krb/mk_err.c

64 lines
1.7 KiB
C
Raw Normal View History

/*
* 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;
}