use krb5_read_message
write received diffs to log git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@4486 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -142,6 +142,9 @@ receive (krb5_context context,
|
|||||||
kadm5_server_context *server_context)
|
kadm5_server_context *server_context)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
off_t left, right;
|
||||||
|
void *buf;
|
||||||
|
int32_t vers;
|
||||||
|
|
||||||
ret = server_context->db->open(context,
|
ret = server_context->db->open(context,
|
||||||
server_context->db,
|
server_context->db,
|
||||||
@@ -149,8 +152,8 @@ receive (krb5_context context,
|
|||||||
if (ret)
|
if (ret)
|
||||||
krb5_err (context, 1, ret, "db->open");
|
krb5_err (context, 1, ret, "db->open");
|
||||||
|
|
||||||
for (;;) {
|
do {
|
||||||
int32_t vers, len, timestamp, tmp;
|
int32_t len, timestamp, tmp;
|
||||||
enum kadm_ops op;
|
enum kadm_ops op;
|
||||||
|
|
||||||
if(krb5_ret_int32 (sp, &vers) != 0)
|
if(krb5_ret_int32 (sp, &vers) != 0)
|
||||||
@@ -159,16 +162,42 @@ receive (krb5_context context,
|
|||||||
krb5_ret_int32 (sp, &tmp);
|
krb5_ret_int32 (sp, &tmp);
|
||||||
op = tmp;
|
op = tmp;
|
||||||
krb5_ret_int32 (sp, &len);
|
krb5_ret_int32 (sp, &len);
|
||||||
if (vers < server_context->log_context.version) {
|
if (vers <= server_context->log_context.version)
|
||||||
sp->seek(sp, len, SEEK_CUR);
|
sp->seek(sp, len, SEEK_CUR);
|
||||||
} else {
|
} while(vers <= server_context->log_context.version);
|
||||||
ret = kadm5_log_replay (server_context,
|
|
||||||
op, vers, len, sp);
|
left = sp->seek (sp, -16, SEEK_CUR);
|
||||||
if (ret)
|
right = sp->seek (sp, 0, SEEK_END);
|
||||||
krb5_warn (context, ret, "kadm5_log_replay");
|
buf = malloc (right - left);
|
||||||
else
|
if (buf == NULL) {
|
||||||
server_context->log_context.version = vers;
|
krb5_warnx (context, "malloc: no memory");
|
||||||
}
|
return;
|
||||||
|
}
|
||||||
|
sp->seek (sp, left, SEEK_SET);
|
||||||
|
sp->fetch (sp, buf, right - left);
|
||||||
|
write (server_context->log_context.log_fd, buf, right-left);
|
||||||
|
fsync (server_context->log_context.log_fd);
|
||||||
|
free (buf);
|
||||||
|
|
||||||
|
sp->seek (sp, left, SEEK_SET);
|
||||||
|
|
||||||
|
for(;;) {
|
||||||
|
int32_t len, timestamp, tmp;
|
||||||
|
enum kadm_ops op;
|
||||||
|
|
||||||
|
if(krb5_ret_int32 (sp, &vers) != 0)
|
||||||
|
break;
|
||||||
|
krb5_ret_int32 (sp, ×tamp);
|
||||||
|
krb5_ret_int32 (sp, &tmp);
|
||||||
|
op = tmp;
|
||||||
|
krb5_ret_int32 (sp, &len);
|
||||||
|
|
||||||
|
ret = kadm5_log_replay (server_context,
|
||||||
|
op, vers, len, sp);
|
||||||
|
if (ret)
|
||||||
|
krb5_warn (context, ret, "kadm5_log_replay");
|
||||||
|
else
|
||||||
|
server_context->log_context.version = vers;
|
||||||
sp->seek (sp, 8, SEEK_CUR);
|
sp->seek (sp, 8, SEEK_CUR);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -231,10 +260,8 @@ main(int argc, char **argv)
|
|||||||
server_context->log_context.version);
|
server_context->log_context.version);
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
u_char buf[4];
|
|
||||||
int ret;
|
int ret;
|
||||||
krb5_data data, out;
|
krb5_data data, out;
|
||||||
u_int32_t len;
|
|
||||||
krb5_storage *sp;
|
krb5_storage *sp;
|
||||||
int32_t tmp;
|
int32_t tmp;
|
||||||
|
|
||||||
@@ -260,6 +287,7 @@ main(int argc, char **argv)
|
|||||||
krb5_warnx (context, "Ignoring command %d", tmp);
|
krb5_warnx (context, "Ignoring command %d", tmp);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
krb5_storage_free (sp);
|
||||||
krb5_data_free (&out);
|
krb5_data_free (&out);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user