diff options
author | nectar <nectar@FreeBSD.org> | 2002-08-30 21:23:27 +0000 |
---|---|---|
committer | nectar <nectar@FreeBSD.org> | 2002-08-30 21:23:27 +0000 |
commit | a77dba08ca7d8ad2f2dcd653974ac66df78cfa49 (patch) | |
tree | 6015f89700252fb05eb8fa267c46dba41913e9d8 /crypto/heimdal/kuser/kinit.c | |
parent | 69a91bec14ec3ad49d1c8a82c40a796755f9e4a3 (diff) | |
download | FreeBSD-src-a77dba08ca7d8ad2f2dcd653974ac66df78cfa49.zip FreeBSD-src-a77dba08ca7d8ad2f2dcd653974ac66df78cfa49.tar.gz |
Import of Heimdal Kerberos from KTH repository circa 2002/08/29.
Diffstat (limited to 'crypto/heimdal/kuser/kinit.c')
-rw-r--r-- | crypto/heimdal/kuser/kinit.c | 58 |
1 files changed, 50 insertions, 8 deletions
diff --git a/crypto/heimdal/kuser/kinit.c b/crypto/heimdal/kuser/kinit.c index 18cab20..7f61605 100644 --- a/crypto/heimdal/kuser/kinit.c +++ b/crypto/heimdal/kuser/kinit.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997-2001 Kungliga Tekniska Högskolan + * Copyright (c) 1997-2002 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -32,7 +32,7 @@ */ #include "kuser_locl.h" -RCSID("$Id: kinit.c,v 1.86 2001/09/29 15:59:08 assar Exp $"); +RCSID("$Id: kinit.c,v 1.89 2002/08/21 12:21:31 joda Exp $"); int forwardable_flag = -1; int proxiable_flag = -1; @@ -42,6 +42,7 @@ int validate_flag = 0; int version_flag = 0; int help_flag = 0; int addrs_flag = 1; +struct getarg_strings extra_addresses; int anonymous_flag = 0; char *lifetime = NULL; char *renew_life = NULL; @@ -114,6 +115,9 @@ static struct getargs args[] = { { "addresses", 0, arg_negative_flag, &addrs_flag, "request a ticket with no addresses" }, + { "extra-addresses",'a', arg_strings, &extra_addresses, + "include these extra addresses", "addresses" }, + { "anonymous", 0, arg_flag, &anonymous_flag, "request an anonymous ticket" }, @@ -186,9 +190,9 @@ do_v4_fallback (krb5_context context, KRB_TICKET_GRANTING_TICKET, princ.realm, lifetime, key_to_key, NULL, key); } else { - ret = krb_get_pw_in_tkt2(princ.name, princ.instance, princ.realm, - KRB_TICKET_GRANTING_TICKET, princ.realm, - lifetime, passwd, &key); + ret = krb_get_pw_in_tkt(princ.name, princ.instance, princ.realm, + KRB_TICKET_GRANTING_TICKET, princ.realm, + lifetime, passwd); } memset (key, 0, sizeof(key)); if (ret) { @@ -397,6 +401,7 @@ get_new_tickets(krb5_context context, krb5_creds cred; char passwd[256]; krb5_deltat start_time = 0; + krb5_deltat renew = 0; memset(&cred, 0, sizeof(cred)); @@ -420,14 +425,15 @@ get_new_tickets(krb5_context context, } if(renew_life) { - int tmp = parse_time (renew_life, "s"); - if (tmp < 0) + renew = parse_time (renew_life, "s"); + if (renew < 0) errx (1, "unparsable time: %s", renew_life); - krb5_get_init_creds_opt_set_renew_life (&opt, tmp); + krb5_get_init_creds_opt_set_renew_life (&opt, renew); } else if (renewable_flag == 1) krb5_get_init_creds_opt_set_renew_life (&opt, 1 << 30); + if(ticket_life != 0) krb5_get_init_creds_opt_set_tkt_life (&opt, ticket_life); @@ -524,6 +530,24 @@ get_new_tickets(krb5_context context, krb5_err(context, 1, ret, "krb5_get_init_creds"); } + if(ticket_life != 0) { + if(abs(cred.times.endtime - cred.times.starttime - ticket_life) > 30) { + char life[32]; + unparse_time(cred.times.endtime - cred.times.starttime, + life, sizeof(life)); + krb5_warnx(context, "NOTICE: ticket lifetime is %s", life); + } + } + if(renew != 0) { + if(abs(cred.times.renew_till - cred.times.starttime - renew) > 30) { + char life[32]; + unparse_time(cred.times.renew_till - cred.times.starttime, + life, sizeof(life)); + krb5_warnx(context, "NOTICE: ticket renewable lifetime is %s", + life); + } + } + ret = krb5_cc_initialize (context, ccache, cred.client); if (ret) krb5_err (context, 1, ret, "krb5_cc_initialize"); @@ -628,6 +652,24 @@ main (int argc, char **argv) "afslog", TRUE, &do_afslog); #endif + if(!addrs_flag && extra_addresses.num_strings > 0) + krb5_errx(context, 1, "specifying both extra addresses and " + "no addresses makes no sense"); + { + int i; + krb5_addresses addresses; + memset(&addresses, 0, sizeof(addresses)); + for(i = 0; i < extra_addresses.num_strings; i++) { + ret = krb5_parse_address(context, extra_addresses.strings[i], + &addresses); + if (ret == 0) { + krb5_add_extra_addresses(context, &addresses); + krb5_free_addresses(context, &addresses); + } + } + free_getarg_strings(&extra_addresses); + } + if(renew_flag || validate_flag) { ret = renew_validate(context, renew_flag, validate_flag, |