From d96fcfdae291310645ee9d3bdc13bb3e2bf1fabe Mon Sep 17 00:00:00 2001 From: Assar Westerlund Date: Mon, 5 Jun 2000 17:04:54 +0000 Subject: [PATCH] (kadm5_log_set_version, kadm5_log_reinit, kadm5_log_nop, kadm5_log_replay_nop): add git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@8318 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/kadm5/log.c | 80 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) diff --git a/lib/kadm5/log.c b/lib/kadm5/log.c index 63eda80d8..31cc58200 100644 --- a/lib/kadm5/log.c +++ b/lib/kadm5/log.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 1998, 1999 Kungliga Tekniska Högskolan + * Copyright (c) 1997 - 2000 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -72,6 +72,15 @@ kadm5_log_get_version (int fd, return 0; } +kadm5_ret_t +kadm5_log_set_version (kadm5_server_context *context, u_int32_t vno) +{ + kadm5_log_context *log_context = &context->log_context; + + log_context->version = vno; + return 0; +} + kadm5_ret_t kadm5_log_init (kadm5_server_context *context) { @@ -97,6 +106,30 @@ kadm5_log_init (kadm5_server_context *context) return 0; } +kadm5_ret_t +kadm5_log_reinit (kadm5_server_context *context) +{ + int fd; + kadm5_log_context *log_context = &context->log_context; + + if (log_context->log_fd != -1) { + close (log_context->log_fd); + log_context->log_fd = -1; + } + fd = open (log_context->log_file, O_RDWR | O_CREAT | O_TRUNC, 0600); + if (fd < 0) + return errno; + if (flock (fd, LOCK_EX) < 0) { + close (fd); + return errno; + } + + log_context->version = 0; + log_context->log_fd = fd; + return 0; +} + + kadm5_ret_t kadm5_log_end (kadm5_server_context *context) { @@ -562,6 +595,49 @@ kadm5_log_replay_modify (kadm5_server_context *context, return ret; } +/* + * Add a `nop' operation to the log. + */ + +kadm5_ret_t +kadm5_log_nop (kadm5_server_context *context) +{ + krb5_storage *sp; + kadm5_ret_t ret; + kadm5_log_context *log_context = &context->log_context; + + sp = krb5_storage_emem(); + ret = kadm5_log_preamble (context, sp, kadm_nop); + if (ret) { + krb5_storage_free (sp); + return ret; + } + ret = kadm5_log_postamble (log_context, sp); + if (ret) { + krb5_storage_free (sp); + return ret; + } + ret = kadm5_log_flush (log_context, sp); + krb5_storage_free (sp); + if (ret) + return ret; + ret = kadm5_log_end (context); + return ret; +} + +/* + * Read a `nop' log operation from `sp' and apply it. + */ + +kadm5_ret_t +kadm5_log_replay_nop (kadm5_server_context *context, + u_int32_t ver, + u_int32_t len, + krb5_storage *sp) +{ + return 0; +} + /* * Call `func' for each log record in the log in `context' */ @@ -660,6 +736,8 @@ kadm5_log_replay (kadm5_server_context *context, return kadm5_log_replay_rename (context, ver, len, sp); case kadm_modify : return kadm5_log_replay_modify (context, ver, len, sp); + case kadm_nop : + return kadm5_log_replay_nop (context, ver, len, sp); default : return KADM5_FAILURE; }