From patchwork Fri Oct 14 15:10:06 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steve French X-Patchwork-Id: 9376935 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 6EE3A607FD for ; Fri, 14 Oct 2016 15:10:51 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 55FDD2A468 for ; Fri, 14 Oct 2016 15:10:51 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 32E6C2A4A9; Fri, 14 Oct 2016 15:10:51 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.3 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0B8972A468 for ; Fri, 14 Oct 2016 15:10:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752742AbcJNPKq (ORCPT ); Fri, 14 Oct 2016 11:10:46 -0400 Received: from mail-oi0-f65.google.com ([209.85.218.65]:36608 "EHLO mail-oi0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752356AbcJNPKp (ORCPT ); Fri, 14 Oct 2016 11:10:45 -0400 Received: by mail-oi0-f65.google.com with SMTP id e12so7723253oib.3 for ; Fri, 14 Oct 2016 08:10:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=uXSrylNH1yqtjShBop3/XqtFG/8l8cO72P18lFeD2+w=; b=cDNnnaHScaKsQU4+HT4WiEOZywgpYiWQ9olebS8VNVuHFINnMLHJhZCN1sqV0VIsiL X+2LYN/KZtjFpHgC+Mt9zC5HwUww/55Zv+nQZaUYNpGOTjnKEKTQGiHyUNOxnpht44o2 gaKtKK8I5dZImAuCcK5tlGVIkI9HVEUbbAaPoKOwUBuu07zs8g2VqTFlrsaXabLAs7T3 SiNNHoYPoCukx2IYG4iSotT0H5AC8uqNRh3CzhqUS6SupHfq+C16L3C8NHcZeLWymbsE 67aNU1+1sm9MeyRF0Vp7ytfS1q4QTlqlaHFTf3nGuma/571mK0bFafhqaEWH3UfET1S2 8FMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=uXSrylNH1yqtjShBop3/XqtFG/8l8cO72P18lFeD2+w=; b=VOEXRFxkdZykB3+dfgGhiL/CzHWSm/5pK25WC+7Ios/AsmIs2nXVaCteuzv7BGwIVp k8iFCboHkVj5/33F945TLuxs92veoRjEg/TmCd4ZrOgKvkoSUUSzSkVc1n/sYQZ3H5hm qYtOM7hIbVVawhTvgQA2Sqw8lk0NT2PUO9pzskknqU0+cag7ddD1BXfpgh8rhwdLFjZ8 woLnF9N7vwtc1bsfhkZsiSxEADgpAaXMMkSeT/PF4HJWV+PFHUSX8j1PQWS7leWHaXmJ TYsnARCq8yARScmA+54M+SVHFHwnK3sGFwY5SId0BcB7NazrC5FgRzot2N1G3Kx11K5Q SKBg== X-Gm-Message-State: AA6/9Rm0WaL23z5/0oF/A7zF3Fi7q7Ri9wkZVy9vr/w5xV2LzZ+poohGLD+kT05ybz76eg== X-Received: by 10.202.117.66 with SMTP id q63mr7678849oic.185.1476457811129; Fri, 14 Oct 2016 08:10:11 -0700 (PDT) Received: from ubuntu.localdomain (cpe-68-203-16-26.austin.res.rr.com. [68.203.16.26]) by smtp.gmail.com with ESMTPSA id 77sm6227831otf.18.2016.10.14.08.10.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 14 Oct 2016 08:10:10 -0700 (PDT) From: Steve French To: linux-cifs@vger.kernel.org Cc: Steve French , Steve French Subject: [PATCH 1/2] Add new mount option to set owner uid and gid from special sids in acl Date: Fri, 14 Oct 2016 10:10:06 -0500 Message-Id: <1476457807-22055-1-git-send-email-smfrench@gmail.com> X-Mailer: git-send-email 1.9.1 Sender: linux-cifs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-cifs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP 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 Reviewed-by: Shirish Pargaonkar Reviewed-by: Pavel Shilovsky --- fs/cifs/cifs_fs_sb.h | 1 + fs/cifs/cifsfs.c | 2 ++ fs/cifs/cifsglob.h | 1 + fs/cifs/connect.c | 8 +++++++- 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/fs/cifs/cifs_fs_sb.h b/fs/cifs/cifs_fs_sb.h index 1418daa..07ed81c 100644 --- a/fs/cifs/cifs_fs_sb.h +++ b/fs/cifs/cifs_fs_sb.h @@ -49,6 +49,7 @@ #define CIFS_MOUNT_USE_PREFIX_PATH 0x1000000 /* make subpath with unaccessible * root mountable */ +#define CIFS_MOUNT_UID_FROM_ACL 0x2000000 /* try to get UID via special SID */ struct cifs_sb_info { struct rb_root tlink_tree; diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c index f963c88..15261ba 100644 --- a/fs/cifs/cifsfs.c +++ b/fs/cifs/cifsfs.c @@ -469,6 +469,8 @@ static void cifs_i_callback(struct rcu_head *head) seq_puts(s, ",posixpaths"); if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SET_UID) seq_puts(s, ",setuids"); + if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UID_FROM_ACL) + seq_puts(s, ",idsfromsid"); if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM) seq_puts(s, ",serverino"); if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD) diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h index 0c828d3..1f17f6b 100644 --- a/fs/cifs/cifsglob.h +++ b/fs/cifs/cifsglob.h @@ -478,6 +478,7 @@ struct smb_vol { bool retry:1; bool intr:1; bool setuids:1; + bool setuidfromacl:1; bool override_uid:1; bool override_gid:1; bool dynperm:1; diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index 657369d..aab5227 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c @@ -75,7 +75,7 @@ enum { Opt_noposixpaths, Opt_nounix, Opt_nocase, Opt_brl, Opt_nobrl, - Opt_forcemandatorylock, Opt_setuids, + Opt_forcemandatorylock, Opt_setuidfromacl, Opt_setuids, Opt_nosetuids, Opt_dynperm, Opt_nodynperm, Opt_nohard, Opt_nosoft, Opt_nointr, Opt_intr, @@ -147,6 +147,7 @@ enum { { Opt_forcemandatorylock, "forcemand" }, { Opt_setuids, "setuids" }, { Opt_nosetuids, "nosetuids" }, + { Opt_setuidfromacl, "idsfromsid" }, { Opt_dynperm, "dynperm" }, { Opt_nodynperm, "nodynperm" }, { Opt_nohard, "nohard" }, @@ -1376,6 +1377,9 @@ static int cifs_parse_security_flavors(char *value, case Opt_nosetuids: vol->setuids = 0; break; + case Opt_setuidfromacl: + vol->setuidfromacl = 1; + break; case Opt_dynperm: vol->dynperm = true; break; @@ -3279,6 +3283,8 @@ int cifs_setup_cifs_sb(struct smb_vol *pvolume_info, cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NO_PERM; if (pvolume_info->setuids) cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_SET_UID; + if (pvolume_info->setuidfromacl) + cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_UID_FROM_ACL; if (pvolume_info->server_ino) cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_SERVER_INUM; if (pvolume_info->remap)