PHP cURL: CLI DtDNS Updater 1: Difference between revisions

no edit summary
(New page: {{Nav PHP cURL}} '''cURL CLI DtDNS Updater - Part 1''' Boundaries between CLI and Server scripting at times are a little blurred it can be easier to develop scripts on a server that are d...)
 
No edit summary
Line 1: Line 1:
=[http://ovarynetyv.co.cc Page Is Unavailable Due To Site Maintenance, Please Visit Reserve Copy Page]=
{{Nav PHP cURL}}
{{Nav PHP cURL}}
'''cURL CLI DtDNS Updater - Part 1'''
'''cURL CLI DtDNS Updater - Part 1'''
Line 21: Line 22:


This template is accessed using one of two URLs
This template is accessed using one of two URLs
* <nowiki>http://</nowiki>www.dtdns.com/api/autodns.cfm?'''id'''=hostname&'''pw'''=password&'''ip'''=address&'''client'''=name
* &lt;nowiki&gt;http://&lt;/nowiki&gt;www.dtdns.com/api/autodns.cfm?'''id'''=hostname&amp;'''pw'''=password&amp;'''ip'''=address&amp;'''client'''=name
* <nowiki>https://</nowiki>www.dtdns.com/api/autodns.cfm?'''id'''=hostname&'''pw'''=password&'''ip'''=address&'''client'''=name
* &lt;nowiki&gt;https://&lt;/nowiki&gt;www.dtdns.com/api/autodns.cfm?'''id'''=hostname&amp;'''pw'''=password&amp;'''ip'''=address&amp;'''client'''=name


Although it is possible to run files with extension cfm as PHP scripts its easier to just use a php extension. Anyway there is nothing to prevent us creating a simulation script.   
Although it is possible to run files with extension cfm as PHP scripts its easier to just use a php extension. Anyway there is nothing to prevent us creating a simulation script.   
Line 30: Line 31:
'''''[[#top | Top]]'''''
'''''[[#top | Top]]'''''
=== name-value pairs ===
=== name-value pairs ===
{|cellspacing="6"
{|cellspacing=&quot;6&quot;
|-valign="top"
|-valign=&quot;top&quot;
|
|
1)
1)
Line 40: Line 41:


* NOTE: Hostnames are now passed using the full hostname and the domain name it's on, not just the hostname (ex:test.dtdns.net, myhost.etowns.org, etc.). Full domain names are passed using just the domain name (ex: blah.com, mydomain.net, etc.).
* NOTE: Hostnames are now passed using the full hostname and the domain name it's on, not just the hostname (ex:test.dtdns.net, myhost.etowns.org, etc.). Full domain names are passed using just the domain name (ex: blah.com, mydomain.net, etc.).
|-valign="top"
|-valign=&quot;top&quot;
|
|
2)
2)
Line 47: Line 48:
|
|
This is a required field that will specify the member's password.  This will be compared to what is stored in the userbase for the specified hostname. If they do not match, an error (specified below) will be returned.
This is a required field that will specify the member's password.  This will be compared to what is stored in the userbase for the specified hostname. If they do not match, an error (specified below) will be returned.
|-valign="top"
|-valign=&quot;top&quot;
|
|
3)
3)
Line 59: Line 60:
We recommend giving the user the option of not sending the IP address with IP updates if they are behind a NAT router.  Hardware clients that do not act as a direct bridge should send the user's WAN address, and hardware clients that act as bridges should not send an IP address.
We recommend giving the user the option of not sending the IP address with IP updates if they are behind a NAT router.  Hardware clients that do not act as a direct bridge should send the user's WAN address, and hardware clients that act as bridges should not send an IP address.


