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 "kadmin_locl.h"
44 static char *config_file
;
46 static int local_flag
;
48 static int version_flag
;
50 static char *admin_server
;
52 static struct getargs args
[] = {
54 "config-file", 'c', arg_string
, &config_file
,
55 "location of config file", "file"
58 "key-file", 'k', arg_string
, &keyfile
,
59 "location of master key file", "file"
62 "realm", 'r', arg_string
, &realm
,
63 "realm to use", "realm"
66 "admin-server", 'a', arg_string
, &admin_server
,
67 "server to contact", "host"
69 { "local", 'l', arg_flag
, &local_flag
, "local admin mode" },
70 { "help", 'h', arg_flag
, &help_flag
},
71 { "version", 'v', arg_flag
, &version_flag
}
74 static int num_args
= sizeof(args
) / sizeof(args
[0]);
76 static SL_cmd commands
[] = {
77 /* commands that are only available with `-l' */
78 { "dump", dump
, "dump [file]"},
79 { "load", load
, "load file"},
80 { "merge", merge
, "merge file"},
81 { "init", init
, "init realm..."},
83 { "add_new_key", add_new_key
, "add_new_key principal"},
85 { "cpw", cpw_entry
, "cpw_entry principal..."},
88 { "del_entry", del_entry
, "del_entry principal..."},
90 { "ext_keytab", ext_keytab
, "ext_keytab principal..."},
91 { "get_entry", get_entry
, "get_entry principal"},
92 { "rename", rename_entry
, "rename source target"},
93 { "modify", mod_entry
, "modify principal" },
94 { "privileges", get_privs
},
95 { "list_principals",list_princs
, "list expression..." },
96 { "help", help
, "help"},
98 { "exit", exit_kadmin
, "exit"},
102 krb5_context context
;
106 help(int argc
, char **argv
)
108 sl_help(commands
, argc
, argv
);
113 exit_kadmin (int argc
, char **argv
)
121 arg_printusage (args
, num_args
, "");
126 get_privs(int argc
, char **argv
)
132 ret
= kadm5_get_privs(kadm_handle
, &privs
);
134 krb5_warn(context
, ret
, "kadm5_get_privs");
136 ret
=_kadm5_privs_to_string(privs
, str
, sizeof(str
));
143 main(int argc
, char **argv
)
146 krb5_config_section
*cf
;
147 kadm5_config_params conf
;
152 set_progname(argv
[0]);
154 krb5_init_context(&context
);
156 while((e
= getarg(args
, num_args
, argc
, argv
, &optind
)))
157 warnx("error at argument `%s'", argv
[optind
]);
163 krb5_errx(context
, 0, "%s", heimdal_version
);
168 if (config_file
== NULL
)
169 config_file
= HDB_DB_DIR
"/kdc.conf";
171 if(krb5_config_parse_file(config_file
, &cf
) == 0) {
172 const char *p
= krb5_config_get_string (cf
, "kdc", "key-file", NULL
);
177 memset(&conf
, 0, sizeof(conf
));
179 krb5_set_default_realm(context
, realm
); /* XXX should be fixed
182 conf
.mask
|= KADM5_CONFIG_REALM
;
185 conf
.admin_server
= admin_server
;
186 conf
.mask
|= KADM5_CONFIG_ADMIN_SERVER
;
189 ret
= kadm5_s_init_with_password_ctx(context
,
197 ret
= kadm5_c_init_with_password_ctx(context
,
198 /* XXX these are not used */
204 cmd
= commands
+ 4; /* XXX */
208 krb5_err(context
, 1, ret
, "kadm5_init_with_password");
210 exit(sl_command(cmd
, argc
, argv
));
212 ret
= sl_loop(cmd
, "kadmin> ") != 0;
213 kadm5_destroy(kadm_handle
);
214 krb5_free_context(context
);