Exemple #1
0
        /// <summary>
        /// Opens the specified file.
        /// </summary>
        /// <param name="path">The full path of the file to open.</param>
        /// <param name="mode">The file mode for the created stream.</param>
        /// <param name="access">The access permissions for the created stream.</param>
        /// <returns>The new stream.</returns>
        public override SparseStream OpenFile(string path, FileMode mode, FileAccess access)
        {
            try
            {
                Nfs3AccessPermissions requested;
                if (access == FileAccess.Read)
                {
                    requested = Nfs3AccessPermissions.Read;
                }
                else if (access == FileAccess.ReadWrite)
                {
                    requested = Nfs3AccessPermissions.Read | Nfs3AccessPermissions.Modify;
                }
                else
                {
                    requested = Nfs3AccessPermissions.Modify;
                }

                if (mode == FileMode.Create || mode == FileMode.CreateNew || (mode == FileMode.OpenOrCreate && !FileExists(path)))
                {
                    Nfs3FileHandle parent = GetParentDirectory(path);

                    Nfs3SetAttributes setAttrs = new Nfs3SetAttributes();
                    setAttrs.Mode    = NfsOptions.NewFilePermissions;
                    setAttrs.SetMode = true;
                    setAttrs.Size    = 0;
                    setAttrs.SetSize = true;
                    Nfs3FileHandle handle = _client.Create(parent, Utilities.GetFileFromPath(path), mode != FileMode.Create, setAttrs);

                    return(new Nfs3FileStream(_client, handle, access));
                }
                else
                {
                    Nfs3FileHandle        handle      = GetFile(path);
                    Nfs3AccessPermissions actualPerms = _client.Access(handle, requested);

                    if (actualPerms != requested)
                    {
                        throw new UnauthorizedAccessException(string.Format(CultureInfo.InvariantCulture, "Access denied opening '{0}'. Requested permission '{1}', got '{2}'", path, requested, actualPerms));
                    }

                    Nfs3FileStream result = new Nfs3FileStream(_client, handle, access);
                    if (mode == FileMode.Append)
                    {
                        result.Seek(0, SeekOrigin.End);
                    }
                    else if (mode == FileMode.Truncate)
                    {
                        result.SetLength(0);
                    }

                    return(result);
                }
            }
            catch (Nfs3Exception ne)
            {
                throw ConvertNfsException(ne);
            }
        }
 public Nfs3AccessResult(XdrDataReader reader)
 {
     Status = (Nfs3Status)reader.ReadInt32();
     if (reader.ReadBool())
     {
         ObjectAttributes = new Nfs3FileAttributes(reader);
     }
     Access = (Nfs3AccessPermissions)reader.ReadInt32();
 }
 public Nfs3AccessResult(XdrDataReader reader)
 {
     Status = (Nfs3Status)reader.ReadInt32();
     if (reader.ReadBool())
     {
         ObjectAttributes = new Nfs3FileAttributes(reader);
     }
     Access = (Nfs3AccessPermissions)reader.ReadInt32();
 }
Exemple #4
0
        public Nfs3AccessPermissions Access(Nfs3FileHandle handle, Nfs3AccessPermissions requested)
        {
            Nfs3AccessResult result = _nfsClient.Access(handle, requested);

            if (result.ObjectAttributes != null)
            {
                _cachedAttributes[handle] = result.ObjectAttributes;
            }

            if (result.Status == Nfs3Status.Ok)
            {
                return(result.Access);
            }
            throw new Nfs3Exception(result.Status);
        }
Exemple #5
0
        public Nfs3AccessResult Access(Nfs3FileHandle handle, Nfs3AccessPermissions requested)
        {
            MemoryStream  ms     = new MemoryStream();
            XdrDataWriter writer = StartCallMessage(ms, _client.Credentials, 4);

            handle.Write(writer);
            writer.Write((int)requested);

            RpcReply reply = DoSend(ms);

            if (reply.Header.IsSuccess)
            {
                return(new Nfs3AccessResult(reply.BodyReader));
            }
            throw new RpcException(reply.Header.ReplyHeader);
        }
Exemple #6
0
        public Nfs3AccessPermissions Access(Nfs3FileHandle handle, Nfs3AccessPermissions requested)
        {
            Nfs3AccessResult result = _nfsClient.Access(handle, requested);

            if (result.ObjectAttributes != null)
            {
                _cachedAttributes[handle] = result.ObjectAttributes;
            }

            if (result.Status == Nfs3Status.Ok)
            {
                return result.Access;
            }
            else
            {
                throw new Nfs3Exception(result.Status);
            }
        }
Exemple #7
0
        public Nfs3AccessResult Access(Nfs3FileHandle handle, Nfs3AccessPermissions requested)
        {
            MemoryStream ms = new MemoryStream();
            XdrDataWriter writer = StartCallMessage(ms, _client.Credentials, 4);
            handle.Write(writer);
            writer.Write((int)requested);

            RpcReply reply = DoSend(ms);
            if (reply.Header.IsSuccess)
            {
                return new Nfs3AccessResult(reply.BodyReader);
            }
            else
            {
                throw new RpcException(reply.Header.ReplyHeader);
            }
        }