From 7087d51975f4059591c04718def24ba7b753644c Mon Sep 17 00:00:00 2001 From: Sumit Bose Date: Mon, 27 Jun 2011 10:03:03 +0200 Subject: Add sockaddr_storage to sdap_service --- src/resolv/async_resolv.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'src/resolv/async_resolv.c') diff --git a/src/resolv/async_resolv.c b/src/resolv/async_resolv.c index 1f8056722..9b9b0538e 100644 --- a/src/resolv/async_resolv.c +++ b/src/resolv/async_resolv.c @@ -1296,6 +1296,42 @@ resolv_get_string_address(TALLOC_CTX *mem_ctx, struct resolv_hostent *hostent) return address; } +struct sockaddr_storage * +resolv_get_sockaddr_address(TALLOC_CTX *mem_ctx, struct resolv_hostent *hostent, + int port) +{ + struct sockaddr_storage *sockaddr; + + if (!hostent) return NULL; + + sockaddr = talloc_zero(mem_ctx, struct sockaddr_storage); + if (sockaddr == NULL) { + DEBUG(1, ("talloc_zero failed.\n")); + return NULL; + } + + switch(hostent->family) { + case AF_INET: + sockaddr->ss_family = AF_INET; + memcpy(&((struct sockaddr_in *) sockaddr)->sin_addr, + hostent->addr_list[0]->ipaddr, sizeof(struct in_addr)); + ((struct sockaddr_in *) sockaddr)->sin_port = (in_port_t) htons(port); + + break; + case AF_INET6: + sockaddr->ss_family = AF_INET6; + memcpy(&((struct sockaddr_in6 *) sockaddr)->sin6_addr, + hostent->addr_list[0]->ipaddr, sizeof(struct in6_addr)); + ((struct sockaddr_in6 *) sockaddr)->sin6_port = (in_port_t) htons(port); + break; + default: + DEBUG(1, ("Unknown address family %d\n")); + return NULL; + } + + return sockaddr; +} + /* * A simple helper function that will take an array of struct ares_srv_reply that * was allocated by malloc() in c-ares and copies it using talloc. The old one -- cgit