(handle_v4): more error checking and more correct error messages

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@6827 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Assar Westerlund
1999-08-16 12:45:34 +00:00
parent 07da4391d7
commit 9b9c51c614

View File

@@ -917,6 +917,7 @@ handle_v4(krb5_context context,
int addr_len; int addr_len;
krb5_error_code ret; krb5_error_code ret;
krb5_data message, reply; krb5_data message, reply;
ssize_t n;
addr_len = sizeof(client_addr); addr_len = sizeof(client_addr);
if (getsockname(fd, (struct sockaddr*)&admin_addr, &addr_len) < 0) if (getsockname(fd, (struct sockaddr*)&admin_addr, &addr_len) < 0)
@@ -931,8 +932,12 @@ handle_v4(krb5_context context,
bytes of the version string */ bytes of the version string */
krb5_data_alloc(&message, len); krb5_data_alloc(&message, len);
memcpy(message.data, "KA", 2); memcpy(message.data, "KA", 2);
ret = krb5_net_read(context, &fd, (char*)message.data + 2, n = krb5_net_read(context, &fd, (char*)message.data + 2,
len - 2); len - 2);
if (n == 0)
exit (0);
if (n < 0)
krb5_err (context, 1, errno, "krb5_net_read");
first = 0; first = 0;
} else { } else {
char buf[2]; char buf[2];
@@ -942,18 +947,29 @@ handle_v4(krb5_context context,
n = krb5_net_read(context, &fd, buf, sizeof(2)); n = krb5_net_read(context, &fd, buf, sizeof(2));
if (n == 0) if (n == 0)
exit (0); exit (0);
if (n < 0)
krb5_err (context, 1, errno, "krb5_net_read");
_krb5_get_int(buf, &tmp, 2); _krb5_get_int(buf, &tmp, 2);
krb5_data_alloc(&message, tmp); krb5_data_alloc(&message, tmp);
krb5_net_read(context, &fd, message.data, message.length); n = krb5_net_read(context, &fd, message.data, message.length);
if (n == 0)
krb5_errx (context, 1, "EOF in krb5_net_read");
if (n < 0)
krb5_err (context, 1, errno, "krb5_net_read");
} }
decode_packet(context, &admin_addr, &client_addr, decode_packet(context, &admin_addr, &client_addr,
message, &reply); message, &reply);
krb5_data_free(&message); krb5_data_free(&message);
{ {
char buf[2]; char buf[2];
_krb5_put_int(buf, reply.length, sizeof(buf)); _krb5_put_int(buf, reply.length, sizeof(buf));
krb5_net_write(context, &fd, buf, sizeof(buf)); n = krb5_net_write(context, &fd, buf, sizeof(buf));
krb5_net_write(context, &fd, reply.data, reply.length); if (n < 0)
krb5_err (context, 1, errno, "krb5_net_write");
n = krb5_net_write(context, &fd, reply.data, reply.length);
if (n < 0)
krb5_err (context, 1, errno, "krb5_net_write");
krb5_data_free(&reply); krb5_data_free(&reply);
} }
} }