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
;
49 struct getargs args
[] = {
50 { "forwardable", 'f', arg_flag
, &forwardable
,
51 "get forwardable tickets", NULL
},
52 { "renewable", 'r', arg_flag
, &renewable
,
53 "get renewable tickets", NULL
},
54 { "lifetime", 'l', arg_string
, &lifetime
,
55 "lifetime of tickets", "seconds"},
56 { "server", 's', arg_string
, &server
,
57 "server to get ticket for", "principal" },
58 { "version", 0, arg_flag
, &version_flag
,
60 { "help", 0, arg_flag
, &help_flag
,
68 sizeof(args
)/sizeof(*args
),
74 main (int argc
, char **argv
)
79 krb5_principal principal
;
82 krb5_get_init_creds_opt opt
;
84 set_progname (argv
[0]);
85 memset(&cred
, 0, sizeof(cred
));
87 ret
= krb5_init_context (&context
);
89 errx(1, "krb5_init_context failed: %u", ret
);
91 if(getarg(args
, sizeof(args
) / sizeof(args
[0]), argc
, argv
, &optind
))
98 krb5_errx(context
, 0, "%s", heimdal_version
);
100 krb5_get_init_creds_opt_init (&opt
);
103 krb5_get_init_creds_opt_set_forwardable (&opt
, forwardable
);
105 krb5_get_init_creds_opt_set_renew_life (&opt
, 1 << 30);
108 int tmp
= parse_time (lifetime
, NULL
);
110 errx (1, "unparsable time: %s", lifetime
);
112 krb5_get_init_creds_opt_set_tkt_life (&opt
, tmp
);
121 ret
= krb5_cc_default (context
, &ccache
);
123 krb5_err (context
, 1, ret
, "krb5_cc_default");
126 ret
= krb5_parse_name (context
, argv
[0], &principal
);
128 krb5_err (context
, 1, ret
, "krb5_parse_name");
132 ret
= krb5_get_init_creds_password (context
,
144 case KRB5KRB_AP_ERR_BAD_INTEGRITY
:
145 case KRB5KRB_AP_ERR_MODIFIED
:
146 krb5_errx(context
, 1, "Password incorrect");
149 krb5_err(context
, 1, ret
, "krb5_get_init_creds");
152 ret
= krb5_cc_initialize (context
, ccache
, cred
.client
);
154 krb5_err (context
, 1, ret
, "krb5_cc_initialize");
156 ret
= krb5_cc_store_cred (context
, ccache
, &cred
);
158 krb5_err (context
, 1, ret
, "krb5_cc_store_cred");
159 krb5_free_creds_contents (context
, &cred
);
160 krb5_cc_close (context
, ccache
);
161 krb5_free_context (context
);