(proto): only trust errno if krb5_net_read actually returns -1
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@6821 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -53,6 +53,7 @@ proto (int sock, const char *service)
|
|||||||
krb5_data packet;
|
krb5_data packet;
|
||||||
krb5_data data;
|
krb5_data data;
|
||||||
u_int32_t len, net_len;
|
u_int32_t len, net_len;
|
||||||
|
ssize_t n;
|
||||||
|
|
||||||
status = krb5_auth_con_init (context, &auth_context);
|
status = krb5_auth_con_init (context, &auth_context);
|
||||||
if (status)
|
if (status)
|
||||||
@@ -99,15 +100,21 @@ proto (int sock, const char *service)
|
|||||||
krb5_data_zero (&data);
|
krb5_data_zero (&data);
|
||||||
krb5_data_zero (&packet);
|
krb5_data_zero (&packet);
|
||||||
|
|
||||||
if (krb5_net_read (context, &sock, &net_len, 4) != 4)
|
n = krb5_net_read (context, &sock, &net_len, 4);
|
||||||
err (1, "krb5_net_read");
|
if (n == 0)
|
||||||
|
krb5_errx (context, 1, "EOF in krb5_net_read");
|
||||||
|
if (n < 0)
|
||||||
|
krb5_err (context, 1, errno, "krb5_net_read");
|
||||||
|
|
||||||
len = ntohl(net_len);
|
len = ntohl(net_len);
|
||||||
|
|
||||||
krb5_data_alloc (&packet, len);
|
krb5_data_alloc (&packet, len);
|
||||||
|
|
||||||
if (krb5_net_read (context, &sock, packet.data, len) != len)
|
n = krb5_net_read (context, &sock, packet.data, len);
|
||||||
err (1, "krb5_net_read");
|
if (n == 0)
|
||||||
|
krb5_errx (context, 1, "EOF in krb5_net_read");
|
||||||
|
if (n < 0)
|
||||||
|
krb5_err (context, 1, errno, "krb5_net_read");
|
||||||
|
|
||||||
status = krb5_rd_safe (context,
|
status = krb5_rd_safe (context,
|
||||||
auth_context,
|
auth_context,
|
||||||
@@ -120,15 +127,21 @@ proto (int sock, const char *service)
|
|||||||
printf ("safe packet: %.*s\n", (int)data.length,
|
printf ("safe packet: %.*s\n", (int)data.length,
|
||||||
(char *)data.data);
|
(char *)data.data);
|
||||||
|
|
||||||
if (krb5_net_read (context, &sock, &net_len, 4) != 4)
|
n = krb5_net_read (context, &sock, &net_len, 4);
|
||||||
err (1, "krb5_net_read");
|
if (n == 0)
|
||||||
|
krb5_errx (context, 1, "EOF in krb5_net_read");
|
||||||
|
if (n < 0)
|
||||||
|
krb5_err (context, 1, errno, "krb5_net_read");
|
||||||
|
|
||||||
len = ntohl(net_len);
|
len = ntohl(net_len);
|
||||||
|
|
||||||
krb5_data_alloc (&packet, len);
|
krb5_data_alloc (&packet, len);
|
||||||
|
|
||||||
if (krb5_net_read (context, &sock, packet.data, len) != len)
|
n = krb5_net_read (context, &sock, packet.data, len);
|
||||||
err (1, "krb5_net_read");
|
if (n == 0)
|
||||||
|
krb5_errx (context, 1, "EOF in krb5_net_read");
|
||||||
|
if (n < 0)
|
||||||
|
krb5_err (context, 1, errno, "krb5_net_read");
|
||||||
|
|
||||||
status = krb5_rd_priv (context,
|
status = krb5_rd_priv (context,
|
||||||
auth_context,
|
auth_context,
|
||||||
|
Reference in New Issue
Block a user