return rc;
}
+
+static void ksmbd_acls_fattr(struct smb_fattr *fattr, struct inode *inode)
+{
+ fattr->cf_uid = inode->i_uid;
+ fattr->cf_gid = inode->i_gid;
+ fattr->cf_mode = inode->i_mode;
+ fattr->cf_dacls = NULL;
+
+ fattr->cf_acls = ksmbd_vfs_get_acl(inode, ACL_TYPE_ACCESS);
+ if (S_ISDIR(inode->i_mode))
+ fattr->cf_dacls = ksmbd_vfs_get_acl(inode, ACL_TYPE_DEFAULT);
+}
+
/**
* smb2_open() - handler for smb file open request
* @work: smb work containing request buffer
KSMBD_SHARE_FLAG_ACL_XATTR)) {
struct smb_fattr fattr;
struct smb_ntsd *pntsd;
- int pntsd_size, ace_num;
-
- fattr.cf_uid = inode->i_uid;
- fattr.cf_gid = inode->i_gid;
- fattr.cf_mode = inode->i_mode;
- fattr.cf_dacls = NULL;
- ace_num = 0;
+ int pntsd_size, ace_num = 0;
- fattr.cf_acls = ksmbd_vfs_get_acl(inode, ACL_TYPE_ACCESS);
+ ksmbd_acls_fattr(&fattr, inode);
if (fattr.cf_acls)
ace_num = fattr.cf_acls->a_count;
- if (S_ISDIR(inode->i_mode)) {
- fattr.cf_dacls =
- ksmbd_vfs_get_acl(inode, ACL_TYPE_DEFAULT);
- if (fattr.cf_dacls)
- ace_num += fattr.cf_dacls->a_count;
- }
+ if (fattr.cf_dacls)
+ ace_num += fattr.cf_dacls->a_count;
pntsd = kmalloc(sizeof(struct smb_ntsd) +
sizeof(struct smb_sid) * 3 +
rc = ksmbd_vfs_set_sd_xattr(conn,
path.dentry, pntsd, pntsd_size);
+ kfree(pntsd);
if (rc)
ksmbd_err("failed to store ntacl in xattr : %d\n",
rc);
return -ENOENT;
inode = FP_INODE(fp);
- fattr.cf_uid = inode->i_uid;
- fattr.cf_gid = inode->i_gid;
- fattr.cf_mode = inode->i_mode;
- fattr.cf_dacls = NULL;
-
- fattr.cf_acls = ksmbd_vfs_get_acl(inode, ACL_TYPE_ACCESS);
- if (S_ISDIR(inode->i_mode))
- fattr.cf_dacls = ksmbd_vfs_get_acl(inode, ACL_TYPE_DEFAULT);
+ ksmbd_acls_fattr(&fattr, inode);
if (test_share_config_flag(work->tcon->share_conf,
KSMBD_SHARE_FLAG_ACL_XATTR))