diff options
Diffstat (limited to 'usr/src')
| -rw-r--r-- | usr/src/common/zfs/zfs_namecheck.c | 4 | ||||
| -rw-r--r-- | usr/src/uts/common/fs/zfs/zfs_ctldir.c | 7 | 
2 files changed, 9 insertions, 2 deletions
| diff --git a/usr/src/common/zfs/zfs_namecheck.c b/usr/src/common/zfs/zfs_namecheck.c index 0e832fb5d2..a9d109be20 100644 --- a/usr/src/common/zfs/zfs_namecheck.c +++ b/usr/src/common/zfs/zfs_namecheck.c @@ -19,7 +19,7 @@   * CDDL HEADER END   */  /* - * Copyright 2007 Sun Microsystems, Inc.  All rights reserved. + * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.   * Use is subject to license terms.   */ @@ -54,7 +54,7 @@ valid_char(char c)  	return ((c >= 'a' && c <= 'z') ||  	    (c >= 'A' && c <= 'Z') ||  	    (c >= '0' && c <= '9') || -	    c == '-' || c == '_' || c == '.' || c == ':'); +	    c == '-' || c == '_' || c == '.' || c == ':' || c == ' ');  }  /* diff --git a/usr/src/uts/common/fs/zfs/zfs_ctldir.c b/usr/src/uts/common/fs/zfs/zfs_ctldir.c index 56bf50e842..ec3593ae22 100644 --- a/usr/src/uts/common/fs/zfs/zfs_ctldir.c +++ b/usr/src/uts/common/fs/zfs/zfs_ctldir.c @@ -78,6 +78,8 @@  #include <sys/mount.h>  #include <sys/sunddi.h> +#include "zfs_namecheck.h" +  typedef struct zfsctl_node {  	gfs_dir_t	zc_gfs_private;  	uint64_t	zc_id; @@ -428,6 +430,8 @@ zfsctl_snapshot_zname(vnode_t *vp, const char *name, int len, char *zname)  {  	objset_t *os = ((zfsvfs_t *)((vp)->v_vfsp->vfs_data))->z_os; +	if (snapshot_namecheck(name, NULL, NULL) != 0) +		return (EILSEQ);  	dmu_objset_name(os, zname);  	if (strlen(zname) + 1 + strlen(name) >= len)  		return (ENAMETOOLONG); @@ -655,6 +659,9 @@ zfsctl_snapdir_mkdir(vnode_t *dvp, char *dirname, vattr_t *vap, vnode_t  **vpp,  	static enum symfollow follow = NO_FOLLOW;  	static enum uio_seg seg = UIO_SYSSPACE; +	if (snapshot_namecheck(dirname, NULL, NULL) != 0) +		return (EILSEQ); +  	dmu_objset_name(zfsvfs->z_os, name);  	*vpp = NULL; | 
