BSD 4_3_Net_2 development
authorCSRG <csrg@ucbvax.Berkeley.EDU>
Thu, 2 Jul 1987 04:17:43 +0000 (20:17 -0800)
committerCSRG <csrg@ucbvax.Berkeley.EDU>
Thu, 2 Jul 1987 04:17:43 +0000 (20:17 -0800)
Work on file usr/src/kerberosIV/compile_et/et_name.c
Work on file usr/src/kerberosIV/compile_et/error_message.c
Work on file usr/src/kerberosIV/compile_et/init_et.c
Work on file usr/src/kerberosIV/compile_et/test/test.c
Work on file usr/src/kerberosIV/compile_et/error_table.h
Work on file usr/src/kerberosIV/compile_et/test/test1.et
Work on file usr/src/kerberosIV/compile_et/test/test2.et

Synthesized-from: CSRG/cd2/net.2

usr/src/kerberosIV/compile_et/error_message.c [new file with mode: 0644]
usr/src/kerberosIV/compile_et/error_table.h [new file with mode: 0644]
usr/src/kerberosIV/compile_et/et_name.c [new file with mode: 0644]
usr/src/kerberosIV/compile_et/init_et.c [new file with mode: 0644]
usr/src/kerberosIV/compile_et/test/test.c [new file with mode: 0644]
usr/src/kerberosIV/compile_et/test/test1.et [new file with mode: 0644]
usr/src/kerberosIV/compile_et/test/test2.et [new file with mode: 0644]

