From barner@in.tum.de  Wed Aug 13 05:04:27 2003
Return-Path: <barner@in.tum.de>
Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125])
	by hub.freebsd.org (Postfix) with ESMTP id 5AF1F37B401
	for <FreeBSD-gnats-submit@freebsd.org>; Wed, 13 Aug 2003 05:04:27 -0700 (PDT)
Received: from mailout.informatik.tu-muenchen.de (mailout.informatik.tu-muenchen.de [131.159.0.5])
	by mx1.FreeBSD.org (Postfix) with ESMTP id 3F37B43F3F
	for <FreeBSD-gnats-submit@freebsd.org>; Wed, 13 Aug 2003 05:04:26 -0700 (PDT)
	(envelope-from barner@in.tum.de)
Received: by zi025.glhnet.mhn.de (Postfix, from userid 1000)
	id F39FE38CF4; Wed, 13 Aug 2003 14:03:53 +0200 (CEST)
Message-Id: <20030813120353.F39FE38CF4@zi025.glhnet.mhn.de>
Date: Wed, 13 Aug 2003 14:03:53 +0200 (CEST)
From: Simon Barner <barner@in.tum.de>
Reply-To: Simon Barner <barner@in.tum.de>
To: FreeBSD-gnats-submit@freebsd.org
Cc:
Subject: [patch] Parse fstab(5) with spaces in path names
X-Send-Pr-Version: 3.113
X-GNATS-Notify:

>Number:         55539
>Category:       bin
>Synopsis:       [patch] Parse fstab(5) with spaces in path names
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    stefanf
>State:          patched
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Wed Aug 13 05:10:15 PDT 2003
>Closed-Date:    
>Last-Modified:  Thu Oct 11 11:52:18 UTC 2012
>Originator:     Simon Barner
>Release:        FreeBSD 4.8-STABLE i386
>Organization:
>Environment:
System: FreeBSD zi025.glhnet.mhn.de 4.8-STABLE FreeBSD 4.8-STABLE #0: Thu Aug 7 04:04:01 CEST 2003 toor@zi025.glhnet.mhn.de:/usr/src/sys/compile/KISTE i386

>Description:

At the present, it is impossible to specify file systems and/or mount
points that contain white spaces in fstab(5).

The attached patch extends the getfsent(3) function in order to handle
both escaped and quoted white space correctly.

It also updates the fstab(5) man page (please review it thoroughly since
English is not my mother tongue - thanks).

Example for a valid mount point:

/a\ rather\ long/and/complicated\ path
"/a rather long/and/complicated path"

You can find a discussion on freebsd-hackers@ about this issue here:

http://freebsd.rambler.ru/bsdmail/freebsd-hackers_2003/msg04083.html

This problem report superseedes misc/37569, which was filed about one
year ago, and which implements the double quote variant only (the
originator of that PR mentioned in the above thread that it would be OK to
close his PR, if _some_ solution hit the CVS tree.

>How-To-Repeat:

You can use this tiny program to test your getfsent(3) implementation.
With the current one, fstab-lines with white space will raise an error.

#include <fstab.h>
#include <stdio.h>

int main (int argc, char *argv[]) {
        struct fstab *f;
        
        while (0 != (f = getfsent ())) {
                printf ("\"%s\" \"%s\" \"%s\" %d %d\n", f->fs_spec, f->fs_file,
                f->fs_vfstype, f->fs_freq, f->fs_passno);
        }
        
        return 0;
}

>Fix:
This patch to src/lib/libc/gen/fstab.c employes the extentions described
above. It applies to both -stable and -current. One hunk of the patch to
src/share/man/man5/fstab.5 will fail, since the man page does not
contain a list of valid file system types any more (I added smbfs to
that list).

--- lib/libc/gen/fstab.c.orig	Fri Aug  1 17:18:00 2003
+++ lib/libc/gen/fstab.c	Thu Aug  7 15:46:39 2003
@@ -84,6 +84,60 @@
 	_fs_fstab.fs_spec = buf;
 }
 
