Whamcloud - gitweb
Add full Heimdall compatibility.
authorTheodore Ts'o <tytso@mit.edu>
Tue, 6 May 2003 03:07:32 +0000 (23:07 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Tue, 6 May 2003 03:07:32 +0000 (23:07 -0400)
16 files changed:
lib/et/ChangeLog
lib/et/Makefile.in
lib/et/com_err.h
lib/et/com_right.c [new file with mode: 0644]
lib/et/et_c.awk
lib/et/et_h.awk
lib/et/test_cases/continuation.c
lib/et/test_cases/continuation.et
lib/et/test_cases/continuation.h
lib/et/test_cases/heimdall.c [new file with mode: 0644]
lib/et/test_cases/heimdall.et [new file with mode: 0644]
lib/et/test_cases/heimdall.h [new file with mode: 0644]
lib/et/test_cases/heimdall2.c [new file with mode: 0644]
lib/et/test_cases/heimdall2.et [new file with mode: 0644]
lib/et/test_cases/heimdall2.h [new file with mode: 0644]
lib/et/test_cases/simple.c

index bc89c6b..06c0ed6 100644 (file)
@@ -1,5 +1,8 @@
 2003-05-05  Theodore Ts'o  <tytso@mit.edu>
 
+       * et_c.awk, et_h.awk, com_err.h, com_right.c: Add full Heimdall
+               compatibility. 
+
        * et_c.awk: Add support for OV-style continuations in compile_et.
                (Closes Debian bug #191900).
 
index 06371eb..960dacf 100644 (file)
@@ -15,9 +15,9 @@ DEP_MAKEFILE = $(DEP_LIB_MAKEFILES)
 
 all:: compile_et
 
-OBJS= error_message.o et_name.o init_et.o com_err.o
+OBJS= error_message.o et_name.o init_et.o com_err.o com_right.o
 SRCS = $(srcdir)/error_message.c $(srcdir)/et_name.c $(srcdir)/init_et.c \
-       $(srcdir)/com_err.c
+       $(srcdir)/com_err.c $(srcdir)/com_right.c
 
 HFILES= com_err.h
 SHARE_FILES= et_c.awk et_h.awk
@@ -139,3 +139,5 @@ et_name.o: $(srcdir)/et_name.c $(srcdir)/com_err.h $(srcdir)/error_table.h \
 init_et.o: $(srcdir)/init_et.c $(srcdir)/com_err.h $(srcdir)/error_table.h
 com_err.o: $(srcdir)/com_err.c $(srcdir)/com_err.h $(srcdir)/error_table.h \
  $(srcdir)/internal.h
+com_right.o: $(srcdir)/com_right.c $(srcdir)/com_err.h \
+ $(srcdir)/error_table.h
index 94c6098..49b2a26 100644 (file)
@@ -38,6 +38,13 @@ extern errcode_t add_error_table(const struct error_table * et);
 extern errcode_t remove_error_table(const struct error_table * et);
 extern void add_to_error_table(struct et_list *new_table);
 
+/* Provided for Heimdall compatibility */
+extern const char *com_right(struct et_list *list, long code);
+extern void initialize_error_table_r(struct et_list **list, 
+                                    const char **messages, 
+                                    int num_errors,
+                                    long base);
+extern void free_error_table(struct et_list *et);
 
 #define __COM_ERR_H
 #endif /* ! defined(__COM_ERR_H) */
diff --git a/lib/et/com_right.c b/lib/et/com_right.c
new file mode 100644 (file)
index 0000000..5ac6e7f
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+ * com_right.c -- provide Heimdall / Kerberos4kth com_err interfaces
+ *     for backwards compatbility 
+ * 
+ * Copyright (c) 2003 by Theodore Ts'o
+ *
+ * Taken from lib/com_err/error.c from Kerberos4kth distribution.
+ * 
+ * Copyright (c) 1997, 1998, 2001 Kungliga Tekniska Högskolan
+ * (Royal Institute of Technology, Stockholm, Sweden). 
+ * All rights reserved. 
+ *
+ * Redistribution and use in source and binary forms, with or without 
+ * modification, are permitted provided that the following conditions 
+ * are met: 
+ *
+ * 1. Redistributions of source code must retain the above copyright 
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright 
+ *    notice, this list of conditions and the following disclaimer in the 
+ *    documentation and/or other materials provided with the distribution. 
+ *
+ * 3. Neither the name of the Institute nor the names of its contributors 
+ *    may be used to endorse or promote products derived from this software 
+ *    without specific prior written permission. 
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
+ * SUCH DAMAGE. 
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "com_err.h"
+#include "error_table.h"
+
+const char *
+com_right(struct et_list *list, long code)
+{
+    struct et_list *p;
+    for (p = list; p; p = p->next) {
+       if (code >= p->table->base && code < p->table->base + p->table->n_msgs)
+           return p->table->msgs[code - p->table->base];
+    }
+    return NULL;
+}
+
+struct foobar {
+    struct et_list etl;
+    struct error_table tab;
+};
+
+/*
+ * We provide this routine for compatibility with Heimdall generated
+ * foo_err.c files, but we don't use this ourselves for foo_err.c
+ * files generated by our compile_et.  This is so our foo_err.c
+ * files can be used with older com_err libraries without running
+ * afoul of dependencies.
+ */
+void
+initialize_error_table_r(struct et_list **list, 
+                        const char **messages, 
+                        int num_errors,
+                        long base)
+{
+    struct et_list *et, **end;
+    struct error_table *tab;
+    struct foobar *f;
+
+    for (end = list, et = *list; et; end = &et->next, et = et->next)
+        if (et->table->msgs == messages)
+            return;
+    f = malloc(sizeof(*f));
+    if (f == NULL)
+        return;
+    et = &f->etl;
+    et->table = tab = &f->tab;
+    tab->msgs = messages;
+    tab->n_msgs = num_errors;
+    tab->base = base;
+    et->next = NULL;
+    *end = et;
+}
+                       
+
+void
+free_error_table(struct et_list *et)
+{
+    while(et){
+       struct et_list *p = et;
+       et = et->next;
+       free(p);
+    }
+}
index a48ecfd..4e4fa7c 100644 (file)
@@ -118,6 +118,8 @@ c2n["_"]=63
        print " */" > outfile
 
        print "" > outfile
+       print "#include <stdlib.h>" > outfile
+       print "" > outfile
        print "static const char * const text[] = {" > outfile
        table_item_count = 0
 }
@@ -177,9 +179,20 @@ c2n["_"]=63
        }
        skipone=0
 }
