Skip to content

Commit 9593265

Browse files
committed
CIFS: Add new mount option to set owner uid and gid from special sids in acl
Add "idsfromsid" mount option to indicate to cifs.ko that it should try to retrieve the uid and gid owner fields from special sids in the ACL if present. This first patch just adds the parsing for the mount option. Signed-off-by: Steve French <steve.french@primarydata.com> Reviewed-by: Shirish Pargaonkar <shirishpargaonkar@gmail.com> Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
1 parent de74025 commit 9593265

4 files changed

Lines changed: 11 additions & 1 deletion

File tree

fs/cifs/cifs_fs_sb.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
#define CIFS_MOUNT_USE_PREFIX_PATH 0x1000000 /* make subpath with unaccessible
5050
* root mountable
5151
*/
52+
#define CIFS_MOUNT_UID_FROM_ACL 0x2000000 /* try to get UID via special SID */
5253

5354
struct cifs_sb_info {
5455
struct rb_root tlink_tree;

fs/cifs/cifsfs.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -469,6 +469,8 @@ cifs_show_options(struct seq_file *s, struct dentry *root)
469469
seq_puts(s, ",posixpaths");
470470
if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SET_UID)
471471
seq_puts(s, ",setuids");
472+
if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UID_FROM_ACL)
473+
seq_puts(s, ",idsfromsid");
472474
if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM)
473475
seq_puts(s, ",serverino");
474476
if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)

fs/cifs/cifsglob.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,7 @@ struct smb_vol {
478478
bool retry:1;
479479
bool intr:1;
480480
bool setuids:1;
481+
bool setuidfromacl:1;
481482
bool override_uid:1;
482483
bool override_gid:1;
483484
bool dynperm:1;

fs/cifs/connect.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ enum {
7575
Opt_noposixpaths, Opt_nounix,
7676
Opt_nocase,
7777
Opt_brl, Opt_nobrl,
78-
Opt_forcemandatorylock, Opt_setuids,
78+
Opt_forcemandatorylock, Opt_setuidfromacl, Opt_setuids,
7979
Opt_nosetuids, Opt_dynperm, Opt_nodynperm,
8080
Opt_nohard, Opt_nosoft,
8181
Opt_nointr, Opt_intr,
@@ -147,6 +147,7 @@ static const match_table_t cifs_mount_option_tokens = {
147147
{ Opt_forcemandatorylock, "forcemand" },
148148
{ Opt_setuids, "setuids" },
149149
{ Opt_nosetuids, "nosetuids" },
150+
{ Opt_setuidfromacl, "idsfromsid" },
150151
{ Opt_dynperm, "dynperm" },
151152
{ Opt_nodynperm, "nodynperm" },
152153
{ Opt_nohard, "nohard" },
@@ -1376,6 +1377,9 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
13761377
case Opt_nosetuids:
13771378
vol->setuids = 0;
13781379
break;
1380+
case Opt_setuidfromacl:
1381+
vol->setuidfromacl = 1;
1382+
break;
13791383
case Opt_dynperm:
13801384
vol->dynperm = true;
13811385
break;
@@ -3279,6 +3283,8 @@ int cifs_setup_cifs_sb(struct smb_vol *pvolume_info,
32793283
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NO_PERM;
32803284
if (pvolume_info->setuids)
32813285
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_SET_UID;
3286+
if (pvolume_info->setuidfromacl)
3287+
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_UID_FROM_ACL;
32823288
if (pvolume_info->server_ino)
32833289
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_SERVER_INUM;
32843290
if (pvolume_info->remap)

0 commit comments

Comments
 (0)