(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
This commit is contained in:
23
appl/kf/kf.c
23
appl/kf/kf.c
@@ -142,6 +142,7 @@ proto (int sock, const char *hostname, const char *service)
|
|||||||
krb5_kdc_flags flags;
|
krb5_kdc_flags flags;
|
||||||
krb5_principal principal;
|
krb5_principal principal;
|
||||||
char ret_string[10];
|
char ret_string[10];
|
||||||
|
ssize_t n;
|
||||||
|
|
||||||
status = krb5_auth_con_init (context, &auth_context);
|
status = krb5_auth_con_init (context, &auth_context);
|
||||||
if (status) {
|
if (status) {
|
||||||
@@ -272,18 +273,23 @@ proto (int sock, const char *hostname, const char *service)
|
|||||||
net_len = htonl(len);
|
net_len = htonl(len);
|
||||||
|
|
||||||
if (krb5_net_write (context, &sock, &net_len, 4) != 4) {
|
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;
|
return 1;
|
||||||
}
|
}
|
||||||
if (krb5_net_write (context, &sock, packet.data, len) != len) {
|
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;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
krb5_data_free (&data);
|
krb5_data_free (&data);
|
||||||
|
|
||||||
if (krb5_net_read (context, &sock, &net_len, 4) != 4) {
|
n = krb5_net_read (context, &sock, &net_len, 4);
|
||||||
krb5_warn (context, status, "krb5_net_read");
|
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;
|
return 1;
|
||||||
}
|
}
|
||||||
len = ntohl(net_len);
|
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);
|
krb5_warnx (context, "too long string back from %s", hostname);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (krb5_net_read (context, &sock, ret_string, len) != len) {
|
n = krb5_net_read (context, &sock, ret_string, len);
|
||||||
krb5_warnx (context, "read too short from %s", hostname);
|
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;
|
return 1;
|
||||||
}
|
}
|
||||||
ret_string[sizeof(ret_string) - 1] = '\0';
|
ret_string[sizeof(ret_string) - 1] = '\0';
|
||||||
|
Reference in New Issue
Block a user