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,29 ****
--- 20,31 ----
*/
/*
* 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,92 ****
*/
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;
uint32_t sdlen = SMALL_SD_SIZE;
uint32_t rights = STD_RIGHT_READ_CONTROL_ACCESS;
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;
--- 69,91 ----
*/
static int
smbfs_getsd(vnode_t *vp, uint32_t selector, mblk_t **mp, cred_t *cr)
{
struct smb_cred scred;
smbmntinfo_t *smi;
smbnode_t *np;
! 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);
smb_credinit(&scred, cr);
error = smbfs_smb_tmpopen(np, rights, &scred, &fid);
if (error)
goto out;
*** 93,104 ****
again:
/*
* This does the OTW Get
*/
! error = smbfs_smb_getsec_m(smi->smi_share, fid,
! &scred, selector, mp, &sdlen);
/*
* 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.
--- 92,103 ----
again:
/*
* This does the OTW Get
*/
! 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,130 ****
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);
out:
smb_credrele(&scred);
- smbfs_rw_exit(&np->r_lkserlock);
return (error);
}
/*
--- 112,125 ----
if (error == E2BIG &&
sdlen > SMALL_SD_SIZE &&
sdlen <= MAX_RAW_SD_SIZE)
goto again;
! smbfs_smb_tmpclose(np, fid);
out:
smb_credrele(&scred);
return (error);
}
/*
*** 137,151 ****
*/
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;
np = VTOSMB(vp);
smi = VTOSMI(vp);
/*
--- 132,146 ----
*/
static int
smbfs_setsd(vnode_t *vp, uint32_t selector, mblk_t **mp, cred_t *cr)
{
struct smb_cred scred;
smbmntinfo_t *smi;
smbnode_t *np;
uint32_t rights;
! smb_fh_t *fid = NULL;
! int error;
np = VTOSMB(vp);
smi = VTOSMI(vp);
/*
*** 162,174 ****
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;
--- 157,166 ----
*** 183,203 ****
mutex_exit(&np->r_statelock);
/*
* This does the OTW Set
*/
! error = smbfs_smb_setsec_m(smi->smi_share, fid,
! &scred, selector, mp);
! cerror = smbfs_smb_tmpclose(np, fid, &scred);
! if (cerror)
! SMBVDEBUG("error %d closing file %s\n",
! cerror, np->n_rpath);
out:
smb_credrele(&scred);
- smbfs_rw_exit(&np->r_lkserlock);
return (error);
}
/*
--- 175,191 ----
mutex_exit(&np->r_statelock);
/*
* This does the OTW Set
*/
! error = smbfs_smb_setsec(smi->smi_share, fid,
! selector, mp, &scred);
! smbfs_smb_tmpclose(np, fid);
out:
smb_credrele(&scred);
return (error);
}
/*