mirror of
https://github.com/samba-team/samba.git
synced 2025-08-02 00:22:11 +03:00
s4-ipv6: added socket_address_from_sockaddr_storage()
this converts a struct sockaddr_storage to a struct socket_address
This commit is contained in:
@ -510,6 +510,50 @@ _PUBLIC_ struct socket_address *socket_address_from_sockaddr(TALLOC_CTX *mem_ctx
|
||||
return addr;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Create a new socket_address from sockaddr_storage
|
||||
*/
|
||||
_PUBLIC_ struct socket_address *socket_address_from_sockaddr_storage(TALLOC_CTX *mem_ctx,
|
||||
const struct sockaddr_storage *sockaddr,
|
||||
uint16_t port)
|
||||
{
|
||||
struct socket_address *addr = talloc_zero(mem_ctx, struct socket_address);
|
||||
char addr_str[INET6_ADDRSTRLEN+1];
|
||||
const char *str;
|
||||
|
||||
if (!addr) {
|
||||
return NULL;
|
||||
}
|
||||
addr->port = port;
|
||||
switch (sockaddr->ss_family) {
|
||||
case AF_INET:
|
||||
addr->family = "ipv4";
|
||||
break;
|
||||
#ifdef HAVE_IPV6
|
||||
case AF_INET6:
|
||||
addr->family = "ipv6";
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
talloc_free(addr);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
str = print_sockaddr(addr_str, sizeof(addr_str), sockaddr);
|
||||
if (str == NULL) {
|
||||
talloc_free(addr);
|
||||
return NULL;
|
||||
}
|
||||
addr->addr = talloc_strdup(addr, str);
|
||||
if (addr->addr == NULL) {
|
||||
talloc_free(addr);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return addr;
|
||||
}
|
||||
|
||||
/* Copy a socket_address structure */
|
||||
struct socket_address *socket_address_copy(TALLOC_CTX *mem_ctx,
|
||||
const struct socket_address *oaddr)
|
||||
|
@ -174,6 +174,10 @@ struct socket_address *socket_address_from_strings(TALLOC_CTX *mem_ctx,
|
||||
struct socket_address *socket_address_from_sockaddr(TALLOC_CTX *mem_ctx,
|
||||
struct sockaddr *sockaddr,
|
||||
size_t addrlen);
|
||||
struct sockaddr_storage;
|
||||
struct socket_address *socket_address_from_sockaddr_storage(TALLOC_CTX *mem_ctx,
|
||||
const struct sockaddr_storage *sockaddr,
|
||||
uint16_t port);
|
||||
_PUBLIC_ void socket_address_set_port(struct socket_address *a,
|
||||
uint16_t port);
|
||||
struct socket_address *socket_address_copy(TALLOC_CTX *mem_ctx,
|
||||
|
Reference in New Issue
Block a user