diff options
author | Ken Raeburn <raeburn@mit.edu> | 2007-08-16 22:55:06 +0000 |
---|---|---|
committer | Ken Raeburn <raeburn@mit.edu> | 2007-08-16 22:55:06 +0000 |
commit | c15ec7751a7d7c1d97dbeb1dd88dda2a328515e0 (patch) | |
tree | 824bd8c158b1c5b72913515953c7e8576399d912 /src/util/gen.pl | |
parent | 9db2f5eb745287654117e70032d05dd9f5a91a3f (diff) | |
download | krb5-c15ec7751a7d7c1d97dbeb1dd88dda2a328515e0.tar.gz krb5-c15ec7751a7d7c1d97dbeb1dd88dda2a328515e0.tar.xz krb5-c15ec7751a7d7c1d97dbeb1dd88dda2a328515e0.zip |
remap mechanism-specific status codes in mechglue/spnego
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.
ticket: new
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@19831 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/util/gen.pl')
-rw-r--r-- | src/util/gen.pl | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/util/gen.pl b/src/util/gen.pl new file mode 100644 index 000000000..9d2a3a180 --- /dev/null +++ b/src/util/gen.pl @@ -0,0 +1,61 @@ +# -*- perl -*- + +# Crude template instantiation hack. +# +# The template named on the command line maps to a perl module t_$foo +# which defines certain methods including variable processing and +# output generation. It can also suck in additional template modules +# for internal use. One output file is generated, which typically +# contains structures and inline functions, and should be included by +# other files which will define, for example, the typedefname +# parameters supplied to this script. + +# To do: +# Find a way to make dependency generation automatic. +# Make it less gross. + +sub usage { + print STDERR "usage: $0 TemplateName [-oOutputFile] PARM=value ...\n"; + print STDERR " where acceptable PARM values depend on the template\n"; + exit(1); +} + +my $orig_args = join(" ", @ARGV); +my $templatename = shift @ARGV || &usage; +my $outfile = shift @ARGV || &usage; +my $x; + +eval "require t_$templatename;" || die; +eval "\$x = new t_$templatename;" || die; + +sub getparms { + my $arg; + my $outfile; + my %allowed_parms = (); + + foreach $arg (@ARGV) { + my @words = split '=', $arg; + if ($#words != 1) { + print STDERR "$0: $arg : #words = $#words\n"; + &usage; + } + $x->setparm($words[0], $words[1]); + } +} + +sub generate { + open OUTFILE, ">$outfile" || die; + print OUTFILE "/*\n"; + print OUTFILE " * This file is generated, please don't edit it.\n"; + print OUTFILE " * script: $0\n"; + print OUTFILE " * args: $orig_args\n"; + print OUTFILE " * The rest of this file is copied from a template, with\n"; + print OUTFILE " * substitutions. See the template for copyright info.\n"; + print OUTFILE " */\n"; + $x->output(\*OUTFILE); + close OUTFILE; +} + +&getparms; +&generate; +exit (0); |