Print this page
NEX-14666 Need to provide SMB 2.1 Client
NEX-17187 panic in smbfs_acl_store
NEX-17231 smbfs create xattr files finds wrong file
NEX-17224 smbfs lookup EINVAL should be ENOENT
NEX-17260 SMB1 client fails to list directory after NEX-14666
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
Reviewed by: Saso Kiselkov <saso.kiselkov@nexenta.com>
Reviewed by: Joyce McIntosh <joyce.mcintosh@nexenta.com>
and: (cleanup)
@@ -20,10 +20,12 @@
*/
/*
* Copyright 2010 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright 2018 Nexenta Systems, Inc. All rights reserved.
*/
/*
* ACL support for smbfs
*/
@@ -67,26 +69,23 @@
*/
static int
smbfs_getsd(vnode_t *vp, uint32_t selector, mblk_t **mp, cred_t *cr)
{
struct smb_cred scred;
- int error, cerror;
smbmntinfo_t *smi;
smbnode_t *np;
- u_int16_t fid = SMB_FID_UNUSED;
+ smb_fh_t *fid = NULL;
uint32_t sdlen = SMALL_SD_SIZE;
uint32_t rights = STD_RIGHT_READ_CONTROL_ACCESS;
+ int error;
if (selector & SACL_SECURITY_INFORMATION)
rights |= SEC_RIGHT_SYSTEM_SECURITY;
np = VTOSMB(vp);
smi = VTOSMI(vp);
- /* Shared lock for (possible) n_fid use. */
- if (smbfs_rw_enter_sig(&np->r_lkserlock, RW_READER, SMBINTR(vp)))
- return (EINTR);
smb_credinit(&scred, cr);
error = smbfs_smb_tmpopen(np, rights, &scred, &fid);
if (error)
goto out;
@@ -93,12 +92,12 @@
again:
/*
* This does the OTW Get
*/
- error = smbfs_smb_getsec_m(smi->smi_share, fid,
- &scred, selector, mp, &sdlen);
+ error = smbfs_smb_getsec(smi->smi_share, fid,
+ selector, mp, &sdlen, &scred);
/*
* Server may give us an error indicating that we
* need a larger data buffer to receive the SD,
* and the size we'll need. Use the given size,
* but only after a sanity check.
@@ -113,18 +112,14 @@
if (error == E2BIG &&
sdlen > SMALL_SD_SIZE &&
sdlen <= MAX_RAW_SD_SIZE)
goto again;
- cerror = smbfs_smb_tmpclose(np, fid, &scred);
- if (cerror)
- SMBVDEBUG("error %d closing file %s\n",
- cerror, np->n_rpath);
+ smbfs_smb_tmpclose(np, fid);
out:
smb_credrele(&scred);
- smbfs_rw_exit(&np->r_lkserlock);
return (error);
}
/*
@@ -137,15 +132,15 @@
*/
static int
smbfs_setsd(vnode_t *vp, uint32_t selector, mblk_t **mp, cred_t *cr)
{
struct smb_cred scred;
- int error, cerror;
smbmntinfo_t *smi;
smbnode_t *np;
uint32_t rights;
- u_int16_t fid = SMB_FID_UNUSED;
+ smb_fh_t *fid = NULL;
+ int error;
np = VTOSMB(vp);
smi = VTOSMI(vp);
/*
@@ -162,13 +157,10 @@
if (selector & DACL_SECURITY_INFORMATION)
rights |= STD_RIGHT_WRITE_DAC_ACCESS;
if (selector & SACL_SECURITY_INFORMATION)
rights |= SEC_RIGHT_SYSTEM_SECURITY;
- /* Shared lock for (possible) n_fid use. */
- if (smbfs_rw_enter_sig(&np->r_lkserlock, RW_READER, SMBINTR(vp)))
- return (EINTR);
smb_credinit(&scred, cr);
error = smbfs_smb_tmpopen(np, rights, &scred, &fid);
if (error)
goto out;
@@ -183,21 +175,17 @@
mutex_exit(&np->r_statelock);
/*
* This does the OTW Set
*/
- error = smbfs_smb_setsec_m(smi->smi_share, fid,
- &scred, selector, mp);
+ error = smbfs_smb_setsec(smi->smi_share, fid,
+ selector, mp, &scred);
- cerror = smbfs_smb_tmpclose(np, fid, &scred);
- if (cerror)
- SMBVDEBUG("error %d closing file %s\n",
- cerror, np->n_rpath);
+ smbfs_smb_tmpclose(np, fid);
out:
smb_credrele(&scred);
- smbfs_rw_exit(&np->r_lkserlock);
return (error);
}
/*