Update domain[Link]

Purpose

to change any of the attributes of the domain object.

It is possible to change a domain object, without having to re-specify the elements that don’t have to change.

The message is therefore composed of three sections: <add>, <rem> and <chg>.

  • the <add> allows the client to add some data to the current domain,

  • the <rem> to remove data, and

  • the <chg> to update current data from the domain.

The fields must be in the following order: <add>, then <rem>, then <chg>.

This transaction can be used to update data (even link a new contact to the domain) related to a domain name. However, restrictions have been built-in to ensure that the identity of the registrant remains intact (i.e. org and/or name). (To change the identity of the registrant, use the TRANSFER DOMAIN command).

In case the domain name is under Domain Guard, it won’t be possible to update the domain name. You can see if a domain name is under Domain Guard via an “info-domain v1 and v2” (when the domain name belongs to you as a registrar). If an update is initiated on such a domain name, a hitpoint will be attributed. The error message you will receive in case of Domain Guard is:

  • 2304 (Object status prohibits operation)

  • Domain [%s] has invalid status (serverUpdateProhibited)

The elements and tags that are relevant for DNS Belgium are specified below. Tags that are optional can be omitted without producing an XML parsing error. Some components of the command need further explanation:

  • <domain:name> is required. Is the domain name to update, with or without a trailing .be. (see <create> domain for details).

  • The <add> and <rem> section contain the following child elements, in that order:

    • <ns> Is used to add or to remove a name server from the name server list.

    • <contact> Contains one or more contact aliases to add or to remove from the contact list. See <create> domain for details.

    • <status> has a required attribute ‘s’ which is modified by DNS Belgium to only accept ‘clientTransferProhibited’ or ‘serverTransferProhibited’. A domain name can be blocked for transfer. The ‘clientTransferProhibited’ flag can be set by the registrar, the ‘serverTransferProhibited’ flag is set by the registry.

  • The <chg> section contains the following child elements:

    • <registrant> Is the domain licensee alias.

    • The <extensions> contain the name server groups and/or keys/keygroups and/or reseller.

    • <add> is used to add new groups or a reseller; <rem> is used to remove groups or a reseller.

    • For individual keys, please note that the order of the change sections is different from the overall order of <update-domain>. The correct order for the sections of a <secDNS:update> is <rem>, <add>, <chg>. The <chg> section can only be used to change the <maxSigLife> attribute of the keys.

    • It’s not possible to update a reseller using the <add> and <rem> sections. You can only use the <chg> section to update the reseller of a domain.

It is perfectly possible to remove a name server and replace it with another one that needs an IP address, while at the same time adding a name server group.

Please refer to the examples to see a complete request.

Examples[Link]

Before updating a domain, check if you are really changing something in the domain. The EPP server does not allow the removal and addition of the same name server or contacts in one transaction. To avoid these useless transactions, execute an <info-domain> and remove redundant updates from the transaction before sending it to the EPP server. Only the fields that differ from the current information in the database have to be updated.

In this example, we combine a few modifications. For the domain name ‘greatdomain.be’, a new name server and a new onsite contact are added, while another name server is removed. At the same time, we add a new name server group and remove another one.

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"
xmlns:dnsbe="http://www.dns.be/xml/epp/dnsbe-1.0"
xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd
urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd
http://www.dns.be/xml/epp/dnsbe-1.0 dnsbe-1.0.xsd">
<command>
<update>
  <domain:update>
    <domain:name>greatdomain.be</domain:name>
      <domain:add>
      <domain:ns>
         <domain:hostAttr>
            <domain:hostName>ns2.greatdomain.be</domain:hostName>
            <domain:hostAddr>193.168.0.2</domain:hostAddr>
         </domain:hostAttr>
      </domain:ns>
     <domain:contact type="onsite">c18</domain:contact>
     </domain:add>
     <domain:rem>
       <domain:ns>
         <domain:hostAttr>
            <domain:hostName>ns.hostingcompany.be</domain:hostName>
         </domain:hostAttr>
    </domain:ns>
    </domain:rem>
 </domain:update>
</update>
<extension>
  <dnsbe:ext>
    <dnsbe:update>
      <dnsbe:domain>
      <dnsbe:add>
         <dnsbe:nsgroup>newnsgroup1</dnsbe:nsgroup>
      </dnsbe:add>
      <dnsbe:rem>
           <dnsbe:nsgroup>mynsgroup1</dnsbe:nsgroup>
      </dnsbe:rem>
     </dnsbe:domain>
  </dnsbe:update>
</dnsbe:ext>
</extension>
<clTRID>clientref-00020</clTRID>
</command>
</epp>

A positive response would be:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:dnsbe="http://www.dns.be/xml/epp/dnsbe-1.0">
  <response>
    <result code="1000">
      <msg>Command completed successfully</msg>
    </result>
    <extension>
      <dnsbe:ext>
        <dnsbe:result>
          <dnsbe:msg>OK</dnsbe:msg>
        </dnsbe:result>
      </dnsbe:ext>
    </extension>
    <trID>
      <clTRID>clientref-00020</clTRID>
      <svTRID>dnsbe-118</svTRID>
    </trID>
  </response>
