xref: /freebsd/lib/libcasper/services/cap_netdb/tests/netdb_test.c (revision a2f733abcff64628b7771a47089628b7327a88bd)
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