Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/crypto/heimdal/admin/ktutil.c
34865 views
1
/*
2
* Copyright (c) 1997-2004 Kungliga Tekniska Högskolan
3
* (Royal Institute of Technology, Stockholm, Sweden).
4
* All rights reserved.
5
*
6
* Redistribution and use in source and binary forms, with or without
7
* modification, are permitted provided that the following conditions
8
* are met:
9
*
10
* 1. Redistributions of source code must retain the above copyright
11
* notice, this list of conditions and the following disclaimer.
12
*
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.
16
*
17
* 3. Neither the name of the Institute nor the names of its contributors
18
* may be used to endorse or promote products derived from this software
19
* without specific prior written permission.
20
*
21
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
22
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
25
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31
* SUCH DAMAGE.
32
*/
33
34
#include "ktutil_locl.h"
35
#include <err.h>
36
37
RCSID("$Id$");
38
39
static int help_flag;
40
static int version_flag;
41
int verbose_flag;
42
char *keytab_string;
43
static char keytab_buf[256];
44
45
static struct getargs args[] = {
46
{
47
"version",
48
0,
49
arg_flag,
50
&version_flag,
51
NULL,
52
NULL
53
},
54
{
55
"help",
56
'h',
57
arg_flag,
58
&help_flag,
59
NULL,
60
NULL
61
},
62
{
63
"keytab",
64
'k',
65
arg_string,
66
&keytab_string,
67
"keytab",
68
"keytab to operate on"
69
},
70
{
71
"verbose",
72
'v',
73
arg_flag,
74
&verbose_flag,
75
"verbose",
76
"run verbosely"
77
}
78
};
79
80
static int num_args = sizeof(args) / sizeof(args[0]);
81
82
krb5_context context;
83
84
krb5_keytab
85
ktutil_open_keytab(void)
86
{
87
krb5_error_code ret;
88
krb5_keytab keytab;
89
if (keytab_string == NULL) {
90
ret = krb5_kt_default_name (context, keytab_buf, sizeof(keytab_buf));
91
if (ret) {
92
krb5_warn(context, ret, "krb5_kt_default_name");
93
return NULL;
94
}
95
keytab_string = keytab_buf;
96
}
97
ret = krb5_kt_resolve(context, keytab_string, &keytab);
98
if (ret) {
99
krb5_warn(context, ret, "resolving keytab %s", keytab_string);
100
return NULL;
101
}
102
if (verbose_flag)
103
fprintf (stderr, "Using keytab %s\n", keytab_string);
104
105
return keytab;
106
}
107
108
int
109
help(void *opt, int argc, char **argv)
110
{
111
if(argc == 0) {
112
sl_help(commands, 1, argv - 1 /* XXX */);
113
} else {
114
SL_cmd *c = sl_match (commands, argv[0], 0);
115
if(c == NULL) {
116
fprintf (stderr, "No such command: %s. "
117
"Try \"help\" for a list of commands\n",
118
argv[0]);
119
} else {
120
if(c->func) {
121
char shelp[] = "--help";
122
char *fake[3];
123
fake[0] = argv[0];
124
fake[1] = shelp;
125
fake[2] = NULL;
126
(*c->func)(2, fake);
127
fprintf(stderr, "\n");
128
}
129
if(c->help && *c->help)
130
fprintf (stderr, "%s\n", c->help);
131
if((++c)->name && c->func == NULL) {
132
int f = 0;
133
fprintf (stderr, "Synonyms:");
134
while (c->name && c->func == NULL) {
135
fprintf (stderr, "%s%s", f ? ", " : " ", (c++)->name);
136
f = 1;
137
}
138
fprintf (stderr, "\n");
139
}
140
}
141
}
142
return 0;
143
}
144
145
static void
146
usage(int status)
147
{
148
arg_printusage(args, num_args, NULL, "command");
149
exit(status);
150
}
151
152
int
153
main(int argc, char **argv)
154
{
155
int optidx = 0;
156
krb5_error_code ret;
157
setprogname(argv[0]);
158
ret = krb5_init_context(&context);
159
if (ret)
160
errx (1, "krb5_init_context failed: %d", ret);
161
if(getarg(args, num_args, argc, argv, &optidx))
162
usage(1);
163
if(help_flag)
164
usage(0);
165
if(version_flag) {
166
print_version(NULL);
167
exit(0);
168
}
169
argc -= optidx;
170
argv += optidx;
171
if(argc == 0)
172
usage(1);
173
ret = sl_command(commands, argc, argv);
174
if(ret == -1)
175
krb5_warnx (context, "unrecognized command: %s", argv[0]);
176
return ret;
177
}
178
179