diff options
author | Greg Hudson <ghudson@mit.edu> | 2011-06-27 22:23:18 +0000 |
---|---|---|
committer | Greg Hudson <ghudson@mit.edu> | 2011-06-27 22:23:18 +0000 |
commit | b4c41e946104923df82212be453cf77b8eab63e5 (patch) | |
tree | 6e391c990801d944e3d3bee872ada92a0554f290 /src/util/gss-kernel-lib | |
parent | 9f64a8329f15ff80d0f38e91e4781be1399d1f41 (diff) | |
download | krb5-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.c | 21 | ||||
-rw-r--r-- | src/util/gss-kernel-lib/t_kgss_common.h | 2 | ||||
-rw-r--r-- | src/util/gss-kernel-lib/t_kgss_kernel.c | 9 | ||||
-rw-r--r-- | src/util/gss-kernel-lib/t_kgss_user.c | 10 |
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); |