diff --git a/usr/src/kerberosIV/compile_et/error_message.c b/usr/src/kerberosIV/compile_et/error_message.c
new file mode 100644 (file)
index 0000000..87a5a88
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * $Header: error_message.c,v 1.1 86/11/10 21:34:34 spook Exp $
+ * $Source: /mit/s/p/spook/Work/et/RCS/error_message.c,v $
+ * $Locker: spook $
+ *
+ * Copyright 1987 by the Student Information Processing Board
+ * of the Massachusetts Institute of Technology
+ *
+ * For copyright info, see "mit-sipb-copyright.h".
+ */
+
+#include <stdio.h>
+#include "error_table.h"
+#include "mit-sipb-copyright.h"
+extern char *sys_errlist[];
+extern int sys_nerr;
+
+static char buffer[25];
+
+char *
+error_message(code)
+     int code;
+{
+     register int offset;
+     register error_table **et;
+     register int table_num;
+     register int div;
+     register char *cp;
+
+     offset = code & ((1<<ERRCODE_RANGE)-1);
+     table_num = code - offset;
+     if ((_et_list == (error_table **)NULL) && table_num)
+         goto oops;
+     if (!table_num) {
+         if (offset < sys_nerr)
+              return(sys_errlist[offset]);
+         else
+              goto oops;
+     }
+     for (et = _et_list; *et != (error_table *)NULL; et++) {
+         if ((*et)->base == table_num) {
+              /* This is the right table */
+              if ((*et)->n_msgs <= offset)
+                   goto oops;
+              return((*et)->msgs[offset]);
+         }
+     }
+ oops:
+     cp = buffer;
+     {
+         register char *cp1;
+         for (cp1 = "Unknown code "; *cp1; cp1++, cp++)
+              *cp = *cp1;
+         if (table_num) {
+              for (cp1 = error_table_name(table_num); *cp1; cp1++, cp++)
+                   *cp = *cp1;
+              *cp++ = ' ';
+              *cp = '\0';
+         }
+     }
+     div = 1000000000;
+     if (offset == 0) {
+         *cp++ = '0';
+         *cp = '\0';
+         return(buffer);
+     }
+     while (div > offset)
+         div /= 10;
+     do {
+         register int n = offset / div;
+         *cp++ = '0' + n;
+         offset -= n * div;
+         div /= 10;
+     } while (offset && div);
+     while (div) {
+         *cp++ = '0';
+         div /= 10;
+     }
+     *cp = '\0';
+     return(buffer);
+}
diff --git a/usr/src/kerberosIV/compile_et/error_table.h b/usr/src/kerberosIV/compile_et/error_table.h
new file mode 100644 (file)
index 0000000..e32ec30
--- /dev/null
@@ -0,0 +1,17 @@
+#ifndef _ET
+extern int errno;
+typedef struct {
+       char    **msgs;
+       int     base;
+       int     n_msgs;
+} error_table;
+extern error_table **_et_list;
+
+#define        ERROR_CODE      "int"   /* type used for error codes */
+
+#define        ERRCODE_RANGE   8       /* # of bits to shift table number */
+#define        BITS_PER_CHAR   6       /* # bits to shift per character in name */
+
+extern char *error_table_name();
+#define _ET
+#endif
diff --git a/usr/src/kerberosIV/compile_et/et_name.c b/usr/src/kerberosIV/compile_et/et_name.c
new file mode 100644 (file)
index 0000000..17cd8b6
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright 1987 by MIT Student Information Processing Board
+ *
+ * For copyright info, see mit-sipb-copyright.h.
+ */
+
+#include "error_table.h"
+#include "mit-sipb-copyright.h"
+
+static char copyright[] = "Copyright 1987 by MIT Student Information Processing Board";
+
+char *malloc();
+
+char *
+error_table_name(num)
+       int num;
+{
+       register int ch;
+       register int i;
+       register char *buf, *p;
+
+       /* num = aa aaa abb bbb bcc ccc cdd ddd d?? ??? ??? */
+       buf = malloc(5);
+       p = buf;
+       num >>= ERRCODE_RANGE;
+       /* num = ?? ??? ??? aaa aaa bbb bbb ccc ccc ddd ddd */
+       num &= 077777777;
+       /* num = 00 000 000 aaa aaa bbb bbb ccc ccc ddd ddd */
+       for (i = 0; i < 5; i++) {
+               ch = (num >> 24-6*i) & 077;
+               if (ch == 0)
+                       continue;
+               else if (ch < 27)
+                       *p++ = ch - 1 + 'A';
+               else if (ch < 53)
+                       *p++ = ch - 27 + 'a';
+               else if (ch < 63)
+                       *p++ = ch - 53 + '0';
+               else            /* ch == 63 */
+                       *p++ = '_';
+       }
+       return(buf);
+}
+
diff --git a/usr/src/kerberosIV/compile_et/init_et.c b/usr/src/kerberosIV/compile_et/init_et.c
new file mode 100644 (file)
index 0000000..123c482
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ *
+ * $Header: init_et.c,v 1.1 86/11/10 21:42:26 spook Exp $
+ * $Source: /mit/s/p/spook/Work/et/RCS/init_et.c,v $
+ * $Locker: spook $
+ *
+ * Copyright 1986 by MIT Information Systems and
+ *     MIT Student Information Processing Board
+ *
+ * For copyright info, see mit-sipb-copyright.h.
+ *
+ */
+
+#include <stdio.h>
+#include "error_table.h"
+#include "mit-sipb-copyright.h"
+
+static char copyright[] = "Copyright 1987 by MIT Student Information Processing Board";
+
+extern char *malloc(), *realloc();
+
+/* useful */
+typedef error_table *etp;
+typedef etp *etpp;
+
+etpp _et_list = (etpp)NULL;
+static int n_allocated = 0, n_used = 0;
+
+int
+init_error_table(msgs, base, count)
+       char **msgs;
+       register int base;
+       int count;
+{
+       register int i;
+       register etp new_et;
+       register etpp list;
+
+       if (!base || !count || !msgs)
+               return;
+
+       new_et = (etp)malloc(sizeof(error_table));
+       new_et->msgs = msgs;
+       new_et->base = base;
+       new_et->n_msgs= count;
+
+       list = _et_list;
+       if (list == (etpp)NULL) {
+               _et_list = (etpp) malloc(10*sizeof(etp));
+               list = _et_list;
+               if (list == (etpp)NULL)
+                       return; /* oops */
+               list[0] = new_et;
+               list[1] = (etp)NULL;
+               n_allocated = 10;
+               n_used = 1;
+               return;
+       }
+       for (i = 0; i < n_used; i++)
+               if (list[i]->base == base)
+                       return; /* avoid duplicates */
+       if (n_used+2 > n_allocated) {
+               n_allocated += 10; /* don't re-allocate too often */
+               list = (etpp) realloc((char *)list,
+                                     (unsigned)n_allocated * sizeof(etp));
+               _et_list = list;
+               if (list == (etpp)NULL)
+                       return; /* oops */
+       }
+       list[n_used++] = new_et;
+       list[n_used] = (etp)NULL;
+}
diff --git a/usr/src/kerberosIV/compile_et/test/test.c b/usr/src/kerberosIV/compile_et/test/test.c
new file mode 100644 (file)
index 0000000..df430da
--- /dev/null
@@ -0,0 +1,43 @@
+#include <stdio.h>
+#include <errno.h>
+#include "test1.h"
+#include "test2.h"
+char *error_message();
+extern int sys_nerr, errno;
+
+main()
+{
+       printf("\nBefore initiating error table:\n\n");
+       printf("Table name '%s'\n", error_table_name(KRB_MK_AP_TGTEXP));
+       printf("UNIX  name '%s'\n", error_table_name(EPERM));
+       printf("Msg TGT-expired is '%s'\n", error_message(KRB_MK_AP_TGTEXP));
+       printf("Msg EPERM is '%s'\n", error_message(EPERM));
+       printf("Msg FOO_ERR is '%s'\n", error_message(FOO_ERR));
+       printf("Msg {sys_nerr-1} is '%s'\n", error_message(sys_nerr-1));
+       printf("Msg {sys_nerr} is '%s'\n", error_message(sys_nerr));
+
+       init_error_table(0, 0, 0);
+       printf("With 0: tgt-expired -> %s\n", error_message(KRB_MK_AP_TGTEXP));
+
+       init_krb_err_tbl();
+       printf("KRB error table initialized:  base %d (%s), name %s\n",
+              krb_err_base, error_message(krb_err_base),
+              error_table_name(krb_err_base));
+       printf("With krb: tgt-expired -> %s\n",
+              error_message(KRB_MK_AP_TGTEXP));
+
+       init_quux_err_tbl();
+       printf("QUUX error table initialized: base %d (%s), name %s\n",
+              quux_err_base, error_message(quux_err_base),
+              error_table_name(quux_err_base));
+
+       printf("Msg for TGT-expired is '%s'\n",
+              error_message(KRB_MK_AP_TGTEXP));
+       printf("Msg {sys_nerr-1} is '%s'\n", error_message(sys_nerr-1));
+       printf("Msg FOO_ERR is '%s'\n", error_message(FOO_ERR));
+       printf("Msg KRB_SKDC_CANT is '%s'\n",
+                   error_message(KRB_SKDC_CANT));
+       printf("Msg 1e6 is '%s'\n", error_message(1000000));
+       errno = FOO_ERR;
+       perror("FOO_ERR");
+}
diff --git a/usr/src/kerberosIV/compile_et/test/test1.et b/usr/src/kerberosIV/compile_et/test/test1.et
new file mode 100644 (file)
index 0000000..4c7b77f
--- /dev/null
@@ -0,0 +1,69 @@
+       error_table     krb
+
+       error_code      KRB_MK_AP_TKFIL,
+                       "Can't read ticket file"
+
+       ec              KRB_MK_AP_NOTKT,
+                       "Can't find ticket or TGT"
+
+       ec              KRB_MK_AP_TGTEXP,
+                       "TGT expired"
+
+       ec              KRB_RD_AP_UNDEC,
+                       "Can't decode authenticator"
+
+       ec              KRB_RD_AP_EXP,
+                       "Ticket expired"
+
+       ec              KRB_RD_AP_REPEAT,
+                       "Repeated request"
+
+       ec              KRB_RD_AP_NOT_US,
+                       "The ticket isn't for us"
+
+       ec              KRB_RD_AP_INCON,
+                       "Request is inconsistent"
+
+       ec              KRB_RD_AP_TIME,
+                       "Delta-T too big"
+
+       ec              KRB_RD_AP_BADD,
+                       "Incorrect net address"
+
+       ec              KRB_RD_AP_VERSION,
+                       "Protocol version mismatch"
+
+       ec              KRB_RD_AP_MSG_TYPE,
+                       "Invalid message type"
+
+       ec              KRB_RD_AP_MODIFIED,
+                       "Message stream modified"
+
+       ec              KRB_RD_AP_ORDER,
+                       "Message out of order"
+
+       ec              KRB_RD_AP_UNAUTHOR,
+                       "Unauthorized request"
+
+       ec              KRB_GT_PW_NULL,
+                       "Current password is null"
+
+       ec              KRB_GT_PW_BADPW,
+                       "Incorrect current password"
+
+       ec              KRB_GT_PW_PROT,
+                       "Protocol error"
+
+       ec              KRB_GT_PW_KDCERR,
+                       "Error returned by KDC"
+
+       ec              KRB_GT_PW_NULLTKT,
+                       "Null ticket returned by KDC"
+
+       ec              KRB_SKDC_RETRY,
+                       "Retry count exceeded"
+
+       ec              KRB_SKDC_CANT,
+                       "Can't send request"
+
+       end
diff --git a/usr/src/kerberosIV/compile_et/test/test2.et b/usr/src/kerberosIV/compile_et/test/test2.et
new file mode 100644 (file)
index 0000000..55ad74e
--- /dev/null
@@ -0,0 +1,9 @@
+       error_table     quux
+
+       ec      FOO_ERR, "foo"
+
+       ec      BAR_ERR, "bar"
+
+       ec      BAZ_ERR, "meow"
+
+       end