summaryrefslogtreecommitdiffstats
path: root/src/kadmin/dbutil
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@mit.edu>2005-06-21 01:36:03 +0000
committerKen Raeburn <raeburn@mit.edu>2005-06-21 01:36:03 +0000
commitf72c3ffaca4600d4e75282857ce4dda11106d5e7 (patch)
tree89df6e717f00e1687994fc089fd6df9ff8a5c21c /src/kadmin/dbutil
parentf4aaa29ac68e3dd5a2ae326cd54918c7250558e9 (diff)
downloadkrb5-f72c3ffaca4600d4e75282857ce4dda11106d5e7.tar.gz
krb5-f72c3ffaca4600d4e75282857ce4dda11106d5e7.tar.xz
krb5-f72c3ffaca4600d4e75282857ce4dda11106d5e7.zip
Novell Database Abstraction Layer merge.
Will probably break things. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@17258 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/kadmin/dbutil')
-rw-r--r--src/kadmin/dbutil/ChangeLog13
-rw-r--r--src/kadmin/dbutil/Makefile.in12
-rw-r--r--src/kadmin/dbutil/dump.c245
-rw-r--r--src/kadmin/dbutil/kadm5_create.c9
-rw-r--r--src/kadmin/dbutil/kdb5_create.c66
-rw-r--r--src/kadmin/dbutil/kdb5_destroy.c29
-rw-r--r--src/kadmin/dbutil/kdb5_stash.c27
-rw-r--r--src/kadmin/dbutil/kdb5_util.c107
-rw-r--r--src/kadmin/dbutil/kdb5_util.h5
-rw-r--r--src/kadmin/dbutil/ovload.c12
10 files changed, 260 insertions, 265 deletions
diff --git a/src/kadmin/dbutil/ChangeLog b/src/kadmin/dbutil/ChangeLog
index 374052d4fe..dae3be477c 100644
--- a/src/kadmin/dbutil/ChangeLog
+++ b/src/kadmin/dbutil/ChangeLog
@@ -1,3 +1,16 @@
+2005-06-20 Ken Raeburn <raeburn@mit.edu>
+
+ Novell merge.
+ * Makefile.in:
+ * dump.c:
+ * kadm5_create.c:
+ * kdb5_create.c:
+ * kdb5_destroy.c:
+ * kdb5_stash.c:
+ * kdb5_util.c:
+ * kdb5_util.h:
+ * ovload.c:
+
2004-08-27 Ken Raeburn <raeburn@mit.edu>
* loadv4.c (enter_in_v5_db): Terminate argument list of
diff --git a/src/kadmin/dbutil/Makefile.in b/src/kadmin/dbutil/Makefile.in
index 34569f23d0..6f1fae6278 100644
--- a/src/kadmin/dbutil/Makefile.in
+++ b/src/kadmin/dbutil/Makefile.in
@@ -6,16 +6,20 @@ DEFINES = -DKDB4_DISABLE
LOCALINCLUDES = -I. @KRB4_INCLUDES@
PROG_LIBPATH=-L$(TOPLIBD) $(KRB4_LIBPATH)
PROG_RPATH=$(KRB5_LIBDIR)
+KDB_DEP_LIB=-ldl -lpthread
PROG = kdb5_util
-OBJS = kdb5_util.o dump.o dumpv4.o loadv4.o \
- kdb5_create.o kadm5_create.o string_table.o kdb5_stash.o \
- kdb5_destroy.o ovload.o import_err.o strtok.o
+###OBJS = kdb5_util.o dump.o dumpv4.o loadv4.o \
+### kdb5_create.o kadm5_create.o string_table.o kdb5_stash.o \
+### kdb5_destroy.o ovload.o import_err.o strtok.o
+###
+
+OBJS = kdb5_util.o kdb5_create.o kadm5_create.o string_table.o kdb5_destroy.o kdb5_stash.o import_err.o strtok.o dump.o ovload.o
all:: $(PROG)
$(PROG): $(OBJS) $(KADMSRV_DEPLIBS) $(KRB4COMPAT_DEPLIBS)
- $(CC_LINK) -o $(PROG) $(OBJS) $(KADMSRV_LIBS) $(KRB4COMPAT_LIBS)
+ $(CC_LINK) -o $(PROG) $(OBJS) $(KADMSRV_LIBS) $(KDB_DEP_LIB) $(KRB4COMPAT_LIBS)
import_err.c import_err.h: $(srcdir)/import_err.et
diff --git a/src/kadmin/dbutil/dump.c b/src/kadmin/dbutil/dump.c
index 8dee427c74..74f2cde68b 100644
--- a/src/kadmin/dbutil/dump.c
+++ b/src/kadmin/dbutil/dump.c
@@ -30,7 +30,8 @@
#include <stdio.h>
#include <k5-int.h>
#include <kadm5/admin.h>
-#include <kadm5/adb.h>
+#include <kadm5/server_internal.h>
+#include <krb5/kdb.h>
#include <com_err.h>
#include "kdb5_util.h"
#if defined(HAVE_REGEX_H) && defined(HAVE_REGCOMP)
@@ -91,15 +92,15 @@ typedef krb5_error_code (*dump_func)(krb5_pointer,
krb5_db_entry *);
static int process_k5beta_record (char *, krb5_context,
- FILE *, int, int *, void *);
+ FILE *, int, int *);
static int process_k5beta6_record (char *, krb5_context,
- FILE *, int, int *, void *);
+ FILE *, int, int *);
static int process_k5beta7_record (char *, krb5_context,
- FILE *, int, int *, void *);
+ FILE *, int, int *);
static int process_ov_record (char *, krb5_context,
- FILE *, int, int *, void *);
+ FILE *, int, int *);
typedef krb5_error_code (*load_func)(char *, krb5_context,
- FILE *, int, int *, void *);
+ FILE *, int, int *);
typedef struct _dump_version {
char *name;
@@ -145,7 +146,7 @@ dump_version ov_version = {
1,
dump_ov_princ,
dump_k5beta7_policy,
- process_ov_record,
+ process_ov_record
};
dump_version r1_3_version = {
@@ -960,7 +961,7 @@ static krb5_error_code dump_ov_princ(krb5_pointer ptr, krb5_db_entry *kdb)
tl_data.tl_data_length, XDR_DECODE);
if (! xdr_osa_princ_ent_rec(&xdrs, &adb)) {
xdr_destroy(&xdrs);
- return(OSA_ADB_XDR_FAILURE);
+ return(KADM5_XDR_FAILURE);
}
xdr_destroy(&xdrs);
@@ -1021,7 +1022,6 @@ dump_db(argc, argv)
dump_version *dump;
int aindex;
krb5_boolean locked;
- extern osa_adb_policy_t policy_db;
char *new_mkey_file = 0;
/*
@@ -1080,7 +1080,7 @@ dump_db(argc, argv)
* Make sure the database is open. The policy database only has
* to be opened if we try a dump that uses it.
*/
- if (!dbactive || (dump->dump_policy != NULL && policy_db == NULL)) {
+ if (!dbactive) {
com_err(argv[0], 0, Err_no_database);
exit_status++;
return;
@@ -1174,17 +1174,17 @@ dump_db(argc, argv)
if (dump->header[strlen(dump->header)-1] != '\n')
fputc('\n', arglist.ofile);
- if ((kret = krb5_db_iterate_ext(util_context,
- dump->dump_princ,
- (krb5_pointer) &arglist,
- backwards, recursive))) {
+ if ((kret = krb5_db_iterate(util_context,
+ NULL,
+ dump->dump_princ,
+ (krb5_pointer) &arglist))) { /* TBD: backwards and recursive not supported */
fprintf(stderr, dumprec_err,
programname, dump->name, error_message(kret));
exit_status++;
}
if (dump->dump_policy &&
- (kret = osa_adb_iter_policy(policy_db, dump->dump_policy,
- &arglist))) {
+ (kret = krb5_db_iter_policy( util_context, "*", dump->dump_policy,
+ &arglist))) {
fprintf(stderr, dumprec_err, programname, dump->name,
error_message(kret));
exit_status++;
@@ -1363,13 +1363,12 @@ update_tl_data(kcontext, dbentp, mod_name, mod_date, last_pwd_change)
* Returns -1 for end of file, 0 for success and 1 for failure.
*/
static int
-process_k5beta_record(fname, kcontext, filep, verbose, linenop, pol_db)
+process_k5beta_record(fname, kcontext, filep, verbose, linenop)
char *fname;
krb5_context kcontext;
FILE *filep;
int verbose;
int *linenop;
- void *pol_db;
{
int nmatched;
int retval;
@@ -1664,13 +1663,12 @@ process_k5beta_record(fname, kcontext, filep, verbose, linenop, pol_db)
* Returns -1 for end of file, 0 for success and 1 for failure.
*/
static int
-process_k5beta6_record(fname, kcontext, filep, verbose, linenop, pol_db)
+process_k5beta6_record(fname, kcontext, filep, verbose, linenop)
char *fname;
krb5_context kcontext;
FILE *filep;
int verbose;
int *linenop;
- void *pol_db;
{
int retval;
krb5_db_entry dbentry;
@@ -1948,9 +1946,9 @@ process_k5beta7_policy(fname, kcontext, filep, verbose, linenop, pol_db)
return 1;
}
- if ((ret = osa_adb_create_policy(pol_db, &rec))) {
- if (ret == OSA_ADB_DUP &&
- ((ret = osa_adb_put_policy(pol_db, &rec)))) {
+ if ((ret = krb5_db_create_policy(kcontext, &rec))) {
+ if (ret &&
+ ((ret = krb5_db_put_policy(kcontext, &rec)))) {
fprintf(stderr, "cannot create policy on line %d: %s\n",
*linenop, error_message(ret));
return 1;
@@ -1968,13 +1966,12 @@ process_k5beta7_policy(fname, kcontext, filep, verbose, linenop, pol_db)
* Returns -1 for end of file, 0 for success and 1 for failure.
*/
static int
-process_k5beta7_record(fname, kcontext, filep, verbose, linenop, pol_db)
+process_k5beta7_record(fname, kcontext, filep, verbose, linenop)
char *fname;
krb5_context kcontext;
FILE *filep;
int verbose;
int *linenop;
- void *pol_db;
{
int nread;
char rectype[100];
@@ -1986,10 +1983,10 @@ process_k5beta7_record(fname, kcontext, filep, verbose, linenop, pol_db)
return 1;
if (strcmp(rectype, "princ") == 0)
process_k5beta6_record(fname, kcontext, filep, verbose,
- linenop, pol_db);
+ linenop);
else if (strcmp(rectype, "policy") == 0)
process_k5beta7_policy(fname, kcontext, filep, verbose,
- linenop, pol_db);
+ linenop);
else {
fprintf(stderr, "unknown record type \"%s\" on line %d\n",
rectype, *linenop);
@@ -2005,13 +2002,12 @@ process_k5beta7_record(fname, kcontext, filep, verbose, linenop, pol_db)
* Returns -1 for end of file, 0 for success and 1 for failure.
*/
static int
-process_ov_record(fname, kcontext, filep, verbose, linenop, pol_db)
+process_ov_record(fname, kcontext, filep, verbose, linenop)
char *fname;
krb5_context kcontext;
FILE *filep;
int verbose;
int *linenop;
- void *pol_db;
{
int nread;
char rectype[100];
@@ -2023,10 +2019,10 @@ process_ov_record(fname, kcontext, filep, verbose, linenop, pol_db)
return 1;
if (strcmp(rectype, "princ") == 0)
process_ov_principal(fname, kcontext, filep, verbose,
- linenop, pol_db);
+ linenop);
else if (strcmp(rectype, "policy") == 0)
process_k5beta7_policy(fname, kcontext, filep, verbose,
- linenop, pol_db);
+ linenop);
else if (strcmp(rectype, "End") == 0)
return -1;
else {
@@ -2042,14 +2038,13 @@ process_ov_record(fname, kcontext, filep, verbose, linenop, pol_db)
* restore_dump() - Restore the database from any version dump file.
*/
static int
-restore_dump(programname, kcontext, dumpfile, f, verbose, dump, pol_db)
+restore_dump(programname, kcontext, dumpfile, f, verbose, dump)
char *programname;
krb5_context kcontext;
char *dumpfile;
FILE *f;
int verbose;
dump_version *dump;
- osa_adb_policy_t pol_db;
{
int error;
int lineno;
@@ -2064,8 +2059,7 @@ restore_dump(programname, kcontext, dumpfile, f, verbose, dump, pol_db)
kcontext,
f,
verbose,
- &lineno,
- pol_db)))
+ &lineno)))
;
if (error != -1)
fprintf(stderr, err_line_fmt, programname, lineno, dumpfile);
@@ -2085,7 +2079,6 @@ load_db(argc, argv)
char **argv;
{
kadm5_config_params newparams;
- osa_adb_policy_t tmppol_db;
krb5_error_code kret;
krb5_context kcontext;
FILE *f;
@@ -2115,7 +2108,6 @@ load_db(argc, argv)
crflags = KRB5_KDB_CREATE_BTREE;
exit_status = 0;
dbname_tmp = (char *) NULL;
- tmppol_db = NULL;
for (aindex = 1; aindex < argc; aindex++) {
if (!strcmp(argv[aindex], oldoption))
load = &old_version;
@@ -2130,7 +2122,21 @@ load_db(argc, argv)
else if (!strcmp(argv[aindex], updateoption))
update = 1;
else if (!strcmp(argv[aindex], hashoption))
- crflags = KRB5_KDB_CREATE_HASH;
+ {
+ db5util_db_args_size++;
+ {
+ char **temp = realloc( db5util_db_args, sizeof(char*) * (db5util_db_args_size+1)); /* one for NULL */
+ if( temp == NULL )
+ {
+ com_err(progname, ENOMEM, "while parsing command arguments\n");
+ exit(1);
+ }
+
+ db5util_db_args = temp;
+ }
+ db5util_db_args[db5util_db_args_size-1] = "hash=true";
+ db5util_db_args[db5util_db_args_size] = NULL;
+ }
else
break;
}
@@ -2159,6 +2165,14 @@ load_db(argc, argv)
return;
}
+ if( (kret = krb5_set_default_realm(kcontext, util_context->default_realm)) )
+ {
+ fprintf(stderr, "%s: Unable to set the default realm\n", programname);
+ free(dbname_tmp);
+ exit_status++;
+ return;
+ }
+
/*
* Open the dumpfile
*/
@@ -2221,7 +2235,7 @@ load_db(argc, argv)
/*
* Cons up params for the new databases. If we are not in update
- * mode use a temp name that we'll rename later.
+ * mode, we dont create tmp file and then move it to final place. As it is dependent on DB type, this is not done
*/
newparams = global_params;
if (! update) {
@@ -2238,105 +2252,67 @@ load_db(argc, argv)
}
/*
- * If not an update restoration, create the temp database. Always
- * create a temp policy db, even if we are not loading a dump file
- * with policy info, because they may be loading an old dump
- * intending to use it with the new kadm5 system.
+ * If not an update restoration, create the database. otherwise open
*/
- if (!update && ((kret = krb5_db_create(kcontext, dbname_tmp, crflags)))) {
- fprintf(stderr, dbcreaterr_fmt,
- programname, dbname_tmp, error_message(kret));
- exit_status++;
- kadm5_free_config_params(kcontext, &newparams);
- if (dumpfile) fclose(f);
- return;
- }
- if (!update && (kret = osa_adb_create_policy_db(&newparams))) {
- fprintf(stderr, "%s: %s while creating policy database\n",
- programname, error_message(kret));
- exit_status++;
- kadm5_free_config_params(kcontext, &newparams);
- if (dumpfile) fclose(f);
- return;
+ if (!update) {
+ if((kret = krb5_db_create(kcontext, db5util_db_args))) {
+ fprintf(stderr, dbcreaterr_fmt,
+ programname, dbname, error_message(kret));
+ exit_status++;
+ kadm5_free_config_params(kcontext, &newparams);
+ if (dumpfile) fclose(f);
+ return;
+ }
}
-
+ else
/*
- * Point ourselves at the new databases.
+ * Initialize the database.
*/
- if ((kret = krb5_db_set_name(kcontext,
- (update) ? dbname : dbname_tmp))) {
- fprintf(stderr, dbname_err_fmt,
- programname,
- (update) ? dbname : dbname_tmp, error_message(kret));
- exit_status++;
- goto error;
- }
- if ((kret = osa_adb_open_policy(&tmppol_db, &newparams))) {
- fprintf(stderr, "%s: %s while opening policy database\n",
- programname, error_message(kret));
- exit_status++;
- goto error;
+ if ((kret = krb5_db_open(kcontext, db5util_db_args, KRB5_KDB_OPEN_RW))) {
+ fprintf(stderr, dbinit_err_fmt,
+ programname, error_message(kret));
+ exit_status++;
+ goto error;
}
+
+
/*
* If an update restoration, make sure the db is left unusable if
* the update fails.
*/
- if (update) {
- if ((kret = osa_adb_get_lock(tmppol_db, OSA_ADB_PERMANENT))) {
- fprintf(stderr, "%s: %s while permanently locking database\n",
- programname, error_message(kret));
- exit_status++;
- goto error;
- }
- }
-
- /*
- * Initialize the database.
- */
- if ((kret = krb5_db_init(kcontext))) {
- fprintf(stderr, dbinit_err_fmt,
- programname, error_message(kret));
- exit_status++;
- goto error;
- }
- /*
- * grab an extra lock, since there are no other users
- */
- if (!update) {
- kret = krb5_db_lock(kcontext, KRB5_LOCKMODE_EXCLUSIVE);
- if (kret) {
- fprintf(stderr, dblock_err_fmt,
- programname, error_message(kret));
- exit_status++;
- goto error;
- }
+ if ((kret = krb5_db_lock(kcontext, update?KRB5_DB_LOCKMODE_PERMANENT: KRB5_DB_LOCKMODE_EXCLUSIVE))) {
+ fprintf(stderr, "%s: %s while permanently locking database\n",
+ programname, error_message(kret));
+ exit_status++;
+ goto error;
}
if (restore_dump(programname, kcontext, (dumpfile) ? dumpfile : stdin_name,
- f, verbose, load, tmppol_db)) {
+ f, verbose, load)) {
fprintf(stderr, restfail_fmt,
programname, load->name);
exit_status++;
}
- if (!update && (kret = krb5_db_unlock(kcontext))) {
+ if (!update && load->create_kadm5 &&
+ ((kret = kadm5_create_magic_princs(&newparams, kcontext)))) {
+ /* error message printed by create_magic_princs */
+ exit_status++;
+ }
+
+ if ((kret = krb5_db_unlock(kcontext))) {
/* change this error? */
fprintf(stderr, dbunlockerr_fmt,
- programname, dbname_tmp, error_message(kret));
+ programname, dbname, error_message(kret));
exit_status++;
}
+
if ((kret = krb5_db_fini(kcontext))) {
fprintf(stderr, close_err_fmt,
programname, error_message(kret));
exit_status++;
}
- if (!update && load->create_kadm5 &&
- ((kret = kadm5_create_magic_princs(&newparams, kcontext)))) {
- /* error message printed by create_magic_princs */
- exit_status++;
- }
-
/* close policy db below */
error:
@@ -2348,54 +2324,11 @@ error:
*/
if (!update) {
if (exit_status) {
- if ((kret = krb5_db_destroy(kcontext, dbname_tmp))) {
+ if ((kret = krb5_db_destroy(kcontext, db5util_db_args))) {
fprintf(stderr, dbdelerr_fmt,
- programname, dbname_tmp, error_message(kret));
- exit_status++;
- }
- if ((kret = osa_adb_destroy_policy_db(&newparams))) {
- fprintf(stderr, "%s: %s while destroying policy database\n",
- programname, error_message(kret));
- exit_status++;
- }
- }
- else {
- if ((kret = krb5_db_rename(kcontext,
- dbname_tmp,
- dbname))) {
- fprintf(stderr, dbrenerr_fmt,
- programname, dbname_tmp, dbname,
- error_message(kret));
- exit_status++;
- }
-
- if ((kret = osa_adb_close_policy(tmppol_db))) {
- fprintf(stderr, close_err_fmt,
- programname, error_message(kret));
+ programname, dbname, error_message(kret));
exit_status++;
}
-
- if ((kret = osa_adb_rename_policy_db(&newparams,
- &global_params))) {
- fprintf(stderr,
- "%s: %s while renaming policy db %s to %s\n",
- programname, error_message(kret),
- newparams.admin_dbname,
- global_params.admin_dbname);
- exit_status++;
- }
- }
- } else /* update */ {
- if (! exit_status && ((kret = osa_adb_release_lock(tmppol_db)))) {
- fprintf(stderr, "%s: %s while releasing permanent lock\n",
- programname, error_message(kret));
- exit_status++;
- }
-
- if (tmppol_db && ((kret = osa_adb_close_policy(tmppol_db)))) {
- fprintf(stderr, close_err_fmt,
- programname, error_message(kret));
- exit_status++;
}
}
diff --git a/src/kadmin/dbutil/kadm5_create.c b/src/kadmin/dbutil/kadm5_create.c
index 9ed6459e04..a9a9df0cdb 100644
--- a/src/kadmin/dbutil/kadm5_create.c
+++ b/src/kadmin/dbutil/kadm5_create.c
@@ -35,7 +35,8 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <kadm5/adb.h>
+#include <k5-int.h>
+#include <krb5/kdb.h>
#include <kadm5/admin.h>
#include <krb5/adm_proto.h>
@@ -85,11 +86,6 @@ int kadm5_create(kadm5_config_params *params)
return 1;
}
- if ((retval = osa_adb_create_policy_db(&lparams))) {
- com_err(progname, retval, str_CREATING_POLICY_DB);
- return 1;
- }
-
retval = kadm5_create_magic_princs(&lparams, context);
kadm5_free_config_params(context, &lparams);
@@ -110,6 +106,7 @@ int kadm5_create_magic_princs(kadm5_config_params *params,
if ((retval = kadm5_init(progname, NULL, NULL, params,
KADM5_STRUCT_VERSION,
KADM5_API_VERSION_2,
+ db5util_db_args,
&handle))) {
com_err(progname, retval, "while initializing the Kerberos admin interface");
return retval;
diff --git a/src/kadmin/dbutil/kdb5_create.c b/src/kadmin/dbutil/kdb5_create.c
index 2c05c2744e..5bd337e47e 100644
--- a/src/kadmin/dbutil/kdb5_create.c
+++ b/src/kadmin/dbutil/kdb5_create.c
@@ -55,8 +55,9 @@
#include <stdio.h>
#include <k5-int.h>
+#include <krb5/kdb.h>
+#include <kadm5/server_internal.h>
#include <kadm5/admin.h>
-#include <kadm5/adb.h>
#include <krb5/adm_proto.h>
#include "kdb5_util.h"
@@ -145,7 +146,6 @@ extern char *mkey_password;
extern char *progname;
extern int exit_status;
-extern osa_adb_policy_t policy_db;
extern kadm5_config_params global_params;
extern krb5_context util_context;
@@ -160,7 +160,6 @@ void kdb5_create(argc, argv)
char *pw_str = 0;
unsigned int pw_size = 0;
int do_stash = 0;
- krb5_int32 crflags = KRB5_KDB_CREATE_BTREE;
krb5_data pwd, seed;
if (strrchr(argv[0], '/'))
@@ -172,7 +171,19 @@ void kdb5_create(argc, argv)
do_stash++;
break;
case 'h':
- crflags = KRB5_KDB_CREATE_HASH;
+ db5util_db_args_size++;
+ {
+ char **temp = realloc( db5util_db_args, sizeof(char*) * (db5util_db_args_size+1)); /* one for NULL */
+ if( temp == NULL )
+ {
+ com_err(progname, ENOMEM, "while parsing command arguments\n");
+ exit(1);
+ }
+
+ db5util_db_args = temp;
+ }
+ db5util_db_args[db5util_db_args_size-1] = "hash=true";
+ db5util_db_args[db5util_db_args_size] = NULL;
case '?':
default:
usage();
@@ -187,16 +198,6 @@ void kdb5_create(argc, argv)
rblock.nkslist = global_params.num_keysalts;
rblock.kslist = global_params.keysalts;
- retval = krb5_db_set_name(util_context, global_params.dbname);
- if (!retval) retval = EEXIST;
-
- if (retval == EEXIST || retval == EACCES || retval == EPERM) {
- /* it exists ! */
- com_err(argv[0], 0, "The database '%s' appears to already exist",
- global_params.dbname);
- exit_status++; return;
- }
-
printf ("Loading random data\n");
retval = krb5_c_random_os_entropy (util_context, 1, NULL);
if (retval) {
@@ -267,26 +268,20 @@ master key name '%s'\n",
exit_status++; return;
}
if ((retval = krb5_db_create(util_context,
- global_params.dbname, crflags))) {
+ db5util_db_args))) {
com_err(argv[0], retval, "while creating database '%s'",
global_params.dbname);
exit_status++; return;
}
- if ((retval = krb5_db_fini(util_context))) {
- com_err(argv[0], retval, "while closing current database");
- exit_status++; return;
- }
- if ((retval = krb5_db_set_name(util_context, global_params.dbname))) {
- com_err(argv[0], retval, "while setting active database to '%s'",
- global_params.dbname);
- exit_status++; return;
- }
- if ((retval = krb5_db_init(util_context))) {
- com_err(argv[0], retval, "while initializing the database '%s'",
- global_params.dbname);
- exit_status++; return;
- }
-
+/* if ((retval = krb5_db_fini(util_context))) { */
+/* com_err(argv[0], retval, "while closing current database"); */
+/* exit_status++; return; */
+/* } */
+/* if ((retval = krb5_db_open(util_context, db5util_db_args, KRB5_KDB_OPEN_RW))) { */
+/* com_err(argv[0], retval, "while initializing the database '%s'", */
+/* global_params.dbname); */
+/* exit_status++; return; */
+/* } */
if ((retval = add_principal(util_context, master_princ, MASTER_KEY, &rblock)) ||
(retval = add_principal(util_context, &tgt_princ, TGT_KEY, &rblock))) {
(void) krb5_db_fini(util_context);
@@ -298,10 +293,11 @@ master key name '%s'\n",
* it; delete the file below if it was not requested. DO NOT EXIT
* BEFORE DELETING THE KEYFILE if do_stash is not set.
*/
- retval = krb5_db_store_mkey(util_context,
- global_params.stash_file,
- master_princ,
- &master_keyblock);
+ retval = krb5_db_store_master_key(util_context,
+ global_params.stash_file,
+ master_princ,
+ &master_keyblock,
+ mkey_password);
if (retval) {
com_err(argv[0], errno, "while storing key");
printf("Warning: couldn't stash master key.\n");
@@ -440,6 +436,6 @@ add_principal(context, princ, op, pblock)
retval = krb5_db_put_principal(context, &entry, &nentries);
error_out:;
- krb5_dbe_free_contents(context, &entry);
+ krb5_db_free_principal(context, &entry, 1);
return retval;
}
diff --git a/src/kadmin/dbutil/kdb5_destroy.c b/src/kadmin/dbutil/kdb5_destroy.c
index 2545bdb5d1..ea1011b407 100644
--- a/src/kadmin/dbutil/kdb5_destroy.c
+++ b/src/kadmin/dbutil/kdb5_destroy.c
@@ -33,7 +33,7 @@
#include <stdio.h>
#include "com_err.h"
#include <kadm5/admin.h>
-#include <kadm5/adb.h>
+#include <krb5/kdb.h>
#include "kdb5_util.h"
extern int exit_status;
@@ -53,12 +53,23 @@ kdb5_destroy(argc, argv)
int optchar;
char *dbname;
char buf[5];
- krb5_error_code retval, retval1, retval2;
+ krb5_error_code retval1;
krb5_context context;
int force = 0;
- krb5_init_context(&context);
+ retval1 = krb5_init_context(&context);
+ if( retval1 )
+ {
+ com_err(argv[0], retval1, "while initializing krb5_context");
+ exit(1);
+ }
+ if ((retval1 = krb5_set_default_realm(context,
+ util_context->default_realm))) {
+ com_err(argv[0], retval1, "while setting default realm name");
+ exit(1);
+ }
+
if (strrchr(argv[0], '/'))
argv[0] = strrchr(argv[0], '/')+1;
@@ -89,21 +100,11 @@ kdb5_destroy(argc, argv)
printf("OK, deleting database '%s'...\n", dbname);
}
- retval = krb5_db_set_name(context, dbname);
- if (retval) {
- com_err(argv[0], retval, "'%s'",dbname);
- exit_status++; return;
- }
- retval1 = krb5_db_destroy(context, dbname);
- retval2 = osa_adb_destroy_policy_db(&global_params);
+ retval1 = krb5_db_destroy(context, db5util_db_args);
if (retval1) {
com_err(argv[0], retval1, "deleting database '%s'",dbname);
exit_status++; return;
}
- if (retval2) {
- com_err(argv[0], retval2, "destroying policy database");
- exit_status++; return;
- }
dbactive = FALSE;
printf("** Database '%s' destroyed.\n", dbname);
diff --git a/src/kadmin/dbutil/kdb5_stash.c b/src/kadmin/dbutil/kdb5_stash.c
index 6d7251541b..09bea21518 100644
--- a/src/kadmin/dbutil/kdb5_stash.c
+++ b/src/kadmin/dbutil/kdb5_stash.c
@@ -85,10 +85,18 @@ kdb5_stash(argc, argv)
if (strrchr(argv[0], '/'))
argv[0] = strrchr(argv[0], '/')+1;
- /* Tell upwards to close the policy db cause we don't */
- close_policy_db = 1;
+ retval = krb5_init_context(&context);
+ if( retval )
+ {
+ com_err(argv[0], retval, "while initializing krb5_context");
+ exit(1);
+ }
- krb5_init_context(&context);
+ if ((retval = krb5_set_default_realm(context,
+ util_context->default_realm))) {
+ com_err(argv[0], retval, "while setting default realm name");
+ exit(1);
+ }
dbname = global_params.dbname;
realm = global_params.realm;
@@ -118,13 +126,6 @@ kdb5_stash(argc, argv)
exit_status++; return;
}
- retval = krb5_db_set_name(context, dbname);
- if (retval) {
- com_err(argv[0], retval, "while setting active database to '%s'",
- dbname);
- exit_status++; return;
- }
-
/* assemble & parse the master key name */
retval = krb5_db_setup_mkey_name(context, mkey_name, realm,
&mkey_fullname, &master_princ);
@@ -133,7 +134,7 @@ kdb5_stash(argc, argv)
exit_status++; return;
}
- retval = krb5_db_init(context);
+ retval = krb5_db_open(context, db5util_db_args, KRB5_KDB_OPEN_RW);
if (retval) {
com_err(argv[0], retval, "while initializing the database '%s'",
dbname);
@@ -159,8 +160,8 @@ kdb5_stash(argc, argv)
exit_status++; return;
}
- retval = krb5_db_store_mkey(context, keyfile, master_princ,
- &master_keyblock);
+ retval = krb5_db_store_master_key(context, keyfile, master_princ,
+ &master_keyblock, NULL);
if (retval) {
com_err(argv[0], errno, "while storing key");
memset((char *)master_keyblock.contents, 0, master_keyblock.length);
diff --git a/src/kadmin/dbutil/kdb5_util.c b/src/kadmin/dbutil/kdb5_util.c
index 5249768675..a95dff702d 100644
--- a/src/kadmin/dbutil/kdb5_util.c
+++ b/src/kadmin/dbutil/kdb5_util.c
@@ -57,7 +57,6 @@
#include <k5-int.h>
#include <kadm5/admin.h>
#include <krb5/adm_proto.h>
-#include <kadm5/adb.h>
#include <time.h>
#include "kdb5_util.h"
@@ -76,13 +75,12 @@ char *mkey_password = 0;
int exit_status = 0;
krb5_context util_context;
-osa_adb_policy_t policy_db;
kadm5_config_params global_params;
void usage()
{
fprintf(stderr, "Usage: "
- "kdb5_util [-r realm] [-d dbname] [-k mkeytype] [-M mkeyname]\n"
+ "kdb5_util [-x db_args]* [-r realm] [-d dbname] [-k mkeytype] [-M mkeyname]\n"
"\t [-sf stashfilename] [-m] cmd [cmd_options]\n"
"\tcreate [-s]\n"
"\tdestroy [-f]\n"
@@ -91,9 +89,9 @@ void usage()
"\t [-mkey_convert] [-new_mkey_file mkey_file]\n"
"\t [-rev] [-recurse] [filename [princs...]]\n"
"\tload [-old] [-ov] [-b6] [-verbose] [-update] filename\n"
- "\tdump_v4 [-S] [filename]\n"
- "\tload_v4 [-S] [-t] [-n] [-v] [-K] [-s stashfile] inputfile\n"
- "\tark [-e etype_list] principal\n");
+ "\tark [-e etype_list] principal\n"
+ "\nwhere,\n\t[-x db_args]* - any number of database specific arguments.\n"
+ "\t\t\tLook at each database documentation for supported arguments\n");
exit(1);
}
@@ -101,7 +99,6 @@ extern krb5_keyblock master_keyblock;
extern krb5_principal master_princ;
krb5_db_entry master_entry;
int valid_master_key = 0;
-int close_policy_db = 0;
char *progname;
krb5_boolean manual_mkey = FALSE;
@@ -123,8 +120,8 @@ struct _cmd_table {
{"stash", kdb5_stash, 1},
{"dump", dump_db, 1},
{"load", load_db, 0},
- {"dump_v4", dump_v4db, 1},
- {"load_v4", load_v4db, 0},
+/* {"dump_v4", dump_v4db, 1}, */
+/* {"load_v4", load_v4db, 0}, */
{"ark", add_random_key, 1},
{NULL, NULL, 0},
};
@@ -144,6 +141,9 @@ static struct _cmd_table *cmd_lookup(name)
}
#define ARG_VAL (--argc > 0 ? (koptarg = *(++argv)) : (char *)(usage(), NULL))
+
+char **db5util_db_args = NULL;
+int db5util_db_args_size = 0;
int main(argc, argv)
int argc;
@@ -151,6 +151,7 @@ int main(argc, argv)
{
struct _cmd_table *cmd = NULL;
char *koptarg, **cmd_argv;
+ char *db_name_tmp = NULL;
int cmd_argc;
krb5_error_code retval;
@@ -159,7 +160,8 @@ int main(argc, argv)
com_err (progname, retval, "while initializing Kerberos code");
exit(1);
}
- initialize_adb_error_table();
+
+/* initialize_adb_error_table(); */
progname = (strrchr(argv[0], '/') ? strrchr(argv[0], '/')+1 : argv[0]);
@@ -179,6 +181,47 @@ int main(argc, argv)
} else if (strcmp(*argv, "-d") == 0 && ARG_VAL) {
global_params.dbname = koptarg;
global_params.mask |= KADM5_CONFIG_DBNAME;
+
+ db_name_tmp = malloc( strlen(global_params.dbname) + sizeof("dbname="));
+ if( db_name_tmp == NULL )
+ {
+ com_err(progname, ENOMEM, "while parsing command arguments");
+ exit(1);
+ }
+
+ strcpy( db_name_tmp, "dbname=");
+ strcat( db_name_tmp, global_params.dbname );
+
+ db5util_db_args_size++;
+ {
+ char **temp = realloc( db5util_db_args, sizeof(char*) * (db5util_db_args_size+1)); /* one for NULL */
+ if( temp == NULL )
+ {
+ com_err(progname, ENOMEM, "while parsing command arguments\n");
+ exit(1);
+ }
+
+ db5util_db_args = temp;
+ }
+ db5util_db_args[db5util_db_args_size-1] = db_name_tmp;
+ db5util_db_args[db5util_db_args_size] = NULL;
+
+ } else if (strcmp(*argv, "-x") == 0 && ARG_VAL) {
+ db5util_db_args_size++;
+ {
+ char **temp = realloc( db5util_db_args, sizeof(char*) * (db5util_db_args_size+1)); /* one for NULL */
+ if( temp == NULL )
+ {
+ fprintf(stderr,"%s: Cannot initialize. Not enough memory\n",
+ argv[0]);
+ exit(1);
+ }
+
+ db5util_db_args = temp;
+ }
+ db5util_db_args[db5util_db_args_size-1] = koptarg;
+ db5util_db_args[db5util_db_args_size] = NULL;
+
} else if (strcmp(*argv, "-r") == 0 && ARG_VAL) {
global_params.realm = koptarg;
global_params.mask |= KADM5_CONFIG_REALM;
@@ -217,6 +260,18 @@ int main(argc, argv)
if (cmd_argv[0] == NULL)
usage();
+ if( !util_context->default_realm )
+ {
+ char *temp = NULL;
+ retval = krb5_get_default_realm(util_context, &temp);
+ if( retval )
+ {
+ com_err (progname, retval, "while getting default realm");
+ exit(1);
+ }
+ util_context->default_realm = temp;
+ }
+
retval = kadm5_get_config_params(util_context, NULL, NULL,
&global_params, &global_params);
if (retval) {
@@ -243,9 +298,12 @@ int main(argc, argv)
(*cmd->func)(cmd_argc, cmd_argv);
- if(close_policy_db) {
- (void) osa_adb_close_policy(policy_db);
- }
+ if( db_name_tmp )
+ free( db_name_tmp );
+
+ if( db5util_db_args )
+ free(db5util_db_args);
+
kadm5_free_config_params(util_context, &global_params);
krb5_free_context(util_context);
return exit_status;
@@ -307,22 +365,11 @@ static int open_db_and_mkey()
dbactive = FALSE;
valid_master_key = 0;
- if ((retval = krb5_db_set_name(util_context, global_params.dbname))) {
- com_err(progname, retval, "while setting active database to '%s'",
- global_params.dbname);
- exit_status++;
- return(1);
- }
- if ((retval = krb5_db_init(util_context))) {
+ if ((retval = krb5_db_open(util_context, db5util_db_args, KRB5_KDB_OPEN_RW))) {
com_err(progname, retval, "while initializing database");
exit_status++;
return(1);
}
- if ((retval = osa_adb_open_policy(&policy_db, &global_params))) {
- com_err(progname, retval, "opening policy database");
- exit_status++;
- return (1);
- }
/* assemble & parse the master key name */
@@ -497,7 +544,7 @@ add_random_key(argc, argv)
}
if (more) {
fprintf(stderr, "principal %s not unique\n", pr_str);
- krb5_dbe_free_contents(util_context, &dbent);
+ krb5_db_free_principal(util_context, &dbent, 1);
exit_status++;
return;
}
@@ -523,7 +570,7 @@ add_random_key(argc, argv)
free(keysalts);
if (ret) {
com_err(me, ret, "while randomizing principal %s", pr_str);
- krb5_dbe_free_contents(util_context, &dbent);
+ krb5_db_free_principal(util_context, &dbent, 1);
exit_status++;
return;
}
@@ -531,19 +578,19 @@ add_random_key(argc, argv)
ret = krb5_timeofday(util_context, &now);
if (ret) {
com_err(me, ret, "while getting time");
- krb5_dbe_free_contents(util_context, &dbent);
+ krb5_db_free_principal(util_context, &dbent, 1);
exit_status++;
return;
}
ret = krb5_dbe_update_last_pwd_change(util_context, &dbent, now);
if (ret) {
com_err(me, ret, "while setting changetime");
- krb5_dbe_free_contents(util_context, &dbent);
+ krb5_db_free_principal(util_context, &dbent, 1);
exit_status++;
return;
}
ret = krb5_db_put_principal(util_context, &dbent, &n);
- krb5_dbe_free_contents(util_context, &dbent);
+ krb5_db_free_principal(util_context, &dbent, 1);
if (ret) {
com_err(me, ret, "while saving principal %s", pr_str);
exit_status++;
diff --git a/src/kadmin/dbutil/kdb5_util.h b/src/kadmin/dbutil/kdb5_util.h
index c63ca0371f..bb6b0ac64a 100644
--- a/src/kadmin/dbutil/kdb5_util.h
+++ b/src/kadmin/dbutil/kdb5_util.h
@@ -40,6 +40,8 @@ extern krb5_context util_context;
extern kadm5_config_params global_params;
extern int valid_master_key;
extern krb5_db_entry master_db;
+extern char **db5util_db_args;
+extern int db5util_db_args_size;
extern void usage(void);
@@ -67,8 +69,7 @@ extern int kadm5_create_magic_princs (kadm5_config_params *params,
extern int process_ov_principal (char *fname, krb5_context kcontext,
FILE *filep, int verbose,
- int *linenop,
- void *pol_db);
+ int *linenop);
extern void load_db (int argc, char **argv);
extern void dump_db (int argc, char **argv);
diff --git a/src/kadmin/dbutil/ovload.c b/src/kadmin/dbutil/ovload.c
index 15978f8a37..f4338bc906 100644
--- a/src/kadmin/dbutil/ovload.c
+++ b/src/kadmin/dbutil/ovload.c
@@ -5,7 +5,10 @@
#include <memory.h>
#endif
-#include <kadm5/adb.h>
+#include <k5-int.h>
+#include <kadm5/admin.h>
+#include <kadm5/server_internal.h>
+#include <krb5/kdb.h>
#include "import_err.h"
#include "kdb5_util.h"
#include "nstrtok.h"
@@ -92,17 +95,16 @@ done:
* [modifies]
*
*/
-int process_ov_principal(fname, kcontext, filep, verbose, linenop, pol_db)
+int process_ov_principal(fname, kcontext, filep, verbose, linenop)
char *fname;
krb5_context kcontext;
FILE *filep;
int verbose;
int *linenop;
- void *pol_db;
{
XDR xdrs;
osa_princ_ent_t rec;
- osa_adb_ret_t ret;
+ krb5_error_code ret;
krb5_tl_data tl_data;
krb5_principal princ;
krb5_db_entry kdb;
@@ -177,7 +179,7 @@ int process_ov_principal(fname, kcontext, filep, verbose, linenop, pol_db)
xdralloc_create(&xdrs, XDR_ENCODE);
if (! xdr_osa_princ_ent_rec(&xdrs, rec)) {
xdr_destroy(&xdrs);
- ret = OSA_ADB_XDR_FAILURE;
+ ret = KADM5_XDR_FAILURE;
goto done;
}