-END {
 
+/^[ \t]*(prefix)[ \t]+[A-Z_0-9]+/ {
+       prefix_str = $2 "_"
+}
+
+/^[ \t]*(index)[ \t]+[A-Z_0-9]+/ {
+       new_idx = $2
+       for (i = table_item_count ; i < new_idx; i++) {
+               printf "\t\"Reserved %s error (%d)\",\n", \
+                       table_name, table_item_count++ > outfile
+       }
+}
 
+END {
        print "    0" > outfile
        print "};" > outfile
        print "" > outfile
@@ -215,6 +228,20 @@ END {
        print "        _et_list = &link;" > outfile
        print "    }" > outfile
        print "}" > outfile
-       
-
+       print "" > outfile
+       print "/* For Heimdall compatibility */" > outfile
+       print "void initialize_" table_name "_error_table_r(struct et_list **list)" > outfile
+       print "{" > outfile
+       print "    struct et_list *et, **end;" > outfile
+       print "" > outfile
+       print "    for (end = list, et = *list; et; end = &et->next, et = et->next)" > outfile
+       print "        if (et->table->msgs == text)" > outfile
+       print "            return;" > outfile
+       print "    et = malloc(sizeof(struct et_list));" > outfile
+       print "    if (et == 0)" > outfile
+       print "        return;" > outfile
+       print "    et->table = &et_" table_name "_error_table;" > outfile
+       print "    et->next = 0;" > outfile
+       print "    *end = et;" > outfile
+       print "}" > outfile
 }
index a52c141..687fc6b 100644 (file)
@@ -111,6 +111,8 @@ c2n["_"]=63
                        tab_base_high--
                }
        }
+       prefix_str = ""
+       curr_idx = 0
        curr_low = tab_base_low
        curr_high = tab_base_high
        curr_sign = tab_base_sign
@@ -124,7 +126,7 @@ c2n["_"]=63
 }
 
 /^[ \t]*(error_code|ec)[ \t]+[A-Z_0-9]+,/ {
-       tag=substr($2,1,length($2)-1)
+       tag=prefix_str substr($2,1,length($2)-1)
        if (curr_high == 0) {
                printf "#define %-40s (%dL)\n", tag, \
                        curr_sign*curr_low > outfile
@@ -133,6 +135,7 @@ c2n["_"]=63
                        curr_low > outfile
        }
        curr_low += curr_sign;
+       curr_idx++;
        if (curr_low >= mod_base) {
                curr_low -= mod_base;
                curr_high++
@@ -143,6 +146,25 @@ c2n["_"]=63
        }
 }
 