+/*
+ * Gets a token from a string *s, that is either empty or is separated by
+ * a set of delimiters *delim.
+ * Characters that are in *delim, can occur in the token if the are escaped,
+ * i.e. have a '\' prepended. The character '\' itself is encoded as '\\'.
+ * *s can have a trailing comment (indicated by a '#'), which will cause the
+ * characters after the '#' to be ignored. To encode a '#' within a token,
+ * use '\#'.
+ *
+ * If a token is found, gtok sets the last character after its end
+ * to '\0' and returns a pointer it. Otherwise the return value is NULL.
+ * As a side effect, the input string *s modified and points to the next
+ * character after the end of the current token, i.e. after the '\0'.
+ */
+char *gtok(char **s, char const *delim)
+{
+	int quoted, escaped;
+	static char const esc_set[] = {  't',  'r',  'n',  'a', 0 };
+	static char const esc_rep[] = { '\t', '\r', '\n', '\a', 0 };
+	char *tok, *r, *w, *p;
+
+	if (!s || !*s || !*(tok = *s + strspn(*s, delim)) || *tok == '#')
+		return NULL;
+
+	for (quoted = escaped = 0, r = w = tok; *r; r++) {
+		if (!escaped) {
+			if (*r == '\\') {
+				escaped = 1;
+				continue;
+			}
+			if (*r == '\"') {
+				quoted ^= -1;
+				continue;
+			}
+			if (!quoted) {
+				if (strchr(delim, *r)) {
+					r++;
+					break;
+				}
+			}
+		} else {
+			escaped = 0;
+			if ((p = strchr(esc_set, *r)) != NULL) {
+				*w++ = esc_rep[p - esc_set];
+				continue;
+			}
+		}
+		*w++ = *r;
+	}
+	*w = 0;
+	*s = r;
+	return tok;
+}
+
 static int
 fstabscan()
 {
@@ -91,21 +145,73 @@
 #define	MAXLINELENGTH	1024
 	static char line[MAXLINELENGTH];
 	char subline[MAXLINELENGTH];
-	int typexx;
+	int typexx, escaped=0, quoted=0, ws_sep=0;
 
 	for (;;) {
 
 		if (!(p = fgets(line, sizeof(line), _fs_fp)))
 			return(0);
-/* OLD_STYLE_FSTAB */
 		++LineNo;
-		if (*line == '#' || *line == '\n')
-			continue;
-		if (!strpbrk(p, " \t")) {
-			_fs_fstab.fs_spec = strsep(&p, ":\n");
-			_fs_fstab.fs_file = strsep(&p, ":\n");
+		
+		/* Detect whether line is in old or new fstab style */
+		for (cp=p; *cp != '\n'; ++cp) {
+			if (*cp == '\\') {
+			    escaped = (escaped ? 0 : 1);
+			    continue;
+			}
+			if (!escaped) {
+			    /* Quotes */
+			    if (*cp == '\"') {
+			    	quoted = (quoted ? 0 : 1);
+				continue;
+			    }
+			    if (quoted)
+			    	continue;
+			    /* new white separator found */
+			    if (cp > p && strspn (cp, " \n\r\t") &&
+ 				!strspn(cp-1, " \t"))
+				++ws_sep;
+			    
+			    /* #-comment found */
+			    if (*cp == '#') {
+			    	*cp = '\0';
+				/* ignore white spaces in front of a comment */
+				if (cp > p && strspn(cp-1, " \t") && 
+				    ws_sep > 0)
+				    ws_sep--;
+				    break;
+			    }
+			} else
+			    escaped = 0;
+		}
+		/* open quotes and unfinished escape-sequences are bad */
+		if (quoted || escaped)
+		    goto bad;
+		/* ignore trailing white spaces */
+	        if (*(cp + strspn (cp, " \t")) == '\n' && ws_sep > 0)
+		    --ws_sep;
+		   
+		/* No white space separators found => OLD_STYLE_FSTAB */
+		if (ws_sep == 0) {
+			/*
+			 * line consists only of white spaces
+			 * (evtl. + #-comment)
+			 */
+			if (strspn (p, " \t"))
+				continue;
+			/*
+			 * Now read the different values (gtok will convert
+			 * escape seq.). Format is:
+			 *  <fs_spec>:<fs_file>:<fs_type>:<freq>:<passno>
+			 * ':' itself can be encodes as '\:'
+			 */
+			if (!(_fs_fstab.fs_spec = gtok(&p, ":\n\r")))
+				continue;
+			if (!(_fs_fstab.fs_file = gtok(&p, ":\n\r"))) {
+				goto bad;
+			}
 			fixfsfile();
-			_fs_fstab.fs_type = strsep(&p, ":\n");
+			_fs_fstab.fs_type = gtok(&p, ":\n\r");
 			if (_fs_fstab.fs_type) {
 				if (!strcmp(_fs_fstab.fs_type, FSTAB_XX))
 					continue;
@@ -113,46 +219,43 @@
 				_fs_fstab.fs_vfstype =
 				    strcmp(_fs_fstab.fs_type, FSTAB_SW) ?
 				    "ufs" : "swap";
-				if ((cp = strsep(&p, ":\n")) != NULL) {
+				if ((cp = gtok(&p, ":\n\r")) != NULL) {
 					_fs_fstab.fs_freq = atoi(cp);
-					if ((cp = strsep(&p, ":\n")) != NULL) {
+					if ((cp = gtok(&p, " \n\r\t")) != NULL) {
 						_fs_fstab.fs_passno = atoi(cp);
+						if (gtok (&p, " \n\r\t"))
+						    goto bad;
+						    
 						return(1);
 					}
 				}
 			}
 			goto bad;
 		}
-/* OLD_STYLE_FSTAB */
-		while ((cp = strsep(&p, " \t\n")) != NULL && *cp == '\0')
-			;
-		_fs_fstab.fs_spec = cp;
-		if (!_fs_fstab.fs_spec || *_fs_fstab.fs_spec == '#')
+		
+		/* At least one white space sep. found => NEW_STYLE_FSTAB */
+		if (!(_fs_fstab.fs_spec = gtok(&p, " \n\r\t")))
 			continue;
-		while ((cp = strsep(&p, " \t\n")) != NULL && *cp == '\0')
-			;
-		_fs_fstab.fs_file = cp;
+		if (!(_fs_fstab.fs_file = gtok(&p, " \n\r\t")))
+			goto bad;
 		fixfsfile();
-		while ((cp = strsep(&p, " \t\n")) != NULL && *cp == '\0')
-			;
-		_fs_fstab.fs_vfstype = cp;
-		while ((cp = strsep(&p, " \t\n")) != NULL && *cp == '\0')
-			;
-		_fs_fstab.fs_mntops = cp;
-		if (_fs_fstab.fs_mntops == NULL)
+		if (!(_fs_fstab.fs_vfstype = gtok(&p, " \n\r\t")))
+			goto bad;
+		if (!(_fs_fstab.fs_mntops = gtok(&p, " \n\r\t")))
 			goto bad;
 		_fs_fstab.fs_freq = 0;
 		_fs_fstab.fs_passno = 0;
-		while ((cp = strsep(&p, " \t\n")) != NULL && *cp == '\0')
-			;
+		cp = gtok(&p, " \n\r\t");
 		if (cp != NULL) {
 			_fs_fstab.fs_freq = atoi(cp);
-			while ((cp = strsep(&p, " \t\n")) != NULL && *cp == '\0')
-				;
+			cp = gtok(&p, " \n\r\t");
 			if (cp != NULL)
 				_fs_fstab.fs_passno = atoi(cp);
 		}
 		strcpy(subline, _fs_fstab.fs_mntops);
+		if (gtok (&p, " \n\r\t"))
+		    goto bad;
+
 		p = subline;
 		for (typexx = 0, cp = strsep(&p, ","); cp;
 		     cp = strsep(&p, ",")) {
--- share/man/man5/fstab.5.orig	Tue Aug 12 22:55:10 2003
+++ share/man/man5/fstab.5	Wed Aug 13 13:01:28 2003
@@ -79,6 +79,33 @@
 describes the mount point for the filesystem.
 For swap partitions, this field should be specified as ``none''.
 .Pp
+Both the
+.Fa fs_spec
+and the
+.Fa fs_file
+field may contain white spaces, with must be protected in a shell-like
+manner. In detail, this means that white spaces (especially blanks and
+tabs) can be encoded in the following ways:
+.Bl -tag -width indent -offset indent
+.It Em escape sequences
+White spaces preceded with a ``\\'' are handled as a part of the path
+specification and not as a delimiter. The ``\\'' character itself can
+be written as ``\\\\''.
+.Pp
+Example: ``/example\\ path''
+.It Em double quotes
+Another possibility is to enclose the path specification in double
+quotes ``"''.
+.Pp
+Example: ``"/example path"''
+.El
+.Pp
+It should be noted, that system administrators should avoid white spaces
+in file system and mount point specifications in order to keep things
+simple and clean. The ability to handle such path names is only indented to
+provide compatibility with systems, where white spaces in path names are
+common (mostly SMB/CIFS shares).
+.Pp
 The third field,
 .Pq Fa fs_vfstype ,
 describes the type of the filesystem.
@@ -109,6 +136,8 @@
 .\" maybe also say Rock Ridge extensions are handled ?
 .It Em procfs
 a file system for accessing process data
+.It Em smbfs
+SMB/CIFS compatible network shares
 .El
 .Pp
 The fourth field,
>Release-Note:
>Audit-Trail:

From: Garrett Wollman <wollman@khavrinen.lcs.mit.edu>
To: Simon Barner <barner@in.tum.de>
Cc: FreeBSD-gnats-submit@freebsd.org
Subject: bin/55539: [patch] Parse fstab(5) with spaces in path names
Date: Wed, 13 Aug 2003 08:44:45 -0400 (EDT)

 <<On Wed, 13 Aug 2003 14:03:53 +0200 (CEST), Simon Barner <barner@in.tum.de> said:
 
 I think vis(3) would be a more appropriate solution.
 
 -GAWollman
 

From: Simon Barner <barner@in.tum.de>
To: Garrett Wollman <wollman@khavrinen.lcs.mit.edu>
Cc: FreeBSD-gnats-submit@freebsd.org
Subject: Re: bin/55539: [patch] Parse fstab(5) with spaces in path names
Date: Wed, 13 Aug 2003 18:06:57 +0200

 > I think vis(3) would be a more appropriate solution.
 
 Do you mean instead of the gtok() function? I must admit that I don't
 see how this could work: according to the man page vis(3), encodes
 strings into various formats, e.g. C-style escape sequences, URI-style
 encoding etc.
 
 unvis(3) is the other way round (from an escaped form to a "normal"
 representation). While this is the direction we need in order to parse
 an extended fstab, there still remain three problems:
 
 - unvis(3) does not handle quoted strings
 - unvis(3) uses '\s' instead of '\ '
 - and most important: the problem to parse a string where characters
   from the set of delimiters can occur in the tokens (with some way of
   protection).
   
 I also would be glad to get rid of that function and to use standard
 string functions instead, but I do not see any chance to do so (easily).
 
 I have done some more research on that problem, and there seems to be a
 rather historic function called strqtok(), which does basically the same
 as gtok().
 
 http://groups.google.de/groups?q=strqtok&hl=de&lr=&ie=UTF-8&oe=UTF-8&selm=1uqur9INNt3q%40gap.caltech.edu&rnum=1
 
 The elm mail agent has a strtokq() function that has the same purpose.
 
 And finally there is the str-library (ports/devel/str), which offers a
 str_token function.
 
 Of course none of these is a real solution to our problem that the fstab
 extention is rather ugly and big. Perhaps the cleanest solution would be
 to implement a public strtokq function (as a BSD extention), but this
 seems to be beyond the scope of this PR.
 
 Please correct me if I am wrong, especially if you see a small and clean
 solution without gtok() but with one of the libc functions.
 
 Regards,
  Simon

From: Simon Barner <barner@in.tum.de>
To: freebsd-gnats-submit@FreeBSD.org
Cc: Garrett Wollman <wollman@khavrinen.lcs.mit.edu>
Subject: Re: bin/55539: [patch] Parse fstab(5) with spaces in path names
Date: Mon, 18 Aug 2003 18:24:10 +0200

 > It has a number of style bugs.
 [...]
 > Indentation.
 
 I hope it's style(9) conforming now. I have also updated the fstab(5)
 man page.
  
 > Other than that it looks OK.
 
 Thanks for reviewing my work :-)
 
 Regards,
  Simon
  
 --- fstab.c.orig	Mon Aug 18 10:42:11 2003
 +++ fstab.c	Mon Aug 18 17:50:17 2003
 @@ -53,6 +53,7 @@
  #include <stdlib.h>
  #include <string.h>
  #include <unistd.h>
 +#include <vis.h>
  
  static FILE *_fs_fp;
  static struct fstab _fs_fstab;
 @@ -84,6 +85,41 @@
  	_fs_fstab.fs_spec = buf;
  }
  
 +/*
 + * Converts a string *str, that possibly contains vis(1|3) encoded
 + * characters (visual representation) into the original form.
 + * See also: unvis(1|3)
 + *
 + * Return values: 0 on success, 1 otherwise
 + */
 +int unescape (char *str) {
 +	int state = 0;
 +	char out, *s = str, *t = str;
 +
 +	if (str == NULL)
 +		return 1;
 +
 +	while (*s != '\0') {
 +	again:
 +		switch(unvis(&out, *s, &state, 0)) {
 +		case 0:
 +		case UNVIS_NOCHAR:
 +			break;
 +		case UNVIS_VALID:
 +			*t++ = out;
 +			break;
 +		case UNVIS_VALIDPUSH:
 +			*t++ = out;
 +			goto again;
 +		case UNVIS_SYNBAD:
 +			return 1;
 +		}
 +		++s;
 +	}
 +	*t = '\0';
 +	return 0;
 +}
 +
  static int
  fstabscan()
  {
 @@ -102,9 +138,19 @@
  		if (*line == '#' || *line == '\n')
  			continue;
  		if (!strpbrk(p, " \t")) {
 -			_fs_fstab.fs_spec = strsep(&p, ":\n");
 -			_fs_fstab.fs_file = strsep(&p, ":\n");
 +		cp = strsep(&p, ":\n");
 +			if (!unescape (cp))
 +				_fs_fstab.fs_spec = cp;
 +			else
 +				goto bad;
 +			
 +			cp = strsep(&p, ":\n");
 +			if (!unescape (cp))
 +				_fs_fstab.fs_file = cp;
 +			else
 +				goto bad;
  			fixfsfile();
 +			
  			_fs_fstab.fs_type = strsep(&p, ":\n");
  			if (_fs_fstab.fs_type) {
  				if (!strcmp(_fs_fstab.fs_type, FSTAB_XX))
 @@ -126,13 +172,21 @@
  /* OLD_STYLE_FSTAB */
  		while ((cp = strsep(&p, " \t\n")) != NULL && *cp == '\0')
  			;
 -		_fs_fstab.fs_spec = cp;
 +		if (!unescape (cp))
 +			_fs_fstab.fs_spec = cp;
 +		else
 +			goto bad;
  		if (!_fs_fstab.fs_spec || *_fs_fstab.fs_spec == '#')
  			continue;
 +			
  		while ((cp = strsep(&p, " \t\n")) != NULL && *cp == '\0')
  			;
 -		_fs_fstab.fs_file = cp;
 +		if (!unescape (cp))
 +			_fs_fstab.fs_file = cp;
 +		else
 +			goto bad;
  		fixfsfile();
 +		
  		while ((cp = strsep(&p, " \t\n")) != NULL && *cp == '\0')
  			;
  		_fs_fstab.fs_vfstype = cp;
 
 --- fstab.5.orig	Mon Aug 18 17:50:43 2003
 +++ fstab.5	Mon Aug 18 18:17:48 2003
 @@ -10,7 +10,7 @@
  .\"    notice, this list of conditions and the following disclaimer in the
  .\"    documentation and/or other materials provided with the distribution.
  .\" 3. All advertising materials mentioning features or use of this software
 -.\"    must display the following acknowledgement:
 +.\"    must display the following acknowledgment:
  .\"	This product includes software developed by the University of
  .\"	California, Berkeley and its contributors.
  .\" 4. Neither the name of the University nor the names of its contributors
 @@ -79,6 +79,19 @@
  describes the mount point for the filesystem.
  For swap partitions, this field should be specified as ``none''.
  .Pp
 +Both the
 +.Fa fs_spec
 +and the
 +.Fa fs_file
 +field may contain white spaces, that must be encoded in a
 +.Xr vis 1 compatible way (you can run ``vis -wc'' or  ``vis -w'' to
 +encode the path names properly).
 +Despite this ability to handle path names with with spaces, system
 +administrators should avoid them wherever possible in order to keep
 +file system and mount point specifications simple and clean.
 +It is only only intended to provide compatibility with systems,
 +where white spaces in path names are common (mostly SMB/CIFS shares).
 +.Pp
  The third field,
  .Pq Fa fs_vfstype ,
  describes the type of the filesystem.
 @@ -109,6 +122,8 @@
  .\" maybe also say Rock Ridge extensions are handled ?
  .It Em procfs
  a file system for accessing process data
 +.It Em smbfs
 +SMB/CIFS compatible network shares
  .El
  .Pp
  The fourth field,

From: Bert JW Regeer <xistence@0x58.com>
To: bug-followup@FreeBSD.org,
 barner@in.tum.de
Cc:  
Subject: Re: bin/55539: [patch] Parse fstab(5) with spaces in path names
Date: Tue, 18 Sep 2007 03:52:34 -0700

 --Apple-Mail-2--795326574
 Content-Transfer-Encoding: 7bit
 Content-Type: text/plain;
 	charset=US-ASCII;
 	delsp=yes;
 	format=flowed
 
 Hello,
 
 I have recently started working in a environment where Samba is used  
 by the Windows administrators, and recently we have had the need to  
 mount Samba shares with spaces in them.
 
 I am wondering if this patch has made itself available in 6.2, and if  
 not what the reasoning behind the slow down is? Without this patch it  
 makes mounting of shares with spaces in the name impossible through  
 fstab, and instead one would have to write a script of some sort that  
 is executed at start up, as mount_smbfs understands spaces just fine  
 when mounting with:
 
 mount_smbfs "//server/share name" /mnt
 
 Thanks,
 Bert JW Regeer
 --Apple-Mail-2--795326574
 Content-Transfer-Encoding: base64
 Content-Type: application/pkcs7-signature;
 	name=smime.p7s
 Content-Disposition: attachment;
 	filename=smime.p7s
 
 MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIGVjCCAw8w
 ggJ4oAMCAQICEHRA63SFlNqqzkcvWmrI5eYwDQYJKoZIhvcNAQEFBQAwYjELMAkGA1UEBhMCWkEx
 JTAjBgNVBAoTHFRoYXd0ZSBDb25zdWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMTI1RoYXd0ZSBQ
 ZXJzb25hbCBGcmVlbWFpbCBJc3N1aW5nIENBMB4XDTA2MTAxMTA4NDczNloXDTA3MTAxMTA4NDcz
 NlowZDEfMB0GA1UEAxMWVGhhd3RlIEZyZWVtYWlsIE1lbWJlcjEgMB4GCSqGSIb3DQEJARYReGlz
 dGVuY2VAMHg1OC5jb20xHzAdBgkqhkiG9w0BCQEWEGJlcnJlZ2VlQHVhdC5lZHUwggEiMA0GCSqG
 SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDE37a0QjofkVYkBv/qo6Cxjbz0dxTRq271K4WfL11RP1s6
 fS2NE6JgqEMdmzIwrqhCSlTh9j14gGjDxLRhUA1Ll/akTbaezixbuol0Zk4v3E27sxezPAAR0hXo
 lusdMiMMkWl12fgu08ZAj4alPI0qSa1CSjHF0fogbNZoaT0ucib4ImmsKLGHcNoVMhrRe85vo10A
 YYB2S/d1nq80jZjmoXsGquBcYbC2ua1lAr2QXr8XC/xOgyQVoohIM1Gtn5qfgR7N/TqQSTtUh8eh
 QYabeEXl8IEAlrQz2PSaaTA/fgw8WcLp6H3Mz0b/26Kilwks5B503sUZdGvYGD2xEK63AgMBAAGj
 QDA+MC4GA1UdEQQnMCWBEXhpc3RlbmNlQDB4NTguY29tgRBiZXJyZWdlZUB1YXQuZWR1MAwGA1Ud
 EwEB/wQCMAAwDQYJKoZIhvcNAQEFBQADgYEAVWt0B421RLakXK0QMe9NF6JHtCJ2/be9F4hvIl8l
 owulWEvWLf8Bcur7JbRQjhDBWEMeTfB1AEFEi0Ro0yQQz2YqgeFzjFXzWpLvRfwJBFBr5fIOughU
 1T3VwMRgppapRhBm8dA8Wqj3We44xSF8QXXcx1sNRRfilJ96GfIxztswggM/MIICqKADAgECAgEN
 MA0GCSqGSIb3DQEBBQUAMIHRMQswCQYDVQQGEwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIw
 EAYDVQQHEwlDYXBlIFRvd24xGjAYBgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9D
 ZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMSQwIgYDVQQDExtUaGF3dGUgUGVyc29uYWwg
 RnJlZW1haWwgQ0ExKzApBgkqhkiG9w0BCQEWHHBlcnNvbmFsLWZyZWVtYWlsQHRoYXd0ZS5jb20w
 HhcNMDMwNzE3MDAwMDAwWhcNMTMwNzE2MjM1OTU5WjBiMQswCQYDVQQGEwJaQTElMCMGA1UEChMc
 VGhhd3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBlcnNvbmFsIEZy
 ZWVtYWlsIElzc3VpbmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMSmPFVzVftOucqZ
 Wh5owHUEcJ3f6f+jHuy9zfVb8hp2vX8MOmHyv1HOAdTlUAow1wJjWiyJFXCO3cnwK4Vaqj9xVsuv
 PAsH5/EfkTYkKhPPK9Xzgnc9A74r/rsYPge/QIACZNenprufZdHFKlSFD0gEf6e20TxhBEAeZBly
 YLf7AgMBAAGjgZQwgZEwEgYDVR0TAQH/BAgwBgEB/wIBADBDBgNVHR8EPDA6MDigNqA0hjJodHRw
 Oi8vY3JsLnRoYXd0ZS5jb20vVGhhd3RlUGVyc29uYWxGcmVlbWFpbENBLmNybDALBgNVHQ8EBAMC
 AQYwKQYDVR0RBCIwIKQeMBwxGjAYBgNVBAMTEVByaXZhdGVMYWJlbDItMTM4MA0GCSqGSIb3DQEB
 BQUAA4GBAEiM0VCD6gsuzA2jZqxnD3+vrL7CF6FDlpSdf0whuPg2H6otnzYvwPQcUCCTcDz9reFh
 YsPZOhl+hLGZGwDFGguCdJ4lUJRix9sncVcljd2pnDmOjCBPZV+V2vf3h9bGCE6u9uo05RAaWzVN
 d+NWIXiC3CEZNd4ksdMdRv9dX2VPMYIDEDCCAwwCAQEwdjBiMQswCQYDVQQGEwJaQTElMCMGA1UE
 ChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBlcnNvbmFs
 IEZyZWVtYWlsIElzc3VpbmcgQ0ECEHRA63SFlNqqzkcvWmrI5eYwCQYFKw4DAhoFAKCCAW8wGAYJ
 KoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMDcwOTE4MTA1MjM0WjAjBgkq
 hkiG9w0BCQQxFgQU4CjLvvwC7hI4x55+9BnaVr9OVqAwgYUGCSsGAQQBgjcQBDF4MHYwYjELMAkG
 A1UEBhMCWkExJTAjBgNVBAoTHFRoYXd0ZSBDb25zdWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMT
 I1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBJc3N1aW5nIENBAhB0QOt0hZTaqs5HL1pqyOXmMIGH
 BgsqhkiG9w0BCRACCzF4oHYwYjELMAkGA1UEBhMCWkExJTAjBgNVBAoTHFRoYXd0ZSBDb25zdWx0
 aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMTI1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBJc3N1aW5n
 IENBAhB0QOt0hZTaqs5HL1pqyOXmMA0GCSqGSIb3DQEBAQUABIIBAKOxirRbZKSjdt9znPuxWvs/
 NQaXiTOTliO+U43AHXjok418tEM7Q7SKcnyxciDcNu/Hz7H7baxMyoAW5IN8HXD5lDGZJf4OHety
 sRAJvSce/trsRGTJsBRnQWLdw5b1gWjtazUNPh6jgPDTVz6lT1AH9kEYPBFioh5u9IgCWa5mYWUD
 pyROWRGoOEjWYb88O4ddZiAKi6ao3V8PbI/CylY9agIzKQ5aMdv7Qg4aagTynnDbwLvfXJigsodF
 CiKOPRyCE06VA2YC9ARIipkcL8cDu1PihBhKFUDiunMR9ykVAAS02TB77fyi1EO4ikg5MvN/+S73
 BoMdCj9jtW/l2ZkAAAAAAAA=
 
 --Apple-Mail-2--795326574--

From: Gavin Atkinson <gavin.atkinson@ury.york.ac.uk>
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/55539: [patch] Parse fstab(5) with spaces in path names
Date: Sat, 21 Jun 2008 20:14:04 +0100 (BST)

 See also PRs 37569 and 117687 for other solutions to this problem.
State-Changed-From-To: open->patched 
State-Changed-By: stefanf 
State-Changed-When: Thu Oct 11 11:51:48 UTC 2012 
State-Changed-Why:  
Grab and mark patched. 


Responsible-Changed-From-To: freebsd-bugs->stefanf 
Responsible-Changed-By: stefanf 
Responsible-Changed-When: Thu Oct 11 11:51:48 UTC 2012 
Responsible-Changed-Why:  
Grab and mark patched. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=55539 
>Unformatted:
