From c139c81e0d775ff694de0bd6233f97cece13c2a2 Mon Sep 17 00:00:00 2001 From: Assar Westerlund Date: Mon, 16 Aug 1999 12:43:43 +0000 Subject: [PATCH] (proto): don't trust errno if krb5_net_read hasn't returned -1 git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@6825 ec53bebd-3082-4978-b11e-865c3cabbd6b --- appl/kf/kf.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/appl/kf/kf.c b/appl/kf/kf.c index 3cde52a40..2bf7bd4e3 100644 --- a/appl/kf/kf.c +++ b/appl/kf/kf.c @@ -141,7 +141,8 @@ proto (int sock, const char *hostname, const char *service) krb5_creds creds; krb5_kdc_flags flags; krb5_principal principal; - char ret_string[10]; + char ret_string[10]; + ssize_t n; status = krb5_auth_con_init (context, &auth_context); if (status) { @@ -272,18 +273,23 @@ proto (int sock, const char *hostname, const char *service) net_len = htonl(len); if (krb5_net_write (context, &sock, &net_len, 4) != 4) { - krb5_warn (context, status, "krb5_net_write"); + krb5_warn (context, errno, "krb5_net_write"); return 1; } if (krb5_net_write (context, &sock, packet.data, len) != len) { - krb5_warn (context, status, "krb5_net_write"); + krb5_warn (context, errno, "krb5_net_write"); return 1; } krb5_data_free (&data); - if (krb5_net_read (context, &sock, &net_len, 4) != 4) { - krb5_warn (context, status, "krb5_net_read"); + n = krb5_net_read (context, &sock, &net_len, 4); + if (n == 0) { + krb5_warnx (context, "EOF in krb5_net_read"); + return 1; + } + if (n < 0) { + krb5_warn (context, errno, "krb5_net_read"); return 1; } len = ntohl(net_len); @@ -291,8 +297,13 @@ proto (int sock, const char *hostname, const char *service) krb5_warnx (context, "too long string back from %s", hostname); return 1; } - if (krb5_net_read (context, &sock, ret_string, len) != len) { - krb5_warnx (context, "read too short from %s", hostname); + n = krb5_net_read (context, &sock, ret_string, len); + if (n == 0) { + krb5_warnx (context, "EOF in krb5_net_read"); + return 1; + } + if (n < 0) { + krb5_warn (context, errno, "krb5_net_read"); return 1; } ret_string[sizeof(ret_string) - 1] = '\0';