<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs),
     please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds might want to use.
     (Here they are set differently than their defaults in xml2rfc v1.32) -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space
     (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="yes"?>
<!-- keep one blank line between list items -->
<?rfc comments="yes" ?>
<!-- show cref output -->
<?rfc inline="yes" ?>
<!-- inline cref output -->
<!-- end of list of popular I-D processing instructions -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std"
  docName="draft-gould-regext-epp-server-validation-00" ipr="trust200902" 
  submissionType="IETF" consensus="true">

  <!-- ***** FRONT MATTER ***** -->

  <front>
    <title abbrev="serverValidation">
    Server Validation Extension for the Extensible Provisioning Protocol (EPP)</title>

    <author fullname="James Gould" initials="J.G" surname="Gould">
      <organization>VeriSign, Inc.</organization>

      <address>
        <postal>
          <street>12061 Bluemont Way</street>

          <city>Reston</city>

          <region>VA</region>

          <code>20190</code>

          <country>US</country>
        </postal>

        <email>jgould@verisign.com</email>

        <uri>http://www.verisign.com</uri>
      </address>
    </author>

    <author fullname="Sandra Gould" initials="S.G" surname="Gould">
      <organization>VeriSign, Inc.</organization>

      <address>
        <postal>
          <street>12061 Bluemont Way</street>

          <city>Reston</city>

          <region>VA</region>

          <code>20190</code>

          <country>US</country>
        </postal>

        <email>sgould@verisign.com</email>

        <uri>http://www.verisign.com</uri>
      </address>
    </author>

    <author fullname="Tanya Sutan-Tanon" initials="T.S" surname="Sutan-Tanon">
      <organization>VeriSign, Inc.</organization>

      <address>
        <postal>
          <street>12061 Bluemont Way</street>

          <city>Reston</city>

          <region>VA</region>

          <code>20190</code>

          <country>US</country>
        </postal>

        <email>thasutantanon@verisign.com</email>

        <uri>http://www.verisign.com</uri>
      </address>
    </author>

    <abstract>
      <t>This document describes an Extensible Provisioning Protocol (EPP)
      extension for providing the status of server validations.  Server 
      validations can be done for an extensible set of types, with examples 
      including validating the DNS resolution with the type "dns" and 
      validating the DNSSEC with the type "dnssec".  The validations
      can be performed synchronously that will include the extension in the 
      response or asynchronously that will include the validation in a poll message.
      If validations are performed on a schedule, a change in the status of 
      a typed-validation will be included in a poll message.</t>
    </abstract>

  </front>

  <middle>
    <section title="Introduction">
      <t>This document describes an extension mapping for version 1.0 of the
      <xref target="RFC5730">Extensible Provisioning Protocol (EPP)</xref>.
      This mapping, an extension to EPP object mappings like the <xref
      target="RFC5731">EPP domain name mapping</xref>, is used to provide 
      the status of server validations that can be performed synchronously or 
      asynchronously.  The result of synchronous validations is included 
      in the EPP response.  The result of asynchronous validations is included 
      in a poll message.  Scheduled validations that change the status of a 
      typed-validation are included in a poll message.
      The extension extends the EPP &lt;poll&gt; response in 
      <xref target="RFC5730"/> and does not extend the EPP &lt;poll&gt; command.  
      Please refer to <xref target="RFC5730"/> for information and examples of 
      the EPP &lt;poll&gt; command.</t>

      <section title="Conventions Used in This Document">
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
      NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
      "MAY", and "OPTIONAL" in this document are to be interpreted as
      described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/>
      when, and only when, they
      appear in all capitals, as shown here.</t>
      
        <t>XML is case sensitive. Unless stated otherwise, XML specifications
        and examples provided in this document MUST be interpreted in the
        character case presented in order to develop a conforming
        implementation.</t>

        <t>In examples, "C:" represents lines sent by a protocol client and "S:" represents lines returned by a protocol server.
        Indentation and white space in examples are provided only to illustrate element relationships
        and are not a REQUIRED feature of this protocol.
        </t>

        <t>The XML namespace prefix "serverVal" is used for the namespace
           "urn:ietf:params:xml:ns:epp:serverValidation-0.1", but implementations
           MUST NOT depend on it and instead employ a proper namespace-aware XML
           parser and serializer to interpret and output the XML documents.</t>
      </section>
    </section>

    <section anchor="attrs" title="Object Attributes">

      <t>This extension adds additional elements to EPP object mappings like the <xref
      target="RFC5731">EPP domain name mapping</xref>. Only those new elements
      are described here.</t>

      <section anchor="validationData" title="&lt;serverVal:validationData&gt; element">

        <t>The &lt;serverVal:validationData&gt; element is returned in the transform command response for synchronous server validation, in the &lt;info&gt; response,
        and in the poll message for asynchronous server validation.  The &lt;serverVal:validationData&gt; element 
        includes a list of one or more &lt;serverVal:validation&gt; elements with the following child elements:</t>

		 <t><list hangIndent="4" style="hanging">
			  <t hangText="&lt;serverVal:type&gt;:">Type of server validation that is up to server policy.  Example values include "dns" for 2026202
        validation of DNS resolution and "dnssec" for validation of DNSSEC.</t>
			  <t hangText="&lt;serverVal:status&gt;:">Status of the server validation with the values of "success" to reflect 
        that the last validation was successful and "failed" to reflect that the last validation failed.</t>        
			  <t hangText="&lt;serverVal:date&gt;:">OPTIONAL date and time when the server validation was executed.</t>
			  <t hangText="&lt;serverVal:operation&gt;:">OPTIONAL transform operation executed on the object as defined
			  in <xref target="operation"/> that triggered the validation.  This element is not included if the server validation
        was performed asynchronously without a triggering transform operation.</t>
			  <t hangText="&lt;serverVal:lastSuccess&gt;:">OPTIONAL date and time when the server validation was last successful.  This 
        element should only be returned when the &lt;serverVal:status&gt; element has the value of "failed" and there was a prior 
        successful validation.</t>
			  <t hangText="&lt;serverVal:firstFailed&gt;:">OPTIONAL date and time when the server validation first failed.  This 
        element should only be returned when the &lt;serverVal:status&gt; element has the value of "failed".</t>
			  <t hangText="&lt;serverVal:lastFailed&gt;:">OPTIONAL date and time when the server validation last failed.  This 
        element should only be returned when the &lt;serverVal:status&gt; element has the value of "success" and there was a prior 
        failed validation.</t>
			  <t hangText="&lt;serverVal:reason&gt;:">OPTIONAL list of server validation failure reasons when the &lt;serverVal:status&gt; element has the value of "failed".
        If present, this element contains the server-specific text to help explain the reason for the failure.
			  An OPTIONAL "lang" attribute MAY be present to identify the language if the negotiated value
			  is something other than the default value of "en" (English).</t>
		</list></t>          


       <figure>
            <preamble>Example &lt;serverVal:validationData&gt; element for a successful "dnssec" server validation that was 
            performed asynchronously without a triggering transform command:</preamble>
            <artwork><![CDATA[...
<serverVal:validationData
  xmlns:serverVal="urn:ietf:params:xml:ns:epp:serverValidation-0.1">
  <serverVal:validation>
    <serverVal:status>success</serverVal:status>
    <serverVal:type>dnssec</serverVal:type>
    <serverVal:date>2026-01-01T12:22:53.0Z</serverVal:date>
  </serverVal:validation>
</serverVal:validationData>
...]]></artwork>
       </figure>

       <figure>
            <preamble>Example &lt;serverVal:validationData&gt; element for a failed "dnssec" server validation that was 
            performed asynchronously without a triggering transform command:</preamble>
            <artwork><![CDATA[...
<serverVal:validationData
  xmlns:serverVal="urn:ietf:params:xml:ns:epp:serverValidation-0.1">
  <serverVal:validation>
    <serverVal:type>dnssec</serverVal:type>
    <serverVal:status>failed</serverVal:status>
    <serverVal:date>2026-01-03T07:21:33Z</serverVal:date>
    <serverVal:firstFailed>2025-12-12T08:19:44Z
    </serverVal:firstFailed>
    <serverVal:reason>Matching DNSKEY not found for DS keyTag 12345
    </serverVal:reason>
  </serverVal:validation>
</serverVal:validationData>
...]]></artwork>
       </figure>

       <figure>
            <preamble>Example &lt;serverVal:validationData&gt; element for a successful synchronous "dns" and "dnssec" server validation 
            returned in a create response:</preamble>
            <artwork><![CDATA[...
<serverVal:validationData
  xmlns:serverVal="urn:ietf:params:xml:ns:epp:serverValidation-0.1">
  <serverVal:validation>
    <serverVal:type>dns</serverVal:type>
    <serverVal:status>success</serverVal:status>
    <serverVal:date>2026-01-01T12:22:45.0Z</serverVal:date>
    <serverVal:operation>create</serverVal:operation>
  </serverVal:validation>
  <serverVal:validation>
    <serverVal:type>dnssec</serverVal:type>
    <serverVal:status>success</serverVal:status>
    <serverVal:date>2026-01-01T12:22:53.0Z</serverVal:date>
    <serverVal:operation>create</serverVal:operation>
  </serverVal:validation>
</serverVal:validationData>
...]]></artwork>
       </figure>

      </section>

      <section anchor="operation" title="Operation">

        <t>An operation consists of any transform operation that triggered 
        the server validation.   The
        &lt;serverVal:operation&gt; element defines the operation.  The OPTIONAL "op"
        attribute is an identifier, represented in the 7-bit US-ASCII character set defined in <xref target="RFC0020"/>, that 
        is used to define a sub-operation or the name of a "custom" operation.  A server validation can only be performed 
        prior to object being purged.  The enumerated list of &lt;serverVal:operation&gt; values is:</t>

		  <t><list hangIndent="4" style="hanging">
				<t hangText="&quot;create&quot;:">Create operation as defined in <xref target="RFC5730"/>.</t>
				<t hangText="&quot;delete&quot;:">Delete operation as defined in <xref target="RFC5730"/> if the delete operation does not result in 
        an immediate purge of the object.</t>
				<t hangText="&quot;renew&quot;:">Renew operation as defined in <xref target="RFC5730"/>.</t>
				<t hangText="&quot;transfer&quot;:">Transfer operation as defined in <xref target="RFC5730"/> that MUST set the 
				"op" attribute with one of the possible transfer type values that include "request", "approve", "cancel", or "reject".</t>
				<t hangText="&quot;update&quot;:">Update operation as defined in <xref target="RFC5730"/>.</t>
				<t hangText="&quot;restore&quot;:">Restore operation as defined in <xref target="RFC3915"/> that MUST set the 
				"op" attribute with one of the possible restore type values that include "request" or "report".</t>
				<t hangText="&quot;autoRenew&quot;:">Auto renew operation executed by the server.</t>
				<t hangText="&quot;autoDelete&quot;:">Auto delete operation executed by the server if the auto delete operation does not result in an immediate
				purge of the object.</t>
				<t hangText="&quot;custom&quot;:">Custom operation that MUST set the "op" attribute with the custom operation name.  
				The custom operations supported is up to server policy.</t>
		  </list></t>
      </section>

      <section anchor="datestimes" title="Dates and Times">
      
        <t>Date and time attribute values MUST be represented in Universal
           Coordinated Time (UTC) using the Gregorian calendar.  The extended
           date-time form using upper case "T" and "Z" characters defined in
           <eref target="http://www.w3.org/TR/2004/REC-xmlschema-2-20041028"/> MUST be used to represent date-time
           values, as XML Schema does not support truncated date-time forms or
           lower case "T" and "Z" characters.</t>

      </section>

      <section anchor="pollMessaging" numbered="true" toc="default">
        <name>Server Validation Poll Message</name>
        <t>The EPP &lt;poll&gt; command and response are defined in section 2.9.2.3 of <xref target="RFC5730"/>.
        When a server validation is initially performed asynchronously and when 
        the scheduled server validation status changes, an &lt;info&gt; response with 
        the validation data in <xref target="validationData" format="default"/> is inserted 
        into the poll queue.</t> 
 
        <figure>
            <preamble>Example &lt;poll&gt; command:</preamble>        
         <artwork name="" type="" align="left" alt=""><![CDATA[
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C:  <command>
C:  <poll op="req"/>
C:    <clTRID>ABC-12345</clTRID>
C:  </command>
C:</epp>]]></artwork>
       </figure>
  
       <figure>
            <preamble>Example &lt;poll&gt; response for a successful 
            "dns" and "dnssec" server validation triggered from a &lt;create&gt; command:</preamble>
            <artwork><![CDATA[
S:<?xml version="1.0" encoding="UTF-8"?>
S:<epp
S:  xmlns="urn:ietf:params:xml:ns:epp-1.0">
S:  <response>
S:    <result code="1301">
S:      <msg lang="en-US">
S:         Command completed successfully; ack to dequeue</msg>
S:    </result>
S:    <msgQ id="200" count="1">
S:      <qDate>2026-01-01T12:22:45Z</qDate>
S:      <msg>domain.example successful create validations</msg>
S:    </msgQ>
S:    <resData>
S:      <domain:infData
S:        xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
S:        <domain:name>domain.example</domain:name>
S:        <domain:roid>EXAMPLE1-REP</domain:roid>
S:        <domain:clID>ClientX</domain:clID>
S:        <domain:crDate>2015-10-15T09:19:55.0Z</domain:crDate>
S:        <domain:upID>ClientY</domain:upID>
S:        <domain:upDate>2026-01-01T14:25:57.0Z</domain:upDate>
S:      </domain:infData>
S:    </resData>
S:    <extension>
S:      <serverVal:validationData
S:        xmlns:serverVal=
S:        "urn:ietf:params:xml:ns:epp:serverValidation-0.1">
S:        <serverVal:validation>
S:          <serverVal:type>dns</serverVal:type>
S:          <serverVal:status>success</serverVal:status>
S:          <serverVal:date>2026-01-01T12:22:45.0Z</serverVal:date>
S:          <serverVal:operation>create</serverVal:operation>
S:        </serverVal:validation>
S:       <serverVal:validation>
S:          <serverVal:type>dnssec</serverVal:type>
S:          <serverVal:status>success</serverVal:status>
S:          <serverVal:date>2026-01-01T12:22:53.0Z</serverVal:date>
S:          <serverVal:operation>create</serverVal:operation>
S:        </serverVal:validation>
S:      </serverVal:validationData>
S:    </extension>
S:    <trID>
S:      <clTRID>ABC-12345</clTRID>
S:      <svTRID>54321-XYZ</svTRID>
S:    </trID>
S:  </response>
S:</epp>]]></artwork>
       </figure>

       <figure>
            <preamble>Example &lt;poll&gt; response for mixed scheduled server validations, 
            with a "dns" success and a "dnssec" failed validation:</preamble>
            <artwork><![CDATA[
S:<?xml version="1.0" encoding="UTF-8"?>
S:<epp
S:  xmlns="urn:ietf:params:xml:ns:epp-1.0">
S:  <response>
S:    <result code="1301">
S:      <msg lang="en-US">
S:         Command completed successfully; ack to dequeue</msg>
S:    </result>
S:    <msgQ id="200" count="1">
S:      <qDate>2026-01-01T12:22:45Z</qDate>
S:      <msg>domain.example mixed server validations</msg>
S:    </msgQ>
S:    <resData>
S:      <domain:infData
S:        xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
S:        <domain:name>domain.example</domain:name>
S:        <domain:roid>EXAMPLE1-REP</domain:roid>
S:        <domain:clID>ClientX</domain:clID>
S:        <domain:crDate>2015-10-15T09:19:55.0Z</domain:crDate>
S:        <domain:upID>ClientY</domain:upID>
S:        <domain:upDate>2026-01-01T14:25:57.0Z</domain:upDate>
S:      </domain:infData>
S:    </resData>
S:    <extension>
S:      <serverVal:validationData
S:        xmlns:serverVal=
S:        "urn:ietf:params:xml:ns:epp:serverValidation-0.1">
S:        <serverVal:validation>
S:          <serverVal:type>dns</serverVal:type>
S:          <serverVal:status>success</serverVal:status>
S:          <serverVal:date>2026-01-01T12:22:45Z</serverVal:date>
S:          <serverVal:lastFailed>2025-12-30T11:11:34Z
S:          </serverVal:lastFailed>
S:        </serverVal:validation>
S:        <serverVal:validation>
S:          <serverVal:type>dnssec</serverVal:type>
S:          <serverVal:status>failed</serverVal:status>
S:          <serverVal:date>2026-01-01T12:22:53Z</serverVal:date>
S:          <serverVal:reason lang="en">
S:            Matching DNSKEY not found for DS keyTag 12345
S:          </serverVal:reason>
S:          <serverVal:reason lang="en">
S:            Insecure DNSKEY algorithm for DS keyTag 54321
S:          </serverVal:reason>
S:        </serverVal:validation>
S:      </serverVal:validationData>
S:    </extension>
S:    <trID>
S:      <clTRID>ABC-12345</clTRID>
S:      <svTRID>54321-XYZ</svTRID>
S:    </trID>
S:  </response>
S:</epp>]]></artwork>
       </figure>

      </section>

    </section>

    <section anchor="commands" title="EPP Command Mapping">
      <t>A detailed description of the EPP syntax and semantics can be found
      in the EPP core protocol specification <xref target="RFC5730"/>.</t>

      <section anchor="queryCommands" title="EPP Query Commands">

        <t>EPP provides three commands to retrieve object information: &lt;check&gt; to determine
        if an object is known to the server, &lt;info&gt; to retrieve detailed information associated
        with an object, and &lt;transfer&gt; to retrieve object transfer status information.</t>

      <section anchor="checkCommand" title="EPP &lt;check&gt; Command">

       <t>This extension does not add any elements to the EPP &lt;check&gt; command
       or &lt;check&gt; response described in the <xref target="RFC5730"/>.</t>

      </section>

      <!-- end CHECK command -->

      <section anchor="infoCommand" title="EPP &lt;info&gt; Command">

        <t>This extension defines additional elements to extend the EPP &lt;info&gt; command and response to 
        be used in conjunction with <xref target="RFC5730"/>.</t>

        <t>The EPP &lt;info&gt; command is extended with an empty &lt;serverVal:validationInfo&gt; element to 
        indicate the desire for the server validation information to be included in the extension to the &lt;info&gt; response.</t>

       <figure>
            <preamble>Example &lt;info&gt; domain command with the &lt;serverVal:validationInfo&gt; extension to 
            retrieve the server validation information.:</preamble>

            <artwork><![CDATA[
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C:  <command>
C:    <info>
C:      <domain:info 
C:        xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
C:        <domain:name>domain.example</domain:name>
C:      </domain:info>
C:    </info>
C:    <extension>
C:        <serverVal:validationInfo 
C:        xmlns:serverVal=
C:        "urn:ietf:params:xml:ns:epp:serverValidation-0.1"/>
C:    </extension>
C:    <clTRID>ABC-12345</clTRID>
C:  </command>
C:</epp>]]></artwork>
       </figure>

        <t>If the query was successful, the server replies with the &lt;serverVal:validationData&gt; element, defined in <xref target="validationData"/>, along with the 
        regular EPP &lt;resData&gt;.</t>

       <figure>
            <preamble>Example &lt;info&gt; domain response using the &lt;serverVal:validationInfo&gt; extension with a successful "dnssec" server validation:</preamble>

            <artwork><![CDATA[
S:<?xml version="1.0" encoding="UTF-8"?>
S:<epp
S:  xmlns="urn:ietf:params:xml:ns:epp-1.0">
S:  <response>
S:    <result code="1000">
S:      <msg>Command completed successfully</msg>
S:    </result>
S:    <resData>
S:      <domain:infData
S:        xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
S:        <domain:name>domain.example</domain:name>
S:        <domain:roid>EXAMPLE1-REP</domain:roid>
S:        <domain:clID>ClientX</domain:clID>
S:        <domain:crDate>2015-10-15T09:19:55.0Z</domain:crDate>
S:        <domain:upID>ClientY</domain:upID>
S:        <domain:upDate>2026-01-01T14:25:57.0Z</domain:upDate>
S:      </domain:infData>
S:    </resData>
S:    <extension>
S:      <serverVal:validationData
S:        xmlns:serverVal=
S:        "urn:ietf:params:xml:ns:epp:serverValidation-0.1">
S:        <serverVal:validation>
S:          <serverVal:type>dnssec</serverVal:type>
S:          <serverVal:status>success</serverVal:status>
S:          <serverVal:date>2026-01-01T12:22:53.0Z</serverVal:date>
S:        </serverVal:validation>
S:      </serverVal:validationData>
S:    </extension>
S:   <trID>
S:      <clTRID>ABC-12345</clTRID>
S:      <svTRID>54321-XYZ</svTRID>
S:    </trID>
S:  </response>
S:</epp>]]></artwork>
       </figure>

       <figure>
            <preamble>Example &lt;info&gt; domain response using the &lt;serverVal:validationInfo&gt; extension with a failed "dnssec" server validation:</preamble>

            <artwork><![CDATA[
S:<?xml version="1.0" encoding="UTF-8"?>
S:<epp
S:  xmlns="urn:ietf:params:xml:ns:epp-1.0">
S:  <response>
S:    <result code="1000">
S:      <msg>Command completed successfully</msg>
S:    </result>
S:    <resData>
S:      <domain:infData
S:        xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
S:        <domain:name>domain.example</domain:name>
S:        <domain:roid>EXAMPLE1-REP</domain:roid>
S:        <domain:clID>ClientX</domain:clID>
S:        <domain:crDate>2015-10-15T09:19:55Z</domain:crDate>
S:        <domain:upID>ClientY</domain:upID>
S:        <domain:upDate>2026-01-01T14:25:57Z</domain:upDate>
S:      </domain:infData>
S:    </resData>
S:    <extension>
S:      <serverVal:validationData
S:        xmlns:serverVal=
S:        "urn:ietf:params:xml:ns:epp:serverValidation-0.1">
S:        <serverVal:validation>
S:          <serverVal:type>dnssec</serverVal:type>
S:          <serverVal:status>failed</serverVal:status>
S:          <serverVal:date>2026-01-03T07:21:33Z</serverVal:date>
S:          <serverVal:lastSuccess>2025-12-11T07:20:00Z
S:          </serverVal:lastSuccess>
S:          <serverVal:firstFailed>2025-12-12T08:19:44Z
S:          </serverVal:firstFailed>
S:          <serverVal:reason>
S:            Matching DNSKEY not found for DS keyTag 12345
S:          </serverVal:reason>
S:        </serverVal:validation>
S:      </serverVal:validationData>
S:    </extension>
S:    <trID>
S:      <clTRID>ABC-12345</clTRID>
S:      <svTRID>54321-XYZ</svTRID>
S:    </trID>
S:  </response>
S:</epp>]]></artwork>
       </figure>

      </section>
      <!-- end INFO command -->

      <section anchor="transferQueryCommand" title="EPP &lt;transfer&gt; Command">

       <t>This extension does not add any elements to the EPP &lt;transfer&gt; query command
       or &lt;transfer&gt; response described in the <xref target="RFC5730"/>.</t>

      </section>
      <!-- end TRANSFER QUERY command -->

      </section>

      <section anchor="transformCommands" title="EPP Transform Commands">

        <t>EPP provides five commands to transform objects: &lt;create&gt; to create an instance of an object,
        &lt;delete&gt; to delete an instance of an object, &lt;renew&gt; to extend the validity period of an object,
        &lt;transfer&gt; to manage object sponsorship changes, and &lt;update&gt; to change information associated
        with an object.</t>

      <section anchor="createCommand" title="EPP &lt;create&gt; Command">

       <t>This extension does not add any elements to the EPP &lt;create&gt; command.</t>
       <t>This extension does define additional
       elements to the EPP &lt;create&gt; response with the <xref target="validationData">&lt;serverVal:validationData&gt; element</xref> 
       when the server validation is executed synchronously in the EPP &lt;create&gt; command.</t>

      </section>
      <!-- end CREATE command -->

      <section anchor="deleteCommand" title="EPP &lt;delete&gt; Command">

       <t>This extension does not add any elements to the EPP &lt;delete&gt; command.</t>
       <t>This extension does define additional
       elements to the EPP &lt;delete&gt; response with the <xref target="validationData">&lt;serverVal:validationData&gt; element</xref> 
       when the server validation is executed synchronously in the EPP &lt;delete&gt; command.</t>

      </section>
      <!-- end DELETE command -->

      <section anchor="renewCommand" title="EPP &lt;renew&gt; Command">

       <t>This extension does not add any elements to the EPP &lt;renew&gt; command.</t>
       <t>This extension does define additional
       elements to the EPP &lt;renew&gt; response with the <xref target="validationData">&lt;serverVal:validationData&gt; element</xref> 
       when the server validation is executed synchronously in the EPP &lt;renew&gt; command.</t>

      </section>
      <!-- end RENEW command -->

      <section anchor="transferCommand" title="EPP &lt;transfer&gt; Command">

       <t>This extension does not add any elements to the EPP &lt;transfer&gt; command.</t>
       <t>This extension does define additional
       elements to the EPP &lt;transfer&gt; response with the <xref target="validationData">&lt;serverVal:validationData&gt; element</xref> 
       when the server validation is executed synchronously in the EPP &lt;transfer&gt; command.</t>

      </section>
      <!-- end TRANSFER command -->

      <section anchor="updateCommand" title="EPP &lt;update&gt; Command">

       <t>This extension does not add any elements to the EPP &lt;update&gt; command.</t>
       <t>This extension does define additional
       elements to the EPP &lt;update&gt; response with the <xref target="validationData">&lt;serverVal:validationData&gt; element</xref> 
       when the server validation is executed synchronously in the EPP &lt;update&gt; command.</t>

      </section>
      <!-- end UPDATE command -->

    </section>

    </section>

    <!-- EPP command mapping -->

    <section anchor="syntax" title="Formal Syntax">

      <t>One schema is presented here that is the EPP Server Validation Extension
      schema.</t>

      <t>The formal
      syntax presented here is a complete schema representation of the object
      mapping suitable for automated validation of EPP XML instances. The
      BEGIN and END tags are not part of the schema; they are used to note the
      beginning and ending of the schema for URI registration purposes.</t>

    <section title="Server Validation Extension Schema">

      <figure>
        <artwork><![CDATA[
BEGIN
<?xml version="1.0" encoding="UTF-8"?>
 <schema targetNamespace=
            "urn:ietf:params:xml:ns:epp:serverValidation-0.1"
         xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0"
         xmlns:epp="urn:ietf:params:xml:ns:epp-1.0"
         xmlns:serverValidation=
            "urn:ietf:params:xml:ns:epp:serverValidation-0.1"
         xmlns="http://www.w3.org/2001/XMLSchema"
         elementFormDefault="qualified">
  
  <!--
  Import common element types.
  -->
  <import namespace="urn:ietf:params:xml:ns:eppcom-1.0"/>
  <import namespace="urn:ietf:params:xml:ns:epp-1.0"/>
  
  
   <annotation>
     <documentation>
       Extensible Provisioning Protocol v1.0
       Server Validation Mapping Schema.
     </documentation>
   </annotation>

   <!--
    validationInfo element as a marker for 
    returning the validation information.
   -->
   <element name="validationInfo"/>

   <!--
    validationData element containing list of validation elements
   -->
   <element name="validationData" 
      type="serverValidation:validationDataType"/>

  <!--
    Attributes associated with the validationDataType.
   -->
   <complexType name="validationDataType">
      <sequence>
         <element name="validation" 
            type="serverValidation:validationType" 
            maxOccurs="unbounded"/>   
      </sequence>
   </complexType>
 
   <!--
    Attributes associated with the validation status 
    by validation type
   -->
   <complexType name="validationType">
     <sequence>
       <!-- Validation type -->
       <element name="type" type="token"/>
       <!-- Status of the validation? -->      
       <element name="status" 
          type="serverValidation:statusEnum"/>
       <!-- Date and time of last validation -->      
       <element name="date" type="dateTime" 
          minOccurs="0"/>
       <!-- Operation of last validation -->      
       <element name="operation" 
          type="serverValidation:operationType"
          minOccurs="0"/>
       <!-- Date and time of the last successful validation -->      
       <element name="lastSuccess" type="dateTime" 
          minOccurs="0"/>
       <!-- Date and time of the first failed validation -->      
       <element name="firstFailed" type="dateTime" 
          minOccurs="0"/>
       <!-- Date and time of last failed validation -->      
       <element name="lastFailed" type="dateTime" 
          minOccurs="0"/>
        <!-- Optional list of failure reasons -->      
      <element name="reason" 
         type="serverValidation:reasonType" 
         minOccurs="0" maxOccurs="unbounded"/>
     </sequence>
   </complexType>
 
   <!--
    Enumerated list of operations, with extensibility via "custom".
   -->
   <simpleType name="operationEnum">
     <restriction base="token">
       <enumeration value="create"/>
       <enumeration value="delete"/>
       <enumeration value="renew"/>
       <enumeration value="transfer"/>
       <enumeration value="update"/>
       <enumeration value="restore"/>
       <enumeration value="autoRenew"/>
       <enumeration value="autoDelete"/>
       <enumeration value="autoPurge"/>
       <enumeration value="custom"/>
     </restriction>
   </simpleType>
      
   <!--
    Transform operation type
   -->
  <complexType name="operationType">
    <simpleContent>
      <extension base="serverValidation:operationEnum">
        <attribute name="op" type="token"/>
      </extension>
    </simpleContent>
  </complexType>

  <!--
    Enumerated list of statuses
   -->
   <simpleType name="statusEnum">
     <restriction base="token">
       <enumeration value="success"/>
       <enumeration value="failed"/>
      </restriction>
   </simpleType>

  <!--
    reason element with support for "lang" attribute
   -->
  <complexType name="reasonType">
    <simpleContent>
      <extension base="token">
        <attribute name="lang" type="language"/>
      </extension>
    </simpleContent>
  </complexType>
        
 <!--
 End of schema.
 -->
 </schema>
END]]></artwork>
      </figure>
      </section>
    </section>

    <section anchor="IANA" title="IANA Considerations">

    	<section anchor="IANA-XML-Namespace" title="XML Namespace">
         <t>
             This document uses URNs to describe XML namespaces and XML schemas
             conforming to a registry mechanism described in <xref target="RFC3688"/>.
             The following URI assignment is requested of IANA:
         </t>

         <t>Registration request for the serverValidation namespace:</t>
         
         <t><list>
         <t>URI: urn:ietf:params:xml:ns:epp:serverValidation-0.1</t>
         
         <t>Registrant Contact: IESG</t>
          
         <t>XML: None. Namespace URIs do not represent an XML specification.</t>
         </list></t>
         
         <t>Registration request for the serverValidation XML schema:</t>
         
         <t><list>
         <t>URI: urn:ietf:params:xml:schema:epp:serverValidation-0.1</t>
         
         <t>Registrant Contact: IESG</t>
          
         <t>XML: See the "Formal Syntax" section of this document.</t>
         
         </list></t>

       </section>

       <section anchor="EPP-Extension-Registry" title="EPP Extension Registry">

       	<t>
   The EPP extension described in this document should be registered by
   the IANA in the EPP Extension Registry described in <xref target="RFC7451"/>.  The
   details of the registration are as follows:
   </t>

   <t>
   Name of Extension: &quot;Server Validation Extension for the Extensible Provisioning Protocol (EPP)&quot;
   </t>

   <t>
   Document status: Standards Track
   </t>

   <t>
   Reference: (insert reference to RFC version of this document)
   </t>

   <t>
   Registrant Name and Email Address: IESG, &lt;iesg@ietf.org&gt;
   </t>

   <t>
   TLDs: Any
   </t>

   <t>
   IPR Disclosure: None
   </t>

   <t>
   Status: Active
   </t>

   <t>
   Notes: None
   </t>

       </section>

    </section>

    <section anchor="Security" title="Security Considerations">
      <t>The mapping extensions described in this document do not provide any
      security services beyond those described by <xref
      target="RFC5730">EPP</xref> and protocol layers used by EPP. This 
      document provides validation information that may be related to security, 
      such as validating DNSSEC with the DNSSEC chain, algorithms, and signatures.
      What validation information to provide to the sponsoring and non-sponsoring 
      client is a consideration that is up to server policy, where 
      a server may only provide the validation failure reasons to 
      the sponsoring client.</t>
    </section>

  </middle>

  <!--  *****BACK MATTER ***** -->

  <back>
    <!-- References split into informative and normative -->

    <!-- There are 2 ways to insert reference entries from the citation libraries:
     1. define an ENTITY at the top, and use "ampersand character"RFC2629; here (as shown)
     2. simply use a PI "less than character"?rfc include="reference.RFC.2119.xml"?> here
        (for I-Ds: include="reference.I-D.narten-iana-considerations-rfc2434bis.xml")

     Both are cited textually in the same manner: by using xref elements.
     If you use the PI option, xml2rfc will, by default, try to find included files in the same
     directory as the including file. You can also define the XML_LIBRARY environment variable
     with a value containing a set of directories to search.  These can be either in the local
     filing system or remote ones accessed by http (http://domain/dir/... ).-->

    <references title="Normative References">

      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.0020.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3688.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3915.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5730.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5731.xml"/>
      
    </references>

    <references title="Informative References">  
    
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7451.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
     
    </references>


  </back>

</rfc>
