mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-28 21:17:54 +00:00
sign/verify signatures
This commit is contained in:
parent
58a04de5cf
commit
6ac77d2f2e
@ -15,9 +15,9 @@
|
|||||||
* SOFTWARE.
|
* SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* $Id: connection.c,v 1.16 2000/02/17 19:58:58 gson Exp $ */
|
/* $Id: connection.c,v 1.17 2000/03/14 03:46:14 tale Exp $ */
|
||||||
|
|
||||||
/* Principal Author: Ted Lemon */
|
/* Principal Author: DCL */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Subroutines for dealing with connections.
|
* Subroutines for dealing with connections.
|
||||||
@ -91,15 +91,11 @@ free_connection(omapi_connection_t *connection) {
|
|||||||
isc_buffer_free(&buffer);
|
isc_buffer_free(&buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (connection->task != NULL) {
|
if (connection->task != NULL)
|
||||||
isc_task_destroy(&connection->task);
|
isc_task_destroy(&connection->task);
|
||||||
connection->task = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (connection->socket != NULL) {
|
if (connection->socket != NULL)
|
||||||
isc_socket_detach(&connection->socket);
|
isc_socket_detach(&connection->socket);
|
||||||
connection->socket = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (connection->is_client) {
|
if (connection->is_client) {
|
||||||
RUNTIME_CHECK(isc_mutex_destroy(&connection->wait_lock) ==
|
RUNTIME_CHECK(isc_mutex_destroy(&connection->wait_lock) ==
|
||||||
@ -619,8 +615,10 @@ omapi_connection_putmem(omapi_object_t *c, unsigned char *src,
|
|||||||
unsigned int len)
|
unsigned int len)
|
||||||
{
|
{
|
||||||
omapi_connection_t *connection;
|
omapi_connection_t *connection;
|
||||||
|
omapi_protocol_t *protocol;
|
||||||
isc_buffer_t *buffer;
|
isc_buffer_t *buffer;
|
||||||
isc_bufferlist_t bufferlist;
|
isc_bufferlist_t bufferlist;
|
||||||
|
isc_region_t region;
|
||||||
isc_result_t result;
|
isc_result_t result;
|
||||||
unsigned int space_available;
|
unsigned int space_available;
|
||||||
|
|
||||||
@ -628,6 +626,22 @@ omapi_connection_putmem(omapi_object_t *c, unsigned char *src,
|
|||||||
|
|
||||||
connection = (omapi_connection_t *)c;
|
connection = (omapi_connection_t *)c;
|
||||||
|
|
||||||
|
protocol = (omapi_protocol_t *)connection->inner;
|
||||||
|
|
||||||
|
REQUIRE(protocol != NULL && protocol->type == omapi_type_protocol);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* XXX make the auth stuff a part of the connection object instead?
|
||||||
|
*/
|
||||||
|
if (protocol->dst_update) {
|
||||||
|
region.base = src;
|
||||||
|
region.length = len;
|
||||||
|
result = dst_sign(DST_SIGMODE_UPDATE, protocol->key,
|
||||||
|
&protocol->dstctx, ®ion, NULL);
|
||||||
|
if (result != ISC_R_SUCCESS)
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check for enough space in the output buffers.
|
* Check for enough space in the output buffers.
|
||||||
*/
|
*/
|
||||||
@ -649,10 +663,6 @@ omapi_connection_putmem(omapi_object_t *c, unsigned char *src,
|
|||||||
ISC_LIST_APPEND(bufferlist, buffer, link);
|
ISC_LIST_APPEND(bufferlist, buffer, link);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* XXXDCL out_bytes hardly seems needed as it is easy to get a
|
|
||||||
* total of how much data is in the output buffers.
|
|
||||||
*/
|
|
||||||
connection->out_bytes += len;
|
connection->out_bytes += len;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -684,11 +694,17 @@ connection_copyout(unsigned char *dst, omapi_connection_t *connection,
|
|||||||
unsigned int size)
|
unsigned int size)
|
||||||
{
|
{
|
||||||
isc_buffer_t *buffer;
|
isc_buffer_t *buffer;
|
||||||
|
isc_region_t region;
|
||||||
unsigned int copy_bytes;
|
unsigned int copy_bytes;
|
||||||
|
omapi_protocol_t *protocol;
|
||||||
|
|
||||||
REQUIRE(connection != NULL &&
|
REQUIRE(connection != NULL &&
|
||||||
connection->type == omapi_type_connection);
|
connection->type == omapi_type_connection);
|
||||||
|
|
||||||
|
protocol = (omapi_protocol_t *)connection->inner;
|
||||||
|
|
||||||
|
REQUIRE(protocol != NULL && protocol->type == omapi_type_protocol);
|
||||||
|
|
||||||
INSIST(size <= connection->in_bytes);
|
INSIST(size <= connection->in_bytes);
|
||||||
|
|
||||||
connection->bytes_needed -= size;
|
connection->bytes_needed -= size;
|
||||||
@ -704,13 +720,21 @@ connection_copyout(unsigned char *dst, omapi_connection_t *connection,
|
|||||||
if (copy_bytes > size)
|
if (copy_bytes > size)
|
||||||
copy_bytes = size;
|
copy_bytes = size;
|
||||||
|
|
||||||
|
region.base = (unsigned char *)buffer->base + buffer->current;
|
||||||
|
region.length = copy_bytes;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* When dst == NULL, this function is being used to skip
|
* When dst == NULL, this function is being used to skip
|
||||||
* over uninteresting input.
|
* over uninteresting input.
|
||||||
*/
|
*/
|
||||||
if (dst != NULL)
|
if (dst != NULL)
|
||||||
(void)memcpy(dst, (unsigned char *)buffer->base +
|
(void)memcpy(dst, region.base, copy_bytes);
|
||||||
buffer->current, copy_bytes);
|
|
||||||
|
if (protocol->dst_update &&
|
||||||
|
protocol->verify_result == ISC_R_SUCCESS)
|
||||||
|
protocol->verify_result =
|
||||||
|
dst_verify(DST_SIGMODE_UPDATE, protocol->key,
|
||||||
|
&protocol->dstctx, ®ion, NULL);
|
||||||
|
|
||||||
isc_buffer_forward(buffer, copy_bytes);
|
isc_buffer_forward(buffer, copy_bytes);
|
||||||
|
|
||||||
@ -1068,6 +1092,15 @@ connection_destroy(omapi_object_t *handle) {
|
|||||||
* connection, so it should have been called to do all the cleanup.
|
* connection, so it should have been called to do all the cleanup.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* XXXDCL somehow, not all memory is being destroyed with abnormal
|
||||||
|
* drops. run the omapi_test program listener. then run the
|
||||||
|
* omapi_test as a client, and break at the end of omapi_auth_use.
|
||||||
|
* when the debugger stops, exit the debugger. only two blocks
|
||||||
|
* of memory are freed, but i suspect there are more than those
|
||||||
|
* associated with the connection.
|
||||||
|
*/
|
||||||
|
|
||||||
if (connection->state == omapi_connection_connected) {
|
if (connection->state == omapi_connection_connected) {
|
||||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||||
"Unexpected path to connection_destroy - "
|
"Unexpected path to connection_destroy - "
|
||||||
|
Loading…
x
Reference in New Issue
Block a user