#include <k5-int.h>
#include <kadm5/admin.h>
#include <krb5/adm_proto.h>
-#include <kadm5/adb.h>
#include <time.h>
#include "kdb5_util.h"
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"
"\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);
}
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;
{"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},
};
}
#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;
{
struct _cmd_table *cmd = NULL;
char *koptarg, **cmd_argv;
+ char *db_name_tmp = NULL;
int cmd_argc;
krb5_error_code retval;
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]);
} 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;
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) {
(*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;
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 */
}
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;
}
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;
}
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++;