1 /*
2 * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
3 * Use is subject to license terms.
4 */
5
6 /*
7 * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
8 *
9 * Openvision retains the copyright to derivative works of
10 * this source code. Do *NOT* create a derivative of this
11 * source code before consulting with your legal department.
12 * Do *NOT* integrate *ANY* of this source code into another
13 * product before consulting with your legal department.
14 *
15 * For further information, read the top-level Openvision
16 * copyright which is contained in the top-level MIT Kerberos
17 * copyright.
18 *
19 * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
20 *
21 */
22
23
24 /*
25 * admin/destroy/kdb5_destroy.c
26 *
27 * Copyright 1990 by the Massachusetts Institute of Technology.
28 * All Rights Reserved.
29 *
30 * Export of this software from the United States of America may
31 * require a specific license from the United States Government.
32 * It is the responsibility of any person or organization contemplating
33 * export to obtain such a license before exporting.
34 *
35 * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
36 * distribute this software and its documentation for any purpose and
37 * without fee is hereby granted, provided that the above copyright
38 * notice appear in all copies and that both that copyright notice and
39 * this permission notice appear in supporting documentation, and that
40 * the name of M.I.T. not be used in advertising or publicity pertaining
41 * to distribution of the software without specific, written prior
42 * permission. Furthermore if you modify this software you must label
43 * your software as modified software and not distribute it in such a
44 * fashion that it might be confused with the original M.I.T. software.
45 * M.I.T. makes no representations about the suitability of
46 * this software for any purpose. It is provided "as is" without express
47 * or implied warranty.
48 *
49 *
50 * kdb_dest(roy): destroy the named database.
51 *
52 * This version knows about DBM format databases.
53 */
54
55 #include "k5-int.h"
56 #include <stdio.h>
57 #include "com_err.h"
58 #include <kadm5/admin.h>
59 #include <kdb.h>
60 #include <libintl.h>
61 #include "kdb5_util.h"
62
63 extern int exit_status;
64 extern krb5_boolean dbactive;
65 extern kadm5_config_params global_params;
66
67 void
kdb5_destroy(argc,argv)68 kdb5_destroy(argc, argv)
69 int argc;
70 char *argv[];
71 {
72 extern char *optarg;
73 extern int optind;
74 int optchar;
75 char *dbname;
76 char buf[5];
77 krb5_error_code retval1;
78 krb5_context context;
79 int force = 0;
80 char ufilename[MAX_FILENAME];
81
82 retval1 = kadm5_init_krb5_context(&context);
83 if( retval1 )
84 {
85 /* Solaris Kerberos */
86 com_err(progname, retval1, "while initializing krb5_context");
87 exit(1);
88 }
89
90 if ((retval1 = krb5_set_default_realm(context,
91 util_context->default_realm))) {
92 /* Solaris Kerberos */
93 com_err(progname, retval1, "while setting default realm name");
94 exit(1);
95 }
96
97 /* Solaris Kerberos */
98 #if 0
99 if (strrchr(argv[0], '/'))
100 argv[0] = strrchr(argv[0], '/')+1;
101 #endif
102 dbname = global_params.dbname;
103
104 optind = 1;
105 while ((optchar = getopt(argc, argv, "f")) != -1) {
106 switch(optchar) {
107 case 'f':
108 force++;
109 break;
110 case '?':
111 default:
112 usage();
113 return;
114 /*NOTREACHED*/
115 }
116 }
117 if (!force) {
118 printf(gettext("Deleting KDC database stored in '%s', "
119 "are you sure?\n"), dbname);
120 printf(gettext("(type 'yes' or 'y' to confirm)? "));
121 if (fgets(buf, sizeof(buf), stdin) == NULL) {
122 exit_status++; return;
123 }
124 if ((strncmp(buf, gettext("yes\n"),
125 strlen(gettext("yes\n"))) != 0) &&
126 (strncmp(buf, gettext("y\n"),
127 strlen(gettext("y\n"))) != 0)) {
128 printf(gettext("database not deleted !! '%s'...\n"),
129 dbname);
130
131 exit_status++; return;
132 }
133 printf(gettext("OK, deleting database '%s'...\n"), dbname);
134 }
135
136 retval1 = krb5_db_destroy(context, db5util_db_args);
137
138 /* check for a stash file and delete it if necessary */
139 if (global_params.stash_file == NULL) {
140 char stash[MAXPATHLEN+1];
141 extern krb5_principal master_princ;
142 krb5_data *realm = krb5_princ_realm(context, master_princ);
143 (void) strlcpy(stash, DEFAULT_KEYFILE_STUB, sizeof (stash));
144 /*
145 * realm->data is not necessarily NULL terminated so be
146 * careful how much data is copied here. Don't overrun
147 * the "stash" buffer and dont overrun the realm->data buffer,
148 * copy the smaller of the 2 lengths.
149 */
150 (void) strncat(stash, realm->data,
151 (realm->length < (MAXPATHLEN-strlen(stash)) ? realm->length :
152 MAXPATHLEN-strlen(stash)));
153 global_params.stash_file = (char *)strdup(stash);
154 }
155 if (!access(global_params.stash_file, F_OK))
156 (void)unlink(global_params.stash_file);
157
158 if (retval1) {
159 /* Solaris Kerberos */
160 com_err(progname, retval1,
161 gettext("deleting database '%s'"), dbname);
162 exit_status++; return;
163 }
164
165 if (global_params.iprop_enabled) {
166 if (strlcpy(ufilename, dbname, MAX_FILENAME) >= MAX_FILENAME) {
167 exit_status++;
168 return;
169 }
170 if (strlcat(ufilename, ".ulog", MAX_FILENAME) >= MAX_FILENAME) {
171 exit_status++;
172 return;
173 }
174
175 (void) unlink(ufilename);
176 }
177
178 dbactive = FALSE;
179 printf(gettext("** Database '%s' destroyed.\n"), dbname);
180 return;
181 }
182