dma - Fix security hole
authorMatthew Dillon <dillon@apollo.backplane.com>
Fri, 5 Aug 2016 07:18:07 +0000 (00:18 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Fri, 5 Aug 2016 07:18:07 +0000 (00:18 -0700)
* dma makes an age-old mistake of not properly checking whether a file
  owned by a user is a symlink or not, a bug which the original mail.local
  also had.

* Add O_NOFOLLOW to disallow symlinks.

Thanks-to: BSDNow Episode 152, made me dive dma to check when they talked
   about the mail.local bug.

libexec/dma/dma-mbox-create.c

index 26b86d3..66e702e 100644 (file)
@@ -142,7 +142,7 @@ main(int argc, char **argv)
                logfail("cannot build mbox path for `%s/%s'", _PATH_MAILDIR, user);
        }
 
-       f = open(fn, O_RDONLY|O_CREAT, 0600);
+       f = open(fn, O_RDONLY|O_CREAT|O_NOFOLLOW, 0600);
        if (f < 0)
                logfail("cannot open mbox `%s'", fn);