Example #1
0
        public static int GetAccessRightsForUserGroup(int uid, int gid, int[] auxGids, Nfs3FileAttributes
                                                      attr)
        {
            int mode = attr.GetMode();

            if (uid == attr.GetUid())
            {
                return(GetAccessRights(mode >> 6, attr.GetType()));
            }
            if (gid == attr.GetGid())
            {
                return(GetAccessRights(mode >> 3, attr.GetType()));
            }
            // Check for membership in auxiliary groups
            if (auxGids != null)
            {
                foreach (int auxGid in auxGids)
                {
                    if (attr.GetGid() == auxGid)
                    {
                        return(GetAccessRights(mode >> 3, attr.GetType()));
                    }
                }
            }
            return(GetAccessRights(mode, attr.GetType()));
        }
Example #2
0
        public virtual void TestGetAccessRightsForUserGroup()
        {
            Nfs3FileAttributes attr = Org.Mockito.Mockito.Mock <Nfs3FileAttributes>();

            Org.Mockito.Mockito.When(attr.GetUid()).ThenReturn(2);
            Org.Mockito.Mockito.When(attr.GetGid()).ThenReturn(3);
            Org.Mockito.Mockito.When(attr.GetMode()).ThenReturn(448);
            // 700
            Org.Mockito.Mockito.When(attr.GetType()).ThenReturn(NfsFileType.Nfsreg.ToValue());
            NUnit.Framework.Assert.AreEqual("No access should be allowed as UID does not match attribute over mode 700"
                                            , 0, Nfs3Utils.GetAccessRightsForUserGroup(3, 3, null, attr));
            Org.Mockito.Mockito.When(attr.GetUid()).ThenReturn(2);
            Org.Mockito.Mockito.When(attr.GetGid()).ThenReturn(3);
            Org.Mockito.Mockito.When(attr.GetMode()).ThenReturn(56);
            // 070
            Org.Mockito.Mockito.When(attr.GetType()).ThenReturn(NfsFileType.Nfsreg.ToValue());
            NUnit.Framework.Assert.AreEqual("No access should be allowed as GID does not match attribute over mode 070"
                                            , 0, Nfs3Utils.GetAccessRightsForUserGroup(2, 4, null, attr));
            Org.Mockito.Mockito.When(attr.GetUid()).ThenReturn(2);
            Org.Mockito.Mockito.When(attr.GetGid()).ThenReturn(3);
            Org.Mockito.Mockito.When(attr.GetMode()).ThenReturn(7);
            // 007
            Org.Mockito.Mockito.When(attr.GetType()).ThenReturn(NfsFileType.Nfsreg.ToValue());
            NUnit.Framework.Assert.AreEqual("Access should be allowed as mode is 007 and UID/GID do not match"
                                            , 61, Nfs3Utils.GetAccessRightsForUserGroup(1, 4, new int[] { 5, 6 }, attr));
            /* RWX */
            Org.Mockito.Mockito.When(attr.GetUid()).ThenReturn(2);
            Org.Mockito.Mockito.When(attr.GetGid()).ThenReturn(10);
            Org.Mockito.Mockito.When(attr.GetMode()).ThenReturn(288);
            // 440
            Org.Mockito.Mockito.When(attr.GetType()).ThenReturn(NfsFileType.Nfsreg.ToValue());
            NUnit.Framework.Assert.AreEqual("Access should be allowed as mode is 440 and Aux GID does match"
                                            , 1, Nfs3Utils.GetAccessRightsForUserGroup(3, 4, new int[] { 5, 16, 10 }, attr));
            /* R */
            Org.Mockito.Mockito.When(attr.GetUid()).ThenReturn(2);
            Org.Mockito.Mockito.When(attr.GetGid()).ThenReturn(10);
            Org.Mockito.Mockito.When(attr.GetMode()).ThenReturn(448);
            // 700
            Org.Mockito.Mockito.When(attr.GetType()).ThenReturn(NfsFileType.Nfsdir.ToValue());
            NUnit.Framework.Assert.AreEqual("Access should be allowed for dir as mode is 700 and UID does match"
                                            , 31, Nfs3Utils.GetAccessRightsForUserGroup(2, 4, new int[] { 5, 16, 10 }, attr)
                                            );
            /* Lookup */
            NUnit.Framework.Assert.AreEqual("No access should be allowed for dir as mode is 700 even though GID does match"
                                            , 0, Nfs3Utils.GetAccessRightsForUserGroup(3, 10, new int[] { 5, 16, 4 }, attr));
            NUnit.Framework.Assert.AreEqual("No access should be allowed for dir as mode is 700 even though AuxGID does match"
                                            , 0, Nfs3Utils.GetAccessRightsForUserGroup(3, 20, new int[] { 5, 10 }, attr));
            Org.Mockito.Mockito.When(attr.GetUid()).ThenReturn(2);
            Org.Mockito.Mockito.When(attr.GetGid()).ThenReturn(10);
            Org.Mockito.Mockito.When(attr.GetMode()).ThenReturn(457);
            // 711
            Org.Mockito.Mockito.When(attr.GetType()).ThenReturn(NfsFileType.Nfsdir.ToValue());
            NUnit.Framework.Assert.AreEqual("Access should be allowed for dir as mode is 711 and GID matches"
                                            , 2, Nfs3Utils.GetAccessRightsForUserGroup(3, 10, new int[] { 5, 16, 11 }, attr)
                                            );
        }
Example #3
0
        /// <exception cref="System.IO.IOException"/>
        internal virtual Nfs3FileAttributes GetFileAttr(DFSClient client, FileHandle dirHandle
                                                        , string fileName)
        {
            string             fileIdPath = Nfs3Utils.GetFileIdPath(dirHandle) + "/" + fileName;
            Nfs3FileAttributes attr       = Nfs3Utils.GetFileAttr(client, fileIdPath, iug);

            if ((attr != null) && (attr.GetType() == NfsFileType.Nfsreg.ToValue()))
            {
                OpenFileCtx openFileCtx = fileContextCache.Get(new FileHandle(attr.GetFileId()));
                if (openFileCtx != null)
                {
                    attr.SetSize(openFileCtx.GetNextOffset());
                    attr.SetUsed(openFileCtx.GetNextOffset());
                }
            }
            return(attr);
        }