Found wdiff, but it reported no recognisable version. Falling back to builtin diff colouring...
draft-pre-ch-17.txt | draft-ietf-nfsv4-minorversion1-22.txt | |||
---|---|---|---|---|
NFSv4 S. Shepler | NFSv4 S. Shepler | |||
Internet-Draft M. Eisler | Internet-Draft M. Eisler | |||
Intended status: Standards Track D. Noveck | Intended status: Standards Track D. Noveck | |||
Expires: October 3, 2008 Editors | Expires: October 9, 2008 Editors | |||
April 7, 2008 | ||||
NFS Version 4 Minor Version 1 | NFS Version 4 Minor Version 1 | |||
draft-ietf-nfsv4-minorversion1-22.txt | draft-ietf-nfsv4-minorversion1-22.txt | |||
Status of this Memo | Status of this Memo | |||
By submitting this Internet-Draft, each author represents that any | By submitting this Internet-Draft, each author represents that any | |||
applicable patent or other IPR claims of which he or she is aware | applicable patent or other IPR claims of which he or she is aware | |||
have been or will be disclosed, and any of which he or she becomes | have been or will be disclosed, and any of which he or she becomes | |||
aware will be disclosed, in accordance with Section 6 of BCP 79. | aware will be disclosed, in accordance with Section 6 of BCP 79. | |||
skipping to change at page 1, line 33 | skipping to change at page 1, line 35 | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
The list of current Internet-Drafts can be accessed at | The list of current Internet-Drafts can be accessed at | |||
http://www.ietf.org/ietf/1id-abstracts.txt. | http://www.ietf.org/ietf/1id-abstracts.txt. | |||
The list of Internet-Draft Shadow Directories can be accessed at | The list of Internet-Draft Shadow Directories can be accessed at | |||
http://www.ietf.org/shadow.html. | http://www.ietf.org/shadow.html. | |||
This Internet-Draft will expire on October 3, 2008. | This Internet-Draft will expire on October 9, 2008. | |||
Copyright Notice | Copyright Notice | |||
Copyright (C) The IETF Trust (2008). | Copyright (C) The IETF Trust (2008). | |||
Abstract | Abstract | |||
This Internet-Draft describes NFS version 4 minor version one, | This Internet-Draft describes NFS version 4 minor version one, | |||
including features retained from the base protocol and protocol | including features retained from the base protocol and protocol | |||
extensions made subsequently. Major extensions introduced in NFS | extensions made subsequently. Major extensions introduced in NFS | |||
skipping to change at page 8, line 12 | skipping to change at page 8, line 12 | |||
15.1.16. Obsoleted Errors . . . . . . . . . . . . . . . . . . 342 | 15.1.16. Obsoleted Errors . . . . . . . . . . . . . . . . . . 342 | |||
15.2. Operations and their valid errors . . . . . . . . . . . 343 | 15.2. Operations and their valid errors . . . . . . . . . . . 343 | |||
15.3. Callback operations and their valid errors . . . . . . . 359 | 15.3. Callback operations and their valid errors . . . . . . . 359 | |||
15.4. Errors and the operations that use them . . . . . . . . 361 | 15.4. Errors and the operations that use them . . . . . . . . 361 | |||
16. NFSv4.1 Procedures . . . . . . . . . . . . . . . . . . . . . 375 | 16. NFSv4.1 Procedures . . . . . . . . . . . . . . . . . . . . . 375 | |||
16.1. Procedure 0: NULL - No Operation . . . . . . . . . . . . 375 | 16.1. Procedure 0: NULL - No Operation . . . . . . . . . . . . 375 | |||
16.2. Procedure 1: COMPOUND - Compound Operations . . . . . . 376 | 16.2. Procedure 1: COMPOUND - Compound Operations . . . . . . 376 | |||
17. Operations: REQUIRED, RECOMMENDED, or OPTIONAL . . . . . . . 387 | 17. Operations: REQUIRED, RECOMMENDED, or OPTIONAL . . . . . . . 387 | |||
18. NFSv4.1 Operations . . . . . . . . . . . . . . . . . . . . . 390 | 18. NFSv4.1 Operations . . . . . . . . . . . . . . . . . . . . . 390 | |||
18.1. Operation 3: ACCESS - Check Access Rights . . . . . . . 390 | 18.1. Operation 3: ACCESS - Check Access Rights . . . . . . . 390 | |||
18.2. Operation 4: CLOSE - Close File . . . . . . . . . . . . 393 | 18.2. Operation 4: CLOSE - Close File . . . . . . . . . . . . 396 | |||
18.3. Operation 5: COMMIT - Commit Cached Data . . . . . . . . 394 | 18.3. Operation 5: COMMIT - Commit Cached Data . . . . . . . . 397 | |||
18.4. Operation 6: CREATE - Create a Non-Regular File Object . 397 | 18.4. Operation 6: CREATE - Create a Non-Regular File Object . 400 | |||
18.5. Operation 7: DELEGPURGE - Purge Delegations Awaiting | 18.5. Operation 7: DELEGPURGE - Purge Delegations Awaiting | |||
Recovery . . . . . . . . . . . . . . . . . . . . . . . . 400 | Recovery . . . . . . . . . . . . . . . . . . . . . . . . 403 | |||
18.6. Operation 8: DELEGRETURN - Return Delegation . . . . . . 401 | 18.6. Operation 8: DELEGRETURN - Return Delegation . . . . . . 404 | |||
18.7. Operation 9: GETATTR - Get Attributes . . . . . . . . . 401 | 18.7. Operation 9: GETATTR - Get Attributes . . . . . . . . . 404 | |||
18.8. Operation 10: GETFH - Get Current Filehandle . . . . . . 403 | 18.8. Operation 10: GETFH - Get Current Filehandle . . . . . . 406 | |||
18.9. Operation 11: LINK - Create Link to a File . . . . . . . 404 | 18.9. Operation 11: LINK - Create Link to a File . . . . . . . 407 | |||
18.10. Operation 12: LOCK - Create Lock . . . . . . . . . . . . 406 | 18.10. Operation 12: LOCK - Create Lock . . . . . . . . . . . . 410 | |||
18.11. Operation 13: LOCKT - Test For Lock . . . . . . . . . . 410 | 18.11. Operation 13: LOCKT - Test For Lock . . . . . . . . . . 413 | |||
18.12. Operation 14: LOCKU - Unlock File . . . . . . . . . . . 412 | 18.12. Operation 14: LOCKU - Unlock File . . . . . . . . . . . 415 | |||
18.13. Operation 15: LOOKUP - Lookup Filename . . . . . . . . . 413 | 18.13. Operation 15: LOOKUP - Lookup Filename . . . . . . . . . 416 | |||
18.14. Operation 16: LOOKUPP - Lookup Parent Directory . . . . 415 | 18.14. Operation 16: LOOKUPP - Lookup Parent Directory . . . . 418 | |||
18.15. Operation 17: NVERIFY - Verify Difference in | 18.15. Operation 17: NVERIFY - Verify Difference in | |||
Attributes . . . . . . . . . . . . . . . . . . . . . . . 416 | Attributes . . . . . . . . . . . . . . . . . . . . . . . 419 | |||
18.16. Operation 18: OPEN - Open a Regular File . . . . . . . . 417 | 18.16. Operation 18: OPEN - Open a Regular File . . . . . . . . 420 | |||
18.17. Operation 19: OPENATTR - Open Named Attribute | 18.17. Operation 19: OPENATTR - Open Named Attribute | |||
Directory . . . . . . . . . . . . . . . . . . . . . . . 436 | Directory . . . . . . . . . . . . . . . . . . . . . . . 439 | |||
18.18. Operation 21: OPEN_DOWNGRADE - Reduce Open File Access . 437 | 18.18. Operation 21: OPEN_DOWNGRADE - Reduce Open File Access . 440 | |||
18.19. Operation 22: PUTFH - Set Current Filehandle . . . . . . 439 | 18.19. Operation 22: PUTFH - Set Current Filehandle . . . . . . 442 | |||
18.20. Operation 23: PUTPUBFH - Set Public Filehandle . . . . . 439 | 18.20. Operation 23: PUTPUBFH - Set Public Filehandle . . . . . 442 | |||
18.21. Operation 24: PUTROOTFH - Set Root Filehandle . . . . . 441 | 18.21. Operation 24: PUTROOTFH - Set Root Filehandle . . . . . 444 | |||
18.22. Operation 25: READ - Read from File . . . . . . . . . . 442 | 18.22. Operation 25: READ - Read from File . . . . . . . . . . 445 | |||
18.23. Operation 26: READDIR - Read Directory . . . . . . . . . 444 | 18.23. Operation 26: READDIR - Read Directory . . . . . . . . . 447 | |||
18.24. Operation 27: READLINK - Read Symbolic Link . . . . . . 448 | 18.24. Operation 27: READLINK - Read Symbolic Link . . . . . . 451 | |||
18.25. Operation 28: REMOVE - Remove File System Object . . . . 449 | 18.25. Operation 28: REMOVE - Remove File System Object . . . . 452 | |||
18.26. Operation 29: RENAME - Rename Directory Entry . . . . . 451 | 18.26. Operation 29: RENAME - Rename Directory Entry . . . . . 454 | |||
18.27. Operation 31: RESTOREFH - Restore Saved Filehandle . . . 455 | 18.27. Operation 31: RESTOREFH - Restore Saved Filehandle . . . 458 | |||
18.28. Operation 32: SAVEFH - Save Current Filehandle . . . . . 456 | 18.28. Operation 32: SAVEFH - Save Current Filehandle . . . . . 459 | |||
18.29. Operation 33: SECINFO - Obtain Available Security . . . 457 | 18.29. Operation 33: SECINFO - Obtain Available Security . . . 460 | |||
18.30. Operation 34: SETATTR - Set Attributes . . . . . . . . . 460 | 18.30. Operation 34: SETATTR - Set Attributes . . . . . . . . . 463 | |||
18.31. Operation 37: VERIFY - Verify Same Attributes . . . . . 462 | 18.31. Operation 37: VERIFY - Verify Same Attributes . . . . . 465 | |||
18.32. Operation 38: WRITE - Write to File . . . . . . . . . . 463 | 18.32. Operation 38: WRITE - Write to File . . . . . . . . . . 466 | |||
18.33. Operation 40: BACKCHANNEL_CTL - Backchannel control . . 468 | 18.33. Operation 40: BACKCHANNEL_CTL - Backchannel control . . 471 | |||
18.34. Operation 41: BIND_CONN_TO_SESSION . . . . . . . . . . . 469 | 18.34. Operation 41: BIND_CONN_TO_SESSION . . . . . . . . . . . 472 | |||
18.35. Operation 42: EXCHANGE_ID - Instantiate Client ID . . . 472 | 18.35. Operation 42: EXCHANGE_ID - Instantiate Client ID . . . 475 | |||
18.36. Operation 43: CREATE_SESSION - Create New Session and | 18.36. Operation 43: CREATE_SESSION - Create New Session and | |||
Confirm Client ID . . . . . . . . . . . . . . . . . . . 488 | Confirm Client ID . . . . . . . . . . . . . . . . . . . 491 | |||
18.37. Operation 44: DESTROY_SESSION - Destroy existing | 18.37. Operation 44: DESTROY_SESSION - Destroy existing | |||
session . . . . . . . . . . . . . . . . . . . . . . . . 498 | session . . . . . . . . . . . . . . . . . . . . . . . . 501 | |||
18.38. Operation 45: FREE_STATEID - Free stateid with no | 18.38. Operation 45: FREE_STATEID - Free stateid with no | |||
locks . . . . . . . . . . . . . . . . . . . . . . . . . 500 | locks . . . . . . . . . . . . . . . . . . . . . . . . . 503 | |||
18.39. Operation 46: GET_DIR_DELEGATION - Get a directory | 18.39. Operation 46: GET_DIR_DELEGATION - Get a directory | |||
delegation . . . . . . . . . . . . . . . . . . . . . . . 501 | delegation . . . . . . . . . . . . . . . . . . . . . . . 504 | |||
18.40. Operation 47: GETDEVICEINFO - Get Device Information . . 505 | 18.40. Operation 47: GETDEVICEINFO - Get Device Information . . 508 | |||
18.41. Operation 48: GETDEVICELIST - Get All Device Mappings | 18.41. Operation 48: GETDEVICELIST - Get All Device Mappings | |||
for a File System . . . . . . . . . . . . . . . . . . . 507 | for a File System . . . . . . . . . . . . . . . . . . . 510 | |||
18.42. Operation 49: LAYOUTCOMMIT - Commit writes made using | 18.42. Operation 49: LAYOUTCOMMIT - Commit writes made using | |||
a layout . . . . . . . . . . . . . . . . . . . . . . . . 509 | a layout . . . . . . . . . . . . . . . . . . . . . . . . 512 | |||
18.43. Operation 50: LAYOUTGET - Get Layout Information . . . . 512 | 18.43. Operation 50: LAYOUTGET - Get Layout Information . . . . 515 | |||
18.44. Operation 51: LAYOUTRETURN - Release Layout | 18.44. Operation 51: LAYOUTRETURN - Release Layout | |||
Information . . . . . . . . . . . . . . . . . . . . . . 516 | Information . . . . . . . . . . . . . . . . . . . . . . 519 | |||
18.45. Operation 52: SECINFO_NO_NAME - Get Security on | 18.45. Operation 52: SECINFO_NO_NAME - Get Security on | |||
Unnamed Object . . . . . . . . . . . . . . . . . . . . . 521 | Unnamed Object . . . . . . . . . . . . . . . . . . . . . 524 | |||
18.46. Operation 53: SEQUENCE - Supply per-procedure | 18.46. Operation 53: SEQUENCE - Supply per-procedure | |||
sequencing and control . . . . . . . . . . . . . . . . . 522 | sequencing and control . . . . . . . . . . . . . . . . . 525 | |||
18.47. Operation 54: SET_SSV - Update SSV for a Client ID . . . 528 | 18.47. Operation 54: SET_SSV - Update SSV for a Client ID . . . 531 | |||
18.48. Operation 55: TEST_STATEID - Test stateids for | 18.48. Operation 55: TEST_STATEID - Test stateids for | |||
validity . . . . . . . . . . . . . . . . . . . . . . . . 530 | validity . . . . . . . . . . . . . . . . . . . . . . . . 533 | |||
18.49. Operation 56: WANT_DELEGATION - Request Delegation . . . 532 | 18.49. Operation 56: WANT_DELEGATION - Request Delegation . . . 535 | |||
18.50. Operation 57: DESTROY_CLIENTID - Destroy existing | 18.50. Operation 57: DESTROY_CLIENTID - Destroy existing | |||
client ID . . . . . . . . . . . . . . . . . . . . . . . 536 | client ID . . . . . . . . . . . . . . . . . . . . . . . 539 | |||
18.51. Operation 58: RECLAIM_COMPLETE - Indicates Reclaims | 18.51. Operation 58: RECLAIM_COMPLETE - Indicates Reclaims | |||
Finished . . . . . . . . . . . . . . . . . . . . . . . . 536 | Finished . . . . . . . . . . . . . . . . . . . . . . . . 539 | |||
18.52. Operation 10044: ILLEGAL - Illegal operation . . . . . . 539 | 18.52. Operation 10044: ILLEGAL - Illegal operation . . . . . . 542 | |||
19. NFSv4.1 Callback Procedures . . . . . . . . . . . . . . . . . 539 | 19. NFSv4.1 Callback Procedures . . . . . . . . . . . . . . . . . 542 | |||
19.1. Procedure 0: CB_NULL - No Operation . . . . . . . . . . 540 | 19.1. Procedure 0: CB_NULL - No Operation . . . . . . . . . . 543 | |||
19.2. Procedure 1: CB_COMPOUND - Compound Operations . . . . . 540 | 19.2. Procedure 1: CB_COMPOUND - Compound Operations . . . . . 543 | |||
20. NFSv4.1 Callback Operations . . . . . . . . . . . . . . . . . 544 | 20. NFSv4.1 Callback Operations . . . . . . . . . . . . . . . . . 547 | |||
20.1. Operation 3: CB_GETATTR - Get Attributes . . . . . . . . 544 | 20.1. Operation 3: CB_GETATTR - Get Attributes . . . . . . . . 547 | |||
20.2. Operation 4: CB_RECALL - Recall an Open Delegation . . . 545 | 20.2. Operation 4: CB_RECALL - Recall an Open Delegation . . . 548 | |||
20.3. Operation 5: CB_LAYOUTRECALL - Recall Layout from | 20.3. Operation 5: CB_LAYOUTRECALL - Recall Layout from | |||
Client . . . . . . . . . . . . . . . . . . . . . . . . . 546 | Client . . . . . . . . . . . . . . . . . . . . . . . . . 549 | |||
20.4. Operation 6: CB_NOTIFY - Notify directory changes . . . 550 | 20.4. Operation 6: CB_NOTIFY - Notify directory changes . . . 553 | |||
20.5. Operation 7: CB_PUSH_DELEG - Offer Delegation to | 20.5. Operation 7: CB_PUSH_DELEG - Offer Delegation to | |||
Client . . . . . . . . . . . . . . . . . . . . . . . . . 554 | Client . . . . . . . . . . . . . . . . . . . . . . . . . 557 | |||
20.6. Operation 8: CB_RECALL_ANY - Keep any N delegations . . 555 | 20.6. Operation 8: CB_RECALL_ANY - Keep any N delegations . . 558 | |||
20.7. Operation 9: CB_RECALLABLE_OBJ_AVAIL - Signal | 20.7. Operation 9: CB_RECALLABLE_OBJ_AVAIL - Signal | |||
Resources for Recallable Objects . . . . . . . . . . . . 557 | Resources for Recallable Objects . . . . . . . . . . . . 560 | |||
20.8. Operation 10: CB_RECALL_SLOT - change flow control | 20.8. Operation 10: CB_RECALL_SLOT - change flow control | |||
limits . . . . . . . . . . . . . . . . . . . . . . . . . 558 | limits . . . . . . . . . . . . . . . . . . . . . . . . . 561 | |||
20.9. Operation 11: CB_SEQUENCE - Supply backchannel | 20.9. Operation 11: CB_SEQUENCE - Supply backchannel | |||
sequencing and control . . . . . . . . . . . . . . . . . 559 | sequencing and control . . . . . . . . . . . . . . . . . 562 | |||
20.10. Operation 12: CB_WANTS_CANCELLED - Cancel Pending | 20.10. Operation 12: CB_WANTS_CANCELLED - Cancel Pending | |||
Delegation Wants . . . . . . . . . . . . . . . . . . . . 561 | Delegation Wants . . . . . . . . . . . . . . . . . . . . 564 | |||
20.11. Operation 13: CB_NOTIFY_LOCK - Notify of possible | 20.11. Operation 13: CB_NOTIFY_LOCK - Notify of possible | |||
lock availability . . . . . . . . . . . . . . . . . . . 562 | lock availability . . . . . . . . . . . . . . . . . . . 565 | |||
20.12. Operation 14: CB_NOTIFY_DEVICEID - Notify device ID | 20.12. Operation 14: CB_NOTIFY_DEVICEID - Notify device ID | |||
changes . . . . . . . . . . . . . . . . . . . . . . . . 564 | changes . . . . . . . . . . . . . . . . . . . . . . . . 567 | |||
20.13. Operation 10044: CB_ILLEGAL - Illegal Callback | 20.13. Operation 10044: CB_ILLEGAL - Illegal Callback | |||
Operation . . . . . . . . . . . . . . . . . . . . . . . 566 | Operation . . . . . . . . . . . . . . . . . . . . . . . 569 | |||
21. Security Considerations . . . . . . . . . . . . . . . . . . . 566 | 21. Security Considerations . . . . . . . . . . . . . . . . . . . 569 | |||
22. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 568 | 22. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 571 | |||
22.1. Named Attribute Definitions . . . . . . . . . . . . . . 568 | 22.1. Named Attribute Definitions . . . . . . . . . . . . . . 571 | |||
22.2. ONC RPC Network Identifiers (netids) . . . . . . . . . . 568 | 22.2. ONC RPC Network Identifiers (netids) . . . . . . . . . . 571 | |||
22.3. Defining New Notifications . . . . . . . . . . . . . . . 569 | 22.3. Defining New Notifications . . . . . . . . . . . . . . . 572 | |||
22.4. Defining New Layout Types . . . . . . . . . . . . . . . 569 | 22.4. Defining New Layout Types . . . . . . . . . . . . . . . 572 | |||
22.5. Path Variable Definitions . . . . . . . . . . . . . . . 571 | 22.5. Path Variable Definitions . . . . . . . . . . . . . . . 574 | |||
22.5.1. Path Variable Values . . . . . . . . . . . . . . . . 571 | 22.5.1. Path Variable Values . . . . . . . . . . . . . . . . 574 | |||
22.5.2. Path Variable Names . . . . . . . . . . . . . . . . 571 | 22.5.2. Path Variable Names . . . . . . . . . . . . . . . . 574 | |||
23. References . . . . . . . . . . . . . . . . . . . . . . . . . 571 | 23. References . . . . . . . . . . . . . . . . . . . . . . . . . 574 | |||
23.1. Normative References . . . . . . . . . . . . . . . . . . 571 | 23.1. Normative References . . . . . . . . . . . . . . . . . . 574 | |||
23.2. Informative References . . . . . . . . . . . . . . . . . 573 | 23.2. Informative References . . . . . . . . . . . . . . . . . 576 | |||
Appendix A. Acknowledgments . . . . . . . . . . . . . . . . . . 574 | Appendix A. Acknowledgments . . . . . . . . . . . . . . . . . . 578 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 576 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 580 | |||
Intellectual Property and Copyright Statements . . . . . . . . . 578 | Intellectual Property and Copyright Statements . . . . . . . . . 581 | |||
1. Introduction | 1. Introduction | |||
1.1. The NFS Version 4 Minor Version 1 Protocol | 1.1. The NFS Version 4 Minor Version 1 Protocol | |||
The NFS version 4 minor version 1 (NFSv4.1) protocol is the second | The NFS version 4 minor version 1 (NFSv4.1) protocol is the second | |||
minor version of the NFS version 4 (NFSv4) protocol. The first minor | minor version of the NFS version 4 (NFSv4) protocol. The first minor | |||
version, NFSv4.0 is described in [21]. It generally follows the | version, NFSv4.0 is described in [21]. It generally follows the | |||
guidelines for minor versioning model listed in Section 10 of RFC | guidelines for minor versioning model listed in Section 10 of RFC | |||
3530. However, it diverges from guidelines 11 ("a client and server | 3530. However, it diverges from guidelines 11 ("a client and server | |||
skipping to change at page 149, line 23 | skipping to change at page 149, line 23 | |||
The server may assign stateids independently for different clients. | The server may assign stateids independently for different clients. | |||
A stateid with the same bit pattern for one client may designate an | A stateid with the same bit pattern for one client may designate an | |||
entirely different set of locks for a different client. The stateid | entirely different set of locks for a different client. The stateid | |||
is always interpreted with respect to the client ID associated with | is always interpreted with respect to the client ID associated with | |||
the current session. Stateids apply to all sessions associated with | the current session. Stateids apply to all sessions associated with | |||
the given client ID and the client may use a stateid obtained from | the given client ID and the client may use a stateid obtained from | |||
one session on another session associated with the same client ID. | one session on another session associated with the same client ID. | |||
8.2.1. Stateid Types | 8.2.1. Stateid Types | |||
With the exception of special stateids, to be discussed later, each | With the exception of special stateids (see Section 8.2.3), each | |||
stateid represents locking objects of one of a set of types defined | stateid represents locking objects of one of a set of types defined | |||
by the NFSv4.1 protocol. Note that in all these cases, where we | by the NFSv4.1 protocol. Note that in all these cases, where we | |||
speak of guarantee, it is understood there are situations such as a | speak of guarantee, it is understood there are situations such as a | |||
client restart, or lock revocation, that allow the guarantee to be | client restart, or lock revocation, that allow the guarantee to be | |||
voided. | voided. | |||
o Stateids may represent opens of files. | o Stateids may represent opens of files. | |||
Each stateid in this case represents the open state for a given | Each stateid in this case represents the open state for a given | |||
client ID/open-owner/filehandle triple. Such stateids are subject | client ID/open-owner/filehandle triple. Such stateids are subject | |||
skipping to change at page 150, line 29 | skipping to change at page 150, line 29 | |||
A stateid represents the set of all layouts held by a particular | A stateid represents the set of all layouts held by a particular | |||
client for a particular filehandle with a given layout type. The | client for a particular filehandle with a given layout type. The | |||
seqid is updated as the layouts of that set changes with layout | seqid is updated as the layouts of that set changes with layout | |||
stateid changing operations such as LAYOUTGET and LAYOUTRETURN. | stateid changing operations such as LAYOUTGET and LAYOUTRETURN. | |||
8.2.2. Stateid Structure | 8.2.2. Stateid Structure | |||
Stateids are divided into two fields, a 96-bit "other" field | Stateids are divided into two fields, a 96-bit "other" field | |||
identifying the specific set of locks and a 32-bit "seqid" sequence | identifying the specific set of locks and a 32-bit "seqid" sequence | |||
value. Except in the case of special stateids, to be discussed | value. Except in the case of special stateids (see Section 8.2.3), a | |||
below, a particular value of the "other" field denotes a set of locks | particular value of the "other" field denotes a set of locks of the | |||
of the same type (for example byte-range locks, opens, delegations, | same type (for example byte-range locks, opens, delegations, or | |||
or layouts), for a specific file or directory, and sharing the same | layouts), for a specific file or directory, and sharing the same | |||
ownership characteristics. The seqid designates a specific instance | ownership characteristics. The seqid designates a specific instance | |||
of such a set of locks, and is incremented to indicate changes in | of such a set of locks, and is incremented to indicate changes in | |||
such a set of locks, either by the addition or deletion of locks from | such a set of locks, either by the addition or deletion of locks from | |||
the set, a change in the byte-range they apply to, or an upgrade or | the set, a change in the byte-range they apply to, or an upgrade or | |||
downgrade in the type of one or more locks. | downgrade in the type of one or more locks. | |||
When such a set of locks is first created the server returns a | When such a set of locks is first created the server returns a | |||
stateid with seqid value of one. On subsequent operations which | stateid with seqid value of one. On subsequent operations which | |||
modify the set of locks the server is required to increment the seqid | modify the set of locks the server is required to increment the seqid | |||
field by one (1) whenever it returns a stateid for the same state- | field by one (1) whenever it returns a stateid for the same state- | |||
skipping to change at page 154, line 18 | skipping to change at page 154, line 18 | |||
o The last "seqid" value returned corresponding to the current | o The last "seqid" value returned corresponding to the current | |||
"other" value. | "other" value. | |||
o An indication of the current status of the locks associated with | o An indication of the current status of the locks associated with | |||
this stateid. In particular, whether these have been revoked and | this stateid. In particular, whether these have been revoked and | |||
if so, for what reason. | if so, for what reason. | |||
With this information, an incoming stateid can be validated and the | With this information, an incoming stateid can be validated and the | |||
appropriate error returned when necessary. Special and non-special | appropriate error returned when necessary. Special and non-special | |||
stateids are handled separately. (See Section 8.2.3 for a discussion | stateids are handled separately. (See Section 8.2.3 for a discussion | |||
of special stateids). | of special stateids.) | |||
Note that stateids are implicitly qualified by the current client ID, | Note that stateids are implicitly qualified by the current client ID, | |||
as derived from the client ID associated with the current session. | as derived from the client ID associated with the current session. | |||
Note however, that the semantics of the session will prevent stateids | Note however, that the semantics of the session will prevent stateids | |||
associated with a previous client or server instance from being | associated with a previous client or server instance from being | |||
analyzed by this procedure. | analyzed by this procedure. | |||
If server restart has resulted in an invalid client ID or a sessionid | If server restart has resulted in an invalid client ID or a sessionid | |||
which is invalid, SEQUENCE will return an error and the operation | which is invalid, SEQUENCE will return an error and the operation | |||
that takes a stateid as an argument will never be processed. | that takes a stateid as an argument will never be processed. | |||
skipping to change at page 387, line 32 | skipping to change at page 387, line 32 | |||
+------------------------------+------------------------------------+ | +------------------------------+------------------------------------+ | |||
Table 15 | Table 15 | |||
17. Operations: REQUIRED, RECOMMENDED, or OPTIONAL | 17. Operations: REQUIRED, RECOMMENDED, or OPTIONAL | |||
The following tables summarize the operations of the NFSv4.1 protocol | The following tables summarize the operations of the NFSv4.1 protocol | |||
and the corresponding designation of REQUIRED, RECOMMENDED, OPTIONAL | and the corresponding designation of REQUIRED, RECOMMENDED, OPTIONAL | |||
to implement or MUST NOT implement. The designation of MUST NOT | to implement or MUST NOT implement. The designation of MUST NOT | |||
implement is reserved for those operations that were defined in | implement is reserved for those operations that were defined in | |||
NFSv4.0 and they MUST NOT be implemented in NFSv4.1. These | NFSv4.0 and MUST NOT be implemented in NFSv4.1. | |||
operations are limited to those replaced by the Sessions | ||||
functionality of NFSv4.1. | ||||
For the most part, the REQUIRED, RECOMMENDED, or OPTIONAL designation | For the most part, the REQUIRED, RECOMMENDED, or OPTIONAL designation | |||
is for the server implementation. The client is generally required | for operations sent by the client is for the server implementation. | |||
to implement the operations needed for the operating environment for | The client is generally required to implement the operations needed | |||
which it serves. For example, a read-only NFSv4.1 client would have | for the operating environment for which it serves. For example, a | |||
no need to implement the WRITE operation and is not required to do | read-only NFSv4.1 client would have no need to implement the WRITE | |||
so. | operation and is not required to do so. | |||
The REQUIRED or OPTIONAL designation for callback operations sent by | ||||
the server is for both the client and server. Generally, the client | ||||
has the option of creating the backchannel and sending the operations | ||||
on the fore channel that will be a catalyst for the server sending | ||||
callback operations. A partial exception is CB_RECALL_SLOT; the only | ||||
way the client can avoid supporting this operation is by not creating | ||||
a backchannel. | ||||
Since this is a summary of the operations and their designation, | Since this is a summary of the operations and their designation, | |||
there are subtleties that are not presented here. Therefore, if | there are subtleties that are not presented here. Therefore, if | |||
there is a question of the requirements of implementation, the | there is a question of the requirements of implementation, the | |||
operation descriptions themselves must be consulted along with other | operation descriptions themselves must be consulted along with other | |||
relevant explanatory text within this specification. | relevant explanatory text within this specification. | |||
The abbreviations used in the second and third columns of the table | The abbreviations used in the second and third columns of the table | |||
are defined as follows. | are defined as follows. | |||
skipping to change at page 391, line 33 | skipping to change at page 391, line 46 | |||
credentials in the RPC request, has with respect to the file system | credentials in the RPC request, has with respect to the file system | |||
object specified by the current filehandle. The client encodes the | object specified by the current filehandle. The client encodes the | |||
set of access rights that are to be checked in the bit mask "access". | set of access rights that are to be checked in the bit mask "access". | |||
The server checks the permissions encoded in the bit mask. If a | The server checks the permissions encoded in the bit mask. If a | |||
status of NFS4_OK is returned, two bit masks are included in the | status of NFS4_OK is returned, two bit masks are included in the | |||
response. The first, "supported", represents the access rights for | response. The first, "supported", represents the access rights for | |||
which the server can verify reliably. The second, "access", | which the server can verify reliably. The second, "access", | |||
represents the access rights available to the user for the filehandle | represents the access rights available to the user for the filehandle | |||
provided. On success, the current filehandle retains its value. | provided. On success, the current filehandle retains its value. | |||
Note that the supported field will contain only as many values as was | Note that the reply's supported and access fields MUST NOT contain | |||
originally sent in the arguments. For example, if the client sends | more values than originally sent in the requests access field. For | |||
an ACCESS operation with only the ACCESS4_READ value set and the | example, if the client sends an ACCESS operation with only the | |||
server supports this value, the server will return only ACCESS4_READ | ACCESS4_READ value set and the server supports this value, the server | |||
even if it could have reliably checked other values. | can set only ACCESS4_READ in the supported field even if it could | |||
have reliably checked other values. | ||||
The reply's access field MUST NOT contain more values than in the | ||||
supported field. | ||||
The results of this operation are necessarily advisory in nature. A | The results of this operation are necessarily advisory in nature. A | |||
return status of NFS4_OK and the appropriate bit set in the bit mask | return status of NFS4_OK and the appropriate bit set in the bit mask | |||
does not imply that such access will be allowed to the file system | does not imply that such access will be allowed to the file system | |||
object in the future. This is because access rights can be revoked | object in the future. This is because access rights can be revoked | |||
by the server at any time. | by the server at any time. | |||
The following access permissions may be requested: | The following access permissions may be requested: | |||
ACCESS4_READ Read data from file or read a directory. | ACCESS4_READ Read data from file or read a directory. | |||
skipping to change at page 392, line 17 | skipping to change at page 392, line 30 | |||
ACCESS4_LOOKUP Look up a name in a directory (no meaning for non- | ACCESS4_LOOKUP Look up a name in a directory (no meaning for non- | |||
directory objects). | directory objects). | |||
ACCESS4_MODIFY Rewrite existing file data or modify existing | ACCESS4_MODIFY Rewrite existing file data or modify existing | |||
directory entries. | directory entries. | |||
ACCESS4_EXTEND Write new data or add directory entries. | ACCESS4_EXTEND Write new data or add directory entries. | |||
ACCESS4_DELETE Delete an existing directory entry. | ACCESS4_DELETE Delete an existing directory entry. | |||
ACCESS4_EXECUTE Execute file (no meaning for a directory). | ACCESS4_EXECUTE Execute a regular file (no meaning for a directory). | |||
On success, the current filehandle retains its value. | On success, the current filehandle retains its value. | |||
ACCESS4_EXECUTE is a challenging semantic to implement because NFS | ||||
provides remote file access, not remote execution. This leads to the | ||||
following: | ||||
o Whether a regular file is executable or not ought to be the | ||||
responsibility of the NFS client and not the server. And yet the | ||||
ACCESS operation is specified to seemingly require a server to own | ||||
that responsibility. | ||||
o When a client executes a regular file, it has to read the file | ||||
from the server. Strictly speaking, the server should not allow | ||||
the client to read a file being executed unless the user has read | ||||
permissions on the file. Requiring users and administers to set | ||||
read permissions on executable files in order to access them over | ||||
NFS is not going to be acceptable some people. Historically, NFS | ||||
servers have allowed a user to READ a file if the user has execute | ||||
access to the file. | ||||
As a practical example, the UNIX specification [41] states that an | ||||
implementation claiming conformance to UNIX may indicate in the | ||||
access() programming interface's result that a privileged user has | ||||
execute rights, even if no execute permission bits are set on the | ||||
regular file's attributes. It is possible to claim conformance to | ||||
the UNIX specification and instead not indicate execute rights in | ||||
that situation, which is true for some operating enviroments. | ||||
Suppose the operating environments of the client and server are | ||||
implementing the access() semantics for privileged users differently, | ||||
and the ACCESS operation implementations of the client and server | ||||
follow their respective access() semantics. This can cause undesired | ||||
behavior: | ||||
o Suppose the client's access() interface returns X_OK if the user | ||||
is privileged, no execute permission bits are set on the regular | ||||
file's attribute, and the server's access() interface does not | ||||
return X_OK in that situation. Then the client will be unable to | ||||
execute files stored on the NFS server that could be executed if | ||||
stored on a non-NFS file system. | ||||
o Suppose the client's access() interface does not return X_OK if | ||||
the user is privileged, and no execute permission bits are set on | ||||
the regular file's attribute, and the server's access() interface | ||||
does return X_OK in that situation. Then: | ||||
* The client will be able to execute files stored on the NFS | ||||
server that could be executed if stored on a non-NFS file | ||||
system, unless the client's execution subsystem also checks for | ||||
execute permission bits. | ||||
* Even if the execution subsystem is checking for execute | ||||
permission bits, there are more potential issues. E.g. suppose | ||||
the client is invoking access() to build a "path search table" | ||||
of all executable files in the user's "search path", where the | ||||
path is a list of directories each containing executable files. | ||||
Suppose there are two files each in separate directories of the | ||||
search path, such that files have the same component name. In | ||||
the first directory the file has no execute permission bits | ||||
set, and in the second directory the file has execute bits set. | ||||
The path search table will indicate that the first directory | ||||
has the executable file, but the execute subsystem will fail to | ||||
execute it. The command shell might fail to try the second | ||||
file in the second directory. And even if it did, this is a | ||||
potential performance issue. Clearly the desired outcome for | ||||
the client is for the path search table to not contain the | ||||
first file. | ||||
To deal the problems described above, the smart client, stupid server | ||||
principle is used. The client owns overall responsibility for | ||||
determining execute access, and relies on the server to parse the | ||||
execution permissions within the file's mode, acl, and dacl | ||||
attributes. The rules for the client and server follow: | ||||
o If the client is sending ACCESS in order to determine if the user | ||||
can read the file, the client SHOULD set ACCESS4_READ in the | ||||
request's access field. | ||||
o If the client's operating environment only grants execution to the | ||||
user if the user has execute access according to the execute | ||||
permissions in the mode, acl, and dacl attributes, then if the | ||||
client wants to determine execute access, the client SHOULD send | ||||
an ACCESS request with ACCESS4_EXECUTE bit set in the request's | ||||
access field. | ||||
o If the client's operating environment grants execution to the user | ||||
even if the user does not have execute access according to the | ||||
execute permissions in the mode, acl, and dacl attributes, then if | ||||
the client wants to determine execute access, it SHOULD send an | ||||
ACCESS request with both the ACCESS4_EXECUTE and ACCESS4_READ bits | ||||
set the request's access field. This way, if any read or execute | ||||
permission grants the user read or execute access (or if the | ||||
server interprets the user as privileged), as indicated by the | ||||
presence of ACCESS4_EXECUTE and/or ACCESS4_READ in the reply's | ||||
access field, the client will be able to grant the user execute | ||||
access to the file. | ||||
o If the server supports execute permission bits, it MUST check just | ||||
the execute permissions in the mode, acl, and dacl attributes when | ||||
it receives an ACCESS request with ACCESS4_EXECUTE set the access | ||||
field. The server MUST NOT also examine read permission bits when | ||||
determining whether the reply will have ACCESS4_EXECUTE set in the | ||||
access field or not. Even if the server's operating environment | ||||
would grant execute access to the user (e.g., the user is | ||||
privileged), the server MUST NOT reply with ACCESS4_EXECUTE set in | ||||
reply's access field, unless there is at least one execute | ||||
permission bit set in the mode, acl, or dacl attributes. In the | ||||
case of acl and dacl, the "one execute permission bit" MUST be an | ||||
ACE4_EXECUTE bit set in an ALLOW ACE. | ||||
o If the server does not support execute permission bits, it MUST | ||||
NOT set ACCESS4_EXECUTE in the reply's supported and access | ||||
fields. If the client set ACCESS4_EXECUTE in the ACCESS request's | ||||
access field, and ACCESS4_EXECUTE is not set in the reply's | ||||
supported field, then the client will have to send an ACCESS | ||||
request with the ACCESS4_READ bit set in the request's access | ||||
field. | ||||
o If the server supports read permission bits, it MUST only check | ||||
for read permissions in the mode, acl, and dacl attributes when it | ||||
receives an ACCESS request with ACCESS4_READ set the access field. | ||||
The server MUST NOT also examine execute permission bits when | ||||
determining whether the reply will have ACCESS4_READ set in the | ||||
access field or not. | ||||
Note that if the ACCESS reply has ACCESS4_READ or ACCESS_EXECUTE set, | ||||
then the user also has permissions to OPEN (Section 18.16) or READ | ||||
(Section 18.22) the file. I.e., if client sends an ACCESS request | ||||
with the ACCESS4_READ and ACCESS_EXECUTE set in the access field (or | ||||
two separate requests, one with ACCESS4_READ set, and the other with | ||||
ACCESS4_EXECUTE set), and the reply has just ACCESS4_EXECUTE set in | ||||
the access field (or just one reply has ACCESS4_EXECUTE set), then | ||||
the user has authorization to OPEN or READ the file. | ||||
18.1.4. IMPLEMENTATION | 18.1.4. IMPLEMENTATION | |||
In general, it is not sufficient for the client to attempt to deduce | In general, it is not sufficient for the client to attempt to deduce | |||
access permissions by inspecting the uid, gid, and mode fields in the | access permissions by inspecting the uid, gid, and mode fields in the | |||
file attributes or by attempting to interpret the contents of the ACL | file attributes or by attempting to interpret the contents of the ACL | |||
attribute. This is because the server may perform uid or gid mapping | attribute. This is because the server may perform uid or gid mapping | |||
or enforce additional access control restrictions. It is also | or enforce additional access control restrictions. It is also | |||
possible that the server may not be in the same ID space as the | possible that the server may not be in the same ID space as the | |||
client. In these cases (and perhaps others), the client can not | client. In these cases (and perhaps others), the client can not | |||
reliably perform an access check with only current file attributes. | reliably perform an access check with only current file attributes. | |||
skipping to change at page 392, line 42 | skipping to change at page 395, line 42 | |||
In the NFSv2 protocol, the only reliable way to determine whether an | In the NFSv2 protocol, the only reliable way to determine whether an | |||
operation was allowed was to try it and see if it succeeded or | operation was allowed was to try it and see if it succeeded or | |||
failed. Using the ACCESS operation in the NFSv4.1 protocol, the | failed. Using the ACCESS operation in the NFSv4.1 protocol, the | |||
client can ask the server to indicate whether or not one or more | client can ask the server to indicate whether or not one or more | |||
classes of operations are permitted. The ACCESS operation is | classes of operations are permitted. The ACCESS operation is | |||
provided to allow clients to check before doing a series of | provided to allow clients to check before doing a series of | |||
operations which will result in an access failure. The OPEN | operations which will result in an access failure. The OPEN | |||
operation provides a point where the server can verify access to the | operation provides a point where the server can verify access to the | |||
file object and method to return that information to the client. The | file object and method to return that information to the client. The | |||
ACCESS operation is still useful for directory operations or for use | ACCESS operation is still useful for directory operations or for use | |||
in the case the UNIX API "access" is used on the client. | in the case the UNIX interface access() is used on the client. | |||
The information returned by the server in response to an ACCESS call | The information returned by the server in response to an ACCESS call | |||
is not permanent. It was correct at the exact time that the server | is not permanent. It was correct at the exact time that the server | |||
performed the checks, but not necessarily afterwards. The server can | performed the checks, but not necessarily afterwards. The server can | |||
revoke access permission at any time. | revoke access permission at any time. | |||
The client should use the effective credentials of the user to build | The client should use the effective credentials of the user to build | |||
the authentication information in the ACCESS request used to | the authentication information in the ACCESS request used to | |||
determine access rights. It is the effective user and group | determine access rights. It is the effective user and group | |||
credentials that are used in subsequent read and write operations. | credentials that are used in subsequent read and write operations. | |||
skipping to change at page 394, line 25 | skipping to change at page 397, line 25 | |||
18.2.4. IMPLEMENTATION | 18.2.4. IMPLEMENTATION | |||
Even though CLOSE returns a stateid, this stateid is not useful to | Even though CLOSE returns a stateid, this stateid is not useful to | |||
the client and should be treated as deprecated. CLOSE "shuts down" | the client and should be treated as deprecated. CLOSE "shuts down" | |||
the state associated with all OPENs for the file by a single open- | the state associated with all OPENs for the file by a single open- | |||
owner. As noted above, CLOSE will either release all file locking | owner. As noted above, CLOSE will either release all file locking | |||
state or return an error. Therefore, the stateid returned by CLOSE | state or return an error. Therefore, the stateid returned by CLOSE | |||
is not useful for operations that follow. To help find any uses of | is not useful for operations that follow. To help find any uses of | |||
this stateid by clients, the server SHOULD return the invalid special | this stateid by clients, the server SHOULD return the invalid special | |||
stated (the "other" value is zero and the "seqid" field is | stated (the "other" value is zero and the "seqid" field is | |||
NFS4_MAXFILELEN). | NFS4_UINT32_MAX, see Section 8.2.3). | |||
A CLOSE operation may make delegations grantable where they were not | A CLOSE operation may make delegations grantable where they were not | |||
previously. Servers may choose to respond immediately if there are | previously. Servers may choose to respond immediately if there are | |||
pending delegation want requests or may respond to the situation at a | pending delegation want requests or may respond to the situation at a | |||
later time. | later time. | |||
18.3. Operation 5: COMMIT - Commit Cached Data | 18.3. Operation 5: COMMIT - Commit Cached Data | |||
18.3.1. ARGUMENTS | 18.3.1. ARGUMENTS | |||
skipping to change at page 395, line 20 | skipping to change at page 398, line 20 | |||
union COMMIT4res switch (nfsstat4 status) { | union COMMIT4res switch (nfsstat4 status) { | |||
case NFS4_OK: | case NFS4_OK: | |||
COMMIT4resok resok4; | COMMIT4resok resok4; | |||
default: | default: | |||
void; | void; | |||
}; | }; | |||
18.3.3. DESCRIPTION | 18.3.3. DESCRIPTION | |||
The COMMIT operation forces or flushes data to stable storage for the | The COMMIT operation forces or flushes uncommitted, modified data to | |||
file specified by the current filehandle. The flushed data is that | stable storage for the file specified by the current filehandle. The | |||
which was previously written with a WRITE operation which had the | flushed data is that which was previously written with a WRITE | |||
stable field set to UNSTABLE4. | operation which had the stable field set to UNSTABLE4. | |||
The offset specifies the position within the file where the flush is | The offset specifies the position within the file where the flush is | |||
to begin. An offset value of 0 (zero) means to flush data starting | to begin. An offset value of 0 (zero) means to flush data starting | |||
at the beginning of the file. The count specifies the number of | at the beginning of the file. The count specifies the number of | |||
bytes of data to flush. If count is 0 (zero), a flush from offset to | bytes of data to flush. If count is 0 (zero), a flush from offset to | |||
the end of the file is done. | the end of the file is done. | |||
The server returns a write verifier upon successful completion of the | The server returns a write verifier upon successful completion of the | |||
COMMIT. The write verifier is used by the client to determine if the | COMMIT. The write verifier is used by the client to determine if the | |||
server has restarted between the initial WRITE(s) and the COMMIT. | server has restarted between the initial WRITE(s) and the COMMIT. | |||
skipping to change at page 396, line 17 | skipping to change at page 399, line 17 | |||
unless there has been an unexpected error. | unless there has been an unexpected error. | |||
COMMIT differs from fsync(2) in that it is possible for the client to | COMMIT differs from fsync(2) in that it is possible for the client to | |||
flush a range of the file (most likely triggered by a buffer- | flush a range of the file (most likely triggered by a buffer- | |||
reclamation scheme on the client before file has been completely | reclamation scheme on the client before file has been completely | |||
written). | written). | |||
The server implementation of COMMIT is reasonably simple. If the | The server implementation of COMMIT is reasonably simple. If the | |||
server receives a full file COMMIT request, that is starting at | server receives a full file COMMIT request, that is starting at | |||
offset 0 and count 0, it should do the equivalent of fsync()'ing the | offset 0 and count 0, it should do the equivalent of fsync()'ing the | |||
file. Otherwise, it should arrange to have the cached data in the | file. Otherwise, it should arrange to have the modified data in the | |||
range specified by offset and count to be flushed to stable storage. | range specified by offset and count to be flushed to stable storage. | |||
In both cases, any metadata associated with the file must be flushed | In both cases, any metadata associated with the file must be flushed | |||
to stable storage before returning. It is not an error for there to | to stable storage before returning. It is not an error for there to | |||
be nothing to flush on the server. This means that the data and | be nothing to flush on the server. This means that the data and | |||
metadata that needed to be flushed have already been flushed or lost | metadata that needed to be flushed have already been flushed or lost | |||
during the last server failure. | during the last server failure. | |||
The client implementation of COMMIT is a little more complex. There | The client implementation of COMMIT is a little more complex. There | |||
are two reasons for wanting to commit a client buffer to stable | are two reasons for wanting to commit a client buffer to stable | |||
storage. The first is that the client wants to reuse a buffer. In | storage. The first is that the client wants to reuse a buffer. In | |||
this case, the offset and count of the buffer are sent to the server | this case, the offset and count of the buffer are sent to the server | |||
in the COMMIT request. The server then flushes any cached data based | in the COMMIT request. The server then flushes any modified data | |||
on the offset and count, and flushes any metadata associated with the | based on the offset and count, and flushes any modified metadata | |||
file. It then returns the status of the flush and the write | associated with the file. It then returns the status of the flush | |||
verifier. The other reason for the client to generate a COMMIT is | and the write verifier. The other reason for the client to generate | |||
for a full file flush, such as may be done at close. In this case, | a COMMIT is for a full file flush, such as may be done at close. In | |||
the client would gather all of the buffers for this file that contain | this case, the client would gather all of the buffers for this file | |||
uncommitted data, do the COMMIT operation with an offset of 0 and | that contain uncommitted data, do the COMMIT operation with an offset | |||
count of 0, and then free all of those buffers. Any other dirty | of 0 and count of 0, and then free all of those buffers. Any other | |||
buffers would be sent to the server in the normal fashion. | dirty buffers would be sent to the server in the normal fashion. | |||
After a buffer is written by the client with the stable parameter set | After a buffer is written by the client with the stable parameter set | |||
to UNSTABLE4, the buffer must be considered as modified by the client | to UNSTABLE4, the buffer must be considered as modified by the client | |||
until the buffer has either been flushed via a COMMIT operation or | until the buffer has either been flushed via a COMMIT operation or | |||
written via a WRITE operation with stable parameter set to FILE_SYNC4 | written via a WRITE operation with stable parameter set to FILE_SYNC4 | |||
or DATA_SYNC4. This is done to prevent the buffer from being freed | or DATA_SYNC4. This is done to prevent the buffer from being freed | |||
and reused before the data can be flushed to stable storage on the | and reused before the data can be flushed to stable storage on the | |||
server. | server. | |||
When a response is returned from either a WRITE or a COMMIT operation | When a response is returned from either a WRITE or a COMMIT operation | |||
and it contains a write verifier that is different than previously | and it contains a write verifier that is different than previously | |||
returned by the server, the client will need to retransmit all of the | returned by the server, the client will need to retransmit all of the | |||
buffers containing uncommitted cached data to the server. How this | buffers containing uncommitted data to the server. How this is to be | |||
is to be done is up to the implementor. If there is only one buffer | done is up to the implementor. If there is only one buffer of | |||
of interest, then it should probably be sent back over in a WRITE | interest, then it should sent in a WRITE request with the FILE_SYNC4 | |||
request with the appropriate stable parameter. If there is more than | stable parameter. If there is more than one buffer, it might be | |||
one buffer, it might be worthwhile retransmitting all of the buffers | worthwhile retransmitting all of the buffers in WRITE requests with | |||
in WRITE requests with the stable parameter set to UNSTABLE4 and then | the stable parameter set to UNSTABLE4 and then retransmitting the | |||
retransmitting the COMMIT operation to flush all of the data on the | COMMIT operation to flush all of the data on the server to stable | |||
server to stable storage. The timing of these retransmissions is | storage. However, if the server repeatably returns from COMMIT a | |||
left to the implementor. | verifier that differs from that returned by WRITE, the only way to | |||
ensure progress is to retransmit all of the buffers with WRITE | ||||
requests with the FILE_SYNC4 stable parameter. | ||||
The above description applies to page-cache-based systems as well as | The above description applies to page-cache-based systems as well as | |||
buffer-cache-based systems. In those systems, the virtual memory | buffer-cache-based systems. In those systems, the virtual memory | |||
system will need to be modified instead of the buffer cache. | system will need to be modified instead of the buffer cache. | |||
18.4. Operation 6: CREATE - Create a Non-Regular File Object | 18.4. Operation 6: CREATE - Create a Non-Regular File Object | |||
18.4.1. ARGUMENTS | 18.4.1. ARGUMENTS | |||
union createtype4 switch (nfs_ftype4 type) { | union createtype4 switch (nfs_ftype4 type) { | |||
skipping to change at page 398, line 26 | skipping to change at page 401, line 26 | |||
default: | default: | |||
void; | void; | |||
}; | }; | |||
18.4.3. DESCRIPTION | 18.4.3. DESCRIPTION | |||
The CREATE operation creates a file object other than an ordinary | The CREATE operation creates a file object other than an ordinary | |||
file in a directory with a given name. The OPEN operation MUST be | file in a directory with a given name. The OPEN operation MUST be | |||
used to create a regular file or a named attribute. | used to create a regular file or a named attribute. | |||
The directory must be an object of type NF4DIR. If the current | The current filehandle must be a directory: an object of type NF4DIR. | |||
filehandle is an attribute directory (type NF4ATTRDIR), the error | If the current filehandle is an attribute directory (type | |||
NFS4ERR_WRONG_TYPE is returned. If the current file handle designate | NF4ATTRDIR), the error NFS4ERR_WRONG_TYPE is returned. If the | |||
any other type of object, the error NFS4ERR_NOTDIR results. | current file handle designates any other type of object, the error | |||
NFS4ERR_NOTDIR results. | ||||
The objname specifies the name for the new object. The objtype | The objname specifies the name for the new object. The objtype | |||
determines the type of object to be created: directory, symlink, etc. | determines the type of object to be created: directory, symlink, etc. | |||
If the object type specified is that of an ordinary file, a named | If the object type specified is that of an ordinary file, a named | |||
attribute, or a named attribute directory, the error NFS4ERR_BADTYPE | attribute, or a named attribute directory, the error NFS4ERR_BADTYPE | |||
results. | results. | |||
If an object of the same name already exists in the directory, the | If an object of the same name already exists in the directory, the | |||
server will return the error NFS4ERR_EXIST. | server will return the error NFS4ERR_EXIST. | |||
skipping to change at page 399, line 30 | skipping to change at page 402, line 32 | |||
the RPC call's credentials, such as the group principal if the | the RPC call's credentials, such as the group principal if the | |||
credentials include it (such as with AUTH_SYS), from the group | credentials include it (such as with AUTH_SYS), from the group | |||
identifier associated with the principal in the credentials (for | identifier associated with the principal in the credentials (for | |||
e.g., POSIX systems have a passwd database that has the group | e.g., POSIX systems have a passwd database that has the group | |||
identifier for every user identifier), inherited from directory the | identifier for every user identifier), inherited from directory the | |||
object is created in, or whatever else the server's operating | object is created in, or whatever else the server's operating | |||
environment or file system semantics dictate. This applies to the | environment or file system semantics dictate. This applies to the | |||
OPEN operation too. | OPEN operation too. | |||
Conversely, it is possible the client will specify in createattrs an | Conversely, it is possible the client will specify in createattrs an | |||
owner attribute or group attribute or ACL that the principal | owner attribute, group attribute, or ACL that the principal indicated | |||
indicated the RPC call's credentials does not have permissions to | the RPC call's credentials does not have permissions to create files | |||
create files for. The error to be returned in this instance is | for. The error to be returned in this instance is NFS4ERR_PERM. | |||
NFS4ERR_PERM. This applies to the OPEN operation too. | This applies to the OPEN operation too. | |||
If the current filehandle designates a directory for which another | If the current filehandle designates a directory for which another | |||
client holds a directory delegation, then, unless the delegation is | client holds a directory delegation, then, unless the delegation is | |||
such that the situation can be resolved by sending a notification, | such that the situation can be resolved by sending a notification, | |||
the delegation must be recalled, and the operation cannot proceed | the delegation MUST be recalled, and the CREATE operation MUST NOT | |||
until the delegation is returned or revoked. Except where this | proceed until the delegation is returned or revoked. Except where | |||
happens very quickly, one or more NFS4ERR_DELAY errors will be | this happens very quickly, one or more NFS4ERR_DELAY errors will be | |||
returned to requests made while delegation remains outstanding. | returned to requests made while delegation remains outstanding. | |||
When the current filehandle designates a directory for which one or | When the current filehandle designates a directory for which one or | |||
more directory delegations exist, then, when those delegations | more directory delegations exist, then, when those delegations | |||
request such notifications, NOTIFY4_ADD_ENTRY will be generated as a | request such notifications, NOTIFY4_ADD_ENTRY will be generated as a | |||
result of this operation. | result of this operation. | |||
If the capability FSCHARSET_CAP4_ALLOWS_ONLY_UTF8 is set | If the capability FSCHARSET_CAP4_ALLOWS_ONLY_UTF8 is set | |||
(Section 14.4), and a symbolic link is being created, then the | (Section 14.4), and a symbolic link is being created, then the | |||
content of the symbolic link MUST be in UTF-8 encoding. | content of the symbolic link MUST be in UTF-8 encoding. | |||
skipping to change at page 401, line 30 | skipping to change at page 404, line 30 | |||
18.6.3. DESCRIPTION | 18.6.3. DESCRIPTION | |||
Returns the delegation represented by the current filehandle and | Returns the delegation represented by the current filehandle and | |||
stateid. | stateid. | |||
Delegations may be returned when recalled or voluntarily (i.e. before | Delegations may be returned when recalled or voluntarily (i.e. before | |||
the server has recalled them). In either case the client must | the server has recalled them). In either case the client must | |||
properly propagate state changed under the context of the delegation | properly propagate state changed under the context of the delegation | |||
to the server before returning the delegation. | to the server before returning the delegation. | |||
The server MAY require that the principal, security flavor, and | The server MAY require that the principal, security flavor, and if | |||
applicable, the GSS mechanism, combination that acquired the | applicable, the GSS mechanism, combination that acquired the | |||
delegation also be the one to send DELEGRETURN on the file. This | delegation also be the one to send DELEGRETURN on the file. This | |||
might not be possible if credentials for the principal are no longer | might not be possible if credentials for the principal are no longer | |||
available. The server MAY allow the machine credential or SSV | available. The server MAY allow the machine credential or SSV | |||
credential (see Section 18.35) to send DELEGRETURN. | credential (see Section 18.35) to send DELEGRETURN. | |||
18.7. Operation 9: GETATTR - Get Attributes | 18.7. Operation 9: GETATTR - Get Attributes | |||
18.7.1. ARGUMENTS | 18.7.1. ARGUMENTS | |||
skipping to change at page 402, line 30 | skipping to change at page 405, line 30 | |||
The GETATTR operation will obtain attributes for the file system | The GETATTR operation will obtain attributes for the file system | |||
object specified by the current filehandle. The client sets a bit in | object specified by the current filehandle. The client sets a bit in | |||
the bitmap argument for each attribute value that it would like the | the bitmap argument for each attribute value that it would like the | |||
server to return. The server returns an attribute bitmap that | server to return. The server returns an attribute bitmap that | |||
indicates the attribute values which it was able to return, which | indicates the attribute values which it was able to return, which | |||
will include all attributes requested by the client which are | will include all attributes requested by the client which are | |||
attributes supported by the server for the target file system. This | attributes supported by the server for the target file system. This | |||
bitmap is followed by the attribute values ordered lowest attribute | bitmap is followed by the attribute values ordered lowest attribute | |||
number first. | number first. | |||
The server must return a value for each attribute that the client | The server MUST return a value for each attribute that the client | |||
requests if the attribute is supported by the server for the target | requests if the attribute is supported by the server for the target | |||
file system. If the server does not support a particular attribute | file system. If the server does not support a particular attribute | |||
on the target file system then it must not return the attribute value | on the target file system then it MUST NOT return the attribute value | |||
and must not set the attribute bit in the result bitmap. The server | and MUST NOT set the attribute bit in the result bitmap. The server | |||
must return an error if it supports an attribute on the target but | MUST return an error if it supports an attribute on the target but | |||
cannot obtain its value. In that case, no attribute values will be | cannot obtain its value. In that case, no attribute values will be | |||
returned. | returned. | |||
File systems which are absent should be treated as having support for | File systems which are absent should be treated as having support for | |||
a very small set of attributes as described in GETATTR Within an | a very small set of attributes as described in GETATTR Within an | |||
Absent File System (Section 5), even if previously, when the file | Absent File System (Section 5), even if previously, when the file | |||
system was present, more attributes were supported. | system was present, more attributes were supported. | |||
All servers MUST support the REQUIRED attributes as specified in File | All servers MUST support the REQUIRED attributes as specified in File | |||
Attributes (Section 11.3.1), for all file systems, with the exception | Attributes (Section 11.3.1), for all file systems, with the exception | |||
of absent file systems. | of absent file systems. | |||
On success, the current filehandle retains its value. | On success, the current filehandle retains its value. | |||
18.7.4. IMPLEMENTATION | 18.7.4. IMPLEMENTATION | |||
When there is write delegation held by another client for file in | Suppose there is a write delegation held by another client for file | |||
question and the set of attributes being interrogated includes the | in question and size and/or change are among the set of attributes | |||
size of change attributes. the server needs to obtain the actual | being interrogated. The server has two choices. First, the server | |||
current value of these attributes from the client holding the | can obtain the actual current value of these attributes from the | |||
delegation by using the CB_GETATTR callback. The server, | client holding the delegation by using the CB_GETATTR callback. | |||
particularly, when the delegated client is unresponsive, choose | Second, the server, particularly when the delegated client is | |||
instead to recall the delegation in question. The GETATTR may not, | unresponsive, can recall the delegation in question. The GETATTR | |||
in this case proceed until of the following occurs: | MUST NOT proceed until one of the following occurs: | |||
o The requested attribute values are returned in the response to | o The requested attribute values are returned in the response to | |||
CB_GETATTR. | CB_GETATTR. | |||
o The write delegation is returned. | o The write delegation is returned. | |||
o The write delegation is revoked. | o The write delegation is revoked. | |||
Except where one of these happens very quickly, one or more | Unless one of the above happens very quickly, one or more | |||
NFS4ERR_DELAY errors will be returned to requests made while | NFS4ERR_DELAY errors will be returned if while a delegation is | |||
delegation remains outstanding. | outstanding. | |||
18.8. Operation 10: GETFH - Get Current Filehandle | 18.8. Operation 10: GETFH - Get Current Filehandle | |||
18.8.1. ARGUMENTS | 18.8.1. ARGUMENTS | |||
/* CURRENT_FH: */ | /* CURRENT_FH: */ | |||
void; | void; | |||
18.8.2. RESULTS | 18.8.2. RESULTS | |||
skipping to change at page 404, line 5 | skipping to change at page 407, line 5 | |||
default: | default: | |||
void; | void; | |||
}; | }; | |||
18.8.3. DESCRIPTION | 18.8.3. DESCRIPTION | |||
This operation returns the current filehandle value. | This operation returns the current filehandle value. | |||
On success, the current filehandle retains its value. | On success, the current filehandle retains its value. | |||
As described in Section 2.10.5.4, GETFH is REQUIRED or RECOMMENDED to | ||||
immediately follow certain operations, and servers are free to reject | ||||
such operations the client fails to insert GETFH in the request as | ||||
REQUIRED or RECOMMENDED. Section 18.16.4.1 provides additional | ||||
justification for why GETFH MUST follow OPEN. | ||||
18.8.4. IMPLEMENTATION | 18.8.4. IMPLEMENTATION | |||
Operations that change the current filehandle like LOOKUP or CREATE | Operations that change the current filehandle like LOOKUP or CREATE | |||
do not automatically return the new filehandle as a result. For | do not automatically return the new filehandle as a result. For | |||
instance, if a client needs to lookup a directory entry and obtain | instance, if a client needs to lookup a directory entry and obtain | |||
its filehandle then the following request is needed. | its filehandle then the following request is needed. | |||
PUTFH (directory filehandle) | PUTFH (directory filehandle) | |||
LOOKUP (entry name) | LOOKUP (entry name) | |||
skipping to change at page 405, line 24 | skipping to change at page 408, line 34 | |||
The server MAY impose restrictions on the LINK operation such that | The server MAY impose restrictions on the LINK operation such that | |||
LINK may not be done when the file is open or when that open is done | LINK may not be done when the file is open or when that open is done | |||
by particular protocols, or with particular options or access modes. | by particular protocols, or with particular options or access modes. | |||
When LINK is rejected because of such restrictions, the error | When LINK is rejected because of such restrictions, the error | |||
NFS4ERR_FILE_OPEN is returned. | NFS4ERR_FILE_OPEN is returned. | |||
If a server does implement such restrictions and those restrictions | If a server does implement such restrictions and those restrictions | |||
include cases of NFSv4 opens preventing successful execution of a | include cases of NFSv4 opens preventing successful execution of a | |||
link, the server needs to recall any delegations which could hide the | link, the server needs to recall any delegations which could hide the | |||
existence of opens relevant to that decision. This is because of the | existence of opens relevant to that decision. The reason is that | |||
fact that when a client holds a delegation, the server need not have | when a client holds a delegation, the server might not have an | |||
accurate picture of the opens for that client, since the client may | accurate account of the opens for that client, since the client may | |||
execute OPENs and CLOSEs locally. The LINK operation must be delayed | execute OPENs and CLOSEs locally. The LINK operation must be delayed | |||
only until a definitive result can be obtained. For example, if | only until a definitive result can be obtained. E.g., suppose there | |||
there are multiple delegations and one of them establishes an open | are multiple delegations and one of them establishes an open whose | |||
whose presence would prevent the link, given the server's semantics, | presence would prevent the link. Given the server's semantics, | |||
NFS4ERR_FILE_OPEN may be returned to the caller as soon as that | NFS4ERR_FILE_OPEN may be returned to the caller as soon as that | |||
delegation is returned without waiting for other delegations to be | delegation is returned without waiting for other delegations to be | |||
returned. Similarly, if such opens are not associated with | returned. Similarly, if such opens are not associated with | |||
delegations, NFS4ERR_FILE_OPEN can be returned immediately with no | delegations, NFS4ERR_FILE_OPEN can be returned immediately with no | |||
delegation recall being done. | delegation recall being done. | |||
If the current filehandle designates a directory for which another | If the current filehandle designates a directory for which another | |||
client holds a directory delegation, then, unless the delegation is | client holds a directory delegation, then, unless the delegation is | |||
such that the situation can be resolved by sending a notification, | such that the situation can be resolved by sending a notification, | |||
the delegation must be recalled, and the operation cannot be | the delegation MUST be recalled, and the operation cannot be | |||
performed successfully. until the delegation is returned or revoked. | performed successfully. until the delegation is returned or revoked. | |||
Except where this happens very quickly, one or more NFS4ERR_DELAY | Except where this happens very quickly, one or more NFS4ERR_DELAY | |||
errors will be returned to requests made while delegation remains | errors will be returned to requests made while delegation remains | |||
outstanding. | outstanding. | |||
When the current filehandle designates a directory for which one or | When the current filehandle designates a directory for which one or | |||
more directory delegations exist, then, when those delegations | more directory delegations exist, then, when those delegations | |||
request such notifications, NOTIFY4_ADD_ENTRY will be generated as a | request such notifications, instead of a recall, NOTIFY4_ADD_ENTRY | |||
result of this operation. | will be generated as a result of the LINK operation. | |||
If the current file system supports the numlinks attribute, and other | If the current file system supports the numlinks attribute, and other | |||
clients have delegations to the file being linked, then those | clients have delegations to the file being linked, then those | |||
delegations must be recalled and the operation may proceed until all | delegations MUST be recalled and the LINK operation MUST NOT proceed | |||
delegations are returned or revoked. Except where this happens very | until all delegations are returned or revoked. Except where this | |||
quickly, one or more NFS4ERR_DELAY errors will be returned to | happens very quickly, one or more NFS4ERR_DELAY errors will be | |||
requests made while delegation remains outstanding. | returned to requests made while delegation remains outstanding. | |||
Changes to any property of the "hard" linked files are reflected in | Changes to any property of the "hard" linked files are reflected in | |||
all of the linked files. When a link is made to a file, the | all of the linked files. When a link is made to a file, the | |||
attributes for the file should have a value for numlinks that is one | attributes for the file should have a value for numlinks that is one | |||
greater than the value before the LINK operation. | greater than the value before the LINK operation. | |||
The statement "file and the target directory must reside within the | The statement "file and the target directory must reside within the | |||
same file system on the server" means that the fsid fields in the | same file system on the server" means that the fsid fields in the | |||
attributes for the objects are the same. If they reside on different | attributes for the objects are the same. If they reside on different | |||
file systems, the error NFS4ERR_XDEV, is returned. This error may be | file systems, the error NFS4ERR_XDEV is returned. This error may be | |||
returned by some server when there is an internal partitioning of a | returned by some server when there is an internal partitioning of a | |||
file system which the LINK operation would violate. | file system which the LINK operation would violate. | |||
On some servers, the filenames, "." and "..", are illegal as newname | On some servers, "." and ".." are illegal values for newname and the | |||
and the error NFS4ERR_BADNAME will be returned if they are specified. | error NFS4ERR_BADNAME will be returned if they are specified. | |||
When the current filehandle designates a named attribute directory | When the current filehandle designates a named attribute directory | |||
and the object to be linked (the saved filehandle) is not a named | and the object to be linked (the saved filehandle) is not a named | |||
attribute for the same object, the error NFS4ERR_XDEV must be | attribute for the same object, the error NFS4ERR_XDEV MUST be | |||
returned. When the saved filehandle designates a named attribute and | returned. When the saved filehandle designates a named attribute and | |||
the current filehandle is not the appropriate named attribute | the current filehandle is not the appropriate named attribute | |||
directory, the error NFS4ERR_XDEV MUST also be returned. | directory, the error NFS4ERR_XDEV MUST also be returned. | |||
When the current filehandle designates a named attribute directory | When the current filehandle designates a named attribute directory | |||
and the object to be linked (the saved filehandle) is a named | and the object to be linked (the saved filehandle) is a named | |||
attribute within that directory, the server may return the error | attribute within that directory, the server may return the error | |||
NFS4ERR_NOTSUPP. | NFS4ERR_NOTSUPP. | |||
In the case that newname is already linked to the file represented by | In the case that newname is already linked to the file represented by | |||
skipping to change at page 440, line 25 | skipping to change at page 443, line 25 | |||
18.20.3. DESCRIPTION | 18.20.3. DESCRIPTION | |||
Replaces the current filehandle with the filehandle that represents | Replaces the current filehandle with the filehandle that represents | |||
the public filehandle of the server's name space. This filehandle | the public filehandle of the server's name space. This filehandle | |||
may be different from the "root" filehandle which may be associated | may be different from the "root" filehandle which may be associated | |||
with some other directory on the server. | with some other directory on the server. | |||
PUTPUBFH also clears the current stateid. | PUTPUBFH also clears the current stateid. | |||
The public filehandle represents the concepts embodied in RFC2054 | The public filehandle represents the concepts embodied in RFC2054 | |||
[32], RFC2055 [33], RFC2224 [41]. The intent for NFSv4.1 is that the | [32], RFC2055 [33], RFC2224 [42]. The intent for NFSv4.1 is that the | |||
public filehandle (represented by the PUTPUBFH operation) be used as | public filehandle (represented by the PUTPUBFH operation) be used as | |||
a method of providing WebNFS server compatibility with NFSv3. | a method of providing WebNFS server compatibility with NFSv3. | |||
The public filehandle and the root filehandle (represented by the | The public filehandle and the root filehandle (represented by the | |||
PUTROOTFH operation) SHOULD be equivalent. If the public and root | PUTROOTFH operation) SHOULD be equivalent. If the public and root | |||
filehandles are not equivalent, then the public filehandle MUST be a | filehandles are not equivalent, then the public filehandle MUST be a | |||
descendant of the root filehandle. | descendant of the root filehandle. | |||
See Section 16.2.3.1.1 for more details on the current filehandle. | See Section 16.2.3.1.1 for more details on the current filehandle. | |||
skipping to change at page 440, line 47 | skipping to change at page 443, line 47 | |||
18.20.4. IMPLEMENTATION | 18.20.4. IMPLEMENTATION | |||
Used as the second operator (after SEQUENCE) in an NFS request to set | Used as the second operator (after SEQUENCE) in an NFS request to set | |||
the context for file accessing operations that follow in the same | the context for file accessing operations that follow in the same | |||
COMPOUND request. | COMPOUND request. | |||
With the NFSv3 public filehandle, the client is able to specify | With the NFSv3 public filehandle, the client is able to specify | |||
whether the path name provided in the LOOKUP should be evaluated as | whether the path name provided in the LOOKUP should be evaluated as | |||
either an absolute path relative to the server's root or relative to | either an absolute path relative to the server's root or relative to | |||
the public filehandle. RFC2224 [41] contains further discussion of | the public filehandle. RFC2224 [42] contains further discussion of | |||
the functionality. With NFSv4.1, that type of specification is not | the functionality. With NFSv4.1, that type of specification is not | |||
directly available in the LOOKUP operation. The reason for this is | directly available in the LOOKUP operation. The reason for this is | |||
because the component separators needed to specify absolute vs. | because the component separators needed to specify absolute vs. | |||
relative are not allowed in NFSv4. Therefore, the client is | relative are not allowed in NFSv4. Therefore, the client is | |||
responsible for constructing its request such that the use of either | responsible for constructing its request such that the use of either | |||
PUTROOTFH or PUTPUBFH are used to signify absolute or relative | PUTROOTFH or PUTPUBFH are used to signify absolute or relative | |||
evaluation of an NFS URL respectively. | evaluation of an NFS URL respectively. | |||
Note that there are warnings mentioned in RFC2224 [41] with respect | Note that there are warnings mentioned in RFC2224 [42] with respect | |||
to the use of absolute evaluation and the restrictions the server may | to the use of absolute evaluation and the restrictions the server may | |||
place on that evaluation with respect to how much of its namespace | place on that evaluation with respect to how much of its namespace | |||
has been made available. These same warnings apply to NFSv4.1. It | has been made available. These same warnings apply to NFSv4.1. It | |||
is likely, therefore that because of server implementation details, | is likely, therefore that because of server implementation details, | |||
an NFSv3 absolute public filehandle lookup may behave differently | an NFSv3 absolute public filehandle lookup may behave differently | |||
than an NFSv4.1 absolute resolution. | than an NFSv4.1 absolute resolution. | |||
There is a form of security negotiation as described in RFC2755 [42] | There is a form of security negotiation as described in RFC2755 [43] | |||
that uses the public filehandle and an overloading of the pathname. | that uses the public filehandle and an overloading of the pathname. | |||
This method is not available with NFSv4.1 as filehandles are not | This method is not available with NFSv4.1 as filehandles are not | |||
overloaded with special meaning and therefore do not provide the same | overloaded with special meaning and therefore do not provide the same | |||
framework as NFSv3. Clients should therefore use the security | framework as NFSv3. Clients should therefore use the security | |||
negotiation mechanisms described in Section 2.6. | negotiation mechanisms described in Section 2.6. | |||
18.21. Operation 24: PUTROOTFH - Set Root Filehandle | 18.21. Operation 24: PUTROOTFH - Set Root Filehandle | |||
18.21.1. ARGUMENTS | 18.21.1. ARGUMENTS | |||
skipping to change at page 574, line 43 | skipping to change at page 577, line 43 | |||
Zeidner, "Internet Small Computer Systems Interface (iSCSI)", | Zeidner, "Internet Small Computer Systems Interface (iSCSI)", | |||
RFC 3720, April 2004. | RFC 3720, April 2004. | |||
[39] Snively, R., "Fibre Channel Protocol for SCSI, 2nd Version | [39] Snively, R., "Fibre Channel Protocol for SCSI, 2nd Version | |||
(FCP-2)", ANSI/INCITS 350-2003, Oct 2003. | (FCP-2)", ANSI/INCITS 350-2003, Oct 2003. | |||
[40] Weber, R., "Object-Based Storage Device Commands (OSD)", ANSI/ | [40] Weber, R., "Object-Based Storage Device Commands (OSD)", ANSI/ | |||
INCITS 400-2004, July 2004, | INCITS 400-2004, July 2004, | |||
<http://www.t10.org/ftp/t10/drafts/osd/osd-r10.pdf>. | <http://www.t10.org/ftp/t10/drafts/osd/osd-r10.pdf>. | |||
[41] Callaghan, B., "NFS URL Scheme", RFC 2224, October 1997. | [41] The Open Group, "The Open Group Base Specifications Issue 6, | |||
IEEE Std 1003.1, 2004 Edition", 2004. | ||||
[42] Chiu, A., Eisler, M., and B. Callaghan, "Security Negotiation | [42] Callaghan, B., "NFS URL Scheme", RFC 2224, October 1997. | |||
[43] Chiu, A., Eisler, M., and B. Callaghan, "Security Negotiation | ||||
for WebNFS", RFC 2755, January 2000. | for WebNFS", RFC 2755, January 2000. | |||
Appendix A. Acknowledgments | Appendix A. Acknowledgments | |||
The initial drafts for the SECINFO extensions were edited by Mike | The initial drafts for the SECINFO extensions were edited by Mike | |||
Eisler with contributions from Peng Dai, Sergey Klyushin, and Carl | Eisler with contributions from Peng Dai, Sergey Klyushin, and Carl | |||
Burnett. | Burnett. | |||
The initial drafts for the SESSIONS extensions were edited by Tom | The initial drafts for the SESSIONS extensions were edited by Tom | |||
Talpey, Spencer Shepler, Jon Bauman with contributions from Charles | Talpey, Spencer Shepler, Jon Bauman with contributions from Charles | |||
End of changes. 64 change blocks. | ||||
180 lines changed or deleted | 335 lines changed or added | |||
This html diff was produced by rfcdiff 1.33. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |