pkill has to get all the getopt, getpwuid, libkvm stuff out of the way
authorderaadt <deraadt@openbsd.org>
Sat, 10 Oct 2015 14:25:42 +0000 (14:25 +0000)
committerderaadt <deraadt@openbsd.org>
Sat, 10 Oct 2015 14:25:42 +0000 (14:25 +0000)
first.  it can pledge to "stdio" (pgrep case) or "stdio proc" (pkill case)
before parsing and matching the expression.
ok doug

usr.bin/pkill/pkill.c

index b03b707..4cc99b3 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: pkill.c,v 1.36 2015/01/16 06:40:10 deraadt Exp $      */
+/*     $OpenBSD: pkill.c,v 1.37 2015/10/10 14:25:42 deraadt Exp $      */
 /*     $NetBSD: pkill.c,v 1.5 2002/10/27 11:49:34 kleink Exp $ */
 
 /*-
@@ -83,6 +83,7 @@ int   pgrep;
 int    signum = SIGTERM;
 int    newest;
 int    oldest;
+char   *pledge_choice = "stdio proc";
 int    quiet;
 int    inverse;
 int    longfmt;
@@ -154,6 +155,7 @@ main(int argc, char **argv)
 
        if (strcmp(__progname, "pgrep") == 0) {
                action = grepact;
+               pledge_choice = "stdio";
                pgrep = 1;
        } else {
                action = killact;
@@ -273,6 +275,9 @@ main(int argc, char **argv)
        if (plist == NULL)
                errx(STATUS_ERROR, "kvm_getprocs() failed");
 
+       if (pledge(pledge_choice, NULL) == -1)
+               err(1, "pledge");
+
        /*
         * Allocate memory which will be used to keep track of the
         * selection.