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);