From 7d1d48a2d0a08567f5c8e14d50d89a9b47c02f1d Mon Sep 17 00:00:00 2001 From: Matt Caswell Date: Fri, 5 Feb 2016 19:40:44 +0000 Subject: [PATCH] Add a BIO_ADDR_clear function Adds a new function BIO_ADDR_clear to reset a BIO_ADDR back to an unitialised state, and to set the family to AF_UNSPEC. Reviewed-by: Viktor Dukhovni --- crypto/bio/b_addr.c | 7 +++++++ doc/crypto/BIO_ADDR.pod | 9 +++++++-- include/openssl/bio.h | 1 + 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/crypto/bio/b_addr.c b/crypto/bio/b_addr.c index 20cb66dce0..f1ff5fe37c 100644 --- a/crypto/bio/b_addr.c +++ b/crypto/bio/b_addr.c @@ -76,6 +76,7 @@ BIO_ADDR *BIO_ADDR_new(void) { BIO_ADDR *ret = (BIO_ADDR *)OPENSSL_zalloc(sizeof(BIO_ADDR)); + ret->sa.sa_family = AF_UNSPEC; return ret; } @@ -84,6 +85,12 @@ void BIO_ADDR_free(BIO_ADDR *ap) OPENSSL_free(ap); } +void BIO_ADDR_clear(BIO_ADDR *ap) +{ + memset(ap, 0, sizeof(*ap)); + ap->sa.sa_family = AF_UNSPEC; +} + /* * BIO_ADDR_make - non-public routine to fill a BIO_ADDR with the contents * of a struct sockaddr. diff --git a/doc/crypto/BIO_ADDR.pod b/doc/crypto/BIO_ADDR.pod index cec7dddd7e..a3c9b5cfaf 100644 --- a/doc/crypto/BIO_ADDR.pod +++ b/doc/crypto/BIO_ADDR.pod @@ -2,7 +2,7 @@ =head1 NAME -BIO_ADDR, BIO_ADDR_new, BIO_ADDR_free, BIO_ADDR_rawmake, +BIO_ADDR, BIO_ADDR_new, BIO_ADDR_clear, BIO_ADDR_free, BIO_ADDR_rawmake, BIO_ADDR_family, BIO_ADDR_rawaddress, BIO_ADDR_rawport, BIO_ADDR_hostname_string, BIO_ADDR_service_string, BIO_ADDR_path_string - BIO_ADDR routines @@ -16,6 +16,7 @@ BIO_ADDR_path_string - BIO_ADDR routines BIO_ADDR *BIO_ADDR_new(void); void BIO_ADDR_free(BIO_ADDR *); + void BIO_ADDR_clear(BIO_ADDR *ap); int BIO_ADDR_rawmake(BIO_ADDR *ap, int family, const void *where, size_t wherelen, unsigned short port); int BIO_ADDR_family(const BIO_ADDR *ap); @@ -38,6 +39,9 @@ BIO_accept_ex(). BIO_ADDR_free() frees a B created with BIO_ADDR_new(). +BIO_ADDR_clear() clears any data held within the provided B and sets +it back to an uninitialised state. + BIO_ADDR_rawmake() takes a protocol B, an byte array of size B with an address in network byte order pointed at by B and a port number in network byte order in B (except @@ -50,7 +54,8 @@ I below>. BIO_ADDR_family() returns the protocol family of the given B. The possible non-error results are one of the -constants AF_INET, AF_INET6 and AF_UNIX. +constants AF_INET, AF_INET6 and AF_UNIX. It will also return AF_UNSPEC if the +BIO_ADDR has not been initialised. BIO_ADDR_rawaddress() will write the raw address of the given B in the area pointed at by B

if B

is non-NULL, diff --git a/include/openssl/bio.h b/include/openssl/bio.h index 2989218f7a..cfb7b0fd33 100644 --- a/include/openssl/bio.h +++ b/include/openssl/bio.h @@ -713,6 +713,7 @@ BIO_ADDR *BIO_ADDR_new(void); int BIO_ADDR_rawmake(BIO_ADDR *ap, int family, const void *where, size_t wherelen, unsigned short port); void BIO_ADDR_free(BIO_ADDR *); +void BIO_ADDR_clear(BIO_ADDR *ap); int BIO_ADDR_family(const BIO_ADDR *ap); int BIO_ADDR_rawaddress(const BIO_ADDR *ap, void *p, size_t *l); unsigned short BIO_ADDR_rawport(const BIO_ADDR *ap); -- GitLab