use krb5_{read,write}_message
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@4487 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997 Kungliga Tekniska H<>gskolan
|
* Copyright (c) 1997, 1998 Kungliga Tekniska H<>gskolan
|
||||||
* (Royal Institute of Technology, Stockholm, Sweden).
|
* (Royal Institute of Technology, Stockholm, Sweden).
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
@@ -46,7 +46,6 @@ send_priv(krb5_context context, krb5_auth_context ac,
|
|||||||
{
|
{
|
||||||
krb5_data packet;
|
krb5_data packet;
|
||||||
krb5_error_code ret;
|
krb5_error_code ret;
|
||||||
unsigned char net_len[4];
|
|
||||||
|
|
||||||
ret = krb5_mk_priv (context,
|
ret = krb5_mk_priv (context,
|
||||||
ac,
|
ac,
|
||||||
@@ -56,16 +55,7 @@ send_priv(krb5_context context, krb5_auth_context ac,
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
net_len[0] = (packet.length >> 24) & 0xff;
|
ret = krb5_write_message (context, &fd, &packet);
|
||||||
net_len[1] = (packet.length >> 16) & 0xff;
|
|
||||||
net_len[2] = (packet.length >> 8) & 0xff;
|
|
||||||
net_len[3] = packet.length & 0xff;
|
|
||||||
|
|
||||||
if (krb5_net_write (context, &fd, net_len, 4) != 4)
|
|
||||||
ret = errno;
|
|
||||||
else if (krb5_net_write (context, &fd,
|
|
||||||
packet.data, packet.length) != packet.length)
|
|
||||||
ret = errno;
|
|
||||||
krb5_data_free(&packet);
|
krb5_data_free(&packet);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -79,55 +69,23 @@ recv_priv(krb5_context context, krb5_auth_context ac, int fd, krb5_data *out)
|
|||||||
size_t len;
|
size_t len;
|
||||||
krb5_data data;
|
krb5_data data;
|
||||||
|
|
||||||
if(krb5_net_read(context, &fd, tmp, 4) != 4)
|
ret = krb5_read_message (context, &fd, &data);
|
||||||
return errno;
|
if (ret)
|
||||||
len = (tmp[0] << 24) | (tmp[1] << 16) | (tmp[2] << 8) | tmp[3];
|
return ret;
|
||||||
buf = malloc(len);
|
|
||||||
if(krb5_net_read(context, &fd, buf, len) != len)
|
|
||||||
return errno;
|
|
||||||
data.data = buf;
|
|
||||||
data.length = len;
|
|
||||||
ret = krb5_rd_priv(context, ac, &data, out, NULL);
|
ret = krb5_rd_priv(context, ac, &data, out, NULL);
|
||||||
if(ret) return ret;
|
krb5_data_free (&data);
|
||||||
free(buf);
|
return ret;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
krb5_error_code
|
krb5_error_code
|
||||||
send_clear(krb5_context context, int fd, krb5_data data)
|
send_clear(krb5_context context, int fd, krb5_data data)
|
||||||
{
|
{
|
||||||
unsigned char tmp[4];
|
return krb5_write_message (context, &fd, &data);
|
||||||
int len;
|
|
||||||
|
|
||||||
tmp[0] = (data.length >> 24) & 0xff;
|
|
||||||
tmp[1] = (data.length >> 16) & 0xff;
|
|
||||||
tmp[2] = (data.length >> 8) & 0xff;
|
|
||||||
tmp[3] = (data.length >> 0) & 0xff;
|
|
||||||
len = write(fd, tmp, sizeof(tmp));
|
|
||||||
if(len == sizeof(tmp))
|
|
||||||
len = write(fd, data.data, data.length);
|
|
||||||
if(len != data.length)
|
|
||||||
return errno;
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
krb5_error_code
|
krb5_error_code
|
||||||
recv_clear(krb5_context context, int fd, krb5_data *out)
|
recv_clear(krb5_context context, int fd, krb5_data *out)
|
||||||
{
|
{
|
||||||
unsigned char tmp[4];
|
return krb5_read_message (context, &fd, out);
|
||||||
int len;
|
|
||||||
len = read(fd, tmp, sizeof(tmp));
|
|
||||||
if(len == 0){
|
|
||||||
memset(out, 0, sizeof(*out));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(len == sizeof(tmp)){
|
|
||||||
len = (tmp[0] << 24) | (tmp[1] << 16) | (tmp[2] << 8) | tmp[3];
|
|
||||||
krb5_data_alloc(out, len);
|
|
||||||
len = read(fd, out->data, out->length);
|
|
||||||
}
|
|
||||||
if(len != out->length)
|
|
||||||
return errno;
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user