</epp>

The previous command describes the following changes:

  • it adds the name server ‘ns2.greatdomain.be’ as well as the onsite contact ‘c18’

  • it removes the name server ‘ns.hostingcompany.be’

  • and finally adds the name server group ‘newnsgroup1’ and removes the name server group ‘mynsgroup1’.

Adding a name server that is already linked to the domain object:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"
xmlns:dnsbe="http://www.dns.be/xml/epp/dnsbe-1.0"
xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd
urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd
http://www.dns.be/xml/epp/dnsbe-1.0 dnsbe-1.0.xsd">
<command>
<update>
  <domain:update>
    <domain:name>greatdomain.be</domain:name>
      <domain:add>
      <domain:ns>
         <domain:hostAttr>
            <domain:hostName>ns2.greatdomain.be</domain:hostName>
            <domain:hostAddr>193.168.0.2</domain:hostAddr>
         </domain:hostAttr>
      </domain:ns>
     </domain:add>
  </domain:update>
</update>
<clTRID>clientref-00021</clTRID>
</command>
</epp>

would give:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:dnsbe="http://www.dns.be/xml/epp/dnsbe-1.0">
  <response>
    <result code="2002">
      <msg>Command use error</msg>
    </result>
    <extension>
      <dnsbe:ext>
        <dnsbe:result>
          <dnsbe:msg>Nameserver ns2.greatdomain.be is already linked to domain greatdomain</dnsbe:msg>
        </dnsbe:result>
      </dnsbe:ext>
    </extension>
    <trID>
      <clTRID>clientref-00021</clTRID>
      <svTRID>dnsbe-120</svTRID>
    </trID>
  </response>
</epp>

Or removing a contact that was not linked to the domain object:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"
xmlns:dnsbe="http://www.dns.be/xml/epp/dnsbe-1.0"
xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd
urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd
http://www.dns.be/xml/epp/dnsbe-1.0 dnsbe-1.0.xsd">
<command>
<update>
  <domain:update>
    <domain:name>greatdomain.be</domain:name>
      <domain:rem>
       <domain:contact type="tech">c20</domain:contact>
      </domain:rem>
  </domain:update>
</update>
<clTRID>clientref-00022</clTRID>
</command>
</epp>

would give:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:dnsbe="http://www.dns.be/xml/epp/dnsbe-1.0">
  <response>
    <result code="2002">
      <msg>Command use error</msg>
    </result>
    <extension>
      <dnsbe:ext>
        <dnsbe:result>
          <dnsbe:msg>contact c20 is not linked to registration</dnsbe:msg>
        </dnsbe:result>
      </dnsbe:ext>
    </extension>
    <trID>
      <clTRID>clientref-00022</clTRID>
      <svTRID>dnsbe-121</svTRID>
    </trID>
  </response>
</epp>

In this example, we add a keygroup to the domain name:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <update>
      <domain:update xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>signeddomain</domain:name>
      </domain:update>
    </update>
    <extension>
      <dnsbe:ext xmlns:dnsbe="http://www.dns.be/xml/epp/dnsbe-1.0">
        <dnsbe:update>
          <dnsbe:domain>
            <dnsbe:add>
              <dnsbe:keygroup>mykeygroup</dnsbe:keygroup>
            </dnsbe:add>
          </dnsbe:domain>
        </dnsbe:update>
      </dnsbe:ext>
    </extension>
    <clTRID>update-domain-add-keygroup</clTRID>
  </command>
</epp>

Or adding a key to the domain name:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <update>
      <domain:update xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>signeddomain</domain:name>
      </domain:update>
    </update>
    <extension>
      <secDNS:update xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1">
        <secDNS:add>
          <secDNS:keyData>
          <secDNS:flags>257</secDNS:flags>
          <secDNS:protocol>3</secDNS:protocol>
          <secDNS:alg>8</secDNS:alg>
          <secDNS:pubKey>AwEAAchObqtQhBlAmwkFeVOjgi3rG3skoTWKOcb7dtnoah1bgpTth6Rkqdp3cQeiHBcuHD5o6YLRgR03okzZGF15TNewAyzt6lQXJnsFdrDGR9Gcvnqy98SnmyBU/2KXZKkX5GaSJ5WGrz5I9VToShdssNbEULcRM38aPtd913PnkfYGYr2g1aPYGPx1NwK36bMNHSbrmZEJDYijPfc/HP2/4Wf74/eUL+q955imeukUFQJa+Ufzb+get4RAVRJ9SH3q/nITzCk/6tu8bWuOMn+oZfUaRq4llTKmmQ2ZDGBC3Uk5E++IfKvgIj6yOQhZbY+PLcN3gj8qYqin 213gwynWKm8=</secDNS:pubKey>
          </secDNS:keyData>
        </secDNS:add>
      </secDNS:update>
    </extension>
    <clTRID>domain-update-add-dnskey-00</clTRID>
  </command>
