From fbd20c429e43568642d8c3de530b952ca8d67d48 Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Tue, 13 Oct 2009 13:10:28 +0200 Subject: [PATCH] Add -4 and -6 options to set address family when resolving names --- client.c | 8 +++++++- main.c | 5 +++++ nameserv.c | 10 ++++++++++ nameserv.h | 3 +++ 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/client.c b/client.c index 4059fe3..cce46ca 100644 --- a/client.c +++ b/client.c @@ -2619,11 +2619,17 @@ main(int argc, char **argv) } } else if (!strcmp(*argv, "-n")) { no_dns = 1; + } else if (!strcmp(*argv, "-4")) { + DNS_SetAddressFamily(IPADDR_INET4); + hostname = "127.0.0.1"; + } else if (!strcmp(*argv, "-6")) { + DNS_SetAddressFamily(IPADDR_INET6); + hostname = "::1"; } else if (!strcmp("-v", *argv) || !strcmp("--version",*argv)) { printf("chronyc (chrony) version %s\n", PROGRAM_VERSION_STRING); exit(0); } else if (!strncmp(*argv, "-", 1)) { - fprintf(stderr, "Usage : %s [-h ] [-p ] [-n] [command]\n", progname); + fprintf(stderr, "Usage : %s [-h ] [-p ] [-n] [-4|-6] [command]\n", progname); exit(1); } else { break; /* And process remainder of line as a command */ diff --git a/main.c b/main.c index 17c1b8b..2a322a6 100644 --- a/main.c +++ b/main.c @@ -61,6 +61,7 @@ #include "refclock.h" #include "clientlog.h" #include "broadcast.h" +#include "nameserv.h" /* ================================================== */ @@ -268,6 +269,10 @@ int main exit(0); } else if (!strcmp("-d", *argv)) { debug = 1; + } else if (!strcmp("-4", *argv)) { + DNS_SetAddressFamily(IPADDR_INET4); + } else if (!strcmp("-6", *argv)) { + DNS_SetAddressFamily(IPADDR_INET6); } else { LOG(LOGS_WARN, LOGF_Main, "Unrecognized command line option [%s]", *argv); } diff --git a/nameserv.c b/nameserv.c index d5874d6..d396593 100644 --- a/nameserv.c +++ b/nameserv.c @@ -40,6 +40,14 @@ #define MAXRETRIES 10 static unsigned int retries = 0; +static int address_family = IPADDR_UNSPEC; + +void +DNS_SetAddressFamily(int family) +{ + address_family = family; +} + int DNS_Name2IPAddress(const char *name, IPAddr *addr, int retry) { @@ -80,6 +88,8 @@ try_again: break; #endif } + if (result && address_family != IPADDR_UNSPEC && address_family != addr->family) + result = 0; } freeaddrinfo(res); diff --git a/nameserv.h b/nameserv.h index 1451b9b..0d282f3 100644 --- a/nameserv.h +++ b/nameserv.h @@ -34,6 +34,9 @@ #include "addressing.h" +/* Resolve names only to selected address family */ +extern void DNS_SetAddressFamily(int family); + extern int DNS_Name2IPAddress(const char *name, IPAddr *addr, int retry); extern void DNS_IPAddress2Name(IPAddr *ip_addr, char *name, int len);