summaryrefslogtreecommitdiff
path: root/lib/ZFmtAuth.c
diff options
context:
space:
mode:
authorGravatar Robert S. French <rfrench@mit.edu>1987-06-24 00:19:43 +0000
committerGravatar Robert S. French <rfrench@mit.edu>1987-06-24 00:19:43 +0000
commitf88919ff7474bb96bf478edb355088d5cedd3538 (patch)
treedacefc1b4aa74a4a371908b4e1006e015b3d8cf3 /lib/ZFmtAuth.c
parent16a8eef3e4677dee6d67b1a75bbfcd38ed0682af (diff)
Initial revision
Diffstat (limited to 'lib/ZFmtAuth.c')
-rw-r--r--lib/ZFmtAuth.c68
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);
+}