aboutsummaryrefslogtreecommitdiff
path: root/sbin/mount_cd9660
diff options
context:
space:
mode:
Diffstat (limited to 'sbin/mount_cd9660')
-rw-r--r--sbin/mount_cd9660/Makefile11
-rw-r--r--sbin/mount_cd9660/Makefile.depend2
-rw-r--r--sbin/mount_cd9660/mount_cd9660.843
-rw-r--r--sbin/mount_cd9660/mount_cd9660.c98
4 files changed, 116 insertions, 38 deletions
diff --git a/sbin/mount_cd9660/Makefile b/sbin/mount_cd9660/Makefile
index 5660af8b39a4..9fa8e7436169 100644
--- a/sbin/mount_cd9660/Makefile
+++ b/sbin/mount_cd9660/Makefile
@@ -1,19 +1,10 @@
-# @(#)Makefile 8.3 (Berkeley) 3/27/94
-# $FreeBSD$
-
PACKAGE=runtime
PROG= mount_cd9660
-SRCS= mount_cd9660.c getmntopts.c
MAN= mount_cd9660.8
-LIBADD= kiconv
-
-MOUNT= ${.CURDIR:H}/mount
-CFLAGS+= -I${MOUNT}
+LIBADD= kiconv util
# Needs to be dynamically linked for optional dlopen() access to
# userland libiconv
NO_SHARED?= NO
-.PATH: ${MOUNT}
-
.include <bsd.prog.mk>
diff --git a/sbin/mount_cd9660/Makefile.depend b/sbin/mount_cd9660/Makefile.depend
index f2cf917f0e4c..912b8a359ac5 100644
--- a/sbin/mount_cd9660/Makefile.depend
+++ b/sbin/mount_cd9660/Makefile.depend
@@ -1,8 +1,6 @@
-# $FreeBSD$
# Autogenerated - do NOT edit!
DIRDEPS = \
- gnu/lib/csu \
include \
include/arpa \
include/xlocale \
diff --git a/sbin/mount_cd9660/mount_cd9660.8 b/sbin/mount_cd9660/mount_cd9660.8
index fd0b74d7f2bb..2c6af7500277 100644
--- a/sbin/mount_cd9660/mount_cd9660.8
+++ b/sbin/mount_cd9660/mount_cd9660.8
@@ -29,10 +29,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" @(#)mount_cd9660.8 8.3 (Berkeley) 3/27/94
-.\" $FreeBSD$
-.\"
-.Dd August 11, 2018
+.Dd December 6, 2024
.Dt MOUNT_CD9660 8
.Os
.Sh NAME
@@ -42,8 +39,12 @@
.Nm
.Op Fl begjrv
.Op Fl C Ar charset
+.Op Fl G Ar gid
+.Op Fl m Ar mask
+.Op Fl M Ar mask
.Op Fl o Ar options
.Op Fl s Ar startsector
+.Op Fl U Ar uid
.Ar special node
.Sh DESCRIPTION
The
@@ -69,6 +70,38 @@ Do not strip version numbers on files.
only the last one will be listed.)
In either case, files may be opened without explicitly stating a
version number.
+.It Fl G Ar group
+Set the group of the files in the file system to
+.Ar group .
+The default gid on volumes without extended attributes or Rockridge extensions
+is zero.
+.It Fl U Ar user
+Set the owner of the files in the file system to
+.Ar user .
+The default uid on volumes without extended attributes or Rockridge extensions
+is zero.
+.It Fl m Ar mask
+Specify the maximum file permissions for files
+in the file system.
+For example, a
+.Ar mask
+of
+.Li 544
+limits the owner to
+read and execute permissions for files and
+others to only read permission.
+See
+.Xr chmod 1
+for more information about octal file modes.
+The default
+.Ar mask
+is 7777.
+The default permissions on volumes without extended attributes or Rockridge
+extensions is 555.
+.It Fl M Ar mask
+Specify the maximum file permissions for directories
+in the file system.
+See the previous option's description for details.
.It Fl j
Do not use any Joliet extensions included in the file system.
.It Fl o
@@ -138,7 +171,7 @@ The following command can be used to mount a Kodak Photo-CD:
.Xr cdcontrol 1 ,
.Xr mount 2 ,
.Xr unmount 2 ,
-.Xr cd9660 5 ,
+.Xr cd9660 4 ,
.Xr fstab 5 ,
.Xr mdconfig 8 ,
.Xr mount 8
diff --git a/sbin/mount_cd9660/mount_cd9660.c b/sbin/mount_cd9660/mount_cd9660.c
index f322ac73a439..3eddbefb9a03 100644
--- a/sbin/mount_cd9660/mount_cd9660.c
+++ b/sbin/mount_cd9660/mount_cd9660.c
@@ -32,24 +32,8 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
- *
- * @(#)mount_cd9660.c 8.7 (Berkeley) 5/1/95
*/
-#ifndef lint
-static const char copyright[] =
-"@(#) Copyright (c) 1992, 1993, 1994\n\
- The Regents of the University of California. All rights reserved.\n";
-#endif /* not lint */
-
-#ifndef lint
-/*
-static char sccsid[] = "@(#)mount_cd9660.c 8.7 (Berkeley) 5/1/95";
-*/
-static const char rcsid[] =
- "$FreeBSD$";
-#endif /* not lint */
-
#include <sys/cdio.h>
#include <sys/file.h>
#include <sys/param.h>
@@ -60,22 +44,27 @@ static const char rcsid[] =
#include <arpa/inet.h>
+#include <ctype.h>
#include <err.h>
#include <errno.h>
+#include <grp.h>
+#include <mntopts.h>
+#include <pwd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sysexits.h>
#include <unistd.h>
-#include "mntopts.h"
-
static struct mntopt mopts[] = {
MOPT_STDOPTS,
MOPT_UPDATE,
MOPT_END
};
+static gid_t a_gid(const char *);
+static uid_t a_uid(const char *);
+static mode_t a_mask(const char *);
static int get_ssector(const char *dev);
static int set_charset(struct iovec **, int *iovlen, const char *);
void usage(void);
@@ -96,7 +85,7 @@ main(int argc, char **argv)
mntflags = verbose = 0;
ssector = -1;
- while ((ch = getopt(argc, argv, "begjo:rs:vC:")) != -1)
+ while ((ch = getopt(argc, argv, "begG:jm:M:o:rs:U:vC:")) != -1)
switch (ch) {
case 'b':
build_iovec(&iov, &iovlen, "brokenjoliet", NULL, (size_t)-1);
@@ -107,6 +96,15 @@ main(int argc, char **argv)
case 'g':
build_iovec(&iov, &iovlen, "gens", NULL, (size_t)-1);
break;
+ case 'G':
+ build_iovec_argf(&iov, &iovlen, "gid", "%d", a_gid(optarg));
+ break;
+ case 'm':
+ build_iovec_argf(&iov, &iovlen, "mask", "%u", a_mask(optarg));
+ break;
+ case 'M':
+ build_iovec_argf(&iov, &iovlen, "dirmask", "%u", a_mask(optarg));
+ break;
case 'j':
build_iovec(&iov, &iovlen, "nojoliet", NULL, (size_t)-1);
break;
@@ -126,6 +124,9 @@ main(int argc, char **argv)
case 's':
ssector = atoi(optarg);
break;
+ case 'U':
+ build_iovec_argf(&iov, &iovlen, "uid", "%d", a_uid(optarg));
+ break;
case 'v':
verbose++;
break;
@@ -189,8 +190,8 @@ void
usage(void)
{
(void)fprintf(stderr,
-"usage: mount_cd9660 [-begjrv] [-C charset] [-o options] [-s startsector]\n"
-" special node\n");
+"usage: mount_cd9660 [-begjrv] [-C charset] [-G gid] [-m mask] [-M mask]\n"
+" [-o options] [-U uid] [-s startsector] special node\n");
exit(EX_USAGE);
}
@@ -270,3 +271,58 @@ set_charset(struct iovec **iov, int *iovlen, const char *localcs)
return (0);
}
+
+static gid_t
+a_gid(const char *s)
+{
+ struct group *gr;
+ const char *gname;
+ gid_t gid;
+
+ if ((gr = getgrnam(s)) != NULL)
+ gid = gr->gr_gid;
+ else {
+ for (gname = s; *s && isdigit(*s); ++s);
+ if (!*s)
+ gid = atoi(gname);
+ else
+ errx(EX_NOUSER, "unknown group id: %s", gname);
+ }
+ return (gid);
+}
+
+static uid_t
+a_uid(const char *s)
+{
+ struct passwd *pw;
+ const char *uname;
+ uid_t uid;
+
+ if ((pw = getpwnam(s)) != NULL)
+ uid = pw->pw_uid;
+ else {
+ for (uname = s; *s && isdigit(*s); ++s);
+ if (!*s)
+ uid = atoi(uname);
+ else
+ errx(EX_NOUSER, "unknown user id: %s", uname);
+ }
+ return (uid);
+}
+
+static mode_t
+a_mask(const char *s)
+{
+ int done, rv;
+ char *ep;
+
+ done = 0;
+ rv = -1;
+ if (*s >= '0' && *s <= '7') {
+ done = 1;
+ rv = strtol(optarg, &ep, 8);
+ }
+ if (!done || rv < 0 || *ep)
+ errx(EX_USAGE, "invalid file mode: %s", s);
+ return (rv);
+}