Move truncate_log and replay_log into iprop-log.

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@15974 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2005-08-24 18:09:08 +00:00
parent afbd69ded6
commit 696fa86fa0
3 changed files with 177 additions and 39 deletions

View File

@@ -7,7 +7,7 @@ SLC = $(top_builddir)/lib/sl/slc
lib_LTLIBRARIES = libkadm5srv.la libkadm5clnt.la lib_LTLIBRARIES = libkadm5srv.la libkadm5clnt.la
libkadm5srv_la_LDFLAGS = -version-info 7:7:0 libkadm5srv_la_LDFLAGS = -version-info 7:7:0
libkadm5clnt_la_LDFLAGS = -version-info 6:5:2 libkadm5clnt_la_LDFLAGS = -version-info 6:5:2
sbin_PROGRAMS = replay_log truncate_log iprop-log sbin_PROGRAMS = iprop-log
check_PROGRAMS = default_keys check_PROGRAMS = default_keys
noinst_PROGRAMS = test_pw_quality noinst_PROGRAMS = test_pw_quality
@@ -96,14 +96,10 @@ libkadm5clnt_la_SOURCES = $(SOURCES_client) client_glue.c
iprop_log_SOURCES = iprop-log.c iprop-commands.c iprop_log_SOURCES = iprop-log.c iprop-commands.c
replay_log_SOURCES = replay_log.c kadm5_locl.h
ipropd_master_SOURCES = ipropd_master.c iprop.h kadm5_locl.h ipropd_master_SOURCES = ipropd_master.c iprop.h kadm5_locl.h
ipropd_slave_SOURCES = ipropd_slave.c iprop.h kadm5_locl.h ipropd_slave_SOURCES = ipropd_slave.c iprop.h kadm5_locl.h
truncate_log_SOURCES = truncate_log.c
man_MANS = kadm5_pwcheck.3 iprop.8 man_MANS = kadm5_pwcheck.3 iprop.8
LDADD = \ LDADD = \

View File

