diff options
| author | marks <none@none> | 2008-05-16 08:55:36 -0700 |
|---|---|---|
| committer | marks <none@none> | 2008-05-16 08:55:36 -0700 |
| commit | 6d1e0b89f3e34478a022854df6b0cfab82ccce66 (patch) | |
| tree | c3ba034a3471e771befb236330be4081cd492999 /usr/src | |
| parent | d36ea5d8d005e23fe097efbc1795808d752d398f (diff) | |
| download | illumos-joyent-6d1e0b89f3e34478a022854df6b0cfab82ccce66.tar.gz | |
6700649 zfs_ctldir snapshot creation issues with CIFS clients
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; |
