summaryrefslogtreecommitdiffstats
path: root/src/kadmin/dbutil/dump.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/kadmin/dbutil/dump.c')
-rw-r--r--src/kadmin/dbutil/dump.c47
1 files changed, 18 insertions, 29 deletions
diff --git a/src/kadmin/dbutil/dump.c b/src/kadmin/dbutil/dump.c
index ab96ca724f..a94fb31303 100644
--- a/src/kadmin/dbutil/dump.c
+++ b/src/kadmin/dbutil/dump.c
@@ -1146,8 +1146,7 @@ dump_version ipropx_1_version = {
/* Read the dump header. Return 1 on success, 0 if the file is not a
* recognized iprop dump format. */
static int
-parse_iprop_header(char *buf, dump_version **dv, uint32_t *last_sno,
- uint32_t *last_seconds, uint32_t *last_useconds)
+parse_iprop_header(char *buf, dump_version **dv, kdb_last_t *last)
{
char head[128];
int nread;
@@ -1180,25 +1179,23 @@ parse_iprop_header(char *buf, dump_version **dv, uint32_t *last_sno,
return 0;
}
- *last_sno = *up++;
- *last_seconds = *up++;
- *last_useconds = *up++;
+ last->last_sno = *up++;
+ last->last_time.seconds = *up++;
+ last->last_time.useconds = *up++;
return 1;
}
-/* Return 1 if the {sno, timestamp} in an existing dump file is in the
- * ulog, else return 0. */
-static int
-current_dump_sno_in_ulog(char *ifile, kdb_hlog_t *ulog)
+/* Return true if the serial number and timestamp in an existing dump file is
+ * in the ulog. */
+static krb5_boolean
+current_dump_sno_in_ulog(krb5_context context, const char *ifile)
{
+ update_status_t status;
dump_version *junk;
- uint32_t last_sno, last_seconds, last_useconds;
+ kdb_last_t last;
char buf[BUFSIZ];
FILE *f;
- if (ulog->kdb_last_sno == 0)
- return 0; /* nothing in ulog */
-
f = fopen(ifile, "r");
if (f == NULL)
return 0; /* aliasing other errors to ENOENT here is OK */
@@ -1207,17 +1204,11 @@ current_dump_sno_in_ulog(char *ifile, kdb_hlog_t *ulog)
return errno ? -1 : 0;
fclose(f);
- if (!parse_iprop_header(buf, &junk, &last_sno, &last_seconds,
- &last_useconds))
+ if (!parse_iprop_header(buf, &junk, &last))
return 0;
- if (ulog->kdb_first_sno > last_sno ||
- ulog->kdb_first_time.seconds > last_seconds ||
- (ulog->kdb_first_time.seconds == last_seconds &&
- ulog->kdb_first_time.useconds > last_useconds))
- return 0;
-
- return 1;
+ status = ulog_get_sno_status(context, &last);
+ return status == UPDATE_OK || status == UPDATE_NIL;
}
/*
@@ -1316,7 +1307,7 @@ dump_db(int argc, char **argv)
"use only for iprop dumps"));
goto error;
}
- if (current_dump_sno_in_ulog(ofile, log_ctx->ulog))
+ if (current_dump_sno_in_ulog(util_context, ofile))
return;
}
@@ -1483,9 +1474,9 @@ load_db(int argc, char **argv)
dump_version *load = NULL;
int aindex;
kdb_log_context *log_ctx;
+ kdb_last_t last;
krb5_boolean db_locked = FALSE, temp_db_created = FALSE;
krb5_boolean verbose = FALSE, update = FALSE, iprop_load = FALSE;
- uint32_t last_sno, last_seconds, last_useconds;
/* Parse the arguments. */
dbname = global_params.dbname;
@@ -1629,8 +1620,7 @@ load_db(int argc, char **argv)
log_ctx->iproprole = IPROP_SLAVE;
if (iprop_load) {
/* Parse the iprop header information. */
- if (!parse_iprop_header(buf, &load, &last_sno, &last_seconds,
- &last_useconds))
+ if (!parse_iprop_header(buf, &load, &last))
goto error;
}
}
@@ -1666,9 +1656,8 @@ load_db(int argc, char **argv)
* record the iprop state if we received it. */
ulog_init_header(util_context);
if (iprop_load) {
- log_ctx->ulog->kdb_last_sno = last_sno;
- log_ctx->ulog->kdb_last_time.seconds = last_seconds;
- log_ctx->ulog->kdb_last_time.useconds = last_useconds;
+ log_ctx->ulog->kdb_last_sno = last.last_sno;
+ log_ctx->ulog->kdb_last_time = last.last_time;
ulog_sync_header(log_ctx->ulog);
}
}