diff --git a/lib/krb5/read_message.c b/lib/krb5/read_message.c new file mode 100644 index 000000000..dffc25d42 --- /dev/null +++ b/lib/krb5/read_message.c @@ -0,0 +1,26 @@ +#include "krb5_locl.h" + +RCSID("$Id$"); + +krb5_error_code +krb5_read_message (krb5_context context, + krb5_pointer p_fd, + krb5_data *data) +{ + krb5_error_code ret; + u_int32_t len; + u_int8_t buf[4]; + int fd = *((int *)p_fd); + + if (krb5_net_read (context, fd, buf, 4) != 4) + return errno; + len = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; + ret = krb5_data_alloc (data, len); + if (ret) + return ret; + if (krb5_net_read (context, fd, data->data, len) != len) { + krb5_data_free (data); + return errno; + } + return 0; +} diff --git a/lib/krb5/write_message.c b/lib/krb5/write_message.c new file mode 100644 index 000000000..14e3174a0 --- /dev/null +++ b/lib/krb5/write_message.c @@ -0,0 +1,23 @@ +#include "krb5_locl.h" + +RCSID("$Id$"); + +krb5_error_code +krb5_write_message (krb5_context context, + krb5_pointer p_fd, + krb5_data *data) +{ + u_int32_t len; + u_int8_t buf[4]; + int fd = *((int *)p_fd); + + len = data->length; + buf[0] = (len >> 24) & 0xFF; + buf[1] = (len >> 16) & 0xFF; + buf[2] = (len >> 8) & 0xFF; + buf[3] = (len >> 0) & 0xFF; + if (krb5_net_write (context, fd, buf, 4) != 4 + || krb5_net_write (context, fd, data->data, len) != len) + return errno; + return 0; +}