194dc5715SRyan Moeller /*-
2*4d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause
394dc5715SRyan Moeller *
494dc5715SRyan Moeller * Copyright (c) 2020 Ryan Moeller <freqlabs@FreeBSD.org>
594dc5715SRyan Moeller *
694dc5715SRyan Moeller * Redistribution and use in source and binary forms, with or without
794dc5715SRyan Moeller * modification, are permitted provided that the following conditions
894dc5715SRyan Moeller * are met:
994dc5715SRyan Moeller * 1. Redistributions of source code must retain the above copyright
1094dc5715SRyan Moeller * notice, this list of conditions and the following disclaimer.
1194dc5715SRyan Moeller * 2. Redistributions in binary form must reproduce the above copyright
1294dc5715SRyan Moeller * notice, this list of conditions and the following disclaimer in the
1394dc5715SRyan Moeller * documentation and/or other materials provided with the distribution.
1494dc5715SRyan Moeller *
1594dc5715SRyan Moeller * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
1694dc5715SRyan Moeller * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1794dc5715SRyan Moeller * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1894dc5715SRyan Moeller * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
1994dc5715SRyan Moeller * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2094dc5715SRyan Moeller * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2194dc5715SRyan Moeller * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2294dc5715SRyan Moeller * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2394dc5715SRyan Moeller * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2494dc5715SRyan Moeller * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2594dc5715SRyan Moeller * SUCH DAMAGE.
2694dc5715SRyan Moeller */
2794dc5715SRyan Moeller
2894dc5715SRyan Moeller #include <sys/capsicum.h>
2994dc5715SRyan Moeller #include <sys/nv.h>
3094dc5715SRyan Moeller
3194dc5715SRyan Moeller #include <arpa/inet.h>
3294dc5715SRyan Moeller #include <netinet/in.h>
3394dc5715SRyan Moeller
3494dc5715SRyan Moeller #include <assert.h>
3594dc5715SRyan Moeller #include <err.h>
3694dc5715SRyan Moeller #include <errno.h>
3794dc5715SRyan Moeller #include <netdb.h>
3894dc5715SRyan Moeller #include <stdio.h>
3994dc5715SRyan Moeller #include <stdlib.h>
4094dc5715SRyan Moeller #include <string.h>
4194dc5715SRyan Moeller #include <unistd.h>
4294dc5715SRyan Moeller
4394dc5715SRyan Moeller #include <libcasper.h>
4494dc5715SRyan Moeller #include <casper/cap_netdb.h>
4594dc5715SRyan Moeller
4694dc5715SRyan Moeller #include <atf-c.h>
4794dc5715SRyan Moeller
4894dc5715SRyan Moeller static cap_channel_t *
initcap(void)4994dc5715SRyan Moeller initcap(void)
5094dc5715SRyan Moeller {
5194dc5715SRyan Moeller cap_channel_t *capcas, *capnetdb;
5294dc5715SRyan Moeller
5394dc5715SRyan Moeller capcas = cap_init();
5494dc5715SRyan Moeller ATF_REQUIRE(capcas != NULL);
5594dc5715SRyan Moeller
5694dc5715SRyan Moeller capnetdb = cap_service_open(capcas, "system.netdb");
5794dc5715SRyan Moeller ATF_REQUIRE(capnetdb != NULL);
5894dc5715SRyan Moeller
5994dc5715SRyan Moeller cap_close(capcas);
6094dc5715SRyan Moeller
6194dc5715SRyan Moeller return (capnetdb);
6294dc5715SRyan Moeller }
6394dc5715SRyan Moeller
6494dc5715SRyan Moeller ATF_TC_WITHOUT_HEAD(cap_netdb__getprotobyname);
ATF_TC_BODY(cap_netdb__getprotobyname,tc)6594dc5715SRyan Moeller ATF_TC_BODY(cap_netdb__getprotobyname, tc)
6694dc5715SRyan Moeller {
6794dc5715SRyan Moeller cap_channel_t *capnetdb;
6894dc5715SRyan Moeller struct protoent *pp;
6994dc5715SRyan Moeller size_t n = 0;
7094dc5715SRyan Moeller
7194dc5715SRyan Moeller capnetdb = initcap();
7294dc5715SRyan Moeller
7394dc5715SRyan Moeller pp = cap_getprotobyname(capnetdb, "tcp");
7494dc5715SRyan Moeller ATF_REQUIRE(pp != NULL);
7594dc5715SRyan Moeller
7694dc5715SRyan Moeller ATF_REQUIRE(pp->p_name != NULL);
7794dc5715SRyan Moeller ATF_REQUIRE(pp->p_aliases != NULL);
7894dc5715SRyan Moeller while (pp->p_aliases[n] != NULL)
7994dc5715SRyan Moeller ++n;
8094dc5715SRyan Moeller ATF_REQUIRE(n > 0);
8194dc5715SRyan Moeller ATF_REQUIRE(pp->p_proto != 0);
8294dc5715SRyan Moeller
8394dc5715SRyan Moeller cap_close(capnetdb);
8494dc5715SRyan Moeller }
8594dc5715SRyan Moeller
ATF_TP_ADD_TCS(tp)8694dc5715SRyan Moeller ATF_TP_ADD_TCS(tp)
8794dc5715SRyan Moeller {
8894dc5715SRyan Moeller ATF_TP_ADD_TC(tp, cap_netdb__getprotobyname);
8994dc5715SRyan Moeller
9094dc5715SRyan Moeller return (atf_no_error());
9194dc5715SRyan Moeller }
92