5
/* socket address to resource record
9
/* DNS_RR *dns_sa_to_rr(hostname, pref, sa)
10
/* const char *hostname;
12
/* struct sockaddr *sa;
14
/* dns_sa_to_rr() converts a socket address into a DNS resource record.
18
/* The resource record host name.
20
/* The resource record MX host preference, if applicable.
24
/* The result is a null pointer in case of problems, with the
25
/* errno variable set to indicate the problem type.
29
/* The Secure Mailer license must be distributed with this software.
32
/* IBM T.J. Watson Research
34
/* Yorktown Heights, NY 10598, USA
37
/* System libraries. */
42
/* Utility library. */
50
/* dns_sa_to_rr - socket address to resource record */
52
DNS_RR *dns_sa_to_rr(const char *hostname, unsigned pref, struct sockaddr * sa)
56
if (sa->sa_family == AF_INET) {
57
return (dns_rr_create(hostname, T_A, C_IN, DUMMY_TTL, pref,
58
(char *) &SOCK_ADDR_IN_ADDR(sa),
59
sizeof(SOCK_ADDR_IN_ADDR(sa))));
61
} else if (sa->sa_family == AF_INET6) {
62
return (dns_rr_create(hostname, T_AAAA, C_IN, DUMMY_TTL, pref,
63
(char *) &SOCK_ADDR_IN6_ADDR(sa),
64
sizeof(SOCK_ADDR_IN6_ADDR(sa))));
73
* Stand-alone test program.
77
#include <myaddrinfo.h>
78
#include <inet_proto.h>
80
static const char *myname;
82
static NORETURN usage(void)
84
msg_fatal("usage: %s hostname", myname);
87
int main(int argc, char **argv)
89
MAI_HOSTADDR_STR hostaddr;
90
struct addrinfo *res0;
99
inet_proto_init(argv[0], INET_PROTO_NAME_ALL);
102
if ((aierr = hostname_to_sockaddr(argv[0], (char *) 0, 0, &res0)) != 0)
103
msg_fatal("%s: %s", argv[0], MAI_STRERROR(aierr));
104
for (res = res0; res != 0; res = res->ai_next) {
105
if ((rr = dns_sa_to_rr(argv[0], 0, res->ai_addr)) == 0)
106
msg_fatal("dns_sa_to_rr: %m");
107
if (dns_rr_to_pa(rr, &hostaddr) == 0)
108
msg_fatal("dns_rr_to_pa: %m");
109
vstream_printf("%s -> %s\n", argv[0], hostaddr.buf);
110
vstream_fflush(VSTREAM_OUT);