Esempio n. 1
0
 public void dispatchOncRpcCall(OncRpcCallInformation call, int program, int version, int procedure)
 {
     if (version == 4)
     {
         switch (procedure)
         {
             case 0:
                 {
                     call.retrieveCall(XdrVoid.XDR_VOID);
                     NFSPROC4_NULL_4();
                     call.reply(XdrVoid.XDR_VOID);
                     break;
                 }
             case 1:
                 {
                     COMPOUND4args args_ = new COMPOUND4args();
                     call.retrieveCall(args_);
                     COMPOUND4res result_ = NFSPROC4_COMPOUND_4(args_);
                     call.reply(result_);
                     break;
                 }
             default:
                 call.failProcedureUnavailable();
                 break;
         }
     }
     else
     {
         call.failProgramUnavailable();
     }
 }
Esempio n. 2
0
        public void dispatchOncRpcCall(OncRpcCallInformation call, int program, int version, int procedure)
        {
            if (version == 1)
            {
                switch (procedure)
                {
                case 0:
                {
                    call.retrieveCall(XdrVoid.XDR_VOID);
                    MOUNTPROC_NULL();
                    call.reply(XdrVoid.XDR_VOID);
                    break;
                }

                case 1:
                {
                    Name args_ = new Name();
                    call.retrieveCall(args_);

                    MountStatus result_ = MOUNTPROC_MNT(args_);
                    call.reply(result_);

                    break;
                }

                case 2:
                {
                    call.retrieveCall(XdrVoid.XDR_VOID);
                    MountList result_ = MOUNTPROC_DUMP();

                    call.reply(result_);

                    break;
                }

                case 3:
                {
                    Name args_ = new Name();
                    call.retrieveCall(args_);

                    MOUNTPROC_UMNT(args_);
                    call.reply(XdrVoid.XDR_VOID);

                    break;
                }

                case 4:
                {
                    call.retrieveCall(XdrVoid.XDR_VOID);
                    MOUNTPROC_UMNTALL();

                    call.reply(XdrVoid.XDR_VOID);

                    break;
                }

                case 5:
                {
                    call.retrieveCall(XdrVoid.XDR_VOID);
                    Exports result_ = MOUNTPROC_EXPORT();

                    call.reply(result_);

                    break;
                }

                default:
                {
                    call.failProcedureUnavailable();
                    break;
                }
                }
            }
            else
            {
                call.failProgramUnavailable();
            }
        }
        public void dispatchOncRpcCall(OncRpcCallInformation call, int program, int version, int procedure)
        {
            if (version == 2)
            {
                switch (procedure)
                {
                case 0:
                {
                    call.retrieveCall(XdrVoid.XDR_VOID);
                    NFSPROC_NULL();
                    call.reply(XdrVoid.XDR_VOID);

                    break;
                }

                case 1:
                {
                    NFSHandle args_ = new NFSHandle();
                    args_.Version = V2.RPC.NFSv2Protocol.NFS_VERSION;
                    call.retrieveCall(args_);

                    FileStatus result_ = NFSPROC_GETATTR(args_);
                    call.reply(result_);

                    break;
                }

                case 2:
                {
                    CreateArguments args_ = new CreateArguments();
                    call.retrieveCall(args_);

                    FileStatus result_ = NFSPROC_SETATTR(args_);
                    call.reply(result_);

                    break;
                }

                case 3:
                {
                    call.retrieveCall(XdrVoid.XDR_VOID);
                    NFSPROC_ROOT();
                    call.reply(XdrVoid.XDR_VOID);

                    break;
                }

                case 4:
                {
                    ItemOperationArguments args_ = new ItemOperationArguments();
                    call.retrieveCall(args_);

                    ItemOperationStatus result_ = NFSPROC_LOOKUP(args_);
                    call.reply(result_);

                    break;
                }

                case 5:
                {
                    NFSHandle args_ = new NFSHandle();
                    args_.Version = V2.RPC.NFSv2Protocol.NFS_VERSION;
                    call.retrieveCall(args_);

                    LinkStatus result_ = NFSPROC_READLINK(args_);
                    call.reply(result_);

                    break;
                }

                case 6:
                {
                    ReadArguments args_ = new ReadArguments();
                    call.retrieveCall(args_);

                    ReadStatus result_ = NFSPROC_READ(args_);
                    call.reply(result_);

                    break;
                }

                case 7:
                {
                    call.retrieveCall(XdrVoid.XDR_VOID);
                    NFSPROC_WRITECACHE();
                    call.reply(XdrVoid.XDR_VOID);

                    break;
                }

                case 8:
                {
                    WriteArguments args_ = new WriteArguments();
                    call.retrieveCall(args_);

                    FileStatus result_ = NFSPROC_WRITE(args_);
                    call.reply(result_);

                    break;
                }

                case 9:
                {
                    CreateArguments args_ = new CreateArguments();
                    call.retrieveCall(args_);

                    ItemOperationStatus result_ = NFSPROC_CREATE(args_);
                    call.reply(result_);

                    break;
                }

                case 10:
                {
                    ItemOperationArguments args_ = new ItemOperationArguments();
                    call.retrieveCall(args_);

                    XdrInt result_ = new XdrInt(NFSPROC_REMOVE(args_));
                    call.reply(result_);

                    break;
                }

                case 11:
                {
                    RenameArguments args_ = new RenameArguments();
                    call.retrieveCall(args_);

                    XdrInt result_ = new XdrInt(NFSPROC_RENAME(args_));
                    call.reply(result_);

                    break;
                }

                case 12:
                {
                    LinkArguments args_ = new LinkArguments();
                    call.retrieveCall(args_);

                    XdrInt result_ = new XdrInt(NFSPROC_LINK(args_));
                    call.reply(result_);

                    break;
                }

                case 13:
                {
                    SymlinkArguments args_ = new SymlinkArguments();
                    call.retrieveCall(args_);

                    XdrInt result_ = new XdrInt(NFSPROC_SYMLINK(args_));
                    call.reply(result_);

                    break;
                }

                case 14:
                {
                    CreateArguments args_ = new CreateArguments();
                    call.retrieveCall(args_);

                    ItemOperationStatus result_ = NFSPROC_MKDIR(args_);
                    call.reply(result_);

                    break;
                }

                case 15:
                {
                    ItemOperationArguments args_ = new ItemOperationArguments();
                    call.retrieveCall(args_);

                    XdrInt result_ = new XdrInt(NFSPROC_RMDIR(args_));
                    call.reply(result_);

                    break;
                }

                case 16:
                {
                    ItemArguments args_ = new ItemArguments();
                    call.retrieveCall(args_);

                    ItemStatus result_ = NFSPROC_READDIR(args_);
                    call.reply(result_);

                    break;
                }

                case 17:
                {
                    NFSHandle args_ = new NFSHandle();
                    args_.Version = V2.RPC.NFSv2Protocol.NFS_VERSION;
                    call.retrieveCall(args_);

                    FSStatStatus result_ = NFSPROC_STATFS(args_);
                    call.reply(result_);

                    break;
                }

                default:
                {
                    call.failProcedureUnavailable();

                    break;
                }
                }
            }
            else
            {
                call.failProgramUnavailable();
            }
        }
        public void dispatchOncRpcCall(OncRpcCallInformation call, int program, int version, int procedure)
        {
            if (version == 3)
            {
                switch (procedure)
                {
                case 0:
                {
                    call.retrieveCall(XdrVoid.XDR_VOID);
                    NFSPROC3_NULL();
                    call.reply(XdrVoid.XDR_VOID);

                    break;
                }

                case 1:
                {
                    GetAttributeArguments args_ = new GetAttributeArguments();
                    call.retrieveCall(args_);

                    ResultObject <GetAttributeAccessOK, GetAttributeAccessOK> result_ =
                        NFSPROC3_GETATTR(args_);
                    call.reply(result_);

                    break;
                }

                case 2:
                {
                    SetAttributeArguments args_ = new SetAttributeArguments();
                    call.retrieveCall(args_);

                    ResultObject <SetAttributeAccessOK, SetAttributeAccessFAIL> result_ =
                        NFSPROC3_SETATTR(args_);
                    call.reply(result_);

                    break;
                }

                case 3:
                {
                    ItemOperationArguments args_ = new ItemOperationArguments();
                    call.retrieveCall(args_);

                    ResultObject <ItemOperationAccessResultOK, ItemOperationAccessResultFAIL> result_ =
                        NFSPROC3_LOOKUP(args_);
                    call.reply(result_);

                    break;
                }

                case 4:
                {
                    AccessArguments args_ = new AccessArguments();
                    call.retrieveCall(args_);

                    ResultObject <AccessAccessOK, AccessAccessFAIL> result_ =
                        NFSPROC3_ACCESS(args_);
                    call.reply(result_);

                    break;
                }

                case 5:
                {
                    ReadLinkArguments args_ = new ReadLinkArguments();
                    call.retrieveCall(args_);

                    ResultObject <ReadLinkAccessOK, ReadLinkAccessFAIL> result_ =
                        NFSPROC3_READLINK(args_);
                    call.reply(result_);

                    break;
                }

                case 6:
                {
                    ReadArguments args_ = new ReadArguments();
                    call.retrieveCall(args_);

                    ResultObject <ReadAccessOK, ReadAccessFAIL> result_ =
                        NFSPROC3_READ(args_);
                    call.reply(result_);

                    break;
                }

                case 7:
                {
                    WriteArguments args_ = new WriteArguments();
                    call.retrieveCall(args_);

                    ResultObject <WriteAccessOK, WriteAccessFAIL> result_ =
                        NFSPROC3_WRITE(args_);
                    call.reply(result_);

                    break;
                }

                case 8:
                {
                    MakeFileArguments args_ = new MakeFileArguments();
                    call.retrieveCall(args_);

                    ResultObject <MakeFileAccessOK, MakeFileAccessFAIL> result_ =
                        NFSPROC3_CREATE(args_);
                    call.reply(result_);

                    break;
                }

                case 9:
                {
                    MakeFolderArguments args_ = new MakeFolderArguments();
                    call.retrieveCall(args_);

                    ResultObject <MakeFolderAccessOK, MakeFolderAccessFAIL> result_ =
                        NFSPROC3_MKDIR(args_);
                    call.reply(result_);

                    break;
                }

                case 10:
                {
                    SymlinkArguments args_ = new SymlinkArguments();
                    call.retrieveCall(args_);

                    ResultObject <SymlinkAccessOK, SymlinkAccessFAIL> result_ =
                        NFSPROC3_SYMLINK(args_);
                    call.reply(result_);

                    break;
                }

                case 11:
                {
                    MakeNodeArguments args_ = new MakeNodeArguments();
                    call.retrieveCall(args_);

                    ResultObject <MakeNodeAccessOK, MakeNodeAccessFAIL> result_ =
                        NFSPROC3_MKNOD(args_);
                    call.reply(result_);

                    break;
                }

                case 12:
                {
                    ItemOperationArguments args_ = new ItemOperationArguments();
                    call.retrieveCall(args_);

                    ResultObject <RemoveAccessOK, RemoveAccessFAIL> result_ =
                        NFSPROC3_REMOVE(args_);
                    call.reply(result_);

                    break;
                }

                case 13:
                {
                    ItemOperationArguments args_ = new ItemOperationArguments();
                    call.retrieveCall(args_);

                    ResultObject <RemoveAccessOK, RemoveAccessFAIL> result_ =
                        NFSPROC3_RMDIR(args_);
                    call.reply(result_);

                    break;
                }

                case 14:
                {
                    RenameArguments args_ = new RenameArguments();
                    call.retrieveCall(args_);

                    ResultObject <RenameAccessOK, RenameAccessFAIL> result_ =
                        NFSPROC3_RENAME(args_);
                    call.reply(result_);

                    break;
                }

                case 15:
                {
                    LinkArguments args_ = new LinkArguments();
                    call.retrieveCall(args_);

                    ResultObject <LinkAccessOK, LinkAccessFAIL> result_ =
                        NFSPROC3_LINK(args_);
                    call.reply(result_);

                    break;
                }

                case 16:
                {
                    ReadFolderArguments args_ = new ReadFolderArguments();
                    call.retrieveCall(args_);

                    ResultObject <ReadFolderAccessResultOK, ReadFolderAccessResultFAIL> result_ =
                        NFSPROC3_READDIR(args_);
                    call.reply(result_);

                    break;
                }

                case 17:
                {
                    ExtendedReadFolderArguments args_ = new ExtendedReadFolderArguments();
                    call.retrieveCall(args_);

                    ResultObject <ExtendedReadFolderAccessOK, ExtendedReadFolderAccessFAIL> result_ =
                        NFSPROC3_READDIRPLUS(args_);
                    call.reply(result_);

                    break;
                }

                case 18:
                {
                    FSStatisticsArguments args_ = new FSStatisticsArguments();
                    call.retrieveCall(args_);

                    ResultObject <FSStatisticsAccessOK, FSStatisticsAccessFAIL> result_ = NFSPROC3_FSSTAT(args_);
                    call.reply(result_);

                    break;
                }

                case 19:
                {
                    FSInfoArguments args_ = new FSInfoArguments();
                    call.retrieveCall(args_);

                    ResultObject <FSInfoAccessOK, FSInfoAccessFAIL> result_ =
                        NFSPROC3_FSINFO(args_);
                    call.reply(result_);

                    break;
                }

                case 20:
                {
                    PathConfigurationArguments args_ = new PathConfigurationArguments();
                    call.retrieveCall(args_);

                    ResultObject <PathConfigurationAccessOK, PathConfigurationAccessFAIL> result_ =
                        NFSPROC3_PATHCONF(args_);
                    call.reply(result_);

                    break;
                }

                case 21:
                {
                    CommitArguments args_ = new CommitArguments();
                    call.retrieveCall(args_);

                    ResultObject <CommitAccessOK, CommitAccessFAIL> result_ =
                        NFSPROC3_COMMIT(args_);
                    call.reply(result_);

                    break;
                }

                default:
                    call.failProcedureUnavailable();
                    break;
                }
            }
            else
            {
                call.failProgramUnavailable();
            }
        }
