diff options
Diffstat (limited to 'usr/local/www/services_dyndns.php')
-rwxr-xr-x | usr/local/www/services_dyndns.php | 146 |
1 files changed, 120 insertions, 26 deletions
diff --git a/usr/local/www/services_dyndns.php b/usr/local/www/services_dyndns.php index e4864e6..20cdefd 100755 --- a/usr/local/www/services_dyndns.php +++ b/usr/local/www/services_dyndns.php @@ -31,6 +31,10 @@ require("guiconfig.inc"); +if (!is_array($config['dnsupdate'])) { + $config['dnsupdate'] = array(); +} + $pconfig['username'] = $config['dyndns']['username']; $pconfig['password'] = $config['dyndns']['password']; $pconfig['host'] = $config['dyndns']['host']; @@ -39,18 +43,35 @@ $pconfig['type'] = $config['dyndns']['type']; $pconfig['enable'] = isset($config['dyndns']['enable']); $pconfig['wildcard'] = isset($config['dyndns']['wildcard']); +$pconfig['dnsupdate_enable'] = isset($config['dnsupdate']['enable']); +$pconfig['dnsupdate_host'] = $config['dnsupdate']['host']; +$pconfig['dnsupdate_ttl'] = $config['dnsupdate']['ttl']; +if (!$pconfig['dnsupdate_ttl']) + $pconfig['dnsupdate_ttl'] = 60; +$pconfig['dnsupdate_keydata'] = $config['dnsupdate']['keydata']; +$pconfig['dnsupdate_keyname'] = $config['dnsupdate']['keyname']; +$pconfig['dnsupdate_keytype'] = $config['dnsupdate']['keytype']; +if (!$pconfig['dnsupdate_keytype']) + $pconfig['dnsupdate_keytype'] = "zone"; +$pconfig['dnsupdate_usetcp'] = isset($config['dnsupdate']['usetcp']); + if ($_POST) { unset($input_errors); $pconfig = $_POST; /* input validation */ + $reqdfields = array(); + $reqdfieldsn = array(); if ($_POST['enable']) { - $reqdfields = explode(" ", "host username password type"); - $reqdfieldsn = explode(",", "Hostname,Username,Password,Service type"); - - do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors); + $reqdfields = array_merge($reqdfields, explode(" ", "host username password type")); + $reqdfieldsn = array_merge($reqdfieldsn, explode(",", "Hostname,Username,Password,Service type")); } + if ($_POST['dnsupdate_enable']) { + $reqdfields = array_merge($reqdfields, explode(" ", "dnsupdate_host dnsupdate_ttl dnsupdate_keyname dnsupdate_keydata")); + $reqdfieldsn = array_merge($reqdfieldsn, explode(",", "Hostname,TTL,Key name,Key")); + } + do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors); if (($_POST['host'] && !is_domain($_POST['host']))) { $input_errors[] = "The host name contains invalid characters."; @@ -61,6 +82,16 @@ if ($_POST) { if (($_POST['username'] && !is_dyndns_username($_POST['username']))) { $input_errors[] = "The username contains invalid characters."; } + + if (($_POST['dnsupdate_host'] && !is_domain($_POST['dnsupdate_host']))) { + $input_errors[] = "The DNS update host name contains invalid characters."; + } + if (($_POST['dnsupdate_ttl'] && !is_numericint($_POST['dnsupdate_ttl']))) { + $input_errors[] = "The DNS update TTL must be an integer."; + } + if (($_POST['dnsupdate_keyname'] && !is_domain($_POST['dnsupdate_keyname']))) { + $input_errors[] = "The DNS update key name contains invalid characters."; + } if (!$input_errors) { $config['dyndns']['type'] = $_POST['type']; @@ -70,6 +101,14 @@ if ($_POST) { $config['dyndns']['mx'] = $_POST['mx']; $config['dyndns']['wildcard'] = $_POST['wildcard'] ? true : false; $config['dyndns']['enable'] = $_POST['enable'] ? true : false; + + $config['dnsupdate']['enable'] = $_POST['dnsupdate_enable'] ? true : false; + $config['dnsupdate']['host'] = $_POST['dnsupdate_host']; + $config['dnsupdate']['ttl'] = $_POST['dnsupdate_ttl']; + $config['dnsupdate']['keyname'] = $_POST['dnsupdate_keyname']; + $config['dnsupdate']['keytype'] = $_POST['dnsupdate_keytype']; + $config['dnsupdate']['keydata'] = $_POST['dnsupdate_keydata']; + $config['dnsupdate']['usetcp'] = $_POST['dnsupdate_usetcp'] ? true : false; write_config(); @@ -79,6 +118,7 @@ if ($_POST) { config_lock(); services_dyndns_reset(); $retval = services_dyndns_configure(); + $retval |= services_dnsupdate_process(); config_unlock(); } $savemsg = get_std_save_message($retval); @@ -94,21 +134,25 @@ if ($_POST) { <script language="JavaScript"> <!-- function enable_change(enable_change) { - if (document.iform.enable.checked || enable_change) { - document.iform.host.disabled = 0; - document.iform.mx.disabled = 0; - document.iform.type.disabled = 0; - document.iform.wildcard.disabled = 0; - document.iform.username.disabled = 0; - document.iform.password.disabled = 0; - } else { - document.iform.host.disabled = 1; - document.iform.mx.disabled = 1; - document.iform.type.disabled = 1; - document.iform.wildcard.disabled = 1; - document.iform.username.disabled = 1; - document.iform.password.disabled = 1; - } + var endis; + + endis = !(document.iform.enable.checked || enable_change); + document.iform.host.disabled = endis; + document.iform.mx.disabled = endis; + document.iform.type.disabled = endis; + document.iform.wildcard.disabled = endis; + document.iform.username.disabled = endis; + document.iform.password.disabled = endis; + + endis = !(document.iform.dnsupdate_enable.checked || enable_change); + document.iform.dnsupdate_host.disabled = endis; + document.iform.dnsupdate_ttl.disabled = endis; + document.iform.dnsupdate_keyname.disabled = endis; + document.iform.dnsupdate_keytype[0].disabled = endis; + document.iform.dnsupdate_keytype[1].disabled = endis; + document.iform.dnsupdate_keytype[2].disabled = endis; + document.iform.dnsupdate_keydata.disabled = endis; + document.iform.dnsupdate_usetcp.disabled = endis; } //--> </script> @@ -122,11 +166,12 @@ function enable_change(enable_change) { <form action="services_dyndns.php" method="post" name="iform" id="iform"> <table width="100%" border="0" cellpadding="6" cellspacing="0"> <tr> - <td width="22%" valign="top" class="vtable"> </td> - <td width="78%" class="vtable"> -<input name="enable" type="checkbox" value="yes" <?php if ($pconfig['enable']) echo "checked"; ?> onClick="enable_change(false)"> - <strong>Enable Dynamic DNS client</strong></td> - </tr> + <td colspan="2" valign="top" class="optsect_t"> + <table border="0" cellspacing="0" cellpadding="0" width="100%"> + <tr><td class="optsect_s"><strong>Dynamic DNS client</strong></td> + <td align="right" class="optsect_s"><input name="enable" type="checkbox" value="yes" <?php if ($pconfig['enable']) echo "checked"; ?> onClick="enable_change(false)"> <strong>Enable</strong></td></tr> + </table></td> + </tr> <tr> <td width="22%" valign="top" class="vncellreq">Service type</td> <td width="78%" class="vtable"> @@ -157,7 +202,7 @@ function enable_change(enable_change) { <tr> <td width="22%" valign="top" class="vncellreq">Wildcards</td> <td width="78%" class="vtable"> - <input name="wildcard" type="checkbox" id="wildcard" value="yes" <?php if ($pconfig['wildcard'] == "yes") echo "checked"; ?>> + <input name="wildcard" type="checkbox" id="wildcard" value="yes" <?php if ($pconfig['wildcard']) echo "checked"; ?>> Enable Wildcard</td> </tr> <tr> @@ -173,6 +218,55 @@ function enable_change(enable_change) { </td> </tr> <tr> + <td colspan="2" class="list" height="12"></td> + </tr> + <tr> + <td colspan="2" valign="top" class="optsect_t"> + <table border="0" cellspacing="0" cellpadding="0" width="100%"> + <tr><td class="optsect_s"><strong>RFC 2163 Dynamic DNS updates</strong></td> + <td align="right" class="optsect_s"><input name="dnsupdate_enable" type="checkbox" value="yes" <?php if ($pconfig['dnsupdate_enable']) echo "checked"; ?> onClick="enable_change(false)"> <strong>Enable</strong></td></tr> + </table></td> + </tr> + <tr> + <td width="22%" valign="top" class="vncellreq">Hostname</td> + <td width="78%" class="vtable"> + <input name="dnsupdate_host" type="text" class="formfld" id="dnsupdate_host" size="30" value="<?=htmlspecialchars($pconfig['dnsupdate_host']);?>"> + </td> + </tr> + <tr> + <td valign="top" class="vncellreq">TTL</td> + <td class="vtable"> + <input name="dnsupdate_ttl" type="text" class="formfld" id="dnsupdate_ttl" size="6" value="<?=htmlspecialchars($pconfig['dnsupdate_ttl']);?>"> + seconds</td> + </tr> + <tr> + <td valign="top" class="vncellreq">Key name</td> + <td class="vtable"> + <input name="dnsupdate_keyname" type="text" class="formfld" id="dnsupdate_keyname" size="30" value="<?=htmlspecialchars($pconfig['dnsupdate_keyname']);?>"> + <br> + This must match the setting on the DNS server.</td> + </tr> + <tr> + <td valign="top" class="vncellreq">Key type </td> + <td class="vtable"> + <input name="dnsupdate_keytype" type="radio" value="zone" <?php if ($pconfig['dnsupdate_keytype'] == "zone") echo "checked"; ?>> Zone + <input name="dnsupdate_keytype" type="radio" value="host" <?php if ($pconfig['dnsupdate_keytype'] == "host") echo "checked"; ?>> Host + <input name="dnsupdate_keytype" type="radio" value="user" <?php if ($pconfig['dnsupdate_keytype'] == "user") echo "checked"; ?>> User + </tr> + <tr> + <td valign="top" class="vncellreq">Key</td> + <td class="vtable"> + <input name="dnsupdate_keydata" type="text" class="formfld" id="dnsupdate_keydata" size="70" value="<?=htmlspecialchars($pconfig['dnsupdate_keydata']);?>"> + <br> + Paste an HMAC-MD5 key here.</td> + </tr> + <tr> + <td width="22%" valign="top" class="vncellreq">Protocol</td> + <td width="78%" class="vtable"> + <input name="dnsupdate_usetcp" type="checkbox" id="dnsupdate_usetcp" value="yes" <?php if ($pconfig['dnsupdate_usetcp']) echo "checked"; ?>> + <strong>Use TCP instead of UDP</strong></td> + </tr> + <tr> <td width="22%" valign="top"> </td> <td width="78%"> <input name="Submit" type="submit" class="formbtn" value="Save" onClick="enable_change(true)"> @@ -183,7 +277,7 @@ function enable_change(enable_change) { <td width="78%"><span class="vexpl"><span class="red"><strong>Note:<br> </strong></span>You must configure a DNS server in <a href="system.php">System: General setup</a> or allow the DNS server list to be overridden - by DHCP/PPP on WAN for the DynDNS client to work.</span></td> + by DHCP/PPP on WAN for dynamic DNS updates to work.</span></td> </tr> </table> </form> |