1 /*	$NetBSD: test_gic.c,v 1.1.1.2 2014/04/24 12:45:51 pettai Exp $	*/
2 
3 /*
4  * Copyright (c) 2009 Kungliga Tekniska H�gskolan
5  * (Royal Institute of Technology, Stockholm, Sweden).
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  * 1. Redistributions of source code must retain the above copyright
13  *    notice, this list of conditions and the following disclaimer.
14  *
15  * 2. Redistributions in binary form must reproduce the above copyright
16  *    notice, this list of conditions and the following disclaimer in the
17  *    documentation and/or other materials provided with the distribution.
18  *
19  * 3. Neither the name of KTH nor the names of its contributors may be
20  *    used to endorse or promote products derived from this software without
21  *    specific prior written permission.
22  *
23  * THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS'' AND ANY
24  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
26  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE
27  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
30  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
31  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
32  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
33  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
34 
35 #include "krb5_locl.h"
36 #include <err.h>
37 #include <krb5/getarg.h>
38 
39 static char *password_str;
40 
41 static krb5_error_code
lr_proc(krb5_context context,krb5_last_req_entry ** e,void * ctx)42 lr_proc(krb5_context context, krb5_last_req_entry **e, void *ctx)
43 {
44     while (e && *e) {
45 	printf("e type: %d value: %d\n", (*e)->lr_type, (int)(*e)->value);
46 	e++;
47     }
48     return 0;
49 }
50 
51 static void
test_get_init_creds(krb5_context context,krb5_principal client)52 test_get_init_creds(krb5_context context,
53 		    krb5_principal client)
54 {
55     krb5_error_code ret;
56     krb5_get_init_creds_opt *opt;
57     krb5_creds cred;
58 
59     ret = krb5_get_init_creds_opt_alloc(context, &opt);
60     if (ret)
61 	krb5_err(context, 1, ret, "krb5_get_init_creds_opt_alloc");
62 
63 
64     ret = krb5_get_init_creds_opt_set_process_last_req(context,
65 						       opt,
66 						       lr_proc,
67 						       NULL);
68     if (ret)
69 	krb5_err(context, 1, ret,
70 		 "krb5_get_init_creds_opt_set_process_last_req");
71 
72     ret = krb5_get_init_creds_password(context,
73 				       &cred,
74 				       client,
75 				       password_str,
76 				       krb5_prompter_posix,
77 				       NULL,
78 				       0,
79 				       NULL,
80 				       opt);
81     if (ret)
82 	krb5_err(context, 1, ret, "krb5_get_init_creds_password");
83 
84     krb5_get_init_creds_opt_free(context, opt);
85 }
86 
87 static char *client_str = NULL;
88 static int debug_flag	= 0;
89 static int version_flag = 0;
90 static int help_flag	= 0;
91 
92 static struct getargs args[] = {
93     {"client",	0,	arg_string,	&client_str,
94      "client principal to use", NULL },
95     {"password",0,	arg_string,	&password_str,
96      "password", NULL },
97     {"debug",	'd',	arg_flag,	&debug_flag,
98      "turn on debuggin", NULL },
99     {"version",	0,	arg_flag,	&version_flag,
100      "print version", NULL },
101     {"help",	0,	arg_flag,	&help_flag,
102      NULL, NULL }
103 };
104 
105 static void
usage(int ret)106 usage (int ret)
107 {
108     arg_printusage (args, sizeof(args)/sizeof(*args), NULL, "hostname ...");
109     exit (ret);
110 }
111 
112 
113 int
main(int argc,char ** argv)114 main(int argc, char **argv)
115 {
116     krb5_context context;
117     krb5_error_code ret;
118     int optidx = 0, errors = 0;
119     krb5_principal client;
120 
121     setprogname(argv[0]);
122 
123     if(getarg(args, sizeof(args) / sizeof(args[0]), argc, argv, &optidx))
124 	usage(1);
125 
126     if (help_flag)
127 	usage (0);
128 
129     if(version_flag){
130 	print_version(NULL);
131 	exit(0);
132     }
133 
134     if(client_str == NULL)
135 	errx(1, "client is not set");
136 
137     ret = krb5_init_context(&context);
138     if (ret)
139 	errx (1, "krb5_init_context failed: %d", ret);
140 
141     ret = krb5_parse_name(context, client_str, &client);
142     if (ret)
143 	krb5_err(context, 1, ret, "krb5_parse_name: %d", ret);
144 
145     test_get_init_creds(context, client);
146 
147     krb5_free_context(context);
148 
149     return errors;
150 }
151