On Sat, May 28, 2016 at 10:02:27AM -0600, Theo de Raadt wrote:
> fstat will not help:  disklabel /dev/tty
> 

Ok, apply against current and this does help.

I've moved the readlabel() call before the pledge.

ok?


Index: disklabel.c
===================================================================
RCS file: /cvs/src/sbin/disklabel/disklabel.c,v
retrieving revision 1.216
diff -u -p -u -p -B -r1.216 disklabel.c
--- disklabel.c 28 May 2016 16:00:19 -0000      1.216
+++ disklabel.c 28 May 2016 16:29:20 -0000
@@ -198,6 +198,7 @@ main(int argc, char *argv[])
            &specname);
        if (f < 0)
                err(4, "%s", specname);
+       readlabel(f);
 
        if (op == EDIT || op == EDITOR || aflag) {
                if (pledge("stdio rpath wpath cpath disklabel proc exec", NULL) 
== -1)
@@ -221,19 +222,16 @@ main(int argc, char *argv[])
        case EDIT:
                if (argc != 1)
                        usage();
-               readlabel(f);
                error = edit(&lab, f);
                break;
        case EDITOR:
                if (argc != 1)
                        usage();
-               readlabel(f);
                error = editor(f);
                break;
        case READ:
                if (argc != 1)
                        usage();
-               readlabel(f);
 
                if (pledge("stdio", NULL) == -1)
                        err(1, "pledge");
@@ -247,7 +245,6 @@ main(int argc, char *argv[])
        case RESTORE:
                if (argc < 2 || argc > 3)
                        usage();
-               readlabel(f);
                if (!(t = fopen(argv[1], "r")))
                        err(4, "%s", argv[1]);
                error = getasciilabel(t, &lab);
@@ -263,9 +260,7 @@ main(int argc, char *argv[])
                fclose(t);
                break;
        case WRITE:
-               if (dflag || aflag) {
-                       readlabel(f);
-               } else if (argc < 2 || argc > 3)
+               if ((!(dflag || aflag)) && (argc < 2 || argc > 3))
                        usage();
                else
                        makelabel(argv[1], argc == 3 ? argv[2] : NULL, &lab);

Reply via email to