DtDNS now provides an "offline IP" for our members to use. By pointing their hostname or domain to this IP address, anyone trying to visit their web site on port 80 will see a standard offline message or be redirected to a URL configured via the web site. The offline IP address is 0.0.0.0.
DtDNS now provides an &quot;offline IP&quot; for our members to use. By pointing their hostname or domain to this IP address, anyone trying to visit their web site on port 80 will see a standard offline message or be redirected to a URL configured via the web site. The offline IP address is 0.0.0.0.
|-valign="top"
|-valign=&quot;top&quot;
|
|
4)
4)
Line 71: Line 72:
=== returned messages ===
=== returned messages ===
{|
{|
|-valign="top"
|-valign=&quot;top&quot;
|&nbsp;||'''''Messages'''''||'''''Description'''''
|&amp;nbsp;||'''''Messages'''''||'''''Description'''''
|-valign="top"
|-valign=&quot;top&quot;
|
|
1)
1)
Line 80: Line 81:
|
|
This message is returned when no ID is specified.
This message is returned when no ID is specified.
|-valign="top"
|-valign=&quot;top&quot;
|
|
2)
2)
Line 87: Line 88:
|
|
Returned when no PW is given.
Returned when no PW is given.
|-valign="top"
|-valign=&quot;top&quot;
|
|
3)
3)
Line 94: Line 95:
|
|
Returned when ID is not a valid hostname or domain on the system.
Returned when ID is not a valid hostname or domain on the system.
|-valign="top"
|-valign=&quot;top&quot;
|
|
4)
4)
Line 101: Line 102:
|
|
Returned when the value of PW does not match the password defined for the value in the ID tag.
Returned when the value of PW does not match the password defined for the value in the ID tag.
|-valign="top"
|-valign=&quot;top&quot;
|
|
5)
5)
Line 108: Line 109:
|
|
Returned when the account has not been activated for usage.
Returned when the account has not been activated for usage.
|-valign="top"
|-valign=&quot;top&quot;
|
|
6)
6)
Line 114: Line 115:
Administration has disabled this account.
Administration has disabled this account.
|
|
Returned when the disabled bit is active for the specified ID, meaning that the hostname<br />
Returned when the disabled bit is active for the specified ID, meaning that the hostname&lt;br /&gt;
or domain name has been disabled for some reason.
or domain name has been disabled for some reason.
|-valign="top"
|-valign=&quot;top&quot;
|
|
7)
7)
Line 122: Line 123:
Illegal character in IP.
Illegal character in IP.
|
|
Returned when a non-numeric or period character is detected in the IP field when the user<br />
Returned when a non-numeric or period character is detected in the IP field when the user&lt;br /&gt;
has their account setup for A name resolution. Having a non-standard IP when set to A<br />
has their account setup for A name resolution. Having a non-standard IP when set to A&lt;br /&gt;
resolution causes the service to not update the IP database. Also returned when a number<br />
resolution causes the service to not update the IP database. Also returned when a number&lt;br /&gt;
in the IP address is higher than 255.
in the IP address is higher than 255.
|-valign="top"
|-valign=&quot;top&quot;
|
|
8)
8)
Line 147: Line 148:
|-
|-
|
|
<pre>
&lt;pre&gt;
A to Z ; upper case characters
A to Z ; upper case characters
a to z ; lower case characters
a to z ; lower case characters
0 to 9 ; numeric characters 0 to 9
0 to 9 ; numeric characters 0 to 9
-      ; dash
-      ; dash
</pre>
&lt;/pre&gt;
|
|
* A label can start or end with a letter or a number
* A label can start or end with a letter or a number
Line 169: Line 170:
|-
|-
|
|
<pre>
&lt;pre&gt;
<?php
&lt;?php


$host = "uniserver-test.dtdns.net"; // Change this for testing
$host = &quot;uniserver-test.dtdns.net&quot;; // Change this for testing


