From owner-freebsd-bugs@FreeBSD.ORG Mon Feb 5 15:30:32 2007 Return-Path: X-Original-To: freebsd-bugs@hub.freebsd.org Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 53E8016A406 for ; Mon, 5 Feb 2007 15:30:32 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [69.147.83.40]) by mx1.freebsd.org (Postfix) with ESMTP id 0C21713C4A7 for ; Mon, 5 Feb 2007 15:30:32 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.4/8.13.4) with ESMTP id l15FUVkx048184 for ; Mon, 5 Feb 2007 15:30:31 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.4/8.13.4/Submit) id l15FUVZ1048183; Mon, 5 Feb 2007 15:30:31 GMT (envelope-from gnats) Date: Mon, 5 Feb 2007 15:30:31 GMT Message-Id: <200702051530.l15FUVZ1048183@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org From: Craig Rodrigues Cc: Subject: Re: bin/108751: mount_msdosfs chokes on "noauto" fstab option X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Craig Rodrigues List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 05 Feb 2007 15:30:32 -0000 The following reply was made to PR bin/108751; it has been noted by GNATS. From: Craig Rodrigues To: Neil Hoggarth Cc: bug-followup@freebsd.org Subject: Re: bin/108751: mount_msdosfs chokes on "noauto" fstab option Date: Mon, 5 Feb 2007 10:24:22 -0500 --NzB8fVQJ5HfG6fxh Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Sun, Feb 04, 2007 at 11:36:58AM +0000, Neil Hoggarth wrote: > and the following kernel error is logged: > > mount option is unknown > Can you try the attached patch to mount? -- Craig Rodrigues rodrigc@crodrigues.org --NzB8fVQJ5HfG6fxh Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="a.txt" Index: mount.c =================================================================== RCS file: /home/ncvs/src/sbin/mount/mount.c,v retrieving revision 1.69.2.5 diff -u -u -r1.69.2.5 mount.c --- mount.c 28 Jan 2007 01:24:57 -0000 1.69.2.5 +++ mount.c 5 Feb 2007 15:23:25 -0000 @@ -74,7 +74,7 @@ int hasopt(const char *, const char *); int ismounted(struct fstab *, struct statfs *, int); int isremountable(const char *); -void mangle(char *, int *, const char **); +void mangle(char *, int *, char *[]); char *update_options(char *, char *, int); int mountfs(const char *, const char *, const char *, int, const char *, const char *); @@ -120,6 +120,9 @@ 0 }; +static const char userquotaeq[] = "userquota="; +static const char groupquotaeq[] = "groupquota="; + static int specified_ro(const char *arg) { @@ -431,7 +434,7 @@ const char *vfstype, *spec, *name, *options, *mntopts; int flags; { - const char *argv[100]; + char *argv[100]; struct statfs sf; pid_t pid; int argc, i, status; @@ -483,8 +486,8 @@ argc = 0; argv[argc++] = execname; mangle(optbuf, &argc, argv); - argv[argc++] = spec; - argv[argc++] = name; + argv[argc++] = strdup(spec); + argv[argc++] = strdup(name); argv[argc] = NULL; if (debug) { @@ -631,10 +634,7 @@ } void -mangle(options, argcp, argv) - char *options; - int *argcp; - const char **argv; +mangle(char *options, int *argcp, char *argv[]) { char *p, *s; int argc; @@ -642,16 +642,43 @@ argc = *argcp; for (s = options; (p = strsep(&s, ",")) != NULL;) if (*p != '\0') { - if (*p == '-') { + if (strcmp(p, "noauto") == 0) { + /* + * Do not pass noauto option to nmount(). + * or external mount program. noauto is + * only used to prevent mounting a file system + * when 'mount -a' is specified, and is + * not a real mount option. + */ + continue; + } else if (strcmp(p, "late") == 0) { + /* + * "late" is used to prevent certain file + * systems from being mounted before late + * in the boot cycle; for instance, + * loopback NFS mounts can't be mounted + * before mountd starts. + */ + continue; + } else if (strcmp(p, "userquota") == 0) { + continue; + } else if (strncmp(p, userquotaeq, + sizeof(userquotaeq) - 1) == 0) { + continue; + } else if (strcmp(p, "groupquota") == 0) { + continue; + } else if (strncmp(p, groupquotaeq, + sizeof(groupquotaeq) - 1) == 0) { + continue; + } else if (*p == '-') { argv[argc++] = p; p = strchr(p, '='); if (p != NULL) { *p = '\0'; argv[argc++] = p+1; } - } else if (strcmp(p, "rw") != 0 && - strcmp(p, "late") != 0) { - argv[argc++] = "-o"; + } else { + argv[argc++] = strdup("-o"); argv[argc++] = p; } } --NzB8fVQJ5HfG6fxh--