summaryrefslogtreecommitdiff
path: root/doc/libs6dns/hosts.html
blob: 93bfc10745d5ffbbc7dd32a8338141507d547966 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
<html>
  <head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta http-equiv="Content-Language" content="en" />
    <title>s6-dns: the s6dns_hosts library interface</title>
    <meta name="Description" content="s6-dns: the s6dns_hosts library interface" />
    <meta name="Keywords" content="s6-dns dns s6dns_hosts library libs6dns /etc/hosts" />
    <!-- <link rel="stylesheet" type="text/css" href="//skarnet.org/default.css" /> -->
  </head>
<body>

<p>
<a href="index.html">libs6dns</a><br />
<a href="../">s6-dns</a><br />
<a href="//skarnet.org/software/">Software</a><br />
<a href="//skarnet.org/">skarnet.org</a>
</p>

<h1> The <tt>s6dns_hosts</tt> library interface </h1>

<p>
 The following functions are declared in the <tt>s6-dns/hosts.h</tt> header,
and implemented in the <tt>libs6dns.a</tt> or <tt>libs6dns.so</tt> library.
</p>

<h2> General information </h2>

<p>
 <tt>s6dns_hosts</tt> provides functions and macros - mostly macros -
to perform name-to-IP or IP-to-name resolution according to the
local <tt>/etc/hosts</tt> file.
</p>

<p>
 Most of the functions declared here are variations of another, more
generic function. Typically, a <em>foobar_r</em> function is the
generic one, and will take additional arguments such as: a pointer to
a local hosts database (compiled to an efficient format), and/or a
list and number of rules for qualification. The corresponding <em>foobar</em>
function is the same, except that it uses global variables to fill
these additional arguments: for instance, the hosts database made from
<tt>/etc/hosts</tt>, or the qualification rules computed from
<tt>/etc/resolv.conf</tt>. We document the simpler functions &mdash; even
though they're macros, we pretend they're functions; please refer to
the <a href="https://git.skarnet.org/cgi-bin/cgit.cgi/s6-dns/tree/src/include/s6-dns/hosts.h">s6-dns/hosts.h</a>
file for the exact prototypes or if you want to use the generic functions.
</p>

<ul>
 <li> <tt>s6dns_engine_here</tt>: a global
<a href="s6dns-engine.html">s6dns_engine_t</a> storing the current
query, for sequential queries. </li>
 <li> <tt>s6dns_debughook_zero</tt>: a global <tt>s6dns_debughook_t</tt>
meaning no debugging is needed. </li>
 <li> <tt>s6dns_rci_here</tt>: a global
<a href="s6dns-rci.html">s6dns_rci_t</a> containing the current
resolv.conf information. </li>
</ul>

<h2> Global variables </h2>

<p>
<code> cdb s6dns_hosts_here </code> <br />
<tt>s6dns_hosts_here</tt> is the global <tt>cdb</tt> database containing
the compiled data from <tt>/etc/hosts</tt>. You normally do not need to
use it manually because it is implicitly supplied to functions when you
use the macros without a <tt>_r</tt> suffix.
</p>


<h2> Functions </h2>

<h3> Preparation </h3>

<p>
<code> int s6dns_hosts_compile (int fdr, int fdw) </code> <br />
Compiles the text file data from file descriptor <tt>fdr</tt>,
which should be in <tt>/etc/hosts</tt> format, into a cdb file
written to file descriptor <tt>fdw</tt>. <tt>fdr</tt> must be
open for reading, and <tt>fdw</tt> must be open for writing and
seekable. The function returns 1 on success and 0 (and sets errno)
on failure.
</p>

<p>
 You normally don't need to use this function yourself, because
it's implicitly used by the following one.
</p>

<p>
<code> int s6dns_hosts_init (void) </code> <br />
Initializes the database from the <tt>/etc/hosts</tt> file.
If there's a pre-compiled <tt>/etc/hosts.cdb</tt> file that
is more recent than <tt>/etc/hosts</tt>, then it is used;
else, the <tt>/etc/hosts</tt> file is compiled into a
temporary file under <tt>/tmp</tt>, which is used and
immediately unlinked. The function returns 1 on success and
0 (and sets errno) on failure.
</p>

<p>
<code> int s6dns_hosts_init_r (cdb *c, char const *txtfile, char const *cdbfile, char const *prefix) </code> <br />
The generic version of the above function. Initializes the database
in <em>*c</em> from the compiled file <em>cdbfile</em> if it exists and is
more recent than <em>txtfile</em>, else compiles <em>txtfile</em> into
a temporary file with a path starting with <em>prefix</em>, makes it
accessible in <em>*c</em> and immediately unlinks it.
</p>

<p>
<code> void s6dns_hosts_free (void) </code> <br />
Frees the compiled hosts database. Only use this if
you're certain you'll have no more use for it.
</p>

<p>
<code> void s6dns_hosts_free_r (cdb *c) </code> <br />
The generic version of the above function.
</p>

<h3> IP to name resolution </h3>

<p>
<code> int s6dns_hosts_name_r (cdb const *c, char const *ip, stralloc *storage, genalloc *indices, int is6) </code> <br />
</p>

</body>
</html>