summaryrefslogtreecommitdiffstats
path: root/crypto/heimdal/kuser/kinit.c
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/heimdal/kuser/kinit.c')
-rw-r--r--crypto/heimdal/kuser/kinit.c55
1 files changed, 41 insertions, 14 deletions
diff --git a/crypto/heimdal/kuser/kinit.c b/crypto/heimdal/kuser/kinit.c
index be2857c..560e0e2 100644
--- a/crypto/heimdal/kuser/kinit.c
+++ b/crypto/heimdal/kuser/kinit.c
@@ -32,7 +32,7 @@
*/
#include "kuser_locl.h"
-RCSID("$Id: kinit.c,v 1.69 2001/01/05 16:32:55 joda Exp $");
+RCSID("$Id: kinit.c,v 1.75 2001/05/07 21:08:15 assar Exp $");
#ifdef KRB4
/* for when the KDC tells us it's a v4 one, we try to talk that */
@@ -248,7 +248,7 @@ usage (int ret)
arg_printusage (args,
sizeof(args)/sizeof(*args),
NULL,
- "[principal]");
+ "[principal [command]]");
exit (ret);
}
@@ -290,9 +290,12 @@ renew_validate(krb5_context context,
flags.i = 0;
flags.b.renewable = flags.b.renew = renew;
flags.b.validate = validate;
- flags.b.forwardable = forwardable_flag;
- flags.b.proxiable = proxiable_flag;
- flags.b.request_anonymous = anonymous_flag;
+ if (forwardable_flag != -1)
+ flags.b.forwardable = forwardable_flag;
+ if (proxiable_flag != -1)
+ flags.b.proxiable = proxiable_flag;
+ if (anonymous_flag != -1)
+ flags.b.request_anonymous = anonymous_flag;
if(life)
in.times.endtime = time(NULL) + life;
@@ -339,7 +342,7 @@ main (int argc, char **argv)
krb5_addresses no_addrs;
char passwd[256];
- set_progname (argv[0]);
+ setprogname (argv[0]);
memset(&cred, 0, sizeof(cred));
ret = krb5_init_context (&context);
@@ -376,9 +379,6 @@ main (int argc, char **argv)
argc -= optind;
argv += optind;
- if (argc > 1)
- usage (1);
-
if (argv[0]) {
ret = krb5_parse_name (context, argv[0], &principal);
if (ret)
@@ -394,8 +394,26 @@ main (int argc, char **argv)
if(cred_cache)
ret = krb5_cc_resolve(context, cred_cache, &ccache);
- else
- ret = krb5_cc_default (context, &ccache);
+ else {
+ if(argc > 1) {
+ char s[1024];
+ ret = krb5_cc_gen_new(context, &krb5_fcc_ops, &ccache);
+ if(ret)
+ krb5_err(context, 1, ret, "creating cred cache");
+ snprintf(s, sizeof(s), "%s:%s",
+ krb5_cc_get_type(context, ccache),
+ krb5_cc_get_name(context, ccache));
+ setenv("KRB5CCNAME", s, 1);
+#ifdef KRB4
+ snprintf(s, sizeof(s), "%s_XXXXXX", TKT_ROOT);
+ close(mkstemp(s));
+ setenv("KRBTKFILE", s, 1);
+ if (k_hasafs ())
+ k_setpag();
+#endif
+ } else
+ ret = krb5_cc_default (context, &ccache);
+ }
if (ret)
krb5_err (context, 1, ret, "resolving credentials cache");
@@ -437,7 +455,7 @@ main (int argc, char **argv)
errx (1, "unparsable time: %s", renew_life);
krb5_get_init_creds_opt_set_renew_life (&opt, tmp);
- } else if (renewable_flag)
+ } else if (renewable_flag == 1)
krb5_get_init_creds_opt_set_renew_life (&opt, 1 << 30);
if(ticket_life != 0)
@@ -570,9 +588,18 @@ main (int argc, char **argv)
}
if(do_afslog && k_hasafs())
krb5_afslog(context, ccache, NULL, NULL);
-#endif
krb5_free_creds_contents (context, &cred);
- krb5_cc_close (context, ccache);
+#endif
+ if(argc > 1) {
+ simple_execvp(argv[1], argv+1);
+ krb5_cc_destroy(context, ccache);
+#ifdef KRB4
+ dest_tkt();
+ if(k_hasafs())
+ k_unlog();
+#endif
+ } else
+ krb5_cc_close (context, ccache);
krb5_free_context (context);
return 0;
}
OpenPOWER on IntegriCloud