@@ -51,6 +51,56 @@ command = {
help = "Prints the iprop transaction log in text." help = "Prints the iprop transaction log in text."
max_args = "0" max_args = "0"
} }
command = {
name = "truncate"
option = {
long = "config-file"
short = "c"
type = "string"
help = "configuration file"
argument = "file"
}
option = {
long = "realm"
short = "r"
type = "string"
help = "realm"
}
function = "iprop_truncate"
help = "Truncate the log, preserve the version number."
max_args = "0"
}
command = {
name = "replay"
option = {
long = "start-version"
type = "integer"
help = "start replay with this version"
argument = "version-number"
}
option = {
long = "end-version"
type = "integer"
help = "end replay with this version"
argument = "version-number"
}
option = {
long = "config-file"
short = "c"
type = "string"
help = "configuration file"
argument = "file"
}
option = {
long = "realm"
short = "r"
type = "string"
help = "realm"
}
function = "iprop_replay"
help = "Replay the log on the database."
max_args = "0"
}
command = { command = {
name = "help" name = "help"
argument = "command" argument = "command"

View File

@@ -40,6 +40,44 @@ RCSID("$Id$");
static krb5_context context; static krb5_context context;
static kadm5_server_context *
get_kadmin_context(const char *config_file, char *realm)
{
kadm5_config_params conf;
krb5_error_code ret;
void *kadm_handle;
char **files;
if (config_file == NULL)
config_file = HDB_DB_DIR "/kdc.conf";
ret = krb5_prepend_config_files_default(config_file, &files);
if (ret)
krb5_err(context, 1, ret, "getting configuration files");
ret = krb5_set_config_files(context, files);
krb5_free_config_files(files);
if (ret)
krb5_err(context, 1, ret, "reading configuration files");
memset(&conf, 0, sizeof(conf));
if(realm) {
conf.mask |= KADM5_CONFIG_REALM;
conf.realm = realm;
}
ret = kadm5_init_with_password_ctx (context,
KADM5_ADMIN_SERVICE,
NULL,
KADM5_ADMIN_SERVICE,
&conf, 0, 0,
&kadm_handle);
if (ret)
krb5_err (context, 1, ret, "kadm5_init_with_password_ctx");
return (kadm5_server_context *)kadm_handle;
}
/* /*
* dump log * dump log
*/ */
@@ -64,7 +102,8 @@ print_entry(kadm5_server_context *server_context,
time_t timestamp, time_t timestamp,
enum kadm_ops op, enum kadm_ops op,
u_int32_t len, u_int32_t len,
krb5_storage *sp) krb5_storage *sp,
void *ctx)
{ {
char t[256]; char t[256];
int32_t mask; int32_t mask;
@@ -224,47 +263,17 @@ print_entry(kadm5_server_context *server_context,
int int
iprop_dump(struct dump_options *opt, int argc, char **argv) iprop_dump(struct dump_options *opt, int argc, char **argv)
{ {
const char *config_file = opt->config_file_string;
void *kadm_handle;
kadm5_server_context *server_context; kadm5_server_context *server_context;
kadm5_config_params conf;
char **files;
krb5_error_code ret; krb5_error_code ret;
if (config_file == NULL) server_context = get_kadmin_context(opt->config_file_string,
config_file = HDB_DB_DIR "/kdc.conf"; opt->realm_string);
ret = krb5_prepend_config_files_default(config_file, &files);
if (ret)
krb5_err(context, 1, ret, "getting configuration files");
ret = krb5_set_config_files(context, files);
krb5_free_config_files(files);
if (ret)
krb5_err(context, 1, ret, "reading configuration files");
memset(&conf, 0, sizeof(conf));
if(opt->realm_string) {
conf.mask |= KADM5_CONFIG_REALM;
conf.realm = opt->realm_string;
}
ret = kadm5_init_with_password_ctx (context,
KADM5_ADMIN_SERVICE,
NULL,
KADM5_ADMIN_SERVICE,
&conf, 0, 0,
&kadm_handle);
if (ret)
krb5_err (context, 1, ret, "kadm5_init_with_password_ctx");
server_context = (kadm5_server_context *)kadm_handle;
ret = kadm5_log_init (server_context); ret = kadm5_log_init (server_context);
if (ret) if (ret)
krb5_err (context, 1, ret, "kadm5_log_init"); krb5_err (context, 1, ret, "kadm5_log_init");
ret = kadm5_log_foreach (server_context, print_entry); ret = kadm5_log_foreach (server_context, print_entry, NULL);
if(ret) if(ret)
krb5_warn(context, ret, "kadm5_log_foreach"); krb5_warn(context, ret, "kadm5_log_foreach");
@@ -274,7 +283,90 @@ iprop_dump(struct dump_options *opt, int argc, char **argv)
return 0; return 0;
} }
int
iprop_truncate(struct truncate_options *opt, int argc, char **argv)
{
kadm5_server_context *server_context;
krb5_error_code ret;
server_context = get_kadmin_context(opt->config_file_string,
opt->realm_string);
ret = kadm5_log_truncate (server_context);
if (ret)
krb5_err (context, 1, ret, "kadm5_log_truncate");
return 0;
}
/*
* Replay log
*/
int start_version = -1;
int end_version = -1;
static void
apply_entry(kadm5_server_context *server_context,
u_int32_t ver,
time_t timestamp,
enum kadm_ops op,
u_int32_t len,
krb5_storage *sp,
void *ctx)
{
struct replay_options *opt = ctx;
krb5_error_code ret;
if((opt->start_version_integer != -1 && ver < opt->start_version_integer) ||
(opt->end_version_integer != -1 && ver > opt->end_version_integer)) {
/* XXX skip this entry */
krb5_storage_seek(sp, len, SEEK_CUR);
return;
}
printf ("ver %u... ", ver);
fflush (stdout);
ret = kadm5_log_replay (server_context,
op, ver, len, sp);
if (ret)
krb5_warn (server_context->context, ret, "kadm5_log_replay");
printf ("done\n");
}
int
iprop_replay(struct replay_options *opt, int argc, char **argv)
{
kadm5_server_context *server_context;
krb5_error_code ret;
server_context = get_kadmin_context(opt->config_file_string,
opt->realm_string);
ret = server_context->db->hdb_open(context,
server_context->db,
O_RDWR | O_CREAT, 0);
if (ret)
krb5_err (context, 1, ret, "db->open");
ret = kadm5_log_init (server_context);
if (ret)
krb5_err (context, 1, ret, "kadm5_log_init");
ret = kadm5_log_foreach (server_context, apply_entry, opt);
if(ret)
krb5_warn(context, ret, "kadm5_log_foreach");
ret = kadm5_log_end (server_context);
if (ret)
krb5_warn(context, ret, "kadm5_log_end");
ret = server_context->db->hdb_close (context, server_context->db);
if (ret)
krb5_err (context, 1, ret, "db->close");
return 0;
}
static int help_flag; static int help_flag;
static int version_flag; static int version_flag;