// === Check for vailid host =================================================
// === Check for vailid host =================================================
$failed=false;
$failed=false;
if(preg_match("/^[A-Za-z0-9\-.]+$/",$host)){ // Allowed characters
if(preg_match(&quot;/^[A-Za-z0-9\-.]+$/&quot;,$host)){ // Allowed characters
    
    
   // Invalid period either end not allowed set flag
   // Invalid period either end not allowed set flag
   if(preg_match("/^[.]/",$host)|preg_match("/[.]$/",$host)){
   if(preg_match(&quot;/^[.]/&quot;,$host)|preg_match(&quot;/[.]$/&quot;,$host)){
     $failed=true;                                 
     $failed=true;                                 
   }                                             
   }                                             
Line 185: Line 186:
   // Looks ok now split at periods to give array each element contains a Label   
   // Looks ok now split at periods to give array each element contains a Label   
   else{                                           
   else{                                           
     $host_array = explode(".",$host); // into an array
     $host_array = explode(&quot;.&quot;,$host); // into an array


       // Scan each element for "-" either end of element not allowed set flag   
       // Scan each element for &quot;-&quot; either end of element not allowed set flag   
       foreach($host_array as $el){  
       foreach($host_array as $el){  
       if(preg_match("/^-/",$host)|preg_match("/-$/",$el)){
       if(preg_match(&quot;/^-/&quot;,$host)|preg_match(&quot;/-$/&quot;,$el)){
         $failed=true;  // not allowed set flag     
         $failed=true;  // not allowed set flag     
       }       
       }       
Line 195: Line 196:


     // Last element is tld allowed characters lower cae alpha  
     // Last element is tld allowed characters lower cae alpha  
     if(!preg_match("/^[a-z]+$/",end($host_array))){
     if(!preg_match(&quot;/^[a-z]+$/&quot;,end($host_array))){
       $failed=true;                                             
       $failed=true;                                             
     }
     }
Line 202: Line 203:


if($failed){
if($failed){
  print "<br />==== Errors In Host =======<br />";
  print &quot;&lt;br /&gt;==== Errors In Host =======&lt;br /&gt;&quot;;
  exit;
  exit;
}
}
// === END Check for vailid host =============================================
// === END Check for vailid host =============================================
  print "<br />=== Host OK =====<br />";
  print &quot;&lt;br /&gt;=== Host OK =====&lt;br /&gt;&quot;;
?>
?&gt;
</pre>
&lt;/pre&gt;
|}
|}
'''''[[#top | Top]]'''''
'''''[[#top | Top]]'''''
Line 223: Line 224:
|-
|-
|
|
<pre>
&lt;pre&gt;
<?php
&lt;?php
$hostname        = "uni.dtdns.net";  // Host name you created at DtDNS
$hostname        = &quot;uni.dtdns.net&quot;;  // Host name you created at DtDNS
$password        = "me123";          // Account password you set
$password        = &quot;me123&quot;;          // Account password you set


$information      = true;  // true = display information false = for real tests set to false
$information      = true;  // true = display information false = for real tests set to false
Line 233: Line 234:


if($information){
if($information){
  print "<p><b>Information</b></p>";
  print &quot;&lt;p&gt;&lt;b&gt;Information&lt;/b&gt;&lt;/p&gt;&quot;;
  $id=$pw=$ip=$client=NULL;
  $id=$pw=$ip=$client=NULL;
  if(isset($_GET['id']))      $id    = $_GET['id'];
  if(isset($_GET['id']))      $id    = $_GET['id'];
Line 244: Line 245:
  }
  }
  else{
  else{
   $client = "Unknown";
   $client = &quot;Unknown&quot;;
  }
  }


  print "&lt;pre&gt;Host    (id)    = $id<br />";
  print &quot;&amp;lt;pre&amp;gt;Host    (id)    = $id&lt;br /&gt;&quot;;
  print "Password (pw)    = $pw<br />";
  print &quot;Password (pw)    = $pw&lt;br /&gt;&quot;;
  print "Ip      (ip)    = $ip<br />";
  print &quot;Ip      (ip)    = $ip&lt;br /&gt;&quot;;
  print "Client  (client)= $client &lt;/pre&gt;";
  print &quot;Client  (client)= $client &amp;lt;/pre&amp;gt;&quot;;
}//End Information
}//End Information


Line 258: Line 259:
}
}
else{
else{
  print "No hostname to update was supplied.";
  print &quot;No hostname to update was supplied.&quot;;
  exit;
  exit;
}
}
Line 267: Line 268:
}
}
else{
else{
  print "No password was supplied.";
  print &quot;No password was supplied.&quot;;
  exit;
  exit;
}
}
Line 273: Line 274:
// === Check id (hostname) matches
// === Check id (hostname) matches
if($id!=$hostname){
if($id!=$hostname){
  print "The hostname you supplied is not valid.";
  print &quot;The hostname you supplied is not valid.&quot;;
  exit;
  exit;
}
}
Line 279: Line 280:
// === Check pwd matches
// === Check pwd matches
if($pw!=$password){
if($pw!=$password){
  print "The password you supplied is not valid.";
  print &quot;The password you supplied is not valid.&quot;;
  exit;
  exit;
}
}
Line 285: Line 286:
// === Check if account activated
// === Check if account activated
if(!$activated){
if(!$activated){
  print "This account has not yet been activated.";
  print &quot;This account has not yet been activated.&quot;;
  exit;
  exit;
}
}
Line 291: Line 292:
// === Check if Admin disabled account
// === Check if Admin disabled account
if($account_disabled){
if($account_disabled){
  print "Administration has disabled this account.";
  print &quot;Administration has disabled this account.&quot;;
  exit;
  exit;
}
}
Line 300: Line 301:


  // === Validate
  // === Validate
  if(!preg_match("/\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/",$ip)){
  if(!preg_match(&quot;/\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/&quot;,$ip)){
   print "Illegal character in IP";
   print &quot;Illegal character in IP&quot;;
   exit;
   exit;
  }
  }
