<?xml version='1.0' encoding='ascii'?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc strict="yes" ?>
<?rfc toc="yes" ?>
<?rfc tocdepth="2" ?>
<?rfc symrefs="yes" ?>
<?rfc sortrefs="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="std" ipr="trust200902" docName="draft-cel-nfsv4-federated-fs-nce-05" obsoletes="" updates="" submissionType="IETF" xml:lang="en">
  <front>
    <title abbrev="FedFS NSDB Organization">A Simpler Mechanism For Organizing FedFS NSDBs </title>
    <author initials="C.L." surname="Lever" fullname="Charles Lever">
      <organization abbrev="Oracle">Oracle Corporation </organization>
      <address>
        <postal>
          <street>1015 Granger Avenue</street>
          <city>Ann Arbor</city>
          <region>MI</region>
          <code>48104</code>
          <country>USA</country>
        </postal>
        <phone>+1 734 274 2396</phone>
        <email>chuck.lever@oracle.com</email>
      </address>
    </author>
    <author initials="S.S." surname="Sorce" fullname="Simo Sorce">
      <organization abbrev="Red Hat">Red Hat, Inc.  </organization>
      <address>
        <email>simo.sorce@redhat.com</email>
      </address>
    </author>
    <date/>
    <area>Transport</area>
    <workgroup>Network File System Version 4</workgroup>
    <keyword>Federated File Systems</keyword>
    <abstract>
      <t>This document describes a new, simpler mechanism for searching FedFS NSDBs (Name Space Data Bases) for FedFS records.  This mechanism replaces the mechanism described in existing FedFS Proposed Standards.  </t>
    </abstract>
    <note title="Requirements Language">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in <xref target="RFC2119" pageno="false" format="default"/>.  </t>
    </note>
  </front>
  <middle>
    <section title="Introduction" toc="default">
      <t>A FedFS junction is an object stored on a fileserver that redirects file-access clients to other fileserver shares.  Using junctions, multiple fileserver shares on many fileservers can be joined into a single filename namespace.  Think of a junction as a symlink that points to the root directory of a share stored on another fileserver.  </t>
      <t>The target locations of these remote shares are not stored in FedFS junctions.  Instead, a junction contains a reference to a set of location information stored in an LDAP directory.  The LDAP directory is referred to as a Name Space Data Base, or NSDB.  </t>
      <t>The fundamental and most frequent operation performed with an NSDB is "FSN resolution," described in section 5.2.2 of <xref target="RFC7532" pageno="false" format="default"/>.  This is the act of reading the reference stored in a junction, retrieving the referenced location information from an NSDB, and forming a filesystem referral to send to file-access clients using a native filesystem protocol.  In this scenario, a fileserver acts as an NSDB client.  </t>
      <t>FedFS records in any NSDB are stored as descendants of an NSDB Container Entry, or NCE, for short.  An NSDB client specifies a search base when forming an LDAP query to search an NSDB for FedFS records.  The Distinguished Name of an NCE is that search base.  </t>
      <t>FedFS junctions contain only the hostname and port of the NSDB service and a UUID.  NSDB clients use a standard procedure for probing NSDBs for their NCEs.  For the purposes of this discussion, we refer to procedures which retrieve putative NCEs from an NSDB as "NCE discovery mechanisms." </t>
      <t>Implementation experience has shown that the NCE discovery mechanism currently defined in sections 4.1 and 5.2.1 of <xref target="RFC7532" pageno="false" format="default"/> can be problematic for some LDAP server implementations or deployments.  In particular, altering the rootDSE of LDAP servers in any way is an onerous requirement.  We present a new mechanism for expressing NCEs that does not require alteration of the rootDSE.  </t>
      <section title="Altering rootDSEs Considered Hazardous" toc="default">
        <t>As described in Section 4.1 of <xref target="RFC7532" pageno="false" format="default"/>, the LDAP naming context that is superior to an NCE is modified to include the fedfsNsdbContainerInfo object class.  This object class carries the mandatory fedfsNceDN attribute, whose value is the Distinguished Name of the NCE that resides under that naming context.  </t>
        <t>To discover all NCEs on an NSDB, NSDB clients use the procedure described in Section 5.2.1 of <xref target="RFC7532" pageno="false" format="default"/>.  NSDB clients look for naming context entries that include the fedfsNsdbContainerInfo object class.  The fedfsNceDN attribute points directly to the NCE under that root suffix.  </t>
        <t>Difficulty arises because there is often a high bar to altering an LDAP server's rootDSE.  </t>
        <t><list style="symbols"><t>Because rootDSE's typically contain read-mostly or even read-only data, an LDAP server implementation may simulate its rootDSE, rather than storing it as regular LDAP records.  Code changes would be necessary for such an LDAP server implementation to act as an NSDB.  </t><t>For security reasons, some LDAP server deployments may not wish to grant unauthenticated access to their rootDSE information.  </t><t>Typically, a separate NSDB administrator account is used to manage NSDB entries under an NCE, but LDAP server administrator privileges (essentially, a root password for the LDAP server) are required if an NCE needs to be added, moved, or deleted.  Some LDAP server administrators may prefer using Access Control Lists (ACLs) to manage access to all FedFS record types, including NCEs.  </t><t>The schema specified in <xref target="RFC7532" pageno="false" format="default"/> limits the number of NCEs per naming context to one.  There does not appear to be any other architected limit in the NSDB protocol that requires a one-to-one relationship between naming context and NCE.  </t></list> </t>
        <t>Neither <xref target="RFC7532" pageno="false" format="default"/> nor <xref target="RFC5716" pageno="false" format="default"/> discuss the motivation for referring to an NCE record via the rootDSE.  The use of the current NCE discovery mechanism is simply a convenience that enables the contents of junctions to exclude the LDAP search base when specifying the LDAP record containing the junction's target locations.  </t>
        <t>Originally, an NSDB Container Entry DN was stored in each junction, along with an FSN UUID and the name of the NSDB where the FSN was stored.  </t>
        <t>To simplify the contents of junctions, the NCE DN was removed from junctions as the design of the NSDB protocol was finalized.  NSDB clients were tasked with discovering the correct LDAP search base to use by searching the target NSDB's rootDSE for the NCE DN.  </t>
        <t>The current approach is described in Section 5.2.2 of <xref target="RFC7532" pageno="false" format="default"/>: </t>
        <t><list style="numbers"><t>The NSDB client obtains a list of the target NSDB's naming contexts.  </t><t>The NSDB client obtains a list of NCEs that reside on the target NSDB by searching each of the NSDB's naming contexts for the fedfsNsdbContainerInfo object class.  </t><t>Finally, the NSDB client forms a series of LDAP queries using  each NCE as the search base.  The client supplies a filter to retrieve only objects in the fedfsFsl object class.  </t></list> </t>
        <t>The search stops when one or more FSLs are returned or when all NCEs have been searched.  </t>
        <t>Without the fedfsNsdbContainerInfo object class, a root suffix DN is an adequate LDAP search base to use when searching for FSL records.  For administrative purposes, however, the construct of NCE is maintained.  </t>
      </section>
    </section>
    <section title="Simplifying NCE Discovery" toc="default">
      <t>Rather than relying on a Distinguish Name stored in an attribute by an administrative tool, an NSDB client might instead use a search query that is natural to LDAP to obtain that DN.  </t>
      <t>Currently an NSDB Container Entry record is entirely unremarkable, except for its position in the DIT.  It includes no special object class, Distinguished Name, or attribute that defines it as an NCE.  It becomes an NCE only because its parent naming context points to it via the context's fedfsNceDN attribute.  </t>
      <t>If each NCE were instead tagged with an object class specific only to NCEs, NSDB clients could discover NCEs simply by filtering on that object class.  Then no change to the LDAP server's rootDSE is required.  </t>
      <t>The following sections provide a protocol specification, similar to <xref target="RFC7532" pageno="false" format="default"/>, for the new NCE discovery mechanism.  </t>
      <section title="NSDB Configuration" anchor="nsdb-config" toc="default">
        <t>An NSDB is constructed using an LDAP Directory.  This LDAP Directory can have multiple naming contexts.  The LDAP Directory's DSA-specific entry (its rootDSE) has a multi-valued namingContext attribute.  Each value of the namingContext attribute is the DN of the naming context's root entry (see <xref target="RFC4512" pageno="false" format="default"/>).  </t>
        <t>For each naming context that contains federation entries (e.g., FSNs and FSLs): </t>
        <t><list style="numbers"><t>Typically, all of a naming context's federation entries are descended from one LDAP entry in the Directory Information Tree (DIT).  This entry is termed an NSDB Container Entry (NCE).  </t><t>NSDB clients filter with "(objectClass=fedfsNsdbContainerEntry)" to locate the naming context's NCEs.  Therefore, every NCE MUST include fedfsNsdbContainerEntry as one of its object classes.  </t><t>NSDB clients search for FSNs with a scope ONE search, based on an NCE.  Therefore, all FSN entries under the naming context MUST be immediate children of an NCE.  </t><t>NSDB clients search for FSLs with a scope ONE search, based on an FSN entry.  Therefore, all FSL entries under the naming context MUST be immediate children of an FSN entry.  </t></list> </t>
        <t>An NCE may have no children.  When an NSDB is first created, there are no federation entries aside from the NCE, which therefore has no federation-related descendents.  </t>
        <t>NSDB administrative operations, such as those described in Section 5.1 of <xref target="RFC7532" pageno="false" format="default"/>, may use NCEs to demark the position of repositories for federation entries.  </t>
        <t>If a naming context does not host an NSDB DIT, it MUST NOT contain an entry that includes the fedfsNsdbContainerEntry object class.  For example, an LDAP directory might have the following entries: </t>
        <figure title="" suppress-title="false" align="left" alt="" width="" height="">
          <artwork xml:space="preserve" name="" type="" align="left" alt="" width="" height="">
            
        -+ [root DSE]
         |  namingContext: o=fedfs
         |  namingContext: dc=example,dc=com
         |  namingContext: ou=system
         |
         |
         +---- [o=fedfs]
         |      objectClass: fedfsNsdbContainerEntry
         |
         |
         +---- [dc=example,dc=com]
         |
         +-------- [ou=corp-it,dc=example,dc=com]
         |
         +------------ [ou=fedfs,ou=corp-it,dc=example,dc=com]
         |              objectClass: fedfsNsdbContainerEntry
         |
         |
         +---- [ou=system]
            
          </artwork>
        </figure>
        <t>In this case, the o=fedfs naming context is also an NSDB Container Entry; the dc=example,dc=com naming context has an NSDB Container Entry at ou=fedfs,ou=corp-it,dc=example,dc=com, and the ou=system naming context has no NSDB Container Entry.  </t>
        <t>The NSDB SHOULD be configured with one or more privileged LDAP users. These users are able to modify the contents of the LDAP database.  To perform the operations described in Section 5.1 of <xref target="RFC7532" pageno="false" format="default"/>, a user SHOULD authenticate using the DN of a privileged LDAP user.  </t>
        <t>It MUST be possible for an unprivileged (unauthenticated) user to perform LDAP queries that access NSDB data.  A fileserver performs the operations described in Section 5.2 of <xref target="RFC7532" pageno="false" format="default"/> as an unprivileged user.  </t>
        <t>All NSDB implementations SHOULD use the same schema.  At minimum, each MUST use a schema that includes all attributes and objects named in Section 4.2 of <xref target="RFC7532" pageno="false" format="default"/> and in <xref target="schema" pageno="false" format="default"/>.  If it is necessary for an implementation to privately extend the schema defined there, consider using one of the following ways: </t>
        <t><list style="symbols"><t>Define a fedfsAnnotation key and values (see Section 4.2.1.6 of <xref target="RFC7532" pageno="false" format="default"/>).  Register the new key and values with IANA.  </t><t>Define additional attribute types and object classes, then have entries inherit from a class defined in Section 4.1 of <xref target="RFC7532" pageno="false" format="default"/> and in <xref target="schema" pageno="false" format="default"/>, and from the implementation-defined ones.  </t></list> </t>
      </section>
      <section title="fedfsNsdbContainerEntry" anchor="schema" toc="default">
        <t>This section is an addendum to the FedFS NSDB schema specified in Section 4.1 of <xref target="RFC7532" pageno="false" format="default"/>.  </t>
        <t>The fedfsNsdbContainerEntry object class signifies that an LDAP record acts as an NSDB Container Entry (NCE).  </t>
        <t>A fedfsNsdbContainerEntry's has no mandatory attributes.  A fedfsNsdbContainerEntry's fedfsAnnotation and fedfsDescr attributes are OPTIONAL.  </t>
        <t><cref>RFC Editor: please replace "a.b.c.d.e.f.g.h.i" with the object class's OID assigned by IANA as requested in "IANA Considerations".  </cref> </t>
        <t>&lt;CODE BEGINS&gt; </t>
        <figure title="" suppress-title="false" align="left" alt="" width="" height="">
          <artwork xml:space="preserve" name="" type="" align="left" alt="" width="" height="">
            
      ///
      /// objectclass (
      ///     a.b.c.d.e.f.g.h.i NAME 'fedfsNsdbContainerEntry'
      ///     DESC 'Denotes an NSDB Container Entry'
      ///     SUP top AUXILIARY
      ///     MAY (
      ///             fedfsAnnotation
      ///             $ fedfsDescr
      ///     ))
      ///
            
          </artwork>
        </figure>
        <t>&lt;CODE ENDS&gt; </t>
      </section>
      <section title="NSDB Container Entry (NCE) Enumeration" anchor="enumeration" toc="default">
        <t>To find NCEs residing on the NSDB nsdb.example.com, an NSDB client SHOULD do the following: </t>
        <t>&lt;CODE BEGINS&gt; </t>
        <figure title="" suppress-title="false" align="left" alt="" width="" height="">
          <artwork xml:space="preserve" name="" type="" align="left" alt="" width="" height="">
            
      nce_list = empty
      connect to the LDAP directory at nsdb.example.com
      for each namingContext value $BAR in the root DSE
          /* $BAR is a DN */
          query for fedfsNsdbContainerEntry objects under $BAR
          include the DN of such objects on the nce_list
            
          </artwork>
        </figure>
        <t>&lt;CODE ENDS&gt; </t>
        <t>The <xref target="RFC4516" pageno="false" format="default"/> LDAP URL for the search query inside the loop would be: </t>
        <figure title="" suppress-title="false" align="left" alt="" width="" height="">
          <artwork xml:space="preserve" name="" type="" align="left" alt="" width="" height="">
            
      ldap://nsdb.example.com:389/$BAR??sub?
              (objectClass=fedfsNsdbContainerEntry)
            
          </artwork>
        </figure>
      </section>
    </section>
    <section title="Backwards Compatibility" toc="default">
      <section title="NSDB server compatibility" toc="default">
        <t>NSDBs might serve NSDB client populations that contain clients that comply only with <xref target="RFC7532" pageno="false" format="default"/> as well as clients that use the query described in <xref target="enumeration" pageno="false" format="default"/>.  </t>
        <t>In this case, both the mechanism described in <xref target="nsdb-config" pageno="false" format="default"/> and the mechanism described in <xref target="RFC7532" pageno="false" format="default"/> can be concurrently implemented in the NSDB to support both types of NSDB client.  </t>
        <t>To remain compatible with NSDB clients that comply with <xref target="RFC7532" pageno="false" format="default"/>, each naming context on such an NSDB MUST contain either zero or one NCE records.  </t>
      </section>
      <section title="NSDB client compatibility" toc="default">
        <t>During a transition period to the new NCE discovery mechanism, NSDB clients may have to resolve FSNs on NSDBs that comply with <xref target="RFC7532" pageno="false" format="default"/> as well as NSDBs that have deployed the mechanism described in <xref target="nsdb-config" pageno="false" format="default"/>.  </t>
        <t>In this case, an NSDB client can try the query described in <xref target="enumeration" pageno="false" format="default"/> first.  If no NCE is found by this method, the NSDB client can try the query described in Section 5.2.1 of <xref target="RFC7532" pageno="false" format="default"/>.  </t>
        <t>An NSDB client that encounters more than one NCE record under a naming context MUST return FEDFS_ERR_NSDB_NONCE if it does not support multiple NCEs per naming context.  </t>
      </section>
    </section>
    <section title="Security Considerations" toc="default">
      <t>To maintain separation of privileges, privileged users that are permitted to perform NSDB administrative operations should not be permitted access to other areas of the LDAP server's DIT.  The use of LDAP ACLs is recommended to permit unauthenticated access to FedFS records (FSNs, FSLs, and NCEs) while restricting the ability to change these records to one or a few privileged user accounts.  </t>
    </section>
    <section title="IANA Considerations" toc="default">
      <section title="LDAP Descriptor Deprecation" toc="default">
        <t>IANA is to update the registry entitled "FedFS Object Identifiers" for the purpose of recording the change in status of existing FedFS Object Identifiers (OIDs) mentioned by this document.  This includes the fedfsNceDN entry (OID 1.3.6.1.4.1.31103.1.14) and the fedfsNsdbContainerInfo entry (OID 1.3.6.1.4.1.31103.1.1001).  The designation of "historic" is to be added to the "Reference" column of both entries.  </t>
        <t>In accordance with Section 5.2 of <xref target="RFC4520" pageno="false" format="default"/>, object identifier descriptors for the fedfsNsdbContainerInfo object class and the fedfsNceDN attribute are to be marked as "historic in nature" in IANA's LDAP parameters "Object Identifier Descriptors" table, after Expert Review.  </t>
      </section>
      <section title="LDAP Descriptor Registration" toc="default">
        <t>In accordance with Section 3.4 and Section 4 of <xref target="RFC4520" pageno="false" format="default"/>, object identifier descriptors for the new fedfsNsdbContainerEntry object class defined in this document will be assigned and registered via the Expert Review process.  </t>
        <t><cref>RFC Editor: please replace "draft-cel-nfsv4-federated-fs-nce" with this specification's RFC number and title, and replace TBD with the newly assigned OID.  </cref> </t>
        <t><list style="hanging"><t hangText="Subject:">Request for LDAP Descriptor Registration </t><t hangText="Person &amp; email address to contact for further information:">See "Author/Change Controller" </t><t hangText="Specification:">draft-cel-nfsv4-federated-fs-nce </t><t hangText="Author/Change Controller:">IESG (iesg@ietf.org) </t></list> </t>
        <t><list style="hanging"><t hangText="Object Identifier:">TBD </t><t hangText="Descriptor (short name):">fedfsNsdbContainerEntry </t><t hangText="Usage:">object class </t></list> </t>
      </section>
    </section>
    <section title="Acknowledgements" toc="default">
      <t>The author of this document gratefully acknowledges the contributions and patience of Rob Thurlow, Tom Haynes, and David Noveck.  This work would not have been possible without the efforts of the authors and contributors to <xref target="RFC7532" pageno="false" format="default"/>.  </t>
    </section>
  </middle>
  <back>
    <references title="Normative References">
      <reference anchor="RFC2119" target="http://www.rfc-editor.org/info/rfc2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author initials="S." surname="Bradner" fullname="S. Bradner">
            <organization/>
          </author>
          <date year="1997" month="March"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC4512" target="http://www.rfc-editor.org/info/rfc4512">
        <front>
          <title>Lightweight Directory Access Protocol (LDAP): Directory Information Models</title>
          <author initials="K." surname="Zeilenga" fullname="K. Zeilenga" role="editor">
            <organization/>
          </author>
          <date year="2006" month="June"/>
          <abstract>
            <t>The Lightweight Directory Access Protocol (LDAP) is an Internet protocol for accessing distributed directory services that act in accordance with X.500 data and service models.  This document describes the X.500 Directory Information Models, as used in LDAP.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="4512"/>
        <seriesInfo name="DOI" value="10.17487/RFC4512"/>
      </reference>
      <reference anchor="RFC4516" target="http://www.rfc-editor.org/info/rfc4516">
        <front>
          <title>Lightweight Directory Access Protocol (LDAP): Uniform Resource Locator</title>
          <author initials="M." surname="Smith" fullname="M. Smith" role="editor">
            <organization/>
          </author>
          <author initials="T." surname="Howes" fullname="T. Howes">
            <organization/>
          </author>
          <date year="2006" month="June"/>
          <abstract>
            <t>This document describes a format for a Lightweight Directory Access Protocol (LDAP) Uniform Resource Locator (URL).  An LDAP URL describes an LDAP search operation that is used to retrieve information from an LDAP directory, or, in the context of an LDAP referral or reference, an LDAP URL describes a service where an LDAP operation may be progressed.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="4516"/>
        <seriesInfo name="DOI" value="10.17487/RFC4516"/>
      </reference>
      <reference anchor="RFC4520" target="http://www.rfc-editor.org/info/rfc4520">
        <front>
          <title>Internet Assigned Numbers Authority (IANA) Considerations for the Lightweight Directory Access Protocol (LDAP)</title>
          <author initials="K." surname="Zeilenga" fullname="K. Zeilenga">
            <organization/>
          </author>
          <date year="2006" month="June"/>
          <abstract>
            <t>This document provides procedures for registering extensible elements of the Lightweight Directory Access Protocol (LDAP).  The document also provides guidelines to the Internet Assigned Numbers Authority (IANA) describing conditions under which new values can be assigned.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="64"/>
        <seriesInfo name="RFC" value="4520"/>
        <seriesInfo name="DOI" value="10.17487/RFC4520"/>
      </reference>
      <reference anchor="RFC7532" target="http://www.rfc-editor.org/info/rfc7532">
        <front>
          <title>Namespace Database (NSDB) Protocol for Federated File Systems</title>
          <author initials="J." surname="Lentini" fullname="J. Lentini">
            <organization/>
          </author>
          <author initials="R." surname="Tewari" fullname="R. Tewari">
            <organization/>
          </author>
          <author initials="C." surname="Lever" fullname="C. Lever" role="editor">
            <organization/>
          </author>
          <date year="2015" month="March"/>
          <abstract>
            <t>This document describes a file system federation protocol that enables file access and namespace traversal across collections of independently administered fileservers.  The protocol specifies a set of interfaces by which fileservers with different administrators can form a fileserver federation that provides a namespace composed of the file systems physically hosted on and exported by the constituent fileservers.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7532"/>
        <seriesInfo name="DOI" value="10.17487/RFC7532"/>
      </reference>
    </references>
    <references title="Informative References">
      <reference anchor="RFC5716" target="http://www.rfc-editor.org/info/rfc5716">
        <front>
          <title>Requirements for Federated File Systems</title>
          <author initials="J." surname="Lentini" fullname="J. Lentini">
            <organization/>
          </author>
          <author initials="C." surname="Everhart" fullname="C. Everhart">
            <organization/>
          </author>
          <author initials="D." surname="Ellard" fullname="D. Ellard">
            <organization/>
          </author>
          <author initials="R." surname="Tewari" fullname="R. Tewari">
            <organization/>
          </author>
          <author initials="M." surname="Naik" fullname="M. Naik">
            <organization/>
          </author>
          <date year="2010" month="January"/>
          <abstract>
            <t>This document describes and lists the functional requirements of a federated file system and defines related terms.  This document is not an  Internet Standards Track specification; it is published for informational  purposes.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5716"/>
        <seriesInfo name="DOI" value="10.17487/RFC5716"/>
      </reference>
    </references>
  </back>
</rfc>
