Fix failures when the host have broken hostname (Closes: #683555)
Ondřej Surý
11 years ago
0 | --- a/lib/saslutil.c | |
1 | +++ b/lib/saslutil.c | |
2 | @@ -555,32 +555,44 @@ int get_fqhostname( | |
3 | NULL, /* don't care abour service/port */ | |
4 | &hints, | |
5 | &result) != 0) { | |
6 | - /* errno on Unix, WSASetLastError on Windows are already done by the function */ | |
7 | - return (-1); | |
8 | + if (abort_if_no_fqdn) { | |
9 | + /* errno on Unix, WSASetLastError on Windows are already done by the function */ | |
10 | + return (-1); | |
11 | + } else { | |
12 | + goto LOWERCASE; | |
13 | + } | |
14 | } | |
15 | ||
16 | - if (abort_if_no_fqdn && (result == NULL || result->ai_canonname == NULL)) { | |
17 | + if (result == NULL || result->ai_canonname == NULL) { | |
18 | freeaddrinfo (result); | |
19 | + if (abort_if_no_fqdn) { | |
20 | #ifdef WIN32 | |
21 | - WSASetLastError (WSANO_DATA); | |
22 | + WSASetLastError (WSANO_DATA); | |
23 | #elif defined(ENODATA) | |
24 | - errno = ENODATA; | |
25 | + errno = ENODATA; | |
26 | #elif defined(EADDRNOTAVAIL) | |
27 | - errno = EADDRNOTAVAIL; | |
28 | + errno = EADDRNOTAVAIL; | |
29 | #endif | |
30 | - return (-1); | |
31 | + return (-1); | |
32 | + } else { | |
33 | + goto LOWERCASE; | |
34 | + } | |
35 | } | |
36 | ||
37 | - if (abort_if_no_fqdn && strchr (result->ai_canonname, '.') == NULL) { | |
38 | + if (strchr (result->ai_canonname, '.') == NULL) { | |
39 | freeaddrinfo (result); | |
40 | + if (abort_if_no_fqdn) { | |
41 | #ifdef WIN32 | |
42 | - WSASetLastError (WSANO_DATA); | |
43 | + WSASetLastError (WSANO_DATA); | |
44 | #elif defined(ENODATA) | |
45 | - errno = ENODATA; | |
46 | + errno = ENODATA; | |
47 | #elif defined(EADDRNOTAVAIL) | |
48 | - errno = EADDRNOTAVAIL; | |
49 | + errno = EADDRNOTAVAIL; | |
50 | #endif | |
51 | - return (-1); | |
52 | + return (-1); | |
53 | + } else { | |
54 | + goto LOWERCASE; | |
55 | + } | |
56 | } | |
57 | ||
58 |