aboutsummaryrefslogtreecommitdiff
path: root/sntp/internet.c
diff options
context:
space:
mode:
Diffstat (limited to 'sntp/internet.c')
-rw-r--r--sntp/internet.c207
1 files changed, 0 insertions, 207 deletions
diff --git a/sntp/internet.c b/sntp/internet.c
deleted file mode 100644
index a1040f1673ab..000000000000
--- a/sntp/internet.c
+++ /dev/null
@@ -1,207 +0,0 @@
-/* Copyright (C) 1996 N.M. Maclaren
- Copyright (C) 1996 The University of Cambridge
-
-This includes all of the code needed to handle Internet addressing. It is way
-outside current POSIX, unfortunately. It should be easy to convert to a system
-that uses another mechanism. The signal handling is not necessary for its
-function, but is an attempt to avoid the program hanging when the name server
-is inaccessible. */
-
-
-
-#include "header.h"
-#include "internet.h"
-
-#include <netdb.h>
-#include <arpa/inet.h>
-
-#define INTERNET
-#include "kludges.h"
-#undef INTERNET
-
-
-/* Used to force dns resolving to ipv4 or ipv6 addresses. */
-static int pref_family;
-
-/* There needs to be some disgusting grobble for handling timeouts, which is
-identical to the grobble in socket.c. */
-
-static jmp_buf jump_buffer;
-
-static void jump_handler (int sig) {
- longjmp(jump_buffer,1);
-}
-
-static void clear_alarm (void) {
- int k;
-
- k = errno;
- alarm(0);
- errno = 0;
- if (signal(SIGALRM,SIG_DFL) == SIG_ERR)
- fatal(1,"unable to reset signal handler",NULL);
- errno = k;
-}
-
-void preferred_family(int fam) {
- switch(fam) {
- case PREF_FAM_INET:
- pref_family = AF_INET;
- break;
-#ifdef HAVE_IPV6
- case PREF_FAM_INET6:
- pref_family = AF_INET6;
- break;
-#endif
- default:
- fatal(0,"unable to set the preferred family", NULL);
- break;
- }
-}
-
-#ifdef HAVE_IPV6
-
-void find_address (struct sockaddr_storage *address,
- struct sockaddr_storage *anywhere,
- int *port, char *hostname, int timespan) {
-
-/* Locate the specified NTP server and return its Internet address and port
-number. */
-
- int family, rval;
- struct addrinfo hints;
- struct addrinfo *res;
-
- res = NULL;
- memset(address, 0, sizeof(struct sockaddr_storage));
- memset(anywhere, 0, sizeof(struct sockaddr_storage));
-
- if (setjmp(jump_buffer))
- fatal(0,"unable to set up access to NTP server %s",hostname);
- errno = 0;
- if (signal(SIGALRM,jump_handler) == SIG_ERR)
- fatal(1,"unable to set up signal handler",NULL);
- alarm((unsigned int)timespan);
-
-/* Look up the Internet name or IP number. */
- memset(&hints, 0, sizeof(hints));
- hints.ai_socktype = SOCK_DGRAM;
- hints.ai_family = pref_family;
- rval = getaddrinfo(hostname, "ntp", &hints, &res);
- if (rval != 0)
- fatal(0, "getaddrinfo(hostname, ntp) failed with %s",
- gai_strerror(rval));
-
-/* Now clear the timer and check the result. */
-
- clear_alarm();
- /* There can be more than one address in the list, but for now only
- use the first. */
- memcpy(address, res->ai_addr, res->ai_addrlen);
- family = res->ai_family;
- freeaddrinfo(res);
-
- switch(family) {
- case AF_INET:
- hints.ai_family = AF_INET;
- hints.ai_flags = AI_PASSIVE;
- rval = getaddrinfo(NULL, "ntp", &hints, &res);
- if (rval != 0)
- fatal(0, "getaddrinfo(NULL, ntp) failed with %s",
- gai_strerror(rval));
- memcpy(anywhere, res->ai_addr, res->ai_addrlen);
- freeaddrinfo(res);
- break;
- case AF_INET6:
- hints.ai_family = AF_INET6;
- hints.ai_flags = AI_PASSIVE;
- rval = getaddrinfo(NULL, "ntp", &hints, &res);
- if (rval != 0)
- fatal(0, "getaddrinfo(NULL, ntp, INET6, AI_PASSIVE) failed with %s",
- gai_strerror(rval));
- memcpy(anywhere, res->ai_addr, res->ai_addrlen);
- freeaddrinfo(res);
- break;
- }
-}
-
-#else
-
-void find_address (struct in_addr *address, struct in_addr *anywhere,
- int *port, char *hostname, int timespan) {
-
-/* Locate the specified NTP server and return its Internet address and port
-number. */
-
- unsigned long ipaddr;
- struct in_addr nowhere[1];
- struct hostent *host;
- struct servent *service;
-
-/* Set up the reserved Internet addresses, attempting not to assume that
-addresses are 32 bits. */
-
- local_to_address(nowhere,INADDR_LOOPBACK);
- local_to_address(anywhere,INADDR_ANY);
-
-/* Check the address, if any. This assumes that the DNS is reliable, or is at
-least checked by someone else. But it doesn't assume that it is accessible, so
-it needs to set up a timeout. */
-
- if (hostname == NULL)
- *address = *anywhere;
- else {
- if (setjmp(jump_buffer))
- fatal(0,"unable to set up access to NTP server %s",hostname);
- errno = 0;
- if (signal(SIGALRM,jump_handler) == SIG_ERR)
- fatal(1,"unable to set up signal handler",NULL);
- alarm((unsigned int)timespan);
-
-/* Look up the Internet name or IP number. */
-
- if (! isdigit(hostname[0])) {
- errno = 0;
- host = gethostbyname(hostname);
- } else {
- if ((ipaddr = inet_addr(hostname)) == (unsigned long)-1)
- fatal(0,"invalid IP number %s",hostname);
- network_to_address(address,ipaddr);
- errno = 0;
- host = gethostbyaddr((void *)address,sizeof(struct in_addr),
- AF_INET);
- }
-
-/* Now clear the timer and check the result. */
-
- clear_alarm();
- if (host == NULL) fatal(1,"unable to locate IP address/number",NULL);
- if (host->h_length != sizeof(struct in_addr))
- fatal(0,"the address does not seem to be an Internet one",NULL);
- *address = *((struct in_addr **)host->h_addr_list)[0];
- if (memcmp(address,nowhere,sizeof(struct in_addr)) == 0
- || memcmp(address,anywhere,sizeof(struct in_addr)) == 0)
- fatal(0,"reserved IP numbers cannot be used",NULL);
- if (verbose)
- fprintf(stderr,
- "%s: using NTP server %s (%s)\n",
- argv0,host->h_name,inet_ntoa(*address));
- }
-
-/* Find out the port number (usually from /etc/services), and leave it in
-network format. This is assumed not to be obtained from a network service!
-Note that a port number is not assumed to be 16 bits. */
-
- if ((service = getservbyname("ntp","udp")) != NULL) {
- *port = service->s_port;
- if (verbose > 2)
- fprintf(stderr,"Using port %d for NTP\n",port_to_integer(*port));
- } else {
- *port = NTP_PORT;
- if (verbose)
- fprintf(stderr,
- "%s: assuming port %d for NTP - check /etc/services\n",
- argv0,port_to_integer(*port));
- }
-}
-#endif