ReadAuthentication() public method

public ReadAuthentication ( ) : void
return void
Ejemplo n.º 1
0
        private void Mount(NfsPacket sourcePacket, IPEndPoint receivedFrom)
        {
            NfsReply replyCode = NfsReply.OK;
            NfsPacket packet = new NfsPacket(128);

            packet.AddReplyHeader(sourcePacket.XID);

            // skip past the authentication records
            sourcePacket.ReadAuthentication();
            sourcePacket.ReadAuthentication();

            // next should be a dirpath, which is a string.  Replace unix style path with local style path
            String path = sourcePacket.GetString();

            if (path == null) {
                replyCode = NfsReply.ERR_STALE;
            }
            else {
                String original = path.Clone() as String;

                path = NfsPath.ToWin(path);

                //Console.WriteLine("MountHandler.Mount : requested: " + original + ", actual: " + path);

                //if (!Directory.Exists(path)) {
                //	replyCode = NfsReply.ERR_EXIST;
                //}
            }

            // Try to validate this mount, if there is an error make an error packet, otherwise send back the handle.

            if (replyCode != NfsReply.OK) {
                packet.SetUInt((uint)replyCode);

            }
            else if (false){ //exports.Matches(packet.Source(), path) == false) {
                // No permission for this mount in the exports file
                //result.AddLong(NFS.NFSERR_PERM);
                //Console.Error.WriteLine("!!! Mount request for " + path + "from " + packet.Source() + " denied.\n");
            }
            else {
                // put together a file handle
                uint handle = HandleManager.Current.GetHandle(path);
                var fileHandle = new FileSystem.FileHandle();

                fileHandle.Set(handle, (uint)handle, 0);

                packet.SetUInt((uint)replyCode);

                fileHandle.Emit(ref packet);
            }

            if (replyCode == NfsReply.OK) {
                MountManager.Current.Add(sourcePacket.RemoteHost, path);
            }

            Send(packet, receivedFrom);
        }
Ejemplo n.º 2
0
        private void Set(NfsPacket sourcePacket, IPEndPoint receivedFrom)
        {
            // skip past the authentication records
            sourcePacket.ReadAuthentication();
            sourcePacket.ReadAuthentication();

            // Collect the arguments to the procedure
            uint programId = sourcePacket.GetUInt();
            uint version   = sourcePacket.GetUInt();
            uint protocol  = sourcePacket.GetUInt();
            uint port      = sourcePacket.GetUInt();

            NfsPacket packet = new NfsPacket(128);

            packet.AddReplyHeader(sourcePacket.XID);
            packet.SetUInt(PORTMAP_TRUE);

            //	portmapMapping toadd = new portmapMapping(prog, vers, prot);
            //	toadd.SetPort(port);

            //	XDRPacket result = new XDRPacket(128);
            //	result.AddReplyHeader(xid);

            //	// look for the chain of versions for this program
            //	long? pl = new long?(prog);
            //	portmapMapping chain = (portmapMapping)mappings[pl];
            //	if (chain == null) {
            //		mappings.Add(pl, toadd);
            //		result.AddLong(Portmap.PM_TRUE);
            //	}
            //	else {
            //		// See if this version is already registered in the chain
            //		while (chain != null) {
            //			if (chain.Version() == vers && chain.Protocol() == prot) {
            //				result.AddLong(Portmap.PM_FALSE);
            //				break;
            //			}
            //			else if (chain.Next() == null) {
            //				chain.SetNext(toadd);
            //				result.AddLong(Portmap.PM_TRUE);
            //				break;
            //			}
            //			chain = chain.Next();
            //		}
            //	}

            Send(packet, receivedFrom);
        }
