diff options
author | 2002-07-11 12:57:41 +0000 | |
---|---|---|
committer | 2002-07-11 12:57:41 +0000 | |
commit | a4e12e2e450423b72474ef5cd13132e6ef4fe10d (patch) | |
tree | c7ef8ed6cd39acb5af82fc676111f24bdff08455 | |
parent | KNF. (diff) | |
download | wireguard-openbsd-a4e12e2e450423b72474ef5cd13132e6ef4fe10d.tar.xz wireguard-openbsd-a4e12e2e450423b72474ef5cd13132e6ef4fe10d.zip |
cleanup
-rw-r--r-- | bin/systrace/Makefile | 4 | ||||
-rw-r--r-- | bin/systrace/register.c | 182 | ||||
-rw-r--r-- | bin/systrace/systrace.c | 139 | ||||
-rw-r--r-- | bin/systrace/systrace.h | 3 |
4 files changed, 187 insertions, 141 deletions
diff --git a/bin/systrace/Makefile b/bin/systrace/Makefile index bbe3c64447b..e05584702a0 100644 --- a/bin/systrace/Makefile +++ b/bin/systrace/Makefile @@ -1,11 +1,11 @@ -# $OpenBSD: Makefile,v 1.5 2002/07/09 15:22:27 provos Exp $ +# $OpenBSD: Makefile,v 1.6 2002/07/11 12:57:41 provos Exp $ PROG= systrace CFLAGS+= -I. SRCS= filter.c intercept-translate.c intercept.c \ openbsd-syscalls.c util.c \ policy.c systrace-errno.h systrace-error.c \ - systrace-translate.c systrace.c alias.c \ + systrace-translate.c systrace.c alias.c register.c \ parse.y lex.l CLEANFILES+= parse.c lex.c y.tab.h diff --git a/bin/systrace/register.c b/bin/systrace/register.c new file mode 100644 index 00000000000..6071bc5cdc6 --- /dev/null +++ b/bin/systrace/register.c @@ -0,0 +1,182 @@ +/* $OpenBSD: register.c,v 1.1 2002/07/11 12:57:41 provos Exp $ */ +/* + * Copyright 2002 Niels Provos <provos@citi.umich.edu> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Niels Provos. + * 4. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/types.h> +#include <sys/param.h> +#include <sys/tree.h> +#include <stdlib.h> +#include <unistd.h> +#include <stdio.h> +#include <err.h> + +#include "intercept.h" +#include "systrace.h" + +#define X(x) if ((x) == -1) \ + err(1, "%s:%d: intercept failed", __func__, __LINE__) + +extern short trans_cb(int, pid_t, int, char *, int, char *, void *, int, + struct intercept_tlq *, void *); +extern short gen_cb(int, pid_t, int, char *, int, char *, void *, int, + void *); +extern void execres_cb(int, pid_t, int, char *, char *, void *); + +void +systrace_initcb(void) +{ + struct systrace_alias *alias; + struct intercept_translate *tl; + + X(intercept_init()); + + X(intercept_register_gencb(gen_cb, NULL)); + X(intercept_register_sccb("native", "open", trans_cb, NULL)); + tl = intercept_register_transfn("native", "open", 0); + intercept_register_translation("native", "open", 1, &oflags); + alias = systrace_new_alias("native", "open", "native", "fswrite"); + systrace_alias_add_trans(alias, tl); + + X(intercept_register_sccb("native", "connect", trans_cb, NULL)); + intercept_register_translation("native", "connect", 1, + &ic_translate_connect); + X(intercept_register_sccb("native", "sendto", trans_cb, NULL)); + intercept_register_translation("native", "sendto", 4, + &ic_translate_connect); + X(intercept_register_sccb("native", "bind", trans_cb, NULL)); + intercept_register_translation("native", "bind", 1, + &ic_translate_connect); + X(intercept_register_sccb("native", "execve", trans_cb, NULL)); + intercept_register_transfn("native", "execve", 0); + X(intercept_register_sccb("native", "stat", trans_cb, NULL)); + tl = intercept_register_transfn("native", "stat", 0); + alias = systrace_new_alias("native", "stat", "native", "fsread"); + systrace_alias_add_trans(alias, tl); + + X(intercept_register_sccb("native", "lstat", trans_cb, NULL)); + tl = intercept_register_translink("native", "lstat", 0); + alias = systrace_new_alias("native", "lstat", "native", "fsread"); + systrace_alias_add_trans(alias, tl); + + X(intercept_register_sccb("native", "unlink", trans_cb, NULL)); + tl = intercept_register_transfn("native", "unlink", 0); + alias = systrace_new_alias("native", "unlink", "native", "fswrite"); + systrace_alias_add_trans(alias, tl); + + X(intercept_register_sccb("native", "chown", trans_cb, NULL)); + intercept_register_transfn("native", "chown", 0); + intercept_register_translation("native", "chown", 1, &uidt); + intercept_register_translation("native", "chown", 2, &gidt); + X(intercept_register_sccb("native", "fchown", trans_cb, NULL)); + intercept_register_translation("native", "fchown", 0, &fdt); + intercept_register_translation("native", "fchown", 1, &uidt); + intercept_register_translation("native", "fchown", 2, &gidt); + X(intercept_register_sccb("native", "chmod", trans_cb, NULL)); + intercept_register_transfn("native", "chmod", 0); + intercept_register_translation("native", "chmod", 1, &modeflags); + X(intercept_register_sccb("native", "fchmod", trans_cb, NULL)); + intercept_register_translation("native", "fchmod", 0, &fdt); + intercept_register_translation("native", "fchmod", 1, &modeflags); + X(intercept_register_sccb("native", "readlink", trans_cb, NULL)); + tl = intercept_register_translink("native", "readlink", 0); + alias = systrace_new_alias("native", "readlink", "native", "fsread"); + systrace_alias_add_trans(alias, tl); + + X(intercept_register_sccb("native", "chdir", trans_cb, NULL)); + intercept_register_transfn("native", "chdir", 0); + X(intercept_register_sccb("native", "access", trans_cb, NULL)); + tl = intercept_register_transfn("native", "access", 0); + alias = systrace_new_alias("native", "access", "native", "fsread"); + systrace_alias_add_trans(alias, tl); + + X(intercept_register_sccb("native", "mkdir", trans_cb, NULL)); + tl = intercept_register_transfn("native", "mkdir", 0); + alias = systrace_new_alias("native", "mkdir", "native", "fswrite"); + systrace_alias_add_trans(alias, tl); + X(intercept_register_sccb("native", "rmdir", trans_cb, NULL)); + tl = intercept_register_transfn("native", "rmdir", 0); + alias = systrace_new_alias("native", "rmdir", "native", "fswrite"); + systrace_alias_add_trans(alias, tl); + + X(intercept_register_sccb("native", "rename", trans_cb, NULL)); + intercept_register_transfn("native", "rename", 0); + intercept_register_transfn("native", "rename", 1); + X(intercept_register_sccb("native", "symlink", trans_cb, NULL)); + intercept_register_transstring("native", "symlink", 0); + intercept_register_translink("native", "symlink", 1); + + X(intercept_register_sccb("linux", "open", trans_cb, NULL)); + tl = intercept_register_translink("linux", "open", 0); + intercept_register_translation("linux", "open", 1, &linux_oflags); + alias = systrace_new_alias("linux", "open", "linux", "fswrite"); + systrace_alias_add_trans(alias, tl); + + X(intercept_register_sccb("linux", "stat", trans_cb, NULL)); + tl = intercept_register_translink("linux", "stat", 0); + alias = systrace_new_alias("linux", "stat", "linux", "fsread"); + systrace_alias_add_trans(alias, tl); + X(intercept_register_sccb("linux", "lstat", trans_cb, NULL)); + tl = intercept_register_translink("linux", "lstat", 0); + alias = systrace_new_alias("linux", "lstat", "linux", "fsread"); + systrace_alias_add_trans(alias, tl); + X(intercept_register_sccb("linux", "execve", trans_cb, NULL)); + intercept_register_translink("linux", "execve", 0); + X(intercept_register_sccb("linux", "access", trans_cb, NULL)); + tl = intercept_register_translink("linux", "access", 0); + alias = systrace_new_alias("linux", "access", "linux", "fsread"); + systrace_alias_add_trans(alias, tl); + X(intercept_register_sccb("linux", "symlink", trans_cb, NULL)); + intercept_register_transstring("linux", "symlink", 0); + intercept_register_translink("linux", "symlink", 1); + X(intercept_register_sccb("linux", "readlink", trans_cb, NULL)); + tl = intercept_register_translink("linux", "readlink", 0); + alias = systrace_new_alias("linux", "readlink", "linux", "fsread"); + systrace_alias_add_trans(alias, tl); + X(intercept_register_sccb("linux", "rename", trans_cb, NULL)); + intercept_register_translink("linux", "rename", 0); + intercept_register_translink("linux", "rename", 1); + X(intercept_register_sccb("linux", "mkdir", trans_cb, NULL)); + tl = intercept_register_translink("linux", "mkdir", 0); + alias = systrace_new_alias("linux", "mkdir", "linux", "fswrite"); + systrace_alias_add_trans(alias, tl); + X(intercept_register_sccb("linux", "rmdir", trans_cb, NULL)); + tl = intercept_register_translink("linux", "rmdir", 0); + alias = systrace_new_alias("linux", "rmdir", "linux", "fswrite"); + systrace_alias_add_trans(alias, tl); + X(intercept_register_sccb("linux", "unlink", trans_cb, NULL)); + tl = intercept_register_translink("linux", "unlink", 0); + alias = systrace_new_alias("linux", "unlink", "linux", "fswrite"); + systrace_alias_add_trans(alias, tl); + X(intercept_register_sccb("linux", "chmod", trans_cb, NULL)); + intercept_register_translink("linux", "chmod", 0); + intercept_register_translation("linux", "chmod", 1, &modeflags); + + X(intercept_register_execcb(execres_cb, NULL)); +} diff --git a/bin/systrace/systrace.c b/bin/systrace/systrace.c index a80944e1733..779db20916e 100644 --- a/bin/systrace/systrace.c +++ b/bin/systrace/systrace.c @@ -1,4 +1,4 @@ -/* $OpenBSD: systrace.c,v 1.24 2002/07/10 07:05:38 provos Exp $ */ +/* $OpenBSD: systrace.c,v 1.25 2002/07/11 12:57:41 provos Exp $ */ /* * Copyright 2002 Niels Provos <provos@citi.umich.edu> * All rights reserved. @@ -316,141 +316,6 @@ child_handler(int sig) errno = s; } -#define X(x) if ((x) == -1) \ - err(1, "%s:%d: intercept failed", __func__, __LINE__) - -void -systrace_initcb(void) -{ - struct systrace_alias *alias; - struct intercept_translate *tl; - - X(intercept_init()); - - X(intercept_register_gencb(gen_cb, NULL)); - X(intercept_register_sccb("native", "open", trans_cb, NULL)); - tl = intercept_register_transfn("native", "open", 0); - intercept_register_translation("native", "open", 1, &oflags); - alias = systrace_new_alias("native", "open", "native", "fswrite"); - systrace_alias_add_trans(alias, tl); - - X(intercept_register_sccb("native", "connect", trans_cb, NULL)); - intercept_register_translation("native", "connect", 1, - &ic_translate_connect); - X(intercept_register_sccb("native", "sendto", trans_cb, NULL)); - intercept_register_translation("native", "sendto", 4, - &ic_translate_connect); - X(intercept_register_sccb("native", "bind", trans_cb, NULL)); - intercept_register_translation("native", "bind", 1, - &ic_translate_connect); - X(intercept_register_sccb("native", "execve", trans_cb, NULL)); - intercept_register_transfn("native", "execve", 0); - X(intercept_register_sccb("native", "stat", trans_cb, NULL)); - tl = intercept_register_transfn("native", "stat", 0); - alias = systrace_new_alias("native", "stat", "native", "fsread"); - systrace_alias_add_trans(alias, tl); - - X(intercept_register_sccb("native", "lstat", trans_cb, NULL)); - tl = intercept_register_translink("native", "lstat", 0); - alias = systrace_new_alias("native", "lstat", "native", "fsread"); - systrace_alias_add_trans(alias, tl); - - X(intercept_register_sccb("native", "unlink", trans_cb, NULL)); - tl = intercept_register_transfn("native", "unlink", 0); - alias = systrace_new_alias("native", "unlink", "native", "fswrite"); - systrace_alias_add_trans(alias, tl); - - X(intercept_register_sccb("native", "chown", trans_cb, NULL)); - intercept_register_transfn("native", "chown", 0); - intercept_register_translation("native", "chown", 1, &uidt); - intercept_register_translation("native", "chown", 2, &gidt); - X(intercept_register_sccb("native", "fchown", trans_cb, NULL)); - intercept_register_translation("native", "fchown", 0, &fdt); - intercept_register_translation("native", "fchown", 1, &uidt); - intercept_register_translation("native", "fchown", 2, &gidt); - X(intercept_register_sccb("native", "chmod", trans_cb, NULL)); - intercept_register_transfn("native", "chmod", 0); - intercept_register_translation("native", "chmod", 1, &modeflags); - X(intercept_register_sccb("native", "fchmod", trans_cb, NULL)); - intercept_register_translation("native", "fchmod", 0, &fdt); - intercept_register_translation("native", "fchmod", 1, &modeflags); - X(intercept_register_sccb("native", "readlink", trans_cb, NULL)); - tl = intercept_register_translink("native", "readlink", 0); - alias = systrace_new_alias("native", "readlink", "native", "fsread"); - systrace_alias_add_trans(alias, tl); - - X(intercept_register_sccb("native", "chdir", trans_cb, NULL)); - intercept_register_transfn("native", "chdir", 0); - X(intercept_register_sccb("native", "access", trans_cb, NULL)); - tl = intercept_register_transfn("native", "access", 0); - alias = systrace_new_alias("native", "access", "native", "fsread"); - systrace_alias_add_trans(alias, tl); - - X(intercept_register_sccb("native", "mkdir", trans_cb, NULL)); - tl = intercept_register_transfn("native", "mkdir", 0); - alias = systrace_new_alias("native", "mkdir", "native", "fswrite"); - systrace_alias_add_trans(alias, tl); - X(intercept_register_sccb("native", "rmdir", trans_cb, NULL)); - tl = intercept_register_transfn("native", "rmdir", 0); - alias = systrace_new_alias("native", "rmdir", "native", "fswrite"); - systrace_alias_add_trans(alias, tl); - - X(intercept_register_sccb("native", "rename", trans_cb, NULL)); - intercept_register_transfn("native", "rename", 0); - intercept_register_transfn("native", "rename", 1); - X(intercept_register_sccb("native", "symlink", trans_cb, NULL)); - intercept_register_transstring("native", "symlink", 0); - intercept_register_translink("native", "symlink", 1); - - X(intercept_register_sccb("linux", "open", trans_cb, NULL)); - tl = intercept_register_translink("linux", "open", 0); - intercept_register_translation("linux", "open", 1, &linux_oflags); - alias = systrace_new_alias("linux", "open", "linux", "fswrite"); - systrace_alias_add_trans(alias, tl); - - X(intercept_register_sccb("linux", "stat", trans_cb, NULL)); - tl = intercept_register_translink("linux", "stat", 0); - alias = systrace_new_alias("linux", "stat", "linux", "fsread"); - systrace_alias_add_trans(alias, tl); - X(intercept_register_sccb("linux", "lstat", trans_cb, NULL)); - tl = intercept_register_translink("linux", "lstat", 0); - alias = systrace_new_alias("linux", "lstat", "linux", "fsread"); - systrace_alias_add_trans(alias, tl); - X(intercept_register_sccb("linux", "execve", trans_cb, NULL)); - intercept_register_translink("linux", "execve", 0); - X(intercept_register_sccb("linux", "access", trans_cb, NULL)); - tl = intercept_register_translink("linux", "access", 0); - alias = systrace_new_alias("linux", "access", "linux", "fsread"); - systrace_alias_add_trans(alias, tl); - X(intercept_register_sccb("linux", "symlink", trans_cb, NULL)); - intercept_register_transstring("linux", "symlink", 0); - intercept_register_translink("linux", "symlink", 1); - X(intercept_register_sccb("linux", "readlink", trans_cb, NULL)); - tl = intercept_register_translink("linux", "readlink", 0); - alias = systrace_new_alias("linux", "readlink", "linux", "fsread"); - systrace_alias_add_trans(alias, tl); - X(intercept_register_sccb("linux", "rename", trans_cb, NULL)); - intercept_register_translink("linux", "rename", 0); - intercept_register_translink("linux", "rename", 1); - X(intercept_register_sccb("linux", "mkdir", trans_cb, NULL)); - tl = intercept_register_translink("linux", "mkdir", 0); - alias = systrace_new_alias("linux", "mkdir", "linux", "fswrite"); - systrace_alias_add_trans(alias, tl); - X(intercept_register_sccb("linux", "rmdir", trans_cb, NULL)); - tl = intercept_register_translink("linux", "rmdir", 0); - alias = systrace_new_alias("linux", "rmdir", "linux", "fswrite"); - systrace_alias_add_trans(alias, tl); - X(intercept_register_sccb("linux", "unlink", trans_cb, NULL)); - tl = intercept_register_translink("linux", "unlink", 0); - alias = systrace_new_alias("linux", "unlink", "linux", "fswrite"); - systrace_alias_add_trans(alias, tl); - X(intercept_register_sccb("linux", "chmod", trans_cb, NULL)); - intercept_register_translink("linux", "chmod", 0); - intercept_register_translation("linux", "chmod", 1, &modeflags); - - X(intercept_register_execcb(execres_cb, NULL)); -} - void usage(void) { @@ -597,8 +462,6 @@ main(int argc, char **argv) if (kill(pid, SIGUSR1) == -1) err(1, "kill"); } else { - pid_t cpid; - /* Attach to a running command */ if (intercept_attachpid(fd, pidattach, argv[0]) == -1) err(1, "attachpid"); diff --git a/bin/systrace/systrace.h b/bin/systrace/systrace.h index d8392f5807d..175f84a28c9 100644 --- a/bin/systrace/systrace.h +++ b/bin/systrace/systrace.h @@ -1,4 +1,4 @@ -/* $OpenBSD: systrace.h,v 1.6 2002/07/09 15:22:27 provos Exp $ */ +/* $OpenBSD: systrace.h,v 1.7 2002/07/11 12:57:41 provos Exp $ */ /* * Copyright 2002 Niels Provos <provos@citi.umich.edu> * All rights reserved. @@ -99,6 +99,7 @@ struct policy { #define PROCESS_INHERIT_POLICY 0x01 /* Process inherits policy */ int systrace_initpolicy(char *); +void systrace_initcb(void); struct policy *systrace_newpolicy(char *, char *); int systrace_newpolicynr(int, struct policy *); int systrace_modifypolicy(int, int, char *, short); |