* [PATCH 2/2] cifs: Use smb 2 - 3 and cifsacl mount options setacl function
@ 2017-06-29 3:37 shirishpargaonkar-Re5JQEeQqe8AvxtiuMwx3w
[not found] ` <1498707452-8745-1-git-send-email-shirishpargaonkar-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
0 siblings, 1 reply; 3+ messages in thread
From: shirishpargaonkar-Re5JQEeQqe8AvxtiuMwx3w @ 2017-06-29 3:37 UTC (permalink / raw)
To: smfrench-Re5JQEeQqe8AvxtiuMwx3w
Cc: linux-cifs-u79uwXL29TY76Z2rM5mHXA, Shirish Pargaonkar
From: Shirish Pargaonkar <shirishpargaonkar-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Added set acl function. Very similar to set cifs acl function for smb1.
Signed-off-by: Shirish Pargaonkar <shirishpargaonkar-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
---
fs/cifs/smb2ops.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 61 insertions(+), 4 deletions(-)
diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
index 6b1ef79..490737c 100644
--- a/fs/cifs/smb2ops.c
+++ b/fs/cifs/smb2ops.c
@@ -1369,6 +1369,63 @@ static bool smb2_set_sparse(const unsigned int xid, struct cifs_tcon *tcon,
return pntsd;
}
+#ifdef CONFIG_CIFS_ACL
+int
+set_smb2_acl(struct cifs_ntsd *pnntsd, __u32 acllen,
+ struct inode *inode, const char *path, int aclflag)
+{
+ u8 oplock = SMB2_OPLOCK_LEVEL_NONE;
+ unsigned int xid;
+ int rc, access_flags, create_options = 0;
+ struct cifs_tcon *tcon;
+ struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
+ struct tcon_link *tlink = cifs_sb_tlink(cifs_sb);
+ struct cifs_fid fid;
+ struct cifs_open_parms oparms;
+ __le16 *utf16_path;
+
+ cifs_dbg(FYI, "set smb3 acl for path %s\n", path);
+ if (IS_ERR(tlink))
+ return PTR_ERR(tlink);
+
+ tcon = tlink_tcon(tlink);
+ xid = get_xid();
+
+ if (backup_cred(cifs_sb))
+ oparms.create_options |= CREATE_OPEN_BACKUP_INTENT;
+
+ if (aclflag == CIFS_ACL_OWNER || aclflag == CIFS_ACL_GROUP)
+ access_flags = WRITE_OWNER;
+ else
+ access_flags = WRITE_DAC;
+
+ utf16_path = cifs_convert_path_to_utf16(path, cifs_sb);
+ if (!utf16_path)
+ return -ENOMEM;
+
+ oparms.tcon = tcon;
+ oparms.desired_access = access_flags;
+ oparms.create_options = create_options;
+ oparms.disposition = FILE_OPEN;
+ oparms.path = path;
+ oparms.fid = &fid;
+ oparms.reconnect = false;
+
+ rc = SMB2_open(xid, &oparms, utf16_path, &oplock, NULL, NULL);
+ kfree(utf16_path);
+ if (!rc) {
+ rc = SMB2_set_acl(xid, tlink_tcon(tlink), fid.persistent_fid,
+ fid.volatile_fid, pnntsd, acllen, aclflag);
+ SMB2_close(xid, tcon, fid.persistent_fid, fid.volatile_fid);
+ }
+
+ cifs_put_tlink(tlink);
+ free_xid(xid);
+
+ return rc;
+}
+#endif /* CIFS_ACL */
+
/* Retrieve an ACL from the server */
static struct cifs_ntsd *
get_smb2_acl(struct cifs_sb_info *cifs_sb,
@@ -2495,7 +2552,7 @@ struct smb_version_operations smb20_operations = {
#ifdef CONFIG_CIFS_ACL
.get_acl = get_smb2_acl,
.get_acl_by_fid = get_smb2_acl_by_fid,
-/* .set_acl = set_smb3_acl, */
+ .set_acl = set_smb2_acl,
#endif /* CIFS_ACL */
};
@@ -2584,7 +2641,7 @@ struct smb_version_operations smb21_operations = {
#ifdef CONFIG_CIFS_ACL
.get_acl = get_smb2_acl,
.get_acl_by_fid = get_smb2_acl_by_fid,
-/* .set_acl = set_smb3_acl, */
+ .set_acl = set_smb2_acl,
#endif /* CIFS_ACL */
};
@@ -2683,7 +2740,7 @@ struct smb_version_operations smb30_operations = {
#ifdef CONFIG_CIFS_ACL
.get_acl = get_smb2_acl,
.get_acl_by_fid = get_smb2_acl_by_fid,
-/* .set_acl = set_smb3_acl, */
+ .set_acl = set_smb2_acl,
#endif /* CIFS_ACL */
};
@@ -2783,7 +2840,7 @@ struct smb_version_operations smb311_operations = {
#ifdef CONFIG_CIFS_ACL
.get_acl = get_smb2_acl,
.get_acl_by_fid = get_smb2_acl_by_fid,
-/* .set_acl = set_smb3_acl, */
+ .set_acl = set_smb2_acl,
#endif /* CIFS_ACL */
};
#endif /* CIFS_SMB311 */
--
1.9.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* RE: [PATCH 2/2] cifs: Use smb 2 - 3 and cifsacl mount options setacl function
[not found] ` <1498707452-8745-1-git-send-email-shirishpargaonkar-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
@ 2017-07-08 16:47 ` Pavel Shilovskiy
2017-07-08 22:25 ` Steve French
1 sibling, 0 replies; 3+ messages in thread
From: Pavel Shilovskiy @ 2017-07-08 16:47 UTC (permalink / raw)
To: shirishpargaonkar-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
smfrench-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
Cc: linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
2017-06-28 20:37 GMT-07:00 <shirishpargaonkar-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>:
> From: Shirish Pargaonkar <shirishpargaonkar-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
>
> Added set acl function. Very similar to set cifs acl function for smb1.
>
> Signed-off-by: Shirish Pargaonkar <shirishpargaonkar-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
>
> ---
> fs/cifs/smb2ops.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++----
> 1 file changed, 61 insertions(+), 4 deletions(-)
>
> diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
> index 6b1ef79..490737c 100644
> --- a/fs/cifs/smb2ops.c
> +++ b/fs/cifs/smb2ops.c
> @@ -1369,6 +1369,63 @@ static bool smb2_set_sparse(const unsigned int xid, struct cifs_tcon *tcon,
> return pntsd;
> }
>
> +#ifdef CONFIG_CIFS_ACL
> +int
> +set_smb2_acl(struct cifs_ntsd *pnntsd, __u32 acllen,
> + struct inode *inode, const char *path, int aclflag)
> +{
> + u8 oplock = SMB2_OPLOCK_LEVEL_NONE;
> + unsigned int xid;
> + int rc, access_flags, create_options = 0;
> + struct cifs_tcon *tcon;
> + struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
> + struct tcon_link *tlink = cifs_sb_tlink(cifs_sb);
> + struct cifs_fid fid;
> + struct cifs_open_parms oparms;
> + __le16 *utf16_path;
> +
> + cifs_dbg(FYI, "set smb3 acl for path %s\n", path);
> + if (IS_ERR(tlink))
> + return PTR_ERR(tlink);
> +
> + tcon = tlink_tcon(tlink);
> + xid = get_xid();
> +
> + if (backup_cred(cifs_sb))
> + oparms.create_options |= CREATE_OPEN_BACKUP_INTENT;
The above should be fixed to oparms.create_options = CREATE_OPEN_BACKUP_INTENT for the backup cred case and initialized to 0 otherwise.
> +
> + if (aclflag == CIFS_ACL_OWNER || aclflag == CIFS_ACL_GROUP)
> + access_flags = WRITE_OWNER;
> + else
> + access_flags = WRITE_DAC;
> +
> + utf16_path = cifs_convert_path_to_utf16(path, cifs_sb);
> + if (!utf16_path)
> + return -ENOMEM;
> +
> + oparms.tcon = tcon;
> + oparms.desired_access = access_flags;
> + oparms.create_options = create_options;
> + oparms.disposition = FILE_OPEN;
> + oparms.path = path;
> + oparms.fid = &fid;
> + oparms.reconnect = false;
> +
> + rc = SMB2_open(xid, &oparms, utf16_path, &oplock, NULL, NULL);
> + kfree(utf16_path);
> + if (!rc) {
> + rc = SMB2_set_acl(xid, tlink_tcon(tlink), fid.persistent_fid,
> + fid.volatile_fid, pnntsd, acllen, aclflag);
> + SMB2_close(xid, tcon, fid.persistent_fid, fid.volatile_fid);
> + }
> +
> + cifs_put_tlink(tlink);
> + free_xid(xid);
> +
> + return rc;
> +}
> +#endif /* CIFS_ACL */
> +
> /* Retrieve an ACL from the server */
> static struct cifs_ntsd *
> get_smb2_acl(struct cifs_sb_info *cifs_sb,
> @@ -2495,7 +2552,7 @@ struct smb_version_operations smb20_operations = {
> #ifdef CONFIG_CIFS_ACL
> .get_acl = get_smb2_acl,
> .get_acl_by_fid = get_smb2_acl_by_fid,
> -/* .set_acl = set_smb3_acl, */
> + .set_acl = set_smb2_acl,
> #endif /* CIFS_ACL */
> };
>
> @@ -2584,7 +2641,7 @@ struct smb_version_operations smb21_operations = {
> #ifdef CONFIG_CIFS_ACL
> .get_acl = get_smb2_acl,
> .get_acl_by_fid = get_smb2_acl_by_fid,
> -/* .set_acl = set_smb3_acl, */
> + .set_acl = set_smb2_acl,
> #endif /* CIFS_ACL */
> };
>
> @@ -2683,7 +2740,7 @@ struct smb_version_operations smb30_operations = {
> #ifdef CONFIG_CIFS_ACL
> .get_acl = get_smb2_acl,
> .get_acl_by_fid = get_smb2_acl_by_fid,
> -/* .set_acl = set_smb3_acl, */
> + .set_acl = set_smb2_acl,
> #endif /* CIFS_ACL */
> };
>
> @@ -2783,7 +2840,7 @@ struct smb_version_operations smb311_operations = {
> #ifdef CONFIG_CIFS_ACL
> .get_acl = get_smb2_acl,
> .get_acl_by_fid = get_smb2_acl_by_fid,
> -/* .set_acl = set_smb3_acl, */
> + .set_acl = set_smb2_acl,
> #endif /* CIFS_ACL */
> };
> #endif /* CIFS_SMB311 */
> --
> 1.9.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
Other than the comment above, the patch looks correct.
--
Best regards,
Pavel Shilovsky
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 2/2] cifs: Use smb 2 - 3 and cifsacl mount options setacl function
[not found] ` <1498707452-8745-1-git-send-email-shirishpargaonkar-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2017-07-08 16:47 ` Pavel Shilovskiy
@ 2017-07-08 22:25 ` Steve French
1 sibling, 0 replies; 3+ messages in thread
From: Steve French @ 2017-07-08 22:25 UTC (permalink / raw)
To: Shirish Pargaonkar; +Cc: linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
merged into cifs-2.6.git for-next
Note I had to fixup a compile warning ("static" was missing on
set_smb2_acl function)
On Wed, Jun 28, 2017 at 10:37 PM, <shirishpargaonkar-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
> From: Shirish Pargaonkar <shirishpargaonkar-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
>
> Added set acl function. Very similar to set cifs acl function for smb1.
>
> Signed-off-by: Shirish Pargaonkar <shirishpargaonkar-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
>
> ---
> fs/cifs/smb2ops.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++----
> 1 file changed, 61 insertions(+), 4 deletions(-)
>
> diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
> index 6b1ef79..490737c 100644
> --- a/fs/cifs/smb2ops.c
> +++ b/fs/cifs/smb2ops.c
> @@ -1369,6 +1369,63 @@ static bool smb2_set_sparse(const unsigned int xid, struct cifs_tcon *tcon,
> return pntsd;
> }
>
> +#ifdef CONFIG_CIFS_ACL
> +int
> +set_smb2_acl(struct cifs_ntsd *pnntsd, __u32 acllen,
> + struct inode *inode, const char *path, int aclflag)
> +{
> + u8 oplock = SMB2_OPLOCK_LEVEL_NONE;
> + unsigned int xid;
> + int rc, access_flags, create_options = 0;
> + struct cifs_tcon *tcon;
> + struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
> + struct tcon_link *tlink = cifs_sb_tlink(cifs_sb);
> + struct cifs_fid fid;
> + struct cifs_open_parms oparms;
> + __le16 *utf16_path;
> +
> + cifs_dbg(FYI, "set smb3 acl for path %s\n", path);
> + if (IS_ERR(tlink))
> + return PTR_ERR(tlink);
> +
> + tcon = tlink_tcon(tlink);
> + xid = get_xid();
> +
> + if (backup_cred(cifs_sb))
> + oparms.create_options |= CREATE_OPEN_BACKUP_INTENT;
> +
> + if (aclflag == CIFS_ACL_OWNER || aclflag == CIFS_ACL_GROUP)
> + access_flags = WRITE_OWNER;
> + else
> + access_flags = WRITE_DAC;
> +
> + utf16_path = cifs_convert_path_to_utf16(path, cifs_sb);
> + if (!utf16_path)
> + return -ENOMEM;
> +
> + oparms.tcon = tcon;
> + oparms.desired_access = access_flags;
> + oparms.create_options = create_options;
> + oparms.disposition = FILE_OPEN;
> + oparms.path = path;
> + oparms.fid = &fid;
> + oparms.reconnect = false;
> +
> + rc = SMB2_open(xid, &oparms, utf16_path, &oplock, NULL, NULL);
> + kfree(utf16_path);
> + if (!rc) {
> + rc = SMB2_set_acl(xid, tlink_tcon(tlink), fid.persistent_fid,
> + fid.volatile_fid, pnntsd, acllen, aclflag);
> + SMB2_close(xid, tcon, fid.persistent_fid, fid.volatile_fid);
> + }
> +
> + cifs_put_tlink(tlink);
> + free_xid(xid);
> +
> + return rc;
> +}
> +#endif /* CIFS_ACL */
> +
> /* Retrieve an ACL from the server */
> static struct cifs_ntsd *
> get_smb2_acl(struct cifs_sb_info *cifs_sb,
> @@ -2495,7 +2552,7 @@ struct smb_version_operations smb20_operations = {
> #ifdef CONFIG_CIFS_ACL
> .get_acl = get_smb2_acl,
> .get_acl_by_fid = get_smb2_acl_by_fid,
> -/* .set_acl = set_smb3_acl, */
> + .set_acl = set_smb2_acl,
> #endif /* CIFS_ACL */
> };
>
> @@ -2584,7 +2641,7 @@ struct smb_version_operations smb21_operations = {
> #ifdef CONFIG_CIFS_ACL
> .get_acl = get_smb2_acl,
> .get_acl_by_fid = get_smb2_acl_by_fid,
> -/* .set_acl = set_smb3_acl, */
> + .set_acl = set_smb2_acl,
> #endif /* CIFS_ACL */
> };
>
> @@ -2683,7 +2740,7 @@ struct smb_version_operations smb30_operations = {
> #ifdef CONFIG_CIFS_ACL
> .get_acl = get_smb2_acl,
> .get_acl_by_fid = get_smb2_acl_by_fid,
> -/* .set_acl = set_smb3_acl, */
> + .set_acl = set_smb2_acl,
> #endif /* CIFS_ACL */
> };
>
> @@ -2783,7 +2840,7 @@ struct smb_version_operations smb311_operations = {
> #ifdef CONFIG_CIFS_ACL
> .get_acl = get_smb2_acl,
> .get_acl_by_fid = get_smb2_acl_by_fid,
> -/* .set_acl = set_smb3_acl, */
> + .set_acl = set_smb2_acl,
> #endif /* CIFS_ACL */
> };
> #endif /* CIFS_SMB311 */
> --
> 1.9.1
>
--
Thanks,
Steve
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2017-07-08 22:25 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-06-29 3:37 [PATCH 2/2] cifs: Use smb 2 - 3 and cifsacl mount options setacl function shirishpargaonkar-Re5JQEeQqe8AvxtiuMwx3w
[not found] ` <1498707452-8745-1-git-send-email-shirishpargaonkar-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2017-07-08 16:47 ` Pavel Shilovskiy
2017-07-08 22:25 ` Steve French
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox