MCPcopy Create free account
hub / github.com/F-Stack/f-stack / realhostname_sa

Function realhostname_sa

tools/libutil/realhostname.c:100–200  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

98#define SOCKINET(p) ((struct sockinet *)(void *)(p))
99
100int
101realhostname_sa(char *host, size_t hsize, struct sockaddr *addr, int addrlen)
102{
103 int result, error;
104 char buf[NI_MAXHOST];
105#ifdef INET6
106 struct sockaddr_in lsin;
107#endif
108
109 result = HOSTNAME_INVALIDADDR;
110
111#ifdef INET6
112 /* IPv4 mapped IPv6 addr consideraton, specified in rfc2373. */
113 if (addr->sa_family == AF_INET6 &&
114 addrlen == sizeof(struct sockaddr_in6) &&
115 IN6_IS_ADDR_V4MAPPED(&SOCKADDR_IN6(addr)->sin6_addr)) {
116 struct sockaddr_in6 *sin6;
117
118 sin6 = SOCKADDR_IN6(addr);
119
120 memset(&lsin, 0, sizeof(lsin));
121 lsin.sin_len = sizeof(struct sockaddr_in);
122 lsin.sin_family = AF_INET;
123 lsin.sin_port = sin6->sin6_port;
124 memcpy(&lsin.sin_addr, &sin6->sin6_addr.s6_addr[12],
125 sizeof(struct in_addr));
126 addr = (struct sockaddr *)&lsin;
127 addrlen = lsin.sin_len;
128 }
129#endif
130
131 error = getnameinfo(addr, addrlen, buf, sizeof(buf), NULL, 0,
132 NI_NAMEREQD);
133 if (error == 0) {
134 struct addrinfo hints, *res, *ores;
135 struct sockaddr *sa;
136
137 memset(&hints, 0, sizeof(struct addrinfo));
138 hints.ai_family = addr->sa_family;
139 hints.ai_flags = AI_CANONNAME | AI_PASSIVE;
140 hints.ai_socktype = SOCK_STREAM;
141
142 error = getaddrinfo(buf, NULL, &hints, &res);
143 if (error) {
144 result = HOSTNAME_INVALIDNAME;
145 goto numeric;
146 }
147 for (ores = res; ; res = res->ai_next) {
148 if (res == NULL) {
149 freeaddrinfo(ores);
150 result = HOSTNAME_INCORRECTNAME;
151 goto numeric;
152 }
153 sa = res->ai_addr;
154 if (sa == NULL) {
155 freeaddrinfo(ores);
156 result = HOSTNAME_INCORRECTNAME;
157 goto numeric;

Callers

nothing calls this directly

Calls 7

memsetFunction · 0.85
getaddrinfoFunction · 0.85
freeaddrinfoFunction · 0.85
trimdomainFunction · 0.85
strncpyFunction · 0.85
memcpyFunction · 0.50
strlcpyFunction · 0.50

Tested by

no test coverage detected