OpenCoverage

canon-host.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/coreutils/src/gnulib/lib/canon-host.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* Host name canonicalization-
2-
3 Copyright (C) 2005-2018 Free Software Foundation, Inc.-
4-
5 Written by Derek Price <derek@ximbiot.com>.-
6-
7 This program is free software: you can redistribute it and/or modify-
8 it under the terms of the GNU General Public License as published by-
9 the Free Software Foundation; either version 3, or (at your option)-
10 any later version.-
11-
12 This program is distributed in the hope that it will be useful,-
13 but WITHOUT ANY WARRANTY; without even the implied warranty of-
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the-
15 GNU General Public License for more details.-
16-
17 You should have received a copy of the GNU General Public License-
18 along with this program. If not, see <https://www.gnu.org/licenses/>. */-
19-
20#include <config.h>-
21-
22#include "canon-host.h"-
23-
24#include <string.h>-
25#include <netdb.h>-
26-
27/* Store the last error for the single-threaded version of this function. */-
28static int last_cherror;-
29-
30/* Single-threaded of wrapper for canon_host_r. After a NULL return, error-
31 messages may be retrieved via ch_strerror(). */-
32char *-
33canon_host (const char *host)-
34{-
35 return canon_host_r (host, &last_cherror);
never executed: return canon_host_r (host, &last_cherror);
0
36}-
37-
38/* Return a malloc'd string containing the canonical hostname associated with-
39 HOST, or NULL if a canonical name cannot be determined. On NULL return,-
40 if CHERROR is not NULL, set *CHERROR to an error code as returned by-
41 getaddrinfo(). Use ch_strerror_r() or gai_strerror() to convert a *CHERROR-
42 value to a string suitable for error messages.-
43-
44 WARNINGS-
45 HOST must be a string representation of a resolvable name for this host.-
46 Strings containing an IP address in dotted decimal notation will be-
47 returned as-is, without further resolution.-
48-
49 The use of the word "canonical" in this context is unfortunate but-
50 entrenched. The value returned by this function will be the end result-
51 of the resolution of any CNAME chains in the DNS. There may only be one-
52 such value for any given hostname, though the actual IP address-
53 referenced by this value and the device using that IP address may each-
54 actually have any number of such "canonical" hostnames. See the POSIX-
55 getaddrinfo spec <http://www.opengroup.org/susv3xsh/getaddrinfo.html">,-
56 RFC 1034 <https://www.ietf.org/rfc/rfc1034.txt>, & RFC 2181-
57 <https://www.ietf.org/rfc/rfc2181.txt> for more on what this confusing-
58 term really refers to. */-
59char *-
60canon_host_r (char const *host, int *cherror)-
61{-
62 char *retval = NULL;-
63 static struct addrinfo hints;-
64 struct addrinfo *res = NULL;-
65 int status;-
66-
67 hints.ai_flags = AI_CANONNAME;-
68 status = getaddrinfo (host, NULL, &hints, &res);-
69 if (!status)
!statusDescription
TRUEnever evaluated
FALSEnever evaluated
0
70 {-
71 /* https://lists.gnu.org/r/bug-coreutils/2006-09/msg00300.html-
72 says Darwin 7.9.0 getaddrinfo returns 0 but sets-
73 res->ai_canonname to NULL. */-
74 retval = strdup (res->ai_canonname ? res->ai_canonname : host);
never executed: __retval = (char *) memcpy (__retval, res->ai_canonname ? res->ai_canonname : host , __len);
__retval != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
((const char *... ))[0] == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...nname : host )Description
TRUEnever evaluated
FALSEnever evaluated
((size_t)(cons...: host ) == 1)Description
TRUEnever evaluated
FALSEnever evaluated
0
75 if (!retval && cherror)
!retvalDescription
TRUEnever evaluated
FALSEnever evaluated
cherrorDescription
TRUEnever evaluated
FALSEnever evaluated
0
76 *cherror = EAI_MEMORY;
never executed: *cherror = -10 ;
0
77 freeaddrinfo (res);-
78 }
never executed: end of block
0
79 else if (cherror)
cherrorDescription
TRUEnever evaluated
FALSEnever evaluated
0
80 *cherror = status;
never executed: *cherror = status;
0
81-
82 return retval;
never executed: return retval;
0
83}-
84-
85/* Return a string describing the last error encountered by canon_host. */-
86const char *-
87ch_strerror (void)-
88{-
89 return gai_strerror (last_cherror);
never executed: return gai_strerror (last_cherror);
0
90}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.1.2