summaryrefslogtreecommitdiffstats
path: root/src/util/gss-kernel-lib
diff options
context:
space:
mode:
authorGreg Hudson <ghudson@mit.edu>2011-06-27 22:23:18 +0000
committerGreg Hudson <ghudson@mit.edu>2011-06-27 22:23:18 +0000
commitb4c41e946104923df82212be453cf77b8eab63e5 (patch)
tree6e391c990801d944e3d3bee872ada92a0554f290 /src/util/gss-kernel-lib
parent9f64a8329f15ff80d0f38e91e4781be1399d1f41 (diff)
downloadkrb5-b4c41e946104923df82212be453cf77b8eab63e5.tar.gz
krb5-b4c41e946104923df82212be453cf77b8eab63e5.tar.xz
krb5-b4c41e946104923df82212be453cf77b8eab63e5.zip
Make kgss test processes run in lock-step
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@24994 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/util/gss-kernel-lib')
-rw-r--r--src/util/gss-kernel-lib/t_kgss_common.c21
-rw-r--r--src/util/gss-kernel-lib/t_kgss_common.h2
-rw-r--r--src/util/gss-kernel-lib/t_kgss_kernel.c9
-rw-r--r--src/util/gss-kernel-lib/t_kgss_user.c10
4 files changed, 42 insertions, 0 deletions
diff --git a/src/util/gss-kernel-lib/t_kgss_common.c b/src/util/gss-kernel-lib/t_kgss_common.c
index 1b31634c24..211cecc2bc 100644
--- a/src/util/gss-kernel-lib/t_kgss_common.c
+++ b/src/util/gss-kernel-lib/t_kgss_common.c
@@ -82,3 +82,24 @@ read_data(int fd, void **data_out, size_t *len_out)
*data_out = data;
*len_out = len;
}
+
+/*
+ * Acknowledgements are used to make the parent and child processes operate in
+ * lock-step. That way, if the child fails, the parent isn't several steps
+ * ahead before it finds out.
+ */
+
+void
+send_ack(int fd)
+{
+ rewrite(fd, "ack", 3);
+}
+
+void
+read_ack(int fd)
+{
+ char buf[3];
+
+ reread(fd, buf, 3);
+ assert(memcmp(buf, "ack", 3) == 0);
+}
diff --git a/src/util/gss-kernel-lib/t_kgss_common.h b/src/util/gss-kernel-lib/t_kgss_common.h
index 8225bef28f..edb38886aa 100644
--- a/src/util/gss-kernel-lib/t_kgss_common.h
+++ b/src/util/gss-kernel-lib/t_kgss_common.h
@@ -28,3 +28,5 @@ void rewrite(int fd, const void *data, size_t len);
void reread(int fd, void *buf, size_t len);
void send_data(int fd, const void *data, size_t len);
void read_data(int fd, void **data_out, size_t *len_out);
+void send_ack(int fd);
+void read_ack(int fd);
diff --git a/src/util/gss-kernel-lib/t_kgss_kernel.c b/src/util/gss-kernel-lib/t_kgss_kernel.c
index 0d70f1f386..f5914f421c 100644
--- a/src/util/gss-kernel-lib/t_kgss_kernel.c
+++ b/src/util/gss-kernel-lib/t_kgss_kernel.c
@@ -273,12 +273,21 @@ main(int argc, char **argv)
krb5_c_random_os_entropy(NULL, 0, &dummy);
read_lucid_context(&acceptor);
+ send_ack(STDOUT_FILENO);
read_wrap_token(acceptor);
+ send_ack(STDOUT_FILENO);
read_mic_token(acceptor);
+ send_ack(STDOUT_FILENO);
read_iov_token(acceptor);
+ send_ack(STDOUT_FILENO);
+
send_wrap_token(acceptor);
+ read_ack(STDIN_FILENO);
send_mic_token(acceptor);
+ read_ack(STDIN_FILENO);
send_iov_token(acceptor);
+ read_ack(STDIN_FILENO);
+
cleanup_context(acceptor);
return 0;
}
diff --git a/src/util/gss-kernel-lib/t_kgss_user.c b/src/util/gss-kernel-lib/t_kgss_user.c
index 15fca238a5..6c4b638413 100644
--- a/src/util/gss-kernel-lib/t_kgss_user.c
+++ b/src/util/gss-kernel-lib/t_kgss_user.c
@@ -378,13 +378,23 @@ main(int argc, char **argv)
establish_contexts(argv[1], &initiator, &acceptor);
start_child(&to_child, &from_child, &child_pid);
+
send_lucid_context(acceptor, to_child);
+ read_ack(from_child);
send_wrap_token(initiator, to_child);
+ read_ack(from_child);
send_mic_token(initiator, to_child);
+ read_ack(from_child);
send_iov_token(initiator, to_child);
+ read_ack(from_child);
+
read_wrap_token(initiator, from_child);
+ send_ack(to_child);
read_mic_token(initiator, from_child);
+ send_ack(to_child);
read_iov_token(initiator, from_child);
+ send_ack(to_child);
+
cleanup_context(initiator);
close(to_child);
close(from_child);