xref: /freebsd/lib/libcasper/services/cap_dns/cap_dns.3 (revision fa9896e082a1046ff4fbc75fcba4d18d1f2efc19)
1d06b4cefSMariusz Zaborski.\" Copyright (c) 2018 Mariusz Zaborski <oshogbo@FreeBSD.org>
2d06b4cefSMariusz Zaborski.\" All rights reserved.
3d06b4cefSMariusz Zaborski.\"
4d06b4cefSMariusz Zaborski.\" Redistribution and use in source and binary forms, with or without
5d06b4cefSMariusz Zaborski.\" modification, are permitted provided that the following conditions
6d06b4cefSMariusz Zaborski.\" are met:
7d06b4cefSMariusz Zaborski.\" 1. Redistributions of source code must retain the above copyright
8d06b4cefSMariusz Zaborski.\"    notice, this list of conditions and the following disclaimer.
9d06b4cefSMariusz Zaborski.\" 2. Redistributions in binary form must reproduce the above copyright
10d06b4cefSMariusz Zaborski.\"    notice, this list of conditions and the following disclaimer in the
11d06b4cefSMariusz Zaborski.\"    documentation and/or other materials provided with the distribution.
12d06b4cefSMariusz Zaborski.\"
13d06b4cefSMariusz Zaborski.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
14d06b4cefSMariusz Zaborski.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15d06b4cefSMariusz Zaborski.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16d06b4cefSMariusz Zaborski.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
17d06b4cefSMariusz Zaborski.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18d06b4cefSMariusz Zaborski.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19d06b4cefSMariusz Zaborski.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20d06b4cefSMariusz Zaborski.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21d06b4cefSMariusz Zaborski.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22d06b4cefSMariusz Zaborski.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23d06b4cefSMariusz Zaborski.\" SUCH DAMAGE.
24d06b4cefSMariusz Zaborski.\"
25832dc76bSMariusz Zaborski.Dd August 15, 2020
26d06b4cefSMariusz Zaborski.Dt CAP_DNS 3
27d06b4cefSMariusz Zaborski.Os
28d06b4cefSMariusz Zaborski.Sh NAME
29fe249490SMariusz Zaborski.Nm cap_getaddrinfo ,
30fe249490SMariusz Zaborski.Nm cap_getnameinfo ,
31d06b4cefSMariusz Zaborski.Nm cap_gethostbyname ,
32d06b4cefSMariusz Zaborski.Nm cap_gethostbyname2 ,
33d06b4cefSMariusz Zaborski.Nm cap_gethostbyaddr ,
34d06b4cefSMariusz Zaborski.Nm cap_dns_type_limit ,
35d06b4cefSMariusz Zaborski.Nm cap_dns_family_limit
36d06b4cefSMariusz Zaborski.Nd "library for getting network host entry in capability mode"
37d06b4cefSMariusz Zaborski.Sh LIBRARY
38d06b4cefSMariusz Zaborski.Lb libcap_dns
39d06b4cefSMariusz Zaborski.Sh SYNOPSIS
40d06b4cefSMariusz Zaborski.In sys/nv.h
41d06b4cefSMariusz Zaborski.In libcasper.h
42d06b4cefSMariusz Zaborski.In casper/cap_dns.h
43fe249490SMariusz Zaborski.Ft int
44fe249490SMariusz Zaborski.Fn cap_getaddrinfo "cap_channel_t *chan" "const char *hostname" "const char *servname" "const struct addrinfo *hints" "struct addrinfo **res"
45fe249490SMariusz Zaborski.Ft int
46fe249490SMariusz Zaborski.Fn cap_getnameinfo "cap_channel_t *chan" "const struct sockaddr *sa" "socklen_t salen" "char *host" "size_t hostlen" "char *serv" "size_t servlen" "int flags"
47d06b4cefSMariusz Zaborski.Ft "struct hostent *"
48d06b4cefSMariusz Zaborski.Fn cap_gethostbyname "const cap_channel_t *chan" "const char *name"
49d06b4cefSMariusz Zaborski.Ft "struct hostent *"
50d06b4cefSMariusz Zaborski.Fn cap_gethostbyname2 "const cap_channel_t *chan" "const char *name" "int af"
51d06b4cefSMariusz Zaborski.Ft "struct hostent *"
52d06b4cefSMariusz Zaborski.Fn cap_gethostbyaddr "const cap_channel_t *chan" "const void *addr" "socklen_t len" "int af"
53d06b4cefSMariusz Zaborski.Ft "int"
54d06b4cefSMariusz Zaborski.Fn cap_dns_type_limit "cap_channel_t *chan" "const char * const *types" "size_t ntypes"
55d06b4cefSMariusz Zaborski.Ft "int"
56d06b4cefSMariusz Zaborski.Fn cap_dns_family_limit "const cap_channel_t *chan" "const int *families" "size_t nfamilies"
57d06b4cefSMariusz Zaborski.Sh DESCRIPTION
58fe249490SMariusz Zaborski.Bf -symbolic
59832dc76bSMariusz ZaborskiThis service is obsolete and
60832dc76bSMariusz Zaborski.Xr cap_net 3
61832dc76bSMariusz Zaborskishould be used instead.
62fe249490SMariusz ZaborskiThe
63fe249490SMariusz Zaborski.Fn cap_getaddrinfo ,
64fe249490SMariusz Zaborskiand
65fe249490SMariusz Zaborski.Fn cap_getnameinfo ,
66fe249490SMariusz Zaborskifunctions are preferred over the
67fe249490SMariusz Zaborski.Fn cap_gethostbyname ,
68fe249490SMariusz Zaborski.Fn cap_gethostbyname2 ,
69fe249490SMariusz Zaborskiand
70fe249490SMariusz Zaborski.Fn cap_gethostbyaddr
71fe249490SMariusz Zaborskifunctions.
72fe249490SMariusz Zaborski.Ef
73fe249490SMariusz Zaborski.Pp
74d06b4cefSMariusz ZaborskiThe functions
75d06b4cefSMariusz Zaborski.Fn cap_gethostbyname ,
76d06b4cefSMariusz Zaborski.Fn cap_gethostbyname2 ,
77d06b4cefSMariusz Zaborski.Fn cep_gethostbyaddr
78d06b4cefSMariusz Zaborskiand
79280f3264SMariusz Zaborski.Fn cap_getnameinfo
80d06b4cefSMariusz Zaborskiare respectively equivalent to
81133b8ab5SAlan Somers.Xr gethostbyname 3 ,
82133b8ab5SAlan Somers.Xr gethostbyname2 3 ,
83133b8ab5SAlan Somers.Xr gethostbyaddr 3
84d06b4cefSMariusz Zaborskiand
85133b8ab5SAlan Somers.Xr getnameinfo 3
86d06b4cefSMariusz Zaborskiexcept that the connection to the
87d06b4cefSMariusz Zaborski.Nm system.dns
88d06b4cefSMariusz Zaborskiservice needs to be provided.
89d06b4cefSMariusz Zaborski.Pp
90d06b4cefSMariusz ZaborskiThe
91d06b4cefSMariusz Zaborski.Fn cap_dns_type_limit
92d06b4cefSMariusz Zaborskifunction limits the functions allowed in the service.
93d06b4cefSMariusz ZaborskiThe
94d06b4cefSMariusz Zaborski.Fa types
95d06b4cefSMariusz Zaborskivariable can be set to
96752d135eSMariusz Zaborski.Dv ADDR2NAME
97d06b4cefSMariusz Zaborskior
98752d135eSMariusz Zaborski.Dv NAME2ADDR .
99d06b4cefSMariusz ZaborskiSee the
100d06b4cefSMariusz Zaborski.Sx LIMITS
101d06b4cefSMariusz Zaborskisection for more details.
102d06b4cefSMariusz ZaborskiThe
103d06b4cefSMariusz Zaborski.Fa ntpyes
104d06b4cefSMariusz Zaborskivariable contains the number of
105d06b4cefSMariusz Zaborski.Fa types
106d06b4cefSMariusz Zaborskiprovided.
107d06b4cefSMariusz Zaborski.Pp
108d06b4cefSMariusz ZaborskiThe
109d06b4cefSMariusz Zaborski.Fn cap_dns_family_limit
110d06b4cefSMariusz Zaborskifunctions allows to limit address families.
111d06b4cefSMariusz ZaborskiFor details see
112d06b4cefSMariusz Zaborski.Sx LIMITS .
113d06b4cefSMariusz ZaborskiThe
114d06b4cefSMariusz Zaborski.Fa nfamilies
115d06b4cefSMariusz Zaborskivariable contains the number of
116d06b4cefSMariusz Zaborski.Fa families
117d06b4cefSMariusz Zaborskiprovided.
118d06b4cefSMariusz Zaborski.Sh LIMITS
119d06b4cefSMariusz ZaborskiThe preferred way of setting limits is to use the
120d06b4cefSMariusz Zaborski.Fn cap_dns_type_limit
121d06b4cefSMariusz Zaborskiand
122d06b4cefSMariusz Zaborski.Fn cap_dns_family_limit
123d06b4cefSMariusz Zaborskifunctions, but the limits of service can be set also using
124d06b4cefSMariusz Zaborski.Xr cap_limit_set 3 .
125a241c14fSMariusz ZaborskiThe
126a241c14fSMariusz Zaborski.Xr nvlist 9
127a241c14fSMariusz Zaborskifor that function can contain the following values and types:
128d06b4cefSMariusz Zaborski.Bl -ohang -offset indent
129d06b4cefSMariusz Zaborski.It type ( NV_TYPE_STRING )
130d06b4cefSMariusz ZaborskiThe
131d06b4cefSMariusz Zaborski.Va type
132d06b4cefSMariusz Zaborskican have two values:
133752d135eSMariusz Zaborski.Dv ADDR2NAME
134d06b4cefSMariusz Zaborskior
135752d135eSMariusz Zaborski.Dv NAME2ADDR .
136d06b4cefSMariusz ZaborskiThe
137fd253945SMariusz Zaborski.Dv ADDR2NAME
138577dff6aSMariusz Zaborskimeans that reverse DNS lookups are allowed with
139577dff6aSMariusz Zaborski.Fn cap_getnameinfo
140d06b4cefSMariusz Zaborskiand
141d06b4cefSMariusz Zaborski.Fn cap_gethostbyaddr
142577dff6aSMariusz Zaborskifunctions.
143d06b4cefSMariusz ZaborskiIn case when
144d06b4cefSMariusz Zaborski.Va type
145d06b4cefSMariusz Zaborskiis set to
146fd253945SMariusz Zaborski.Dv NAME2ADDR
147577dff6aSMariusz Zaborskithe name resolution is allowed with
148577dff6aSMariusz Zaborski.Fn cap_getaddrinfo ,
149577dff6aSMariusz Zaborski.Fn cap_gethostbyname ,
150577dff6aSMariusz Zaborskiand
151577dff6aSMariusz Zaborski.Fn cap_gethostbyname2
152577dff6aSMariusz Zaborskifunctions.
153d06b4cefSMariusz Zaborski.It family ( NV_TYPE_NUMBER )
154d06b4cefSMariusz ZaborskiThe
155d06b4cefSMariusz Zaborski.Va family
156d06b4cefSMariusz Zaborskilimits service to one of the address families (e.g.
157d06b4cefSMariusz Zaborski.Dv AF_INET , AF_INET6 ,
158d06b4cefSMariusz Zaborskietc.).
159*3251ad29SGordon Bergling.El
160d06b4cefSMariusz Zaborski.Sh EXAMPLES
161d06b4cefSMariusz ZaborskiThe following example first opens a capability to casper and then uses this
162d06b4cefSMariusz Zaborskicapability to create the
163d06b4cefSMariusz Zaborski.Nm system.dns
164d06b4cefSMariusz Zaborskicasper service and uses it to resolve an IP address.
165d06b4cefSMariusz Zaborski.Bd -literal
166d06b4cefSMariusz Zaborskicap_channel_t *capcas, *capdns;
167db9a6e41SMariusz Zaborskiint familylimit, error;
168d06b4cefSMariusz Zaborskiconst char *ipstr = "127.0.0.1";
169fd253945SMariusz Zaborskiconst char *typelimit = "ADDR2NAME";
170db9a6e41SMariusz Zaborskichar hname[NI_MAXHOST];
171db9a6e41SMariusz Zaborskistruct addrinfo hints, *res;
172d06b4cefSMariusz Zaborski
173d06b4cefSMariusz Zaborski/* Open capability to Casper. */
174d06b4cefSMariusz Zaborskicapcas = cap_init();
175d06b4cefSMariusz Zaborskiif (capcas == NULL)
176d06b4cefSMariusz Zaborski	err(1, "Unable to contact Casper");
177d06b4cefSMariusz Zaborski
178db9a6e41SMariusz Zaborski/* Cache NLA for gai_strerror. */
179db9a6e41SMariusz Zaborskicaph_cache_catpages();
180db9a6e41SMariusz Zaborski
181d06b4cefSMariusz Zaborski/* Enter capability mode sandbox. */
182db9a6e41SMariusz Zaborskiif (caph_enter() < 0)
183d06b4cefSMariusz Zaborski	err(1, "Unable to enter capability mode");
184d06b4cefSMariusz Zaborski
185d06b4cefSMariusz Zaborski/* Use Casper capability to create capability to the system.dns service. */
186d06b4cefSMariusz Zaborskicapdns = cap_service_open(capcas, "system.dns");
187d06b4cefSMariusz Zaborskiif (capdns == NULL)
188d06b4cefSMariusz Zaborski	err(1, "Unable to open system.dns service");
189d06b4cefSMariusz Zaborski
190d06b4cefSMariusz Zaborski/* Close Casper capability, we don't need it anymore. */
191d06b4cefSMariusz Zaborskicap_close(capcas);
192d06b4cefSMariusz Zaborski
193d06b4cefSMariusz Zaborski/* Limit system.dns to reserve IPv4 addresses */
194d06b4cefSMariusz Zaborskifamilylimit = AF_INET;
195d06b4cefSMariusz Zaborskiif (cap_dns_family_limit(capdns, &familylimit, 1) < 0)
196d06b4cefSMariusz Zaborski	err(1, "Unable to limit access to the system.dns service");
197d06b4cefSMariusz Zaborski
198db9a6e41SMariusz Zaborski/* Convert IP address in C-string to struct sockaddr. */
199db9a6e41SMariusz Zaborskimemset(&hints, 0, sizeof(hints));
200db9a6e41SMariusz Zaborskihints.ai_family = familylimit;
201db9a6e41SMariusz Zaborskihints.ai_flags = AI_NUMERICHOST;
202db9a6e41SMariusz Zaborskierror = cap_getaddrinfo(capdns, ipstr, NULL, &hints, &res);
203db9a6e41SMariusz Zaborskiif (error != 0)
204db9a6e41SMariusz Zaborski       errx(1, "cap_getaddrinfo(): %s: %s", ipstr, gai_strerror(error));
205db9a6e41SMariusz Zaborski
206db9a6e41SMariusz Zaborski/* Limit system.dns to reverse DNS lookups. */
207db9a6e41SMariusz Zaborskiif (cap_dns_type_limit(capdns, &typelimit, 1) < 0)
208db9a6e41SMariusz Zaborski	err(1, "Unable to limit access to the system.dns service");
209d06b4cefSMariusz Zaborski
210d06b4cefSMariusz Zaborski/* Find hostname for the given IP address. */
211db9a6e41SMariusz Zaborskierror = cap_getnameinfo(capdns, res->ai_addr, res->ai_addrlen, hname, sizeof(hname),
212db9a6e41SMariusz Zaborski    NULL, 0, 0);
213db9a6e41SMariusz Zaborskiif (error != 0)
214db9a6e41SMariusz Zaborski	errx(1, "cap_getnameinfo(): %s: %s", ipstr, gai_strerror(error));
215d06b4cefSMariusz Zaborski
216db9a6e41SMariusz Zaborskiprintf("Name associated with %s is %s.\\n", ipstr, hname);
217d06b4cefSMariusz Zaborski.Ed
218d06b4cefSMariusz Zaborski.Sh SEE ALSO
219d06b4cefSMariusz Zaborski.Xr cap_enter 2 ,
220db9a6e41SMariusz Zaborski.Xr caph_enter 3 ,
221d06b4cefSMariusz Zaborski.Xr err 3 ,
222d06b4cefSMariusz Zaborski.Xr gethostbyaddr 3 ,
223d06b4cefSMariusz Zaborski.Xr gethostbyname 3 ,
224d06b4cefSMariusz Zaborski.Xr gethostbyname2 3 ,
225d06b4cefSMariusz Zaborski.Xr getnameinfo 3 ,
22685ebe1f1SMariusz Zaborski.Xr capsicum 4 ,
22785ebe1f1SMariusz Zaborski.Xr nv 9
228421f325eSGordon Bergling.Sh HISTORY
229421f325eSGordon BerglingThe
230421f325eSGordon Bergling.Nm cap_dns
231421f325eSGordon Berglingservice first appeared in
232421f325eSGordon Bergling.Fx 10.3 .
233d06b4cefSMariusz Zaborski.Sh AUTHORS
234d06b4cefSMariusz ZaborskiThe
235d06b4cefSMariusz Zaborski.Nm cap_dns
236d06b4cefSMariusz Zaborskiservice was implemented by
237d06b4cefSMariusz Zaborski.An Pawel Jakub Dawidek Aq Mt pawel@dawidek.net
238d06b4cefSMariusz Zaborskiunder sponsorship from the FreeBSD Foundation.
239d06b4cefSMariusz Zaborski.Pp
240d06b4cefSMariusz ZaborskiThis manual page was written by
241d06b4cefSMariusz Zaborski.An Mariusz Zaborski Aq Mt oshogbo@FreeBSD.org .
242