NeoMutt  2024-04-25-76-g20fe7b
Teaching an old dog new tricks
DOXYGEN
Loading...
Searching...
No Matches
getdomain.c File Reference

DNS lookups. More...

#include "config.h"
#include <netdb.h>
#include <string.h>
#include <sys/socket.h>
#include <time.h>
#include <unistd.h>
#include "mutt/lib.h"
#include "lib.h"
+ Include dependency graph for getdomain.c:

Go to the source code of this file.

Functions

static struct addrinfo * mutt_getaddrinfo (const char *node, const struct addrinfo *hints)
 Lookup the host's name using getaddrinfo()
 
int getdnsdomainname (struct Buffer *result)
 Lookup the host's name using DNS.
 

Detailed Description

DNS lookups.

Authors
  • Mehdi Abaakouk
  • Richard Russon
  • Ihor Antonov
  • Pietro Cerutti

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Definition in file getdomain.c.

Function Documentation

◆ mutt_getaddrinfo()

static struct addrinfo * mutt_getaddrinfo ( const char *  node,
const struct addrinfo *  hints 
)
static

Lookup the host's name using getaddrinfo()

Parameters
nodeHostname, got by gethostname()
hintsFlags to pass to getaddrinfo()
Return values
ptrAddress info
NULLError
Note
Caller must free result

Definition at line 102 of file getdomain.c.

103{
104 ASSERT(node);
105 ASSERT(hints);
106 struct addrinfo *result = NULL;
107 mutt_debug(LL_DEBUG3, "before getaddrinfo\n");
108 int rc = getaddrinfo(node, NULL, hints, &result);
109 mutt_debug(LL_DEBUG3, "after getaddrinfo\n");
110
111 if (rc != 0)
112 result = NULL;
113
114 return result;
115}
#define mutt_debug(LEVEL,...)
Definition: logging2.h:89
@ LL_DEBUG3
Log at debug level 3.
Definition: logging2.h:45
#define ASSERT(COND)
Definition: signal2.h:58
+ Here is the caller graph for this function:

◆ getdnsdomainname()

int getdnsdomainname ( struct Buffer result)

Lookup the host's name using DNS.

Parameters
resultBuffer were result of the domain name lookup will be stored
Return values
0Success
-1Error

Definition at line 124 of file getdomain.c.

125{
126 ASSERT(result);
127 int rc = -1;
128
129#if defined(HAVE_GETADDRINFO) || defined(HAVE_GETADDRINFO_A)
130 char node[256] = { 0 };
131 if (gethostname(node, sizeof(node)) != 0)
132 return rc;
133
134 struct addrinfo *lookup_result = NULL;
135 struct addrinfo hints = { 0 };
136
137 buf_reset(result);
138 hints.ai_flags = AI_CANONNAME;
139 hints.ai_family = AF_UNSPEC;
140
141#ifdef HAVE_GETADDRINFO_A
142 lookup_result = mutt_getaddrinfo_a(node, &hints);
143#else
144 lookup_result = mutt_getaddrinfo(node, &hints);
145#endif
146
147 if (lookup_result && lookup_result->ai_canonname)
148 {
149 const char *hostname = strchr(lookup_result->ai_canonname, '.');
150 if (hostname && hostname[1] != '\0')
151 {
152 buf_strcpy(result, ++hostname);
153 rc = 0;
154 }
155 }
156
157 if (lookup_result)
158 freeaddrinfo(lookup_result);
159#endif
160
161 return rc;
162}
void buf_reset(struct Buffer *buf)
Reset an existing Buffer.
Definition: buffer.c:76
size_t buf_strcpy(struct Buffer *buf, const char *s)
Copy a string into a Buffer.
Definition: buffer.c:395
static struct addrinfo * mutt_getaddrinfo(const char *node, const struct addrinfo *hints)
Lookup the host's name using getaddrinfo()
Definition: getdomain.c:102
+ Here is the call graph for this function:
+ Here is the caller graph for this function: