let the enqueuer pledge() in both online and offline modes
authorgilles <gilles@openbsd.org>
Tue, 13 Oct 2015 08:06:22 +0000 (08:06 +0000)
committergilles <gilles@openbsd.org>
Tue, 13 Oct 2015 08:06:22 +0000 (08:06 +0000)
ok deraadt@

usr.sbin/smtpd/enqueue.c
usr.sbin/smtpd/smtpctl.c

index 7d8c3fd..a6fbd9d 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: enqueue.c,v 1.99 2015/10/12 21:32:27 millert Exp $    */
+/*     $OpenBSD: enqueue.c,v 1.100 2015/10/13 08:06:22 gilles Exp $    */
 
 /*
  * Copyright (c) 2005 Henning Brauer <henning@bulabula.org>
@@ -286,12 +286,18 @@ enqueue(int argc, char *argv[], FILE *ofp)
        /* check if working in offline mode */
        /* If the server is not running, enqueue the message offline */
 
-       if (!srv_connected())
+       if (!srv_connected()) {
+               if (pledge("stdio", NULL) == -1)
+                       err(1, "pledge");
                return (enqueue_offline(save_argc, save_argv, fp, ofp));
+       }
 
        if ((msg.fd = open_connection()) == -1)
                errx(EX_UNAVAILABLE, "server too busy");
 
+       if (pledge("stdio", NULL) == -1)
+               err(1, "pledge");
+       
        fout = fdopen(msg.fd, "a+");
        if (fout == NULL)
                err(EX_UNAVAILABLE, "fdopen");
index 27e454e..725c66c 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: smtpctl.c,v 1.129 2015/10/12 07:58:19 deraadt Exp $   */
+/*     $OpenBSD: smtpctl.c,v 1.130 2015/10/13 08:06:22 gilles Exp $    */
 
 /*
  * Copyright (c) 2013 Eric Faurot <eric@openbsd.org>
@@ -931,6 +931,10 @@ main(int argc, char **argv)
                if (setresgid(gid, gid, gid) == -1)
                        err(1, "setresgid");
 
+               /* we'll reduce further down the road */
+               if (pledge("stdio rpath tmppath getpw recvfd", NULL) == -1)
+                       err(1, "pledge");
+               
                sendmail = 1;
                return (enqueue(argc, argv, offlinefp));
        }