Ejemplo n.º 3
0
        private void GetPort(NfsPacket sourcePacket, IPEndPoint receivedFrom)
        {
            // skip past the authentication records
            sourcePacket.ReadAuthentication();
            sourcePacket.ReadAuthentication();

            // Collect the arguments to the procedure
            uint programId = sourcePacket.GetUInt();
            uint version   = sourcePacket.GetUInt();
            uint protocol  = sourcePacket.GetUInt();

            // Put together an XDR reply packet
            NfsPacket packet = new NfsPacket(128);

            packet.SetUInt(sourcePacket.XID);
            packet.SetUInt((uint)RpcSignalType.Reply);
            packet.SetUInt((uint)RpcMessageResult.Accepted);

            packet.AddNullAuthentication();

            if (!NfsHandlerManager.IsProgramRegistered((int)programId))
            {
                packet.SetUInt((uint)RpcProcedure.ProgramUnavailable);
            }
            else
            {
                // TODO: add version checking. we're only doing v2 right now.
                // version mismatch gets the ProgMismatch value.
                //			result.AddLong(RPCConsts.RPCProgMismatch);
                //			result.AddLong(versmin);
                //			result.AddLong(versmax);
                int port = NfsHandlerManager.GetPort((int)programId);

                if (port == 0)
                {
                    packet.SetUInt((uint)RpcProcedure.ProgramMismatch);
                }
                else
                {
                    packet.SetUInt((uint)RpcProcedure.Success);
                    packet.SetUInt((uint)port);
                }
            }

            Send(packet, receivedFrom);
        }
Ejemplo n.º 4
0
        private void Unmount(NfsPacket sourcePacket, IPEndPoint receivedFrom)
        {
            // skip past the authentication records
            sourcePacket.ReadAuthentication();
            sourcePacket.ReadAuthentication();

            String    path   = sourcePacket.GetString();
            NfsPacket packet = new NfsPacket(128);

            path = NfsPath.ToWin(path);

            HandleManager.Current.GetHandle(path);

            packet.AddReplyHeader(sourcePacket.XID);
            packet.SetUInt((uint)NfsReply.OK);

            //Console.WriteLine("MountHandler.Unmount : requested: " + path);

            MountManager.Current.Remove(sourcePacket.RemoteHost);

            Send(packet, receivedFrom);
        }
Ejemplo n.º 5
0
        private void GetPort(NfsPacket sourcePacket, IPEndPoint receivedFrom)
        {
            // skip past the authentication records
            sourcePacket.ReadAuthentication();
            sourcePacket.ReadAuthentication();

            // Collect the arguments to the procedure
            uint programId = sourcePacket.GetUInt();
            uint version = sourcePacket.GetUInt();
            uint protocol = sourcePacket.GetUInt();

            // Put together an XDR reply packet
            NfsPacket packet = new NfsPacket(128);

            packet.SetUInt(sourcePacket.XID);
            packet.SetUInt((uint)RpcSignalType.Reply);
            packet.SetUInt((uint)RpcMessageResult.Accepted);

            packet.AddNullAuthentication();

            if (!NfsHandlerManager.IsProgramRegistered((int)programId)) {
                packet.SetUInt((uint)RpcProcedure.ProgramUnavailable);
            }
            else {
                // TODO: add version checking. we're only doing v2 right now.
                // version mismatch gets the ProgMismatch value.
                //			result.AddLong(RPCConsts.RPCProgMismatch);
                //			result.AddLong(versmin);
                //			result.AddLong(versmax);
                int port = NfsHandlerManager.GetPort((int)programId);

                if (port == 0) {
                    packet.SetUInt((uint)RpcProcedure.ProgramMismatch);
                }
                else {
                    packet.SetUInt((uint)RpcProcedure.Success);
                    packet.SetUInt((uint)port);
                }
            }

            Send(packet, receivedFrom);
        }
Ejemplo n.º 6
0
        private void Mount(NfsPacket sourcePacket, IPEndPoint receivedFrom)
        {
            NfsReply  replyCode = NfsReply.OK;
            NfsPacket packet    = new NfsPacket(128);

            packet.AddReplyHeader(sourcePacket.XID);

            // skip past the authentication records
            sourcePacket.ReadAuthentication();
            sourcePacket.ReadAuthentication();

            // next should be a dirpath, which is a string.  Replace unix style path with local style path
            String path = sourcePacket.GetString();

            if (path == null)
            {
                replyCode = NfsReply.ERR_STALE;
            }
            else
            {
                String original = path.Clone() as String;

                path = NfsPath.ToWin(path);

                //Console.WriteLine("MountHandler.Mount : requested: " + original + ", actual: " + path);

                //if (!Directory.Exists(path)) {
                //	replyCode = NfsReply.ERR_EXIST;
                //}
            }

            // Try to validate this mount, if there is an error make an error packet, otherwise send back the handle.

            if (replyCode != NfsReply.OK)
            {
                packet.SetUInt((uint)replyCode);
            }
            else if (false)              //exports.Matches(packet.Source(), path) == false) {
            // No permission for this mount in the exports file
            //result.AddLong(NFS.NFSERR_PERM);
            //Console.Error.WriteLine("!!! Mount request for " + path + "from " + packet.Source() + " denied.\n");
            {
            }
            else
            {
                // put together a file handle
                uint handle     = HandleManager.Current.GetHandle(path);
                var  fileHandle = new FileSystem.FileHandle();

                fileHandle.Set(handle, (uint)handle, 0);

                packet.SetUInt((uint)replyCode);

                fileHandle.Emit(ref packet);
            }

            if (replyCode == NfsReply.OK)
            {
                MountManager.Current.Add(sourcePacket.RemoteHost, path);
            }

            Send(packet, receivedFrom);
        }
