draft-ietf-nfsv4-rfc1831bis-00.txt   draft-ietf-nfsv4-rfc1831bis-01.txt 
Network Working Group Robert Thurlow Network Working Group Robert Thurlow
Document: draft-ietf-nfsv4-rfc1831bis-00.txt Document: draft-ietf-nfsv4-rfc1831bis-01.txt
RPC: Remote Procedure Call Protocol Specification Version 2 RPC: Remote Procedure Call Protocol Specification Version 2
Status of this Memo Status of this Memo
This document is an Internet-Draft and is subject to all provisions This document is an Internet-Draft and is subject to all provisions
of Section 10 of RFC2026. of Section 10 of RFC2026.
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that Task Force (IETF), its areas, and its working groups. Note that
skipping to change at page 2, line 23 skipping to change at page 2, line 23
5. Binding and Rendezvous Independence . . . . . . . . . . . . 6 5. Binding and Rendezvous Independence . . . . . . . . . . . . 6
6. Authentication . . . . . . . . . . . . . . . . . . . . . . . 6 6. Authentication . . . . . . . . . . . . . . . . . . . . . . . 6
7. RPC Protocol Requirements . . . . . . . . . . . . . . . . . 6 7. RPC Protocol Requirements . . . . . . . . . . . . . . . . . 6
7.1. RPC Programs and Procedures . . . . . . . . . . . . . . . 7 7.1. RPC Programs and Procedures . . . . . . . . . . . . . . . 7
7.2. Authentication . . . . . . . . . . . . . . . . . . . . . . 8 7.2. Authentication . . . . . . . . . . . . . . . . . . . . . . 8
7.3. Program Number Assignment . . . . . . . . . . . . . . . . 9 7.3. Program Number Assignment . . . . . . . . . . . . . . . . 9
7.4. Other Uses of the RPC Protocol . . . . . . . . . . . . . . 9 7.4. Other Uses of the RPC Protocol . . . . . . . . . . . . . . 9
7.4.1. Batching . . . . . . . . . . . . . . . . . . . . . . . . 9 7.4.1. Batching . . . . . . . . . . . . . . . . . . . . . . . . 9
7.4.2. Broadcast Remote Procedure Calls . . . . . . . . . . . . 9 7.4.2. Broadcast Remote Procedure Calls . . . . . . . . . . . . 9
8. The RPC Message Protocol . . . . . . . . . . . . . . . . . 10 8. The RPC Message Protocol . . . . . . . . . . . . . . . . . 10
9. Authentication Protocols . . . . . . . . . . . . . . . . . 13 9. Authentication Protocols . . . . . . . . . . . . . . . . . 14
9.1. Null Authentication . . . . . . . . . . . . . . . . . . 14 9.1. Null Authentication . . . . . . . . . . . . . . . . . . 15
10. Record Marking Standard . . . . . . . . . . . . . . . . . 14 10. Record Marking Standard . . . . . . . . . . . . . . . . . 15
11. The RPC Language . . . . . . . . . . . . . . . . . . . . 14 11. The RPC Language . . . . . . . . . . . . . . . . . . . . 15
11.1. An Example Service Described in the RPC Language . . . 14 11.1. An Example Service Described in the RPC Language . . . 15
11.2. The RPC Language Specification . . . . . . . . . . . . 15 11.2. The RPC Language Specification . . . . . . . . . . . . 16
11.3. Syntax Notes . . . . . . . . . . . . . . . . . . . . . 16 11.3. Syntax Notes . . . . . . . . . . . . . . . . . . . . . 17
12. IANA Considerations . . . . . . . . . . . . . . . . . . . 16 12. IANA Considerations . . . . . . . . . . . . . . . . . . . 17
13. Security Considerations . . . . . . . . . . . . . . . . . 16 13. Security Considerations . . . . . . . . . . . . . . . . . 17
14. Appendix A: System Authentication . . . . . . . . . . . . 17 14. Appendix A: System Authentication . . . . . . . . . . . . 18
15. Appendix B: Requesting RPC program or authentication 15. Appendix B: Requesting RPC program or authentication
numbers . . . . . . . . . . . . . . . . . . . . . . . . . 18 numbers . . . . . . . . . . . . . . . . . . . . . . . . . 19
16. Normative References . . . . . . . . . . . . . . . . . . 19 16. Normative References . . . . . . . . . . . . . . . . . . 20
17. Informative References . . . . . . . . . . . . . . . . . 19 17. Informative References . . . . . . . . . . . . . . . . . 20
18. Author's Address . . . . . . . . . . . . . . . . . . . . 21 18. Author's Address . . . . . . . . . . . . . . . . . . . . 22
Title Remote Procedure Call Protocol Version 2 May 2003 Title Remote Procedure Call Protocol Version 2 May 2003
1. Introduction 1. Introduction
This document specifies version two of the message protocol used in This document specifies version two of the message protocol used in
ONC Remote Procedure Call (RPC). The message protocol is specified ONC Remote Procedure Call (RPC). The message protocol is specified
with the eXternal Data Representation (XDR) language [RFC1832]. This with the eXternal Data Representation (XDR) language [RFC1832]. This
document assumes that the reader is familiar with XDR. It does not document assumes that the reader is familiar with XDR. It does not
attempt to justify remote procedure calls systems or describe their attempt to justify remote procedure calls systems or describe their
skipping to change at page 10, line 51 skipping to change at page 11, line 5
SYSTEM_ERR = 5 /* e.g. memory allocation failure */ SYSTEM_ERR = 5 /* e.g. memory allocation failure */
}; };
Reasons why a call message was rejected: Reasons why a call message was rejected:
enum reject_stat { enum reject_stat {
RPC_MISMATCH = 0, /* RPC version number != 2 */ RPC_MISMATCH = 0, /* RPC version number != 2 */
AUTH_ERROR = 1 /* remote can't authenticate caller */ AUTH_ERROR = 1 /* remote can't authenticate caller */
}; };
Title Remote Procedure Call Protocol Version 2 May 2003
Why authentication failed: Why authentication failed:
enum auth_stat { enum auth_stat {
AUTH_OK = 0, /* success */ AUTH_OK = 0, /* success */
Title Remote Procedure Call Protocol Version 2 May 2003
/* /*
* failed at remote end * failed at remote end
*/ */
AUTH_BADCRED = 1, /* bad credential (seal broken) */ AUTH_BADCRED = 1, /* bad credential (seal broken) */
AUTH_REJECTEDCRED = 2, /* client must begin new session */ AUTH_REJECTEDCRED = 2, /* client must begin new session */
AUTH_BADVERF = 3, /* bad verifier (seal broken) */ AUTH_BADVERF = 3, /* bad verifier (seal broken) */
AUTH_REJECTEDVERF = 4, /* verifier expired or replayed */ AUTH_REJECTEDVERF = 4, /* verifier expired or replayed */
AUTH_TOOWEAK = 5, /* rejected for security reasons */ AUTH_TOOWEAK = 5, /* rejected for security reasons */
/* /*
* failed locally * failed locally
*/ */
AUTH_INVALIDRESP = 6, /* bogus response verifier */ AUTH_INVALIDRESP = 6, /* bogus response verifier */
AUTH_FAILED = 7 /* reason unknown */ AUTH_FAILED = 7, /* reason unknown */
/*
* kerberos errors
*/
AUTH_KERB_GENERIC = 8, /* kerberos generic error */
AUTH_TIMEEXPIRE = 9, /* time of credential expired */
AUTH_TKT_FILE = 10, /* problem with ticket file */
AUTH_DECODE = 11, /* can't decode authenticator */
AUTH_NET_ADDR = 12, /* wrong net address in ticket */
/*
* GSS related errors
*/
RPCSEC_GSS_NOCRED = 13, /* no credentials for user */
RPCSEC_GSS_FAILED = 14 /* GSS failure, creds deleted */
}; };
Title Remote Procedure Call Protocol Version 2 May 2003
The RPC message: The RPC message:
All messages start with a transaction identifier, xid, followed by a All messages start with a transaction identifier, xid, followed by a
two-armed discriminated union. The union's discriminant is a two-armed discriminated union. The union's discriminant is a
msg_type which switches to one of the two types of the message. The msg_type which switches to one of the two types of the message. The
xid of a REPLY message always matches that of the initiating CALL xid of a REPLY message always matches that of the initiating CALL
message. NB: The xid field is only used for clients matching reply message. NB: The xid field is only used for clients matching reply
messages with call messages or for servers detecting retransmissions; messages with call messages or for servers detecting retransmissions;
the service side cannot treat this id as any type of sequence number. the service side cannot treat this id as any type of sequence number.
skipping to change at page 12, line 4 skipping to change at page 12, line 40
to 2. The fields prog, vers, and proc specify the remote program, to 2. The fields prog, vers, and proc specify the remote program,
its version number, and the procedure within the remote program to be its version number, and the procedure within the remote program to be
called. After these fields are two authentication parameters: cred called. After these fields are two authentication parameters: cred
(authentication credential) and verf (authentication verifier). The (authentication credential) and verf (authentication verifier). The
two authentication parameters are followed by the parameters to the two authentication parameters are followed by the parameters to the
remote procedure, which are specified by the specific program remote procedure, which are specified by the specific program
protocol. protocol.
The purpose of the authentication verifier is to validate the The purpose of the authentication verifier is to validate the
authentication credential. Note that these two items are authentication credential. Note that these two items are
Title Remote Procedure Call Protocol Version 2 May 2003
historically separate, but are always used together as one logical historically separate, but are always used together as one logical
entity. entity.
struct call_body { struct call_body {
unsigned int rpcvers; /* must be equal to two (2) */ unsigned int rpcvers; /* must be equal to two (2) */
unsigned int prog; unsigned int prog;
unsigned int vers; unsigned int vers;
unsigned int proc; unsigned int proc;
opaque_auth cred; opaque_auth cred;
opaque_auth verf; opaque_auth verf;
/* procedure specific parameters start here */ /* procedure specific parameters start here */
}; };
Title Remote Procedure Call Protocol Version 2 May 2003
Body of a reply to an RPC call: Body of a reply to an RPC call:
union reply_body switch (reply_stat stat) { union reply_body switch (reply_stat stat) {
case MSG_ACCEPTED: case MSG_ACCEPTED:
accepted_reply areply; accepted_reply areply;
case MSG_DENIED: case MSG_DENIED:
rejected_reply rreply; rejected_reply rreply;
} reply; } reply;
Reply to an RPC call that was accepted by the server: Reply to an RPC call that was accepted by the server:
skipping to change at page 13, line 4 skipping to change at page 13, line 42
/* /*
* procedure-specific results start here * procedure-specific results start here
*/ */
case PROG_MISMATCH: case PROG_MISMATCH:
struct { struct {
unsigned int low; unsigned int low;
unsigned int high; unsigned int high;
} mismatch_info; } mismatch_info;
default: default:
/* /*
Title Remote Procedure Call Protocol Version 2 May 2003
* Void. Cases include PROG_UNAVAIL, PROC_UNAVAIL, * Void. Cases include PROG_UNAVAIL, PROC_UNAVAIL,
* GARBAGE_ARGS, and SYSTEM_ERR. * GARBAGE_ARGS, and SYSTEM_ERR.
*/ */
void; void;
} reply_data; } reply_data;
}; };
Title Remote Procedure Call Protocol Version 2 May 2003
Reply to an RPC call that was rejected by the server: Reply to an RPC call that was rejected by the server:
The call can be rejected for two reasons: either the server is not The call can be rejected for two reasons: either the server is not
running a compatible version of the RPC protocol (RPC_MISMATCH), or running a compatible version of the RPC protocol (RPC_MISMATCH), or
the server rejects the identity of the caller (AUTH_ERROR). In case the server rejects the identity of the caller (AUTH_ERROR). In case
of an RPC version mismatch, the server returns the lowest and highest of an RPC version mismatch, the server returns the lowest and highest
supported RPC version numbers. In case of invalid authentication, supported RPC version numbers. In case of invalid authentication,
failure status is returned. failure status is returned.
 End of changes. 

This html diff was produced by rfcdiff 1.23, available from http://www.levkowetz.com/ietf/tools/rfcdiff/