Esempio n. 5
0
        //
        // Handle incomming calls...
        //
        /// <exception cref="org.acplt.oncrpc.OncRpcException"></exception>
        /// <exception cref="System.IO.IOException"></exception>
        public virtual void dispatchOncRpcCall(OncRpcCallInformation
                                               call, int program, int version, int procedure)
        {
            //
            // Spit out some diagnosis messages...
            //
            System.Console.Out.WriteLine("Incomming call for program " + program.ToString("X")
                                         + "; version " + version + "; procedure " + procedure.ToString("X") + "; auth type "
                                         + call.callMessage.auth.getAuthenticationType());
            //
            // Handle incomming credentials...
            //
            if (call.callMessage.auth.getAuthenticationType() == OncRpcAuthType
                .ONCRPC_AUTH_UNIX)
            {
                OncRpcServerAuthUnix auth = (OncRpcServerAuthUnix
                                             )call.callMessage.auth;
                if ((auth.uid != 42) && (auth.gid != 815))
                {
                    throw (new OncRpcAuthenticationException(OncRpcAuthStatus
                                                             .ONCRPC_AUTH_BADCRED));
                }
                //
                // Suggest shorthand authentication...
                //
                XdrBufferEncodingStream xdr = new XdrBufferEncodingStream(8);
                xdr.beginEncoding(null, 0);
                xdr.xdrEncodeInt(42);
                xdr.xdrEncodeInt(~42);
                xdr.endEncoding();
                //
                // ATTENTION: this will return the *whole* buffer created by the
                // constructor of XdrBufferEncodingStream(len) above. So make sure
                // that you really want to return the whole buffer!
                //
                auth.setShorthandVerifier(xdr.getXdrData());
            }
            else
            {
                if (call.callMessage.auth.getAuthenticationType() == OncRpcAuthType
                    .ONCRPC_AUTH_SHORT)
                {
                    //
                    // Check shorthand credentials.
                    //
                    OncRpcServerAuthShort   auth = (OncRpcServerAuthShort)call.callMessage.auth;
                    XdrBufferDecodingStream xdr  = new XdrBufferDecodingStream
                                                       (auth.getShorthandCred());
                    xdr.beginDecoding();
                    int credv1 = xdr.xdrDecodeInt();
                    int credv2 = xdr.xdrDecodeInt();
                    xdr.endDecoding();
                    if (credv1 != ~credv2)
                    {
                        Console.Out.WriteLine("AUTH_SHORT rejected");
                        throw (new OncRpcAuthenticationException(OncRpcAuthStatus.ONCRPC_AUTH_REJECTEDCRED));
                    }
                    if ((++shorthandCredCounter % 3) == 0)
                    {
                        System.Console.Out.WriteLine("AUTH_SHORT too old");
                        throw (new OncRpcAuthenticationException(OncRpcAuthStatus
                                                                 .ONCRPC_AUTH_REJECTEDCRED));
                    }
                    Console.Out.WriteLine("AUTH_SHORT accepted");
                }
            }
            switch (procedure)
            {
            case 0:
            {
                //
                // Now dispatch incomming calls...
                //
                //
                // The usual ONC/RPC PING (aka "NULL" procedure)
                //
                call.retrieveCall(XdrVoid.XDR_VOID);
                call.reply(XdrVoid.XDR_VOID);
                break;
            }

            case 1:
            {
                //
                // echo string parameter
                //
                XdrString param = new XdrString();
                call.retrieveCall(param);
                System.Console.Out.WriteLine("Parameter: \"" + param.stringValue() + "\"");
                call.reply(param);
                break;
            }

            case 42:
            {
                //
                // This is a special call to shut down the server...
                //
                if ((program == 42) && (version == 42))
                {
                    call.retrieveCall(XdrVoid.XDR_VOID);
                    call.reply(XdrVoid.XDR_VOID);
                    shutdown();
                    break;
                }
                break;
            }

            default:
            {
                //
                // For all unknown calls, send back an error reply.
                //
                call.failProcedureUnavailable();
                break;
            }
            }
        }