When running kinit in "fork mode" do pagsh independent of krb4, also

always do krb4 setup of cc. Always try to destroy the v4 cc.

all boolean --{,no-}request-pac that will request pac or not


git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@12960 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2003-10-03 12:21:42 +00:00
parent cdeab003ac
commit f2fe7866d3

View File

@@ -43,6 +43,7 @@ int forwardable_flag = -1;
int proxiable_flag = -1; int proxiable_flag = -1;
int renewable_flag = -1; int renewable_flag = -1;
int renew_flag = 0; int renew_flag = 0;
int pac_flag = -1;
int validate_flag = 0; int validate_flag = 0;
int version_flag = 0; int version_flag = 0;
int help_flag = 0; int help_flag = 0;
@@ -59,11 +60,11 @@ int use_keytab = 0;
char *keytab_str = NULL; char *keytab_str = NULL;
int do_afslog = -1; int do_afslog = -1;
int get_v4_tgt = -1; int get_v4_tgt = -1;
#ifdef KRB4 int convert_524 = 0;
int convert_524;
#endif
int fcache_version; int fcache_version;
static char *krb4_cc_name;
static struct getargs args[] = { static struct getargs args[] = {
/* /*
* used by MIT * used by MIT
@@ -76,10 +77,10 @@ static struct getargs args[] = {
*/ */
{ "524init", '4', arg_flag, &get_v4_tgt, { "524init", '4', arg_flag, &get_v4_tgt,
"obtain version 4 TGT" }, "obtain version 4 TGT" },
#ifdef KRB4
{ "524convert", '9', arg_flag, &convert_524, { "524convert", '9', arg_flag, &convert_524,
"only convert ticket to version 4" }, "only convert ticket to version 4" },
#endif
{ "afslog", 0 , arg_flag, &do_afslog, { "afslog", 0 , arg_flag, &do_afslog,
"obtain afs tokens" }, "obtain afs tokens" },
@@ -134,6 +135,9 @@ static struct getargs args[] = {
{ "anonymous", 0, arg_flag, &anonymous_flag, { "anonymous", 0, arg_flag, &anonymous_flag,
"request an anonymous ticket" }, "request an anonymous ticket" },
{ "request-pac", 0, arg_flag, &pac_flag,
"request a Windows PAC" },
{ "version", 0, arg_flag, &version_flag }, { "version", 0, arg_flag, &version_flag },
{ "help", 0, arg_flag, &help_flag } { "help", 0, arg_flag, &help_flag }
}; };
@@ -292,6 +296,7 @@ do_524init(krb5_context context, krb5_ccache ccache,
krb5_creds *creds, const char *server) krb5_creds *creds, const char *server)
{ {
krb5_error_code ret; krb5_error_code ret;
struct credentials c; struct credentials c;
krb5_creds in_creds, *real_creds; krb5_creds in_creds, *real_creds;
@@ -428,6 +433,9 @@ get_new_tickets(krb5_context context,
krb5_get_init_creds_opt_set_proxiable (opt, proxiable_flag); krb5_get_init_creds_opt_set_proxiable (opt, proxiable_flag);
if(anonymous_flag != -1) if(anonymous_flag != -1)
krb5_get_init_creds_opt_set_anonymous (opt, anonymous_flag); krb5_get_init_creds_opt_set_anonymous (opt, anonymous_flag);
if (pac_flag != -1)
krb5_get_init_creds_opt_set_paq_request(context, opt,
pac_flag ? TRUE : FALSE);
if (!addrs_flag) { if (!addrs_flag) {
no_addrs.len = 0; no_addrs.len = 0;
@@ -629,18 +637,20 @@ main (int argc, char **argv)
krb5_cc_get_type(context, ccache), krb5_cc_get_type(context, ccache),
krb5_cc_get_name(context, ccache)); krb5_cc_get_name(context, ccache));
setenv("KRB5CCNAME", s, 1); setenv("KRB5CCNAME", s, 1);
#ifdef KRB4 if (get_v4_tgt) {
{
int fd; int fd;
snprintf(s, sizeof(s), "%s_XXXXXX", TKT_ROOT); if (asprintf(&krb4_cc_name, "%s_XXXXXXXXXXX", TKT_ROOT) < 0)
if((fd = mkstemp(s)) >= 0) { krb5_errx(context, 1, "out of memory");
if((fd = mkstemp(krb4_cc_name)) >= 0) {
close(fd); close(fd);
setenv("KRBTKFILE", s, 1); setenv("KRBTKFILE", krb4_cc_name, 1);
} else {
free(krb4_cc_name);
krb4_cc_name = NULL;
}
}
if (k_hasafs ()) if (k_hasafs ())
k_setpag(); k_setpag();
}
}
#endif
} else } else
ret = krb5_cc_default (context, &ccache); ret = krb5_cc_default (context, &ccache);
} }
@@ -681,28 +691,23 @@ main (int argc, char **argv)
free_getarg_strings(&extra_addresses); free_getarg_strings(&extra_addresses);
} }
if(renew_flag || validate_flag) { if(renew_flag || validate_flag) {
ret = renew_validate(context, renew_flag, validate_flag, ret = renew_validate(context, renew_flag, validate_flag,
ccache, server, ticket_life); ccache, server, ticket_life);
exit(ret != 0); exit(ret != 0);
} }
#ifdef KRB4
if(!convert_524) if(!convert_524)
#endif
get_new_tickets(context, principal, ccache, ticket_life); get_new_tickets(context, principal, ccache, ticket_life);
if(get_v4_tgt) if(get_v4_tgt || convert_524)
do_524init(context, ccache, NULL, server); do_524init(context, ccache, NULL, server);
if(do_afslog && k_hasafs()) if(do_afslog && k_hasafs())
krb5_afslog(context, ccache, NULL, NULL); krb5_afslog(context, ccache, NULL, NULL);
if(argc > 1) { if(argc > 1) {
simple_execvp(argv[1], argv+1); simple_execvp(argv[1], argv+1);
krb5_cc_destroy(context, ccache); krb5_cc_destroy(context, ccache);
#ifdef KRB4 _krb5_krb_dest_tkt(context, krb4_cc_name);
dest_tkt();
#endif
if(k_hasafs()) if(k_hasafs())
k_unlog(); k_unlog();
} else } else