Index | Thread | Search

From:
Tim van der Molen <tim@kariliq.nl>
Subject:
mount: support DUIDs with -u
To:
tech@openbsd.org
Date:
Wed, 24 Jun 2026 21:26:04 +0200

Download raw body.

Thread
mount -u does not allow file systems to be specified by DUID:

$ doas mount b987ffca8611b59f.a /mnt
$ doas mount -ur b987ffca8611b59f.a
mount: unknown special file or file system b987ffca8611b59f.a.

This diff fixes that. The isduid() check is not strictly necessary, but
perhaps skipping realpath() for DUIDs is a safe thing to do?

OK?

Index: mount.c
===================================================================
RCS file: /cvs/src/sbin/mount/mount.c,v
diff -p -u -r1.78 mount.c
--- mount.c	9 May 2024 08:35:40 -0000	1.78
+++ mount.c	24 Jun 2026 18:31:29 -0000
@@ -233,7 +233,7 @@ main(int argc, char * const argv[])
 		if (typelist != NULL)
 			usage();
 
-		if (realpath(*argv, mntpath) == NULL) 
+		if (isduid(*argv, 0) || realpath(*argv, mntpath) == NULL) 
 			strlcpy(mntpath, *argv, sizeof(mntpath));
 		if (hasopt(options, "update")) {
 			if ((mntbuf = getmntpt(mntpath)) == NULL)
@@ -630,6 +630,7 @@ getmntpt(const char *name)
 	mntsize = getmntinfo(&mntbuf, MNT_NOWAIT);
 	for (i = 0; i < mntsize; i++)
 		if (strcmp(mntbuf[i].f_mntfromname, name) == 0 ||
+		    strcmp(mntbuf[i].f_mntfromspec, name) == 0 ||
 		    strcmp(mntbuf[i].f_mntonname, name) == 0)
 			return (&mntbuf[i]);
 	return (NULL);