home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / kerberosIV / krb / mk_err.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-06-25  |  1.7 KB  |  67 lines

  1. /*
  2.  * $Source: /usr/src/kerberosIV/krb/RCS/mk_err.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_mk_err_c =
  14. "$Header: /usr/src/kerberosIV/krb/RCS/mk_err.c,v 4.5 90/06/25 20:56:53 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. /*
  25.  * This routine creates a general purpose error reply message.  It
  26.  * doesn't use KTEXT because application protocol may have long
  27.  * messages, and may want this part of buffer contiguous to other
  28.  * stuff.
  29.  *
  30.  * The error reply is built in "p", using the error code "e" and
  31.  * error text "e_string" given.  The length of the error reply is
  32.  * returned.
  33.  *
  34.  * The error reply is in the following format:
  35.  *
  36.  * unsigned char    KRB_PROT_VERSION    protocol version no.
  37.  * unsigned char    AUTH_MSG_APPL_ERR    message type
  38.  * (least significant
  39.  * bit of above)    HOST_BYTE_ORDER        local byte order
  40.  * 4 bytes        e            given error code
  41.  * string        e_string        given error text
  42.  */
  43.  
  44. long krb_mk_err(p,e,e_string)
  45.     u_char *p;            /* Where to build error packet */
  46.     long e;            /* Error code */
  47.     char *e_string;        /* Text of error */
  48. {
  49.     u_char      *start;
  50.  
  51.     start = p;
  52.  
  53.     /* Create fixed part of packet */
  54.     *p++ = (unsigned char) KRB_PROT_VERSION;
  55.     *p = (unsigned char) AUTH_MSG_APPL_ERR;
  56.     *p++ |= HOST_BYTE_ORDER;
  57.  
  58.     /* Add the basic info */
  59.     bcopy((char *)&e,(char *)p,4); /* err code */
  60.     p += sizeof(e);
  61.     (void) strcpy((char *)p,e_string); /* err text */
  62.     p += strlen(e_string);
  63.  
  64.     /* And return the length */
  65.     return p-start;
  66. }
  67.