summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/fs/smbsrv/smb_vops.c
diff options
context:
space:
mode:
authorjb150015 <none@none>2008-02-18 14:36:38 -0800
committerjb150015 <none@none>2008-02-18 14:36:38 -0800
commit7b59d02d2a384be9a08087b14defadd214b3c1dd (patch)
tree0f2f686988177443cf737b0f0582d9ed9deb1bf5 /usr/src/uts/common/fs/smbsrv/smb_vops.c
parent80feccabd0bc0fca1df2b60bfa50449d9a6e3e09 (diff)
downloadillumos-joyent-7b59d02d2a384be9a08087b14defadd214b3c1dd.tar.gz
6653315 Want smb interface to associate hostname with network interfaces
6657760 libsmb should look for an interposition library for local user management 6649844 smbd restarts during stress tests. 6650829 smb_enable_service() waits in vain 6616507 CIFS server code should eradicate its use of setjmp()/longjmp() 6655326 CIFS named streams are too permissive 6630437 smb_smf_create_service_pgroup() can segfault on failure 6630441 smb_smf_scf_init() can segfault on failure --HG-- rename : usr/src/lib/smbsrv/libsmbns/common/smbns_nicconfig.c => usr/src/lib/smbsrv/libsmb/common/smb_nic.c
Diffstat (limited to 'usr/src/uts/common/fs/smbsrv/smb_vops.c')
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_vops.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/usr/src/uts/common/fs/smbsrv/smb_vops.c b/usr/src/uts/common/fs/smbsrv/smb_vops.c
index a7056d5f3a..db3dd3a1c0 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_vops.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_vops.c
@@ -351,12 +351,21 @@ smb_vop_getattr(vnode_t *vp, vnode_t *unnamed_vp, smb_attr_t *ret_attr,
/*
* smb_vop_setattr()
*
- * smb_fsop_setattr()/smb_vop_setattr() should always be called from the CIFS
- * service to set attributes due to special processing for streams files.
+ * smb_fsop_setattr()/smb_vop_setattr() should always be used instead of
+ * VOP_SETATTR() when calling from the CIFS service, due to special processing
+ * for streams files.
*
- * When smb_vop_setattr() is called on a named stream file, all indicated
- * attributes except the size are set on the unnamed stream file. The size
- * (if indicated) is set on the named stream file.
+ * Streams have a size but otherwise do not have separate attributes from
+ * the (unnamed stream) file, i.e., the security and ownership of the file
+ * applies to the stream. In contrast, extended attribute files, which are
+ * used to implement streams, are independent objects with their own
+ * attributes.
+ *
+ * For compatibility with streams, we set the size on the extended attribute
+ * file and apply other attributes to the (unnamed stream) file. The one
+ * exception is that the UID and GID can be set on the stream by passing a
+ * NULL unnamed_vp, which allows callers to synchronize stream ownership
+ * with the (unnamed stream) file.
*/
int
@@ -403,7 +412,8 @@ smb_vop_setattr(vnode_t *vp, vnode_t *unnamed_vp, smb_attr_t *set_attr,
/*
* If the size of the stream needs to be set, set it on
* the stream file directly. (All other indicated attributes
- * are set on the stream's unnamed stream, above.)
+ * are set on the stream's unnamed stream, except under the
+ * exception described in the function header.)
*/
if (at_size) {