154359Sroberto/* 254359Sroberto * decodenetnum - return a net number (this is crude, but careful) 354359Sroberto */ 454359Sroberto#include <sys/types.h> 554359Sroberto#include <ctype.h> 654359Sroberto#include <sys/socket.h> 754359Sroberto#include <netinet/in.h> 854359Sroberto 954359Sroberto#include "ntp_stdlib.h" 1054359Sroberto 1154359Srobertoint 1254359Srobertodecodenetnum( 1354359Sroberto const char *num, 14132451Sroberto struct sockaddr_storage *netnum 1554359Sroberto ) 1654359Sroberto{ 17132451Sroberto struct addrinfo hints, *ai = NULL; 18132451Sroberto register int err, i; 1954359Sroberto register const char *cp; 20132451Sroberto char name[80]; 2154359Sroberto 2254359Sroberto cp = num; 2354359Sroberto 2454359Sroberto if (*cp == '[') { 2554359Sroberto cp++; 26132451Sroberto for (i = 0; *cp != ']'; cp++, i++) 27132451Sroberto name[i] = *cp; 28132451Sroberto name[i] = '\0'; 29132451Sroberto num = name; 3054359Sroberto } 31132451Sroberto memset(&hints, 0, sizeof(struct addrinfo)); 32132451Sroberto hints.ai_flags = AI_NUMERICHOST; 33132451Sroberto err = getaddrinfo(num, NULL, &hints, &ai); 34132451Sroberto if (err != 0) 35132451Sroberto return 0; 36132451Sroberto memcpy(netnum, (struct sockaddr_storage *)ai->ai_addr, ai->ai_addrlen); 37132451Sroberto freeaddrinfo(ai); 3854359Sroberto return 1; 3954359Sroberto} 40