mirror of
https://github.com/samba-team/samba.git
synced 2025-08-03 04:22:09 +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;
|
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 */
|
/* Copy a socket_address structure */
|
||||||
struct socket_address *socket_address_copy(TALLOC_CTX *mem_ctx,
|
struct socket_address *socket_address_copy(TALLOC_CTX *mem_ctx,
|
||||||
const struct socket_address *oaddr)
|
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 socket_address *socket_address_from_sockaddr(TALLOC_CTX *mem_ctx,
|
||||||
struct sockaddr *sockaddr,
|
struct sockaddr *sockaddr,
|
||||||
size_t addrlen);
|
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,
|
_PUBLIC_ void socket_address_set_port(struct socket_address *a,
|
||||||
uint16_t port);
|
uint16_t port);
|
||||||
struct socket_address *socket_address_copy(TALLOC_CTX *mem_ctx,
|
struct socket_address *socket_address_copy(TALLOC_CTX *mem_ctx,
|
||||||
|
Reference in New Issue
Block a user