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