|
NAMEcap_getaddrinfo ,
cap_getnameinfo ,
cap_gethostbyname ,
cap_gethostbyname2 ,
cap_gethostbyaddr ,
cap_dns_type_limit ,
cap_dns_family_limit —
library for getting network host entry in capability mode
LIBRARYlibrary “libcap_dns”SYNOPSIS#include <sys/nv.h>
#include <libcasper.h>
#include <casper/cap_dns.h>
int
int
struct hostent *
struct hostent *
struct hostent *
int
int
DESCRIPTIONThis service is obsolete and
cap_net(3)
should be used instead. The
cap_getaddrinfo (), and
cap_getnameinfo (), functions are preferred over the
cap_gethostbyname (),
cap_gethostbyname2 (), and
cap_gethostbyaddr () functions.The functions The The LIMITSThe preferred way of setting limits is to use thecap_dns_type_limit () and
cap_dns_family_limit () functions, but the limits of
service can be set also using
cap_limit_set(3).
The
nvlist(9)
for that function can contain the following values and types:
EXAMPLESThe following example first opens a capability to casper and then uses this capability to create thesystem.dns casper service and
uses it to resolve an IP address.
cap_channel_t *capcas, *capdns; int familylimit, error; const char *ipstr = "127.0.0.1"; const char *typelimit = "ADDR2NAME"; char hname[NI_MAXHOST]; struct addrinfo hints, *res; /* Open capability to Casper. */ capcas = cap_init(); if (capcas == NULL) err(1, "Unable to contact Casper"); /* Cache NLA for gai_strerror. */ caph_cache_catpages(); /* Enter capability mode sandbox. */ if (caph_enter() < 0) err(1, "Unable to enter capability mode"); /* Use Casper capability to create capability to the system.dns service. */ capdns = cap_service_open(capcas, "system.dns"); if (capdns == NULL) err(1, "Unable to open system.dns service"); /* Close Casper capability, we don't need it anymore. */ cap_close(capcas); /* Limit system.dns to reserve IPv4 addresses */ familylimit = AF_INET; if (cap_dns_family_limit(capdns, &familylimit, 1) < 0) err(1, "Unable to limit access to the system.dns service"); /* Convert IP address in C-string to struct sockaddr. */ memset(&hints, 0, sizeof(hints)); hints.ai_family = familylimit; hints.ai_flags = AI_NUMERICHOST; error = cap_getaddrinfo(capdns, ipstr, NULL, &hints, &res); if (error != 0) errx(1, "cap_getaddrinfo(): %s: %s", ipstr, gai_strerror(error)); /* Limit system.dns to reverse DNS lookups. */ if (cap_dns_type_limit(capdns, &typelimit, 1) < 0) err(1, "Unable to limit access to the system.dns service"); /* Find hostname for the given IP address. */ error = cap_getnameinfo(capdns, res->ai_addr, res->ai_addrlen, hname, sizeof(hname), NULL, 0, 0); if (error != 0) errx(1, "cap_getnameinfo(): %s: %s", ipstr, gai_strerror(error)); printf("Name associated with %s is %s.\n", ipstr, hname); SEE ALSOcap_enter(2), caph_enter(3), err(3), gethostbyaddr(3), gethostbyname(3), gethostbyname2(3), getnameinfo(3), capsicum(4), nv(9)HISTORYThecap_dns service first appeared in
FreeBSD 10.3.
AUTHORSThecap_dns service was implemented by
Pawel Jakub Dawidek
<pawel@dawidek.net>
under sponsorship from the FreeBSD Foundation.
This manual page was written by
Visit the GSP FreeBSD Man Page Interface. |