2 * Copyright (c) 1997 Kungliga Tekniska Högskolan
3 * (Royal Institute of Technology, Stockholm, Sweden).
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
17 * 3. All advertising materials mentioning features or use of this software
18 * must display the following acknowledgement:
19 * This product includes software developed by Kungliga Tekniska
20 * Högskolan and its contributors.
22 * 4. Neither the name of the Institute nor the names of its contributors
23 * may be used to endorse or promote products derived from this software
24 * without specific prior written permission.
26 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
27 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
30 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
31 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
32 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
39 #include "kuser_locl.h"
46 char *lifetime
= NULL
;
48 struct getargs args
[] = {
49 { "forwardable", 'f', arg_flag
, &forwardable
,
50 "get forwardable tickets", NULL
},
51 { "renewable", 'r', arg_flag
, &renewable
,
52 "get renewable tickets", NULL
},
53 { "lifetime", 'l', arg_string
, &lifetime
,
54 "lifetime of tickets", "seconds"},
55 { "version", 0, arg_flag
, &version_flag
,
57 { "help", 0, arg_flag
, &help_flag
,
65 sizeof(args
)/sizeof(*args
),
71 main (int argc
, char **argv
)
76 krb5_principal principal
;
79 krb5_get_init_creds_opt opt
;
81 set_progname (argv
[0]);
82 memset(&cred
, 0, sizeof(cred
));
84 ret
= krb5_init_context (&context
);
86 errx(1, "krb5_init_context failed: %u", ret
);
88 if(getarg(args
, sizeof(args
) / sizeof(args
[0]), argc
, argv
, &optind
))
95 krb5_errx(context
, 0, "%s", heimdal_version
);
97 krb5_get_init_creds_opt_init (&opt
);
100 krb5_get_init_creds_opt_set_forwardable (&opt
, forwardable
);
102 krb5_get_init_creds_opt_set_renew_life (&opt
, 1 << 30);
105 int tmp
= parse_time (lifetime
, NULL
);
107 errx (1, "unparsable time: %s", lifetime
);
109 krb5_get_init_creds_opt_set_tkt_life (&opt
, tmp
);
118 ret
= krb5_cc_default (context
, &ccache
);
120 krb5_err (context
, 1, ret
, "krb5_cc_default");
123 ret
= krb5_parse_name (context
, argv
[0], &principal
);
125 krb5_err (context
, 1, ret
, "krb5_parse_name");
129 ret
= krb5_get_init_creds_password (context
,
141 case KRB5KRB_AP_ERR_BAD_INTEGRITY
:
142 case KRB5KRB_AP_ERR_MODIFIED
:
143 krb5_errx(context
, 1, "Password incorrect");
146 krb5_err(context
, 1, ret
, "krb5_get_init_creds");
149 ret
= krb5_cc_initialize (context
, ccache
, cred
.client
);
151 krb5_err (context
, 1, ret
, "krb5_cc_initialize");
153 ret
= krb5_cc_store_cred (context
, ccache
, &cred
);
155 krb5_err (context
, 1, ret
, "krb5_cc_store_cred");
156 krb5_free_creds_contents (context
, &cred
);
157 krb5_cc_close (context
, ccache
);
158 krb5_free_context (context
);