Add simple regress check to display the network interfaces found.

This commit is contained in:
Todd C. Miller
2021-03-22 12:26:36 -06:00
parent 009069115c
commit 06df3a1b47
3 changed files with 85 additions and 2 deletions

View File

@@ -1103,6 +1103,7 @@ src/openbsd.c
src/parse_args.c
src/preload.c
src/preserve_fds.c
src/regress/net_ifs/check_net_ifs.c
src/regress/noexec/check_noexec.c
src/regress/ttyname/check_ttyname.c
src/selinux.c

View File

@@ -113,7 +113,7 @@ INIT_DIR=@INIT_DIR@
INIT_SCRIPT=@INIT_SCRIPT@
RC_LINK=@RC_LINK@
TEST_PROGS = check_ttyname @CHECK_NOEXEC@
TEST_PROGS = check_net_ifs @CHECK_NOEXEC@ check_ttyname
TEST_LIBS = @LIBS@ $(LT_LIBS)
TEST_LDFLAGS = @LDFLAGS@
@@ -135,6 +135,8 @@ POBJS = $(IOBJS:.i=.plog)
SESH_OBJS = copy_file.o edit_open.o exec_common.o sesh.o
CHECK_NET_IFS_OBJS = check_net_ifs.o net_ifs.o
CHECK_NOEXEC_OBJS = check_noexec.o exec_common.o
CHECK_TTYNAME_OBJS = check_ttyname.o ttyname.o
@@ -186,6 +188,9 @@ sudo_noexec.la: libsudo_noexec.la
sesh: $(SESH_OBJS) $(LT_LIBS)
$(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(SESH_OBJS) $(LDFLAGS) $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS)
check_net_ifs: $(CHECK_NET_IFS_OBJS) $(top_builddir)/lib/util/libsudo_util.la
$(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(CHECK_NET_IFS_OBJS) $(TEST_LDFLAGS) $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LIBS)
check_noexec: $(CHECK_NOEXEC_OBJS) $(top_builddir)/lib/util/libsudo_util.la sudo_noexec.la
$(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(CHECK_NOEXEC_OBJS) $(TEST_LDFLAGS) $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LIBS)
@@ -279,10 +284,11 @@ check: $(TEST_PROGS) check-fuzzer
unset LANG || LANG=; \
MALLOC_OPTIONS=S; export MALLOC_OPTIONS; \
MALLOC_CONF="abort:true,junk:true"; export MALLOC_CONF; \
./check_ttyname; \
./check_net_ifs; \
if test X"@CHECK_NOEXEC@" != X""; then \
./check_noexec .libs/$(noexecfile); \
fi; \
./check_ttyname; \
fi
clean:
@@ -310,6 +316,20 @@ sudo_noexec.lo: $(srcdir)/sudo_noexec.c $(incdir)/sudo_compat.h \
$(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/sudo_noexec.c
# Autogenerated dependencies, do not modify
check_net_ifs.o: $(srcdir)/regress/net_ifs/check_net_ifs.c \
$(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \
$(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \
$(incdir)/sudo_util.h $(top_builddir)/config.h
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/net_ifs/check_net_ifs.c
check_net_ifs.i: $(srcdir)/regress/net_ifs/check_net_ifs.c \
$(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \
$(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \
$(incdir)/sudo_util.h $(top_builddir)/config.h
$(CC) -E -o $@ $(CPPFLAGS) $<
check_net_ifs.plog: check_net_ifs.i
rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/regress/net_ifs/check_net_ifs.c --i-file $< --output-file $@
check_noexec.o: $(srcdir)/regress/noexec/check_noexec.c \
$(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \
$(incdir)/sudo_fatal.h $(incdir)/sudo_plugin.h \

View File

@@ -0,0 +1,62 @@
/*
* SPDX-License-Identifier: ISC
*
* Copyright (c) 2021 Todd C. Miller <Todd.Miller@sudo.ws>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#include <config.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <limits.h>
#include <errno.h>
#include "sudo_compat.h"
#include "sudo_fatal.h"
#include "sudo_util.h"
sudo_dso_public int main(int argc, char *argv[]);
extern int get_net_ifs(char **addrinfo);
int
main(int argc, char *argv[])
{
char *interfaces;
int ninterfaces;
initprogname(argc > 0 ? argv[0] : "check_net_ifs");
ninterfaces = get_net_ifs(&interfaces);
switch (ninterfaces) {
case -1:
sudo_warn_nodebug("unable to get network interfaces");
return 1;
case 0:
/* no interfaces or STUB_LOAD_INTERFACES defined. */
sudo_warnx_nodebug("OK: (0 interfaces)");
break;
default:
sudo_warnx_nodebug("OK: (%d interface%s, %s)", ninterfaces,
ninterfaces > 1 ? "s" : "", interfaces);
break;
}
return 0;
}