From: Theodore Ts'o Date: Tue, 6 May 2003 03:07:32 +0000 (-0400) Subject: Add full Heimdall compatibility. X-Git-Tag: E2FSPROGS-1_34-WIP-0521~21 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=d03550970c57100dbafd8941f34acafd208ec52e;p=tools%2Fe2fsprogs.git Add full Heimdall compatibility. --- diff --git a/lib/et/ChangeLog b/lib/et/ChangeLog index bc89c6b..06c0ed6 100644 --- a/lib/et/ChangeLog +++ b/lib/et/ChangeLog @@ -1,5 +1,8 @@ 2003-05-05 Theodore Ts'o + * 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). diff --git a/lib/et/Makefile.in b/lib/et/Makefile.in index 06371eb..960dacf 100644 --- a/lib/et/Makefile.in +++ b/lib/et/Makefile.in @@ -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 diff --git a/lib/et/com_err.h b/lib/et/com_err.h index 94c6098..49b2a26 100644 --- a/lib/et/com_err.h +++ b/lib/et/com_err.h @@ -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 index 0000000..5ac6e7f --- /dev/null +++ b/lib/et/com_right.c @@ -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 +#include +#include +#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); + } +} diff --git a/lib/et/et_c.awk b/lib/et/et_c.awk index a48ecfd..4e4fa7c 100644 --- a/lib/et/et_c.awk +++ b/lib/et/et_c.awk @@ -118,6 +118,8 @@ c2n["_"]=63 print " */" > outfile print "" > outfile + print "#include " > 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 } diff --git a/lib/et/et_h.awk b/lib/et/et_h.awk index a52c141..687fc6b 100644 --- a/lib/et/et_h.awk +++ b/lib/et/et_h.awk @@ -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 diff --git a/lib/et/test_cases/continuation.c b/lib/et/test_cases/continuation.c index d63fb86..a203242 100644 --- a/lib/et/test_cases/continuation.c +++ b/lib/et/test_cases/continuation.c @@ -3,6 +3,8 @@ * This file is automatically generated; please do not edit it. */ +#include + 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; +} diff --git a/lib/et/test_cases/continuation.et b/lib/et/test_cases/continuation.et index de41379..64d1674 100644 --- a/lib/et/test_cases/continuation.et +++ b/lib/et/test_cases/continuation.et @@ -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\ diff --git a/lib/et/test_cases/continuation.h b/lib/et/test_cases/continuation.h index 3dc2775..45818ce 100644 --- a/lib/et/test_cases/continuation.h +++ b/lib/et/test_cases/continuation.h @@ -5,11 +5,11 @@ #include -#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 index 0000000..942b231 --- /dev/null +++ b/lib/et/test_cases/heimdall.c @@ -0,0 +1,133 @@ +/* + * heimdall.c: + * This file is automatically generated; please do not edit it. + */ + +#include + +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 index 0000000..9dce192 --- /dev/null +++ b/lib/et/test_cases/heimdall.et @@ -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 index 0000000..132b1a8 --- /dev/null +++ b/lib/et/test_cases/heimdall.h @@ -0,0 +1,60 @@ +/* + * heimdall.h: + * This file is automatically generated; please do not edit it. + */ + +#include + +#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 index 0000000..3cb0c94 --- /dev/null +++ b/lib/et/test_cases/heimdall2.c @@ -0,0 +1,119 @@ +/* + * heimdall2.c: + * This file is automatically generated; please do not edit it. + */ + +#include + +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 index 0000000..7a247c5 --- /dev/null +++ b/lib/et/test_cases/heimdall2.et @@ -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 +# . +# +# 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 index 0000000..d828a6c --- /dev/null +++ b/lib/et/test_cases/heimdall2.h @@ -0,0 +1,54 @@ +/* + * heimdall2.h: + * This file is automatically generated; please do not edit it. + */ + +#include + +#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 diff --git a/lib/et/test_cases/simple.c b/lib/et/test_cases/simple.c index 2f70799..099ac17 100644 --- a/lib/et/test_cases/simple.c +++ b/lib/et/test_cases/simple.c @@ -3,6 +3,8 @@ * This file is automatically generated; please do not edit it. */ +#include + 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; +}