This patch creates a mapping in the mechglue/spnego code to modify mechanism status codes when passing them back to the application, so that mechglue's display_status dispatcher can determine the correct mechanism to dispatch to. This is part of the "get enhanced error messages from gssapi applications" project; ticket 5590 has updates to the Kerberos 5 mechanism to extract enhanced error messages (when there are any) from the Kerberos library. util/gen.pl, util/t_*.pm: New code generation script and templates. lib/gssapi/generic: Add a new, global mapping that enumerates the {mechOID,status} pairs as they're seen, allowing a magic mechOID value to indicate com_err error codes from mechglue and spnego, and reserving status code 0 for unknown errors. Preload the Kerberos "wrong principal" error code once for each mechanism OID used for Kerberos, so the entries get fixed positions (1-3) in the table. lib/gssapi/gss_libinit.c: Call the initializer and destructor functions. lib/gssapi/mechglue, lib/gssapi/spnego: Enter all mechanism-generated or locally-generated status codes into the mapping table, and return the table index to the application. Do the reverse in display_status, to get the messages from the mechanism.. lib/rpc: Define new function gssrpcint_printf to use for debugging instead of printf, to redirect output away from dejagnu; add a couple more debugging calls. Check for minor status codes 1-3 now instead of KRB5KRB_AP_WRONG_PRINC. tests/dejagnu/krb-standalone/gssftp.exp: Test getting more detailed error messages back, by having the ftp client attempt to authenticate to a non-existent service, and examining the error message for the service principal name. Commit By: raeburn Revision: 19831 Changed Files: U trunk/src/lib/gssapi/generic/Makefile.in U trunk/src/lib/gssapi/generic/gssapiP_generic.h A trunk/src/lib/gssapi/generic/maptest.c A trunk/src/lib/gssapi/generic/util_errmap.c U trunk/src/lib/gssapi/gss_libinit.c U trunk/src/lib/gssapi/mechglue/g_accept_sec_context.c U trunk/src/lib/gssapi/mechglue/g_acquire_cred.c U trunk/src/lib/gssapi/mechglue/g_canon_name.c U trunk/src/lib/gssapi/mechglue/g_compare_name.c U trunk/src/lib/gssapi/mechglue/g_context_time.c U trunk/src/lib/gssapi/mechglue/g_delete_sec_context.c U trunk/src/lib/gssapi/mechglue/g_dsp_name.c U trunk/src/lib/gssapi/mechglue/g_dsp_status.c U trunk/src/lib/gssapi/mechglue/g_dup_name.c U trunk/src/lib/gssapi/mechglue/g_exp_sec_context.c U trunk/src/lib/gssapi/mechglue/g_glue.c U trunk/src/lib/gssapi/mechglue/g_imp_name.c U trunk/src/lib/gssapi/mechglue/g_imp_sec_context.c U trunk/src/lib/gssapi/mechglue/g_init_sec_context.c U trunk/src/lib/gssapi/mechglue/g_initialize.c U trunk/src/lib/gssapi/mechglue/g_inq_context.c U trunk/src/lib/gssapi/mechglue/g_inq_cred.c U trunk/src/lib/gssapi/mechglue/g_inq_names.c U trunk/src/lib/gssapi/mechglue/g_mechname.c U trunk/src/lib/gssapi/mechglue/g_oid_ops.c U trunk/src/lib/gssapi/mechglue/g_process_context.c U trunk/src/lib/gssapi/mechglue/g_rel_cred.c U trunk/src/lib/gssapi/mechglue/g_seal.c U trunk/src/lib/gssapi/mechglue/g_sign.c U trunk/src/lib/gssapi/mechglue/g_store_cred.c U trunk/src/lib/gssapi/mechglue/g_unseal.c U trunk/src/lib/gssapi/mechglue/g_verify.c U trunk/src/lib/gssapi/mechglue/mglueP.h U trunk/src/lib/gssapi/mechglue/oid_ops.c U trunk/src/lib/gssapi/spnego/spnego_mech.c U trunk/src/lib/rpc/auth_gssapi_misc.c U trunk/src/lib/rpc/svc_auth_gssapi.c U trunk/src/tests/dejagnu/krb-standalone/gssftp.exp A trunk/src/util/gen.pl A trunk/src/util/t_array.pm A trunk/src/util/t_enum.pm A trunk/src/util/t_template.pm A trunk/src/util/t_tsenum.pm