+/^[ \t]*(prefix)[ \t]+[A-Z_0-9]+/ {
+       prefix_str = $2 "_"
+}
+
+/^[ \t]*(index)[ \t]+[A-Z_0-9]+/ {
+       new_idx = $2
+       curr_low += curr_sign * (new_idx - curr_idx)
+       curr_idx = new_idx
+       if (curr_low >= mod_base) {
+               curr_low -= mod_base;
+               curr_high++
+       }
+       if (curr_low < 0) {
+               cur_low += mod_base
+               cur_high--
+       }
+}
+
+
 END {
        print "extern const struct error_table et_" table_name "_error_table;" > outfile
        print "extern void initialize_" table_name "_error_table(void);" > outfile
index d63fb86..a203242 100644 (file)
@@ -3,6 +3,8 @@
  * This file is automatically generated; please do not edit it.
  */
 
+#include <stdlib.h>
+
 static const char * const text[] = {
        "New password was found in a dictionary of possible passwords and\ntherefore may be easily guessed. Please choose another password.\nSee the ovpasswd man page for help in choosing a good password.",
     0
@@ -19,16 +21,32 @@ struct et_list {
 };
 extern struct et_list *_et_list;
 
-const struct error_table et_kadm5_error_table = { text, 156463126912L, 1 };
+const struct error_table et_ovk_error_table = { text, 43787520L, 1 };
 
 static struct et_list link = { 0, 0 };
 
-void initialize_kadm5_error_table(void);
+void initialize_ovk_error_table(void);
 
-void initialize_kadm5_error_table(void) {
+void initialize_ovk_error_table(void) {
     if (!link.table) {
         link.next = _et_list;
-        link.table = &et_kadm5_error_table;
+        link.table = &et_ovk_error_table;
         _et_list = &link;
     }
 }
+
+/* For Heimdall compatibility */
+void initialize_ovk_error_table_r(struct et_list **list)
+{
+    struct et_list *et, **end;
+
+    for (end = list, et = *list; et; end = &et->next, et = et->next)
+        if (et->table->msgs == text)
+            return;
+    et = malloc(sizeof(struct et_list));
+    if (et == 0)
+        return;
+    et->table = &et_ovk_error_table;
+    et->next = 0;
+    *end = et;
+}
index de41379..64d1674 100644 (file)
@@ -1,4 +1,4 @@
-       error_table     kadm5
+       error_table     ovk
 
 error_code CHPASS_UTIL_PASSWORD_IN_DICTIONARY,
 "New password was found in a dictionary of possible passwords and\n\
index 3dc2775..45818ce 100644 (file)
@@ -5,11 +5,11 @@
 
 #include <et/com_err.h>
 
-#define CHPASS_UTIL_PASSWORD_IN_DICTIONARY       (156463126912L)
-extern const struct error_table et_kadm5_error_table;
-extern void initialize_kadm5_error_table(void);
-#define ERROR_TABLE_BASE_kadm5 (156463126912L)
+#define CHPASS_UTIL_PASSWORD_IN_DICTIONARY       (43787520L)
+extern const struct error_table et_ovk_error_table;
+extern void initialize_ovk_error_table(void);
+#define ERROR_TABLE_BASE_ovk (43787520L)
 
 /* for compatibility with older versions... */
-#define init_kadm5_err_tbl initialize_kadm5_error_table
-#define kadm5_err_base ERROR_TABLE_BASE_kadm5
+#define init_ovk_err_tbl initialize_ovk_error_table
+#define ovk_err_base ERROR_TABLE_BASE_ovk
diff --git a/lib/et/test_cases/heimdall.c b/lib/et/test_cases/heimdall.c
new file mode 100644 (file)
index 0000000..942b231
--- /dev/null
@@ -0,0 +1,133 @@
+/*
+ * heimdall.c:
+ * This file is automatically generated; please do not edit it.
+ */
+
+#include <stdlib.h>
+
+static const char * const text[] = {
+       "Kerberos successful",
+       "Kerberos principal expired",
+       "Kerberos service expired",
+       "Kerberos auth expired",
+       "Incorrect kerberos master key version",
+       "Incorrect kerberos master key version",
+       "Incorrect kerberos master key version",
+       "Kerberos error: byte order unknown",
+       "Kerberos principal unknown",
+       "Kerberos principal not unique",
+       "Kerberos principal has null key",
+       "Reserved krb error (11)",
+       "Reserved krb error (12)",
+       "Reserved krb error (13)",
+       "Reserved krb error (14)",
+       "Reserved krb error (15)",
+       "Reserved krb error (16)",
+       "Reserved krb error (17)",
+       "Reserved krb error (18)",
+       "Reserved krb error (19)",
+       "Generic error from Kerberos KDC",
+       "Can't read Kerberos ticket file",
+       "Can't find Kerberos ticket or TGT",
+       "Reserved krb error (23)",
+       "Reserved krb error (24)",
+       "Reserved krb error (25)",
+       "Kerberos TGT Expired",
+       "Reserved krb error (27)",
+       "Reserved krb error (28)",
+       "Reserved krb error (29)",
+       "Reserved krb error (30)",
+       "Kerberos error: Can't decode authenticator",
+       "Kerberos ticket expired",
+       "Kerberos ticket not yet valid",
+       "Kerberos error: Repeated request",
+       "The kerberos ticket isn't for us",
+       "Kerberos request inconsistent",
+       "Kerberos error: delta_t too big",
+       "Kerberos error: incorrect net address",
+       "Kerberos protocol version mismatch",
+       "Kerberos error: invalid msg type",
+       "Kerberos error: message stream modified",
+       "Kerberos error: message out of order",
+       "Kerberos error: unauthorized request",
+       "Reserved krb error (44)",
+       "Reserved krb error (45)",
+       "Reserved krb error (46)",
+       "Reserved krb error (47)",
+       "Reserved krb error (48)",
+       "Reserved krb error (49)",
+       "Reserved krb error (50)",
+       "Kerberos error: current PW is null",
+       "Kerberos error: Incorrect current password",
+       "Kerberos protocol error",
+       "Error returned by Kerberos KDC",
+       "Null Kerberos ticket returned by KDC",
+       "Kerberos error: Retry count exceeded",
+       "Kerberos error: Can't send request",
+       "Reserved krb error (58)",
+       "Reserved krb error (59)",
+       "Reserved krb error (60)",
+       "Kerberos error: not all tickets returned",
+       "Kerberos error: incorrect password",
+       "Kerberos error: Protocol Error",
+       "Reserved krb error (64)",
+       "Reserved krb error (65)",
+       "Reserved krb error (66)",
+       "Reserved krb error (67)",
+       "Reserved krb error (68)",
+       "Reserved krb error (69)",
+       "Other error",
+       "Don't have Kerberos ticket-granting ticket",
+       "Reserved krb error (72)",
+       "Reserved krb error (73)",
+       "Reserved krb error (74)",
+       "Reserved krb error (75)",
+       "No ticket file found",
+       "Couldn't access ticket file",
+       "Couldn't lock ticket file",
+       "Bad ticket file format",
+       "tf_init not called first",
+       "Bad Kerberos name format",
+    0
+};
+
+struct error_table {
+    char const * const * msgs;
+    long base;
+    int n_msgs;
+};
+struct et_list {
+    struct et_list *next;
+    const struct error_table * table;
+};
+extern struct et_list *_et_list;
+
+const struct error_table et_krb_error_table = { text, 39525376L, 82 };
+
+static struct et_list link = { 0, 0 };
+
+void initialize_krb_error_table(void);
+
+void initialize_krb_error_table(void) {
+    if (!link.table) {
+        link.next = _et_list;
+        link.table = &et_krb_error_table;
+        _et_list = &link;
+    }
+}
+
+/* For Heimdall compatibility */
+void initialize_krb_error_table_r(struct et_list **list)
+{
+    struct et_list *et, **end;
+
+    for (end = list, et = *list; et; end = &et->next, et = et->next)
+        if (et->table->msgs == text)
+            return;
+    et = malloc(sizeof(struct et_list));
+    if (et == 0)
+        return;
+    et->table = &et_krb_error_table;
+    et->next = 0;
+    *end = et;
+}
diff --git a/lib/et/test_cases/heimdall.et b/lib/et/test_cases/heimdall.et
new file mode 100644 (file)
index 0000000..9dce192
--- /dev/null
@@ -0,0 +1,65 @@
+#      Copyright 1987,1988 Massachusetts Institute of Technology
+#
+#      For copying and distribution information, see the file
+#      "mit-copyright.h".
+# 
+# This might look like a com_err file, but is not
+#
+id "$Id: krb_err.et,v 1.7 1998/03/29 14:19:52 bg Exp $"
+
+error_table krb
+
+prefix KRBET
+ec KSUCCESS,           "Kerberos successful"
+ec KDC_NAME_EXP,       "Kerberos principal expired"
+ec KDC_SERVICE_EXP,    "Kerberos service expired"
+ec KDC_AUTH_EXP,       "Kerberos auth expired"
+ec KDC_PKT_VER,                "Incorrect kerberos master key version"
+ec KDC_P_MKEY_VER,     "Incorrect kerberos master key version"
+ec KDC_S_MKEY_VER,     "Incorrect kerberos master key version"
+ec KDC_BYTE_ORDER,     "Kerberos error: byte order unknown"
+ec KDC_PR_UNKNOWN,     "Kerberos principal unknown"
+ec KDC_PR_N_UNIQUE,    "Kerberos principal not unique"
+ec KDC_NULL_KEY,       "Kerberos principal has null key"
+index 20
+ec KDC_GEN_ERR,                "Generic error from Kerberos KDC"
+ec GC_TKFIL,           "Can't read Kerberos ticket file"
+ec GC_NOTKT,           "Can't find Kerberos ticket or TGT"
+index 26
+ec MK_AP_TGTEXP,       "Kerberos TGT Expired"
+index 31
+ec RD_AP_UNDEC,                "Kerberos error: Can't decode authenticator"
+ec RD_AP_EXP,          "Kerberos ticket expired"
+ec RD_AP_NYV,          "Kerberos ticket not yet valid"
+ec RD_AP_REPEAT,       "Kerberos error: Repeated request"
+ec RD_AP_NOT_US,       "The kerberos ticket isn't for us"
+ec RD_AP_INCON,                "Kerberos request inconsistent"
+ec RD_AP_TIME,         "Kerberos error: delta_t too big"
+ec RD_AP_BADD,         "Kerberos error: incorrect net address"
+ec RD_AP_VERSION,      "Kerberos protocol version mismatch"
+ec RD_AP_MSG_TYPE,     "Kerberos error: invalid msg type"
+ec RD_AP_MODIFIED,     "Kerberos error: message stream modified"
+ec RD_AP_ORDER,                "Kerberos error: message out of order"
+ec RD_AP_UNAUTHOR,     "Kerberos error: unauthorized request"
+index 51
+ec GT_PW_NULL,         "Kerberos error: current PW is null"
+ec GT_PW_BADPW,                "Kerberos error: Incorrect current password"
+ec GT_PW_PROT,         "Kerberos protocol error"
+ec GT_PW_KDCERR,       "Error returned by Kerberos KDC"
+ec GT_PW_NULLTKT,      "Null Kerberos ticket returned by KDC"
+ec SKDC_RETRY,         "Kerberos error: Retry count exceeded"
+ec SKDC_CANT,          "Kerberos error: Can't send request"
+index 61
+ec INTK_W_NOTALL,      "Kerberos error: not all tickets returned"
+ec INTK_BADPW,         "Kerberos error: incorrect password"
+ec INTK_PROT,          "Kerberos error: Protocol Error"
+index 70
+ec INTK_ERR,           "Other error"
+ec AD_NOTGT,           "Don't have Kerberos ticket-granting ticket"
+index 76
+ec NO_TKT_FIL,         "No ticket file found"
+ec TKT_FIL_ACC,                "Couldn't access ticket file"
+ec TKT_FIL_LCK,                "Couldn't lock ticket file"
+ec TKT_FIL_FMT,                "Bad ticket file format"
+ec TKT_FIL_INI,                "tf_init not called first"
+ec KNAME_FMT,          "Bad Kerberos name format"
diff --git a/lib/et/test_cases/heimdall.h b/lib/et/test_cases/heimdall.h
new file mode 100644 (file)
index 0000000..132b1a8
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * heimdall.h:
+ * This file is automatically generated; please do not edit it.
+ */
+
+#include <et/com_err.h>
+
+#define KRBET_KSUCCESS                           (39525376L)
+#define KRBET_KDC_NAME_EXP                       (39525377L)
+#define KRBET_KDC_SERVICE_EXP                    (39525378L)
+#define KRBET_KDC_AUTH_EXP                       (39525379L)
+#define KRBET_KDC_PKT_VER                        (39525380L)
+#define KRBET_KDC_P_MKEY_VER                     (39525381L)
+#define KRBET_KDC_S_MKEY_VER                     (39525382L)
+#define KRBET_KDC_BYTE_ORDER                     (39525383L)
+#define KRBET_KDC_PR_UNKNOWN                     (39525384L)
+#define KRBET_KDC_PR_N_UNIQUE                    (39525385L)
+#define KRBET_KDC_NULL_KEY                       (39525386L)
+#define KRBET_KDC_GEN_ERR                        (39525396L)
+#define KRBET_GC_TKFIL                           (39525397L)
+#define KRBET_GC_NOTKT                           (39525398L)
+#define KRBET_MK_AP_TGTEXP                       (39525402L)
+#define KRBET_RD_AP_UNDEC                        (39525407L)
+#define KRBET_RD_AP_EXP                          (39525408L)
+#define KRBET_RD_AP_NYV                          (39525409L)
+#define KRBET_RD_AP_REPEAT                       (39525410L)
+#define KRBET_RD_AP_NOT_US                       (39525411L)
+#define KRBET_RD_AP_INCON                        (39525412L)
+#define KRBET_RD_AP_TIME                         (39525413L)
+#define KRBET_RD_AP_BADD                         (39525414L)
+#define KRBET_RD_AP_VERSION                      (39525415L)
+#define KRBET_RD_AP_MSG_TYPE                     (39525416L)
+#define KRBET_RD_AP_MODIFIED                     (39525417L)
+#define KRBET_RD_AP_ORDER                        (39525418L)
+#define KRBET_RD_AP_UNAUTHOR                     (39525419L)
+#define KRBET_GT_PW_NULL                         (39525427L)
+#define KRBET_GT_PW_BADPW                        (39525428L)
+#define KRBET_GT_PW_PROT                         (39525429L)
+#define KRBET_GT_PW_KDCERR                       (39525430L)
+#define KRBET_GT_PW_NULLTKT                      (39525431L)
+#define KRBET_SKDC_RETRY                         (39525432L)
+#define KRBET_SKDC_CANT                          (39525433L)
+#define KRBET_INTK_W_NOTALL                      (39525437L)
+#define KRBET_INTK_BADPW                         (39525438L)
+#define KRBET_INTK_PROT                          (39525439L)
+#define KRBET_INTK_ERR                           (39525446L)
+#define KRBET_AD_NOTGT                           (39525447L)
+#define KRBET_NO_TKT_FIL                         (39525452L)
+#define KRBET_TKT_FIL_ACC                        (39525453L)
+#define KRBET_TKT_FIL_LCK                        (39525454L)
+#define KRBET_TKT_FIL_FMT                        (39525455L)
+#define KRBET_TKT_FIL_INI                        (39525456L)
+#define KRBET_KNAME_FMT                          (39525457L)
+extern const struct error_table et_krb_error_table;
+extern void initialize_krb_error_table(void);
+#define ERROR_TABLE_BASE_krb (39525376L)
+
+/* for compatibility with older versions... */
+#define init_krb_err_tbl initialize_krb_error_table
+#define krb_err_base ERROR_TABLE_BASE_krb
diff --git a/lib/et/test_cases/heimdall2.c b/lib/et/test_cases/heimdall2.c
new file mode 100644 (file)
index 0000000..3cb0c94
--- /dev/null
@@ -0,0 +1,119 @@
+/*
+ * heimdall2.c:
+ * This file is automatically generated; please do not edit it.
+ */
+
+#include <stdlib.h>
+
+static const char * const text[] = {
+       "$Id: kadm_err.et,v 1.5 1998/01/16 23:11:27 joda Exp $",
+       "Cannot fetch local realm",
+       "Unable to fetch credentials",
+       "Bad key supplied",
+       "Can't encrypt data",
+       "Cannot encode/decode authentication info",
+       "Principal attemping change is in wrong realm",
+       "Packet is too large",
+       "Version number is incorrect",
+       "Checksum does not match",
+       "Unsealing private data failed",
+       "Unsupported operation",
+       "Could not find administrating host",
+       "Administrating host name is unknown",
+       "Could not find service name in services database",
+       "Could not create socket",
+       "Could not connect to server",
+       "Could not fetch local socket address",
+       "Could not fetch master key",
+       "Could not verify master key",
+       "Entry already exists in database",
+       "Database store error",
+       "Database read error",
+       "Insufficient access to perform requested operation",
+       "Data is available for return to client",
+       "No such entry in the database",
+       "Memory exhausted",
+       "Could not fetch system hostname",
+       "Could not bind port",
+       "Length mismatch problem",
+       "Illegal use of wildcard",
+       "Database is locked or in use--try again later",
+       "Insecure password rejected",
+       "Cleartext password and DES key did not match",
+       "Invalid principal for change srvtab request",
+       "Attempt do delete immutable principal",
+       "Reserved kadm error (36)",
+       "Reserved kadm error (37)",
+       "Reserved kadm error (38)",
+       "Reserved kadm error (39)",
+       "Reserved kadm error (40)",
+       "Reserved kadm error (41)",
+       "Reserved kadm error (42)",
+       "Reserved kadm error (43)",
+       "Reserved kadm error (44)",
+       "Reserved kadm error (45)",
+       "Reserved kadm error (46)",
+       "Reserved kadm error (47)",
+       "Reserved kadm error (48)",
+       "Reserved kadm error (49)",
+       "Reserved kadm error (50)",
+       "Reserved kadm error (51)",
+       "Reserved kadm error (52)",
+       "Reserved kadm error (53)",
+       "Reserved kadm error (54)",
+       "Reserved kadm error (55)",
+       "Reserved kadm error (56)",
+       "Reserved kadm error (57)",
+       "Reserved kadm error (58)",
+       "Reserved kadm error (59)",
+       "Reserved kadm error (60)",
+       "Reserved kadm error (61)",
+       "Reserved kadm error (62)",
+       "Reserved kadm error (63)",
+       "Null passwords are not allowed",
+       "Password is too short",
+       "Too few character classes in password",
+       "Password is in the password dictionary",
+    0
+};
+
+struct error_table {
+    char const * const * msgs;
+    long base;
+    int n_msgs;
+};
+struct et_list {
+    struct et_list *next;
+    const struct error_table * table;
+};
+extern struct et_list *_et_list;
+
+const struct error_table et_kadm_error_table = { text, -1783126272L, 68 };
+
+static struct et_list link = { 0, 0 };
+
+void initialize_kadm_error_table(void);
+
+void initialize_kadm_error_table(void) {
+    if (!link.table) {
+        link.next = _et_list;
+        link.table = &et_kadm_error_table;
+        _et_list = &link;
+    }
+}
+
+/* For Heimdall compatibility */
+void initialize_kadm_error_table_r(struct et_list **list)
+{
+    struct et_list *et, **end;
+
+    for (end = list, et = *list; et; end = &et->next, et = et->next)
+        if (et->table->msgs == text)
+            return;
+    et = malloc(sizeof(struct et_list));
+    if (et == 0)
+        return;
+    et->table = &et_kadm_error_table;
+    et->next = 0;
+    *end = et;
+}
diff --git a/lib/et/test_cases/heimdall2.et b/lib/et/test_cases/heimdall2.et
new file mode 100644 (file)
index 0000000..7a247c5
--- /dev/null
@@ -0,0 +1,65 @@
+# $Id: kadm_err.et,v 1.5 1998/01/16 23:11:27 joda Exp $
+#
+# Copyright 1988 by the Massachusetts Institute of Technology.
+#
+# For copying and distribution information, please see the file
+# <mit-copyright.h>.
+#
+# Kerberos administration server error table
+#
+       et      kadm
+
+# KADM_SUCCESS, as all success codes should be, is zero
+
+ec KADM_RCSID,         "$Id: kadm_err.et,v 1.5 1998/01/16 23:11:27 joda Exp $"
+# /* Building and unbuilding the packet errors */
+ec KADM_NO_REALM,      "Cannot fetch local realm"
+ec KADM_NO_CRED,       "Unable to fetch credentials"
+ec KADM_BAD_KEY,       "Bad key supplied"
+ec KADM_NO_ENCRYPT,    "Can't encrypt data"
+ec KADM_NO_AUTH,       "Cannot encode/decode authentication info"
+ec KADM_WRONG_REALM,   "Principal attemping change is in wrong realm"
+ec KADM_NO_ROOM,       "Packet is too large"
+ec KADM_BAD_VER,       "Version number is incorrect"
+ec KADM_BAD_CHK,       "Checksum does not match"
+ec KADM_NO_READ,       "Unsealing private data failed"
+ec KADM_NO_OPCODE,     "Unsupported operation"
+ec KADM_NO_HOST,       "Could not find administrating host"
+ec KADM_UNK_HOST,      "Administrating host name is unknown"
+ec KADM_NO_SERV,       "Could not find service name in services database"
+ec KADM_NO_SOCK,       "Could not create socket"
+ec KADM_NO_CONN,       "Could not connect to server"
+ec KADM_NO_HERE,       "Could not fetch local socket address"
+ec KADM_NO_MAST,       "Could not fetch master key"
+ec KADM_NO_VERI,       "Could not verify master key"
+
+# /* From the server side routines */
+ec KADM_INUSE,         "Entry already exists in database"
+ec KADM_UK_SERROR,     "Database store error"
+ec KADM_UK_RERROR,     "Database read error"
+ec KADM_UNAUTH,                "Insufficient access to perform requested operation"
+# KADM_DATA isn't really an error, but...
+ec KADM_DATA,          "Data is available for return to client"
+ec KADM_NOENTRY,       "No such entry in the database"
+
+ec KADM_NOMEM,         "Memory exhausted"
+ec KADM_NO_HOSTNAME,   "Could not fetch system hostname"
+ec KADM_NO_BIND,       "Could not bind port"
+ec KADM_LENGTH_ERROR,  "Length mismatch problem"
+ec KADM_ILL_WILDCARD,  "Illegal use of wildcard"
+
+ec KADM_DB_INUSE,      "Database is locked or in use--try again later"
+
+ec KADM_INSECURE_PW,    "Insecure password rejected"
+ec KADM_PW_MISMATCH,    "Cleartext password and DES key did not match"
+
+ec KADM_NOT_SERV_PRINC, "Invalid principal for change srvtab request"
+ec KADM_IMMUTABLE,     "Attempt do delete immutable principal"
+# password quality basically stolen from OV libkadm5
+index 64
+prefix KADM_PASS_Q
+ec NULL,               "Null passwords are not allowed"
+ec TOOSHORT,           "Password is too short"
+ec CLASS,              "Too few character classes in password"
+ec DICT,               "Password is in the password dictionary"
+end
diff --git a/lib/et/test_cases/heimdall2.h b/lib/et/test_cases/heimdall2.h
new file mode 100644 (file)
index 0000000..d828a6c
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * heimdall2.h:
+ * This file is automatically generated; please do not edit it.
+ */
+
+#include <et/com_err.h>
+
+#define KADM_RCSID                               (-1783126272L)
+#define KADM_NO_REALM                            (-1783126271L)
+#define KADM_NO_CRED                             (-1783126270L)
+#define KADM_BAD_KEY                             (-1783126269L)
+#define KADM_NO_ENCRYPT                          (-1783126268L)
+#define KADM_NO_AUTH                             (-1783126267L)
+#define KADM_WRONG_REALM                         (-1783126266L)
+#define KADM_NO_ROOM                             (-1783126265L)
+#define KADM_BAD_VER                             (-1783126264L)
+#define KADM_BAD_CHK                             (-1783126263L)
+#define KADM_NO_READ                             (-1783126262L)
+#define KADM_NO_OPCODE                           (-1783126261L)
+#define KADM_NO_HOST                             (-1783126260L)
+#define KADM_UNK_HOST                            (-1783126259L)
+#define KADM_NO_SERV                             (-1783126258L)
+#define KADM_NO_SOCK                             (-1783126257L)
+#define KADM_NO_CONN                             (-1783126256L)
+#define KADM_NO_HERE                             (-1783126255L)
+#define KADM_NO_MAST                             (-1783126254L)
+#define KADM_NO_VERI                             (-1783126253L)
+#define KADM_INUSE                               (-1783126252L)
+#define KADM_UK_SERROR                           (-1783126251L)
+#define KADM_UK_RERROR                           (-1783126250L)
+#define KADM_UNAUTH                              (-1783126249L)
+#define KADM_DATA                                (-1783126248L)
+#define KADM_NOENTRY                             (-1783126247L)
+#define KADM_NOMEM                               (-1783126246L)
+#define KADM_NO_HOSTNAME                         (-1783126245L)
+#define KADM_NO_BIND                             (-1783126244L)
+#define KADM_LENGTH_ERROR                        (-1783126243L)
+#define KADM_ILL_WILDCARD                        (-1783126242L)
+#define KADM_DB_INUSE                            (-1783126241L)
+#define KADM_INSECURE_PW                         (-1783126240L)
+#define KADM_PW_MISMATCH                         (-1783126239L)
+#define KADM_NOT_SERV_PRINC                      (-1783126238L)
+#define KADM_IMMUTABLE                           (-1783126237L)
+#define KADM_PASS_Q_NULL                         (-1783126208L)
+#define KADM_PASS_Q_TOOSHORT                     (-1783126207L)
+#define KADM_PASS_Q_CLASS                        (-1783126206L)
+#define KADM_PASS_Q_DICT                         (-1783126205L)
+extern const struct error_table et_kadm_error_table;
+extern void initialize_kadm_error_table(void);
+#define ERROR_TABLE_BASE_kadm (-1783126272L)
+
+/* for compatibility with older versions... */
+#define init_kadm_err_tbl initialize_kadm_error_table
+#define kadm_err_base ERROR_TABLE_BASE_kadm
index 2f70799..099ac17 100644 (file)
@@ -3,6 +3,8 @@
  * This file is automatically generated; please do not edit it.
  */
 
+#include <stdlib.h>
+
 static const char * const text[] = {
                                "Can't read ticket file",
                                "Can't find ticket or TGT",
@@ -53,3 +55,19 @@ void initialize_krb_error_table(void) {
         _et_list = &link;
     }
 }
+
+/* For Heimdall compatibility */
+void initialize_krb_error_table_r(struct et_list **list)
+{
+    struct et_list *et, **end;
+
+    for (end = list, et = *list; et; end = &et->next, et = et->next)
+        if (et->table->msgs == text)
+            return;
+    et = malloc(sizeof(struct et_list));
+    if (et == 0)
+        return;
+    et->table = &et_krb_error_table;
+    et->next = 0;
+    *end = et;
+}