Ejemplo n.º 7
0
        protected override void Process(NfsPacket packet, IPEndPoint receivedFrom)
        {
            //Console.WriteLine("NfsHandler.Process : recievedFrom: " + receivedFrom.ToString());
            //Console.WriteLine("NfsHandler.Process: Procedure -> " + packet.ProcedureID + ":" + ((NfsProcedure)packet.ProcedureID).ToString());

            // get rid of authentication recorde in packet, we don't use them
            packet.ReadAuthentication();
            packet.ReadAuthentication();

            if (packet.ProcedureID == (int)NfsProcedure.NULL)
            {
                base.SendNull(packet, receivedFrom);
                return;
            }

            NfsPacket result;
            uint      xid = packet.XID;

            try {
                switch (packet.ProcedureID)
                {
                case (int)NfsProcedure.GETATTR:
                    result = _directory.GetAttr(packet);
                    break;

                case (int)NfsProcedure.SETATTR:
                    result = _directory.SetAttr(xid, packet);
                    break;

                case (int)NfsProcedure.LOOKUP:
                    result = _directory.Lookup(packet);
                    break;

                case (int)NfsProcedure.READ:
                    result = _io.Read(packet);
                    break;

                case (int)NfsProcedure.WRITE:
                    result = _io.Write(xid, packet);
                    break;

                case (int)NfsProcedure.CREATE:
                    result = _directory.Create(xid, packet);
                    break;

                case (int)NfsProcedure.REMOVE:
                    result = _directory.Remove(xid, packet);
                    break;

                case (int)NfsProcedure.RENAME:
                    result = _directory.Rename(xid, packet);
                    break;

                case (int)NfsProcedure.MKDIR:
                    result = _directory.Mkdir(xid, packet);
                    break;

                case (int)NfsProcedure.RMDIR:
                    result = _directory.Rmdir(xid, packet);
                    break;

                case (int)NfsProcedure.READDIR:
                    result = _directory.ReadDirectory(packet);
                    break;

                case (int)NfsProcedure.STATFS:
                    result = _directory.StatFS(packet);
                    break;

                default:
                    Console.Error.WriteLine("Unsupported NFS procedure called (" + packet.ProcedureID + ") from " + receivedFrom.ToString() + "\n");
                    throw new NFSException(packet.XID, (uint)NfsReply.ERR_IO);
                }
            }
            catch (NFSException e) {
                // make a reply packet that includes the error
                result = new NfsPacket(64);
                result.AddReplyHeader(packet.XID);
                result.SetUInt(e.ErrorNumber);
            }

            Send(result, receivedFrom);
        }
