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