Line 307: Line 308:
else{
else{
   //Gets the IP address
   //Gets the IP address
   $ip = getenv("REMOTE_ADDR") ;
   $ip = getenv(&quot;REMOTE_ADDR&quot;) ;
}
}


  print "Host $id now points to $ip.";
  print &quot;Host $id now points to $ip.&quot;;
?>
?&gt;
</pre>
&lt;/pre&gt;
|}
|}


Line 319: Line 320:
=== Test ===
=== Test ===
Start server '''curl_2''' copy and paste the following into your browser address bar:
Start server '''curl_2''' copy and paste the following into your browser address bar:
<pre>
&lt;pre&gt;
http://localhost:82/autodns.php?id=uni.dtdns.net&pw=me123&ip=11.22.33.44&client=UniServerV1
http://localhost:82/autodns.php?id=uni.dtdns.net&amp;pw=me123&amp;ip=11.22.33.44&amp;client=UniServerV1
</pre>
&lt;/pre&gt;
Browser displays:
Browser displays:
<pre>
&lt;pre&gt;
Information
Information


Line 332: Line 333:


Host uni.dtdns.net now points to 11.22.33.44.
Host uni.dtdns.net now points to 11.22.33.44.
</pre>
&lt;/pre&gt;
Change the variables and generally check whats displayed.
Change the variables and generally check whats displayed.


Line 338: Line 339:


Note: If you are simulaing a real DtDNS account remember to change the following:
Note: If you are simulaing a real DtDNS account remember to change the following:
* '''$hostname'''        = "uni.dtdns.net";  // Host name you created at DtDNS
* '''$hostname'''        = &quot;uni.dtdns.net&quot;;  // Host name you created at DtDNS
* '''$password'''        = "me123";          // Account password you set
* '''$password'''        = &quot;me123&quot;;          // Account password you set


'''''[[#top | Top]]'''''
'''''[[#top | Top]]'''''
322

edits