Ejemplo n.º 8
0
        private void Set(NfsPacket sourcePacket, IPEndPoint receivedFrom)
        {
            // skip past the authentication records
            sourcePacket.ReadAuthentication();
            sourcePacket.ReadAuthentication();

            // Collect the arguments to the procedure
            uint programId = sourcePacket.GetUInt();
            uint version = sourcePacket.GetUInt();
            uint protocol = sourcePacket.GetUInt();
            uint port = sourcePacket.GetUInt();

            NfsPacket packet = new NfsPacket(128);

            packet.AddReplyHeader(sourcePacket.XID);
            packet.SetUInt(PORTMAP_TRUE);

            //	portmapMapping toadd = new portmapMapping(prog, vers, prot);
            //	toadd.SetPort(port);

            //	XDRPacket result = new XDRPacket(128);
            //	result.AddReplyHeader(xid);

            //	// look for the chain of versions for this program
            //	long? pl = new long?(prog);
            //	portmapMapping chain = (portmapMapping)mappings[pl];
            //	if (chain == null) {
            //		mappings.Add(pl, toadd);
            //		result.AddLong(Portmap.PM_TRUE);
            //	}
            //	else {
            //		// See if this version is already registered in the chain
            //		while (chain != null) {
            //			if (chain.Version() == vers && chain.Protocol() == prot) {
            //				result.AddLong(Portmap.PM_FALSE);
            //				break;
            //			}
            //			else if (chain.Next() == null) {
            //				chain.SetNext(toadd);
            //				result.AddLong(Portmap.PM_TRUE);
            //				break;
            //			}
            //			chain = chain.Next();
            //		}
            //	}

            Send(packet, receivedFrom);
        }
Ejemplo n.º 9
0
        protected override void Process(NfsPacket packet, IPEndPoint receivedFrom)
        {
            //Console.WriteLine("NfsHandler.Process : recievedFrom: " + receivedFrom.ToString());
            //Console.WriteLine("NfsHandler.Process: Procedure -> " + packet.ProcedureID + ":" + ((NfsProcedure)packet.ProcedureID).ToString());

            // get rid of authentication recorde in packet, we don't use them
            packet.ReadAuthentication();
            packet.ReadAuthentication();

            if (packet.ProcedureID == (int)NfsProcedure.NULL) {
                base.SendNull(packet, receivedFrom);
                return;
            }

            NfsPacket result;
            uint xid = packet.XID;

            try {
                switch (packet.ProcedureID) {
                    case (int)NfsProcedure.GETATTR:
                        result = _directory.GetAttr(packet);
                        break;
                    case (int)NfsProcedure.SETATTR:
                        result = _directory.SetAttr(xid, packet);
                        break;
                    case (int)NfsProcedure.LOOKUP:
                        result = _directory.Lookup(packet);
                        break;
                    case (int)NfsProcedure.READ:
                        result = _io.Read(packet);
                        break;
                    case (int)NfsProcedure.WRITE:
                        result = _io.Write(xid, packet);
                        break;
                    case (int)NfsProcedure.CREATE:
                        result = _directory.Create(xid, packet);
                        break;
                    case (int)NfsProcedure.REMOVE:
                        result = _directory.Remove(xid, packet);
                        break;
                    case (int)NfsProcedure.RENAME:
                        result = _directory.Rename(xid, packet);
                        break;
                    case (int)NfsProcedure.MKDIR:
                        result = _directory.Mkdir(xid, packet);
                        break;
                    case (int)NfsProcedure.RMDIR:
                        result = _directory.Rmdir(xid, packet);
                        break;
                    case (int)NfsProcedure.READDIR:
                        result = _directory.ReadDirectory(packet);
                        break;
                    case (int)NfsProcedure.STATFS:
                        result = _directory.StatFS(packet);
                        break;
                    default:
                        Console.Error.WriteLine("Unsupported NFS procedure called (" + packet.ProcedureID + ") from " + receivedFrom.ToString() + "\n");
                        throw new NFSException(packet.XID, (uint)NfsReply.ERR_IO);
                }
            }
            catch (NFSException e) {
                // make a reply packet that includes the error
                result = new NfsPacket(64);
                result.AddReplyHeader(packet.XID);
                result.SetUInt(e.ErrorNumber);
            }

            Send(result, receivedFrom);
        }
Ejemplo n.º 10
0
        private void Unmount(NfsPacket sourcePacket, IPEndPoint receivedFrom)
        {
            // skip past the authentication records
            sourcePacket.ReadAuthentication();
            sourcePacket.ReadAuthentication();

            String path = sourcePacket.GetString();
            NfsPacket packet = new NfsPacket(128);

            path = NfsPath.ToWin(path);

            HandleManager.Current.GetHandle(path);

            packet.AddReplyHeader(sourcePacket.XID);
            packet.SetUInt((uint)NfsReply.OK);

            //Console.WriteLine("MountHandler.Unmount : requested: " + path);

            MountManager.Current.Remove(sourcePacket.RemoteHost);

            Send(packet, receivedFrom);
        }