diff options
author | Robert S. French <rfrench@mit.edu> | 1987-06-24 00:19:43 +0000 |
---|---|---|
committer | Robert S. French <rfrench@mit.edu> | 1987-06-24 00:19:43 +0000 |
commit | f88919ff7474bb96bf478edb355088d5cedd3538 (patch) | |
tree | dacefc1b4aa74a4a371908b4e1006e015b3d8cf3 /lib/ZFmtAuth.c | |
parent | 16a8eef3e4677dee6d67b1a75bbfcd38ed0682af (diff) |
Initial revision
Diffstat (limited to 'lib/ZFmtAuth.c')
-rw-r--r-- | lib/ZFmtAuth.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/lib/ZFmtAuth.c b/lib/ZFmtAuth.c new file mode 100644 index 0000000..cd131fa --- /dev/null +++ b/lib/ZFmtAuth.c @@ -0,0 +1,68 @@ +/* This file is part of the Project Athena Zephyr Notification System. + * It contains source for the ZFormatAuthenticNotice function. + * + * Created by: Robert French + * + * $Source$ + * $Author$ + * + * Copyright (c) 1987 by the Massachusetts Institute of Technology. + * For copying and distribution information, see the file + * "mit-copyright.h". + */ +/* $Header$ */ + +#include <zephyr/mit-copyright.h> + +#include <zephyr/zephyr_internal.h> + +Code_t ZFormatAuthenticNotice(notice,buffer,buffer_len,len,session) + ZNotice_t *notice; + ZPacket_t buffer; + int buffer_len; + int *len; + C_Block session; +{ + char *ptr; + int result,retval,hdrlen; + AUTH_DAT dat; + KTEXT_ST authent; + ZChecksum_t our_checksum; + CREDENTIALS cred; + + notice->z_auth = 1; + notice->z_authent_len = 0; + notice->z_ascii_authent = (KTEXT)""; + + if ((retval = Z_FormatRawHeader(notice,buffer,buffer_len,&hdrlen)) + != ZERR_NONE) + return (retval); + + for (hdrlen--;buffer[hdrlen];hdrlen--) + ; + + if (result = get_credentials(SERVER_SERVICE,SERVER_INSTANCE, + __Zephyr_realm,&cred)) + return (result+krb_err_base); + + notice->z_checksum = (ZChecksum_t)quad_cksum(buffer,NULL,hdrlen,0, + cred.session); + + if ((retval = Z_FormatRawHeader(notice,buffer,buffer_len,&hdrlen)) + != ZERR_NONE) + return (retval); + + ptr = buffer+hdrlen; + + if (notice->z_message_len+hdrlen > buffer_len) + return (ZERR_PKTLEN); + + bcopy(notice->z_message,ptr,notice->z_message_len); + + *len = hdrlen+notice->z_message_len; + + if (*len > Z_MAXPKTLEN) + return (ZERR_PKTLEN); + + return (ZERR_NONE); +} |