</epp>

In this example, the key is removed and the keygroup is added instead:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <update>
      <domain:update xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>signeddomain</domain:name>
      </domain:update>
    </update>
    <extension>
      <dnsbe:ext xmlns:dnsbe="http://www.dns.be/xml/epp/dnsbe-1.0">
        <dnsbe:update>
          <dnsbe:domain>
            <dnsbe:add>
              <dnsbe:keygroup>mykeygroup</dnsbe:keygroup>
            </dnsbe:add>
          </dnsbe:domain>
        </dnsbe:update>
      </dnsbe:ext>
      <secDNS:update xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1">
        <secDNS:rem>
          <secDNS:keyData>
          <secDNS:flags>257</secDNS:flags>
          <secDNS:protocol>3</secDNS:protocol>
          <secDNS:alg>8</secDNS:alg>
          <secDNS:pubKey>AwEAAchObqtQhBlAmwkFeVOjgi3rG3skoTWKOcb7dtnoah1bgpTth6Rkqdp3cQeiHBcuHD5o6YLRgR03okzZGF15TNewAyzt6lQXJnsFdrDGR9Gcvnqy98SnmyBU/2KXZKkX5GaSJ5WGrz5I9VToShdssNbEULcRM38aPtd913PnkfYGYr2g1aPYGPx1NwK36bMNHSbrmZEJDYijPfc/HP2/4Wf74/eUL+q955imeukUFQJa+Ufzb+get4RAVRJ9SH3q/nITzCk/6tu8bWuOMn+oZfUaRq4llTKmmQ2ZDGBC3Uk5E++IfKvgIj6yOQhZbY+PLcN3gj8qYqin 213gwynWKm8=</secDNS:pubKey>
          </secDNS:keyData>
         </secDNS:rem>
      </secDNS:update>
    </extension>
    <clTRID>domain-update-rem-dnskey-add-keygroup-00</clTRID>
  </command>
</epp>

The registrar can add a reseller to a domain name:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <update>
      <domain:update xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>testdomain.be</domain:name>
      </domain:update>
    </update>
    <extension>
      <orgext:update xmlns:orgext="urn:ietf:params:xml:ns:epp:orgext-1.0">
        <orgext:add>
          <orgext:id role="reseller">reseller01</orgext:id>
        </orgext:add> 
      </orgext:update>
    </extension>
    <clTRID>73fecb4b-cca8-44a4-9ffb-cf0ec2dd8b42</clTRID>
  </command>
</epp>

To update the reseller of a domain name, only the <chg> section is allowed:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <update>
      <domain:update xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>testdomain</domain:name>
      </domain:update>
    </update>
    <extension>
      <orgext:update xmlns:orgext="urn:ietf:params:xml:ns:epp:orgext-1.0">
        <orgext:chg>
          <orgext:id role="reseller">reseller02</orgext:id>
        </orgext:chg> 
      </orgext:update>
    </extension>
  </command>
</epp>

The reseller can be removed from the domain name:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <update>
      <domain:update xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>testdomain</domain:name>
      </domain:update>
    </update>
    <extension>
      <orgext:update xmlns:orgext="urn:ietf:params:xml:ns:epp:orgext-1.0">
        <orgext:rem>
          <orgext:id role="reseller"/>
        </orgext:rem> 
      </orgext:update>
    </extension>
  </command>
</epp>

In some cases, registrants may want to prevent a transfer procedure being put in motion for their domain name. To comply with this requirement, DNS Belgium has implemented a ‘non-transferable’ flag that the current registrar of a domain name can turn on or off in consultation with the registrant. If this flag is turned on, no transfer procedures can be initiated for that particular domain name. The status of the flag can be requested via a check-domain v2 transaction or via an info-domain v1 and v2 (when the domain name belongs to you as a registrar). If a transfer is initiated on such a domain name, a hitpoint will be attributed to the registrar.

This feature can be switched on and off on a ‘per registrar’ base. Blocking transfer on a domain name can potentially be harmful to registrants and other parties. Therefore, any abuse reported will lead to the immediate revocation of this privilege for the registrars involved. We urge registrars to only use this flag in full consent with the registrant.

Adding the ‘clientTransferProhibited’ flag:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
 <command>
   <update>
     <domain:update xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
       <domain:name>test.be</domain:name>
       <domain:add>
         <domain:status s="clientTransferProhibited" lang="en" />
       </domain:add>
     </domain:update>
   </update>
   <clTRID>block domain 334</clTRID>
 </command>
</epp>

Removing the ‘clientTransferProhibited’ flag:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
 <command>
   <update>
     <domain:update xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
       <domain:name>test.be</domain:name>
       <domain:rem>
         <domain:status s="clientTransferProhibited" lang="en" />
       </domain:rem>
     </domain:update>
   </update>
   <clTRID>release domain 334</clTRID>
 </command>
</epp>