Project

General

Profile

Download (19.5 KB) Statistics
| Branch: | Tag: | Revision:
1 f1f60c92 Ermal Luçi
<?php
2
/* $Id$ */
3
/*
4 7a5fe50d Phil Davis
	Copyright (C) 2008 Ermal Luçi
5 f1f60c92 Ermal Luçi
	All rights reserved.
6
7
	Redistribution and use in source and binary forms, with or without
8
	modification, are permitted provided that the following conditions are met:
9
10
	1. Redistributions of source code must retain the above copyright notice,
11
	   this list of conditions and the following disclaimer.
12
13
	2. Redistributions in binary form must reproduce the above copyright
14
	   notice, this list of conditions and the following disclaimer in the
15
	   documentation and/or other materials provided with the distribution.
16
17
	THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
18
	INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
19
	AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
20
	AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
21
	OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22
	SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23
	INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24
	CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25
	ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26
	POSSIBILITY OF SUCH DAMAGE.
27
*/
28 1d333258 Scott Ullrich
/*
29
	pfSense_BUILDER_BINARIES:	/bin/rm
30
	pfSense_MODULE:	dyndns
31
*/
32 f1f60c92 Ermal Luçi
33 6b07c15a Matthew Grooms
##|+PRIV
34
##|*IDENT=page-services-dynamicdnsclient
35
##|*NAME=Services: Dynamic DNS client page
36
##|*DESCR=Allow access to the 'Services: Dynamic DNS client' page.
37
##|*MATCH=services_dyndns_edit.php*
38
##|-PRIV
39
40 ee2db55f Ermal Lu?i
/* returns true if $uname is a valid DynDNS username */
41
function is_dyndns_username($uname) {
42
        if (!is_string($uname))
43
                return false;
44
        
45
        if (preg_match("/[^a-z0-9\-.@_:]/i", $uname))
46
                return false;
47
        else
48
                return true;
49
}
50
51 f1f60c92 Ermal Luçi
require("guiconfig.inc");
52
53
if (!is_array($config['dyndnses']['dyndns'])) {
54
	$config['dyndnses']['dyndns'] = array();
55
}
56
57
$a_dyndns = &$config['dyndnses']['dyndns'];
58
59 e41ec584 Renato Botelho
if (is_numericint($_GET['id']))
60
	$id = $_GET['id'];
61
if (isset($_POST['id']) && is_numericint($_POST['id']))
62 f1f60c92 Ermal Luçi
	$id = $_POST['id'];
63
64
if (isset($id) && isset($a_dyndns[$id])) {
65
	$pconfig['username'] = $a_dyndns[$id]['username'];
66
	$pconfig['password'] = $a_dyndns[$id]['password'];
67
	$pconfig['host'] = $a_dyndns[$id]['host'];
68
	$pconfig['mx'] = $a_dyndns[$id]['mx'];
69
	$pconfig['type'] = $a_dyndns[$id]['type'];
70 acdfc164 Ermal Luçi
	$pconfig['enable'] = !isset($a_dyndns[$id]['enable']);
71 f1f60c92 Ermal Luçi
	$pconfig['interface'] = $a_dyndns[$id]['interface'];
72
	$pconfig['wildcard'] = isset($a_dyndns[$id]['wildcard']);
73 c8c90b81 Phil Davis
	$pconfig['verboselog'] = isset($a_dyndns[$id]['verboselog']);
74 aa79f351 Sebastian Chrostek
	$pconfig['curl_ipresolve_v4'] = isset($a_dyndns[$id]['curl_ipresolve_v4']);
75
	$pconfig['curl_ssl_verifypeer'] = isset($a_dyndns[$id]['curl_ssl_verifypeer']);
76 cd132e86 Edson Brandi
	$pconfig['zoneid'] = $a_dyndns[$id]['zoneid'];
77 91dad6c6 N0YB
	$pconfig['ttl'] = $a_dyndns[$id]['ttl'];
78 37f3e704 Matt Corallo
	$pconfig['updateurl'] = $a_dyndns[$id]['updateurl'];
79
	$pconfig['resultmatch'] = $a_dyndns[$id]['resultmatch'];
80
	$pconfig['requestif'] = $a_dyndns[$id]['requestif'];
81 f1f60c92 Ermal Luçi
	$pconfig['descr'] = $a_dyndns[$id]['descr'];
82
}
83
84
if ($_POST) {
85
86
	unset($input_errors);
87
	$pconfig = $_POST;
88 d9cc4b24 gnhb
	
89 0030036f gnhb
	if(($pconfig['type'] == "freedns" || $pconfig['type'] == "namecheap") && $_POST['username'] == "")
90
		$_POST['username'] = "none"; 
91 f1f60c92 Ermal Luçi
92
	/* input validation */
93
	$reqdfields = array();
94
	$reqdfieldsn = array();
95 37f3e704 Matt Corallo
	$reqdfields = array("type");
96
	$reqdfieldsn = array(gettext("Service type"));
97 e4a62f32 Daniel Becker
	if ($pconfig['type'] != "custom" && $pconfig['type'] != "custom-v6") {
98 37f3e704 Matt Corallo
		$reqdfields[] = "host";
99
		$reqdfieldsn[] = gettext("Hostname");
100
		$reqdfields[] = "password";
101
		$reqdfieldsn[] = gettext("Password");
102
 		$reqdfields[] = "username";
103
 		$reqdfieldsn[] = gettext("Username");
104
	}else{
105
		$reqdfields[] = "updateurl";
106
		$reqdfieldsn[] = gettext("Update URL");
107
 	}
108 f1f60c92 Ermal Luçi
109 1e9b4611 Renato Botelho
	do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
110 f1f60c92 Ermal Luçi
111 1be99911 Renato Botelho
	if (($_POST['host'] && !is_domain($_POST['host'])))
112
		$input_errors[] = gettext("The Hostname contains invalid characters.");
113 f1f60c92 Ermal Luçi
	if (($_POST['mx'] && !is_domain($_POST['mx']))) 
114 2b2a7984 Rafael Lucas
		$input_errors[] = gettext("The MX contains invalid characters.");
115 37f3e704 Matt Corallo
	if ((in_array("username", $reqdfields) && $_POST['username'] && !is_dyndns_username($_POST['username'])) || ((in_array("username", $reqdfields)) && ($_POST['username'] == ""))) 
116
 		$input_errors[] = gettext("The username contains invalid characters.");
117 f1f60c92 Ermal Luçi
118
	if (!$input_errors) {
119
		$dyndns = array();
120
		$dyndns['type'] = $_POST['type'];
121
		$dyndns['username'] = $_POST['username'];
122
		$dyndns['password'] = $_POST['password'];
123
		$dyndns['host'] = $_POST['host'];
124
		$dyndns['mx'] = $_POST['mx'];
125
		$dyndns['wildcard'] = $_POST['wildcard'] ? true : false;
126 c8c90b81 Phil Davis
		$dyndns['verboselog'] = $_POST['verboselog'] ? true : false;
127 aa79f351 Sebastian Chrostek
		$dyndns['curl_ipresolve_v4'] = $_POST['curl_ipresolve_v4'] ? true : false;
128
		$dyndns['curl_ssl_verifypeer'] = $_POST['curl_ssl_verifypeer'] ? true : false;
129 d348160e Renato Botelho
		/* In this place enable means disabled */
130
		if ($_POST['enable'])
131
			unset($dyndns['enable']);
132
		else
133
			$dyndns['enable'] = true;
134 f1f60c92 Ermal Luçi
		$dyndns['interface'] = $_POST['interface'];
135 cd132e86 Edson Brandi
		$dyndns['zoneid'] = $_POST['zoneid'];
136
		$dyndns['ttl'] = $_POST['ttl'];
137 37f3e704 Matt Corallo
		$dyndns['updateurl'] = $_POST['updateurl'];
138
		// Trim hard-to-type but sometimes returned characters
139
		$dyndns['resultmatch'] = trim($_POST['resultmatch'], "\t\n\r");
140 e4a62f32 Daniel Becker
		($dyndns['type'] == "custom" || $dyndns['type'] == "custom-v6") ? $dyndns['requestif'] = $_POST['requestif'] : $dyndns['requestif'] = $_POST['interface'];
141 f1f60c92 Ermal Luçi
		$dyndns['descr'] = $_POST['descr'];
142 f3b2b2a4 Yehuda Katz
		$dyndns['force'] = isset($_POST['force']);
143 0030036f gnhb
		
144
		if($dyndns['username'] == "none")
145
			$dyndns['username'] = "";
146 f1f60c92 Ermal Luçi
147
		if (isset($id) && $a_dyndns[$id])
148
			$a_dyndns[$id] = $dyndns;
149 37f3e704 Matt Corallo
		else {
150
 			$a_dyndns[] = $dyndns;
151
			$id = count($a_dyndns) - 1;
152
		}
153
154
		$dyndns['id'] = $id;
155
		//Probably overkill, but its better to be safe
156
		for($i = 0; $i < count($a_dyndns); $i++) {
157
			$a_dyndns[$i]['id'] = $i;
158
		}
159 f1f60c92 Ermal Luçi
160
		write_config();
161
162 f3b2b2a4 Yehuda Katz
		services_dyndns_configure_client($dyndns);
163 9c38bcea sullrich
164 07cdb9a2 Ermal Luçi
		header("Location: services_dyndns.php");
165
		exit;
166 f1f60c92 Ermal Luçi
	}
167
}
168
169 2b2a7984 Rafael Lucas
$pgtitle = array(gettext("Services"),gettext("Dynamic DNS client"));
170 f1f60c92 Ermal Luçi
include("head.inc");
171
172
?>
173
174
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
175
<?php include("fbegin.inc"); ?>
176
<?php if ($input_errors) print_input_errors($input_errors); ?>
177
<?php if ($savemsg) print_info_box($savemsg); ?>
178 37f3e704 Matt Corallo
<script type="text/javascript">
179
function _onTypeChange(type){ 
180
	switch(type) {
181
		case "custom":
182 e4a62f32 Daniel Becker
		case "custom-v6":
183 37f3e704 Matt Corallo
			document.getElementById("_resulttr").style.display = '';
184
			document.getElementById("_urltr").style.display = '';
185
			document.getElementById("_requestiftr").style.display = '';
186 aa79f351 Sebastian Chrostek
			document.getElementById("_curloptions").style.display = '';
187 37f3e704 Matt Corallo
			document.getElementById("_hostnametr").style.display = 'none';
188
			document.getElementById("_mxtr").style.display = 'none';
189
			document.getElementById("_wildcardtr").style.display = 'none';
190
			document.getElementById("r53_zoneid").style.display='none';
191
			document.getElementById("r53_ttl").style.display='none';
192
			break;
193
		case "route53":
194
			document.getElementById("_resulttr").style.display = 'none';
195
			document.getElementById("_urltr").style.display = 'none';
196
			document.getElementById("_requestiftr").style.display = 'none';
197 aa79f351 Sebastian Chrostek
			document.getElementById("_curloptions").style.display = 'none';
198 37f3e704 Matt Corallo
			document.getElementById("_hostnametr").style.display = '';
199
			document.getElementById("_mxtr").style.display = '';
200
			document.getElementById("_wildcardtr").style.display = '';
201
			document.getElementById("r53_zoneid").style.display='';
202
			document.getElementById("r53_ttl").style.display='';
203
			break;
204
		default:
205
			document.getElementById("_resulttr").style.display = 'none';
206
			document.getElementById("_urltr").style.display = 'none';
207
			document.getElementById("_requestiftr").style.display = 'none';
208 aa79f351 Sebastian Chrostek
			document.getElementById("_curloptions").style.display = 'none';
209 37f3e704 Matt Corallo
			document.getElementById("_hostnametr").style.display = '';
210
			document.getElementById("_mxtr").style.display = '';
211
			document.getElementById("_wildcardtr").style.display = '';
212
			document.getElementById("r53_zoneid").style.display='none';
213
			document.getElementById("r53_ttl").style.display='none';
214
	}
215
}
216
</script>
217 f1f60c92 Ermal Luçi
<form action="services_dyndns_edit.php" method="post" name="iform" id="iform">
218
              <table width="100%" border="0" cellpadding="6" cellspacing="0">
219
                <tr>
220
                  <td colspan="2" valign="top" class="optsect_t">
221
				  <table border="0" cellspacing="0" cellpadding="0" width="100%">
222 2b2a7984 Rafael Lucas
				  <tr><td class="optsect_s"><strong><?=gettext("Dynamic DNS client");?></strong></td></tr>
223 f1f60c92 Ermal Luçi
				  </table>
224
				  </td>
225
                </tr>
226
                <tr>
227 2b2a7984 Rafael Lucas
                  <td width="22%" valign="top" class="vncell"><?=gettext("Disable");?></td>
228 f1f60c92 Ermal Luçi
				  <td width="78%" class="vtable">
229 2b2a7984 Rafael Lucas
				    <input name="enable" type="checkbox" id="enable" value="<?=gettext("yes");?>" <?php if ($pconfig['enable']) echo "checked"; ?>>
230 f1f60c92 Ermal Luçi
				  </td>
231
                </tr>
232
                <tr>
233 2b2a7984 Rafael Lucas
                  <td width="22%" valign="top" class="vncellreq"><?=gettext("Service type");?></td>
234 f1f60c92 Ermal Luçi
                  <td width="78%" class="vtable">
235 37f3e704 Matt Corallo
			<select name="type" class="formselect" id="type" onchange="_onTypeChange(this.options[this.selectedIndex].value);">
236 f1f60c92 Ermal Luçi
                      <?php
237 7a5fe50d Phil Davis
						$types = explode(",", DYNDNS_PROVIDER_DESCRIPTIONS);
238
						$vals = explode(" ", DYNDNS_PROVIDER_VALUES);
239 f1f60c92 Ermal Luçi
						$j = 0; for ($j = 0; $j < count($vals); $j++): ?>
240
                      <option value="<?=$vals[$j];?>" <?php if ($vals[$j] == $pconfig['type']) echo "selected";?>>
241
                      <?=htmlspecialchars($types[$j]);?>
242
                      </option>
243
                      <?php endfor; ?>
244
                    </select></td>
245
				</tr>
246
				<tr>
247 2b2a7984 Rafael Lucas
				   <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface to monitor");?></td>  
248 f1f60c92 Ermal Luçi
				   <td width="78%" class="vtable">
249
				   <select name="interface" class="formselect" id="interface">
250 3e1eec58 smos
				<?php
251
					$iflist = get_configured_interface_with_descr();					
252
				   	foreach ($iflist as $if => $ifdesc) {
253
						echo "<option value=\"{$if}\"";
254
						if ($pconfig['interface'] == $if)
255
							echo "selected";
256
						echo ">{$ifdesc}</option>\n";
257
					}
258 8f56dd27 phildd
					unset($iflist);
259 3e1eec58 smos
					$grouplist = return_gateway_groups_array();
260
				   	foreach ($grouplist as $name => $group) {
261
						echo "<option value=\"{$name}\"";
262
						if ($pconfig['interface'] == $name)
263
							echo "selected";
264
						echo ">GW Group {$name}</option>\n";
265
					}
266 8f56dd27 phildd
					unset($grouplist);
267 3e1eec58 smos
				?>
268 f1f60c92 Ermal Luçi
					</select>
269
					</td>
270
					</td>
271
				</tr>	
272 37f3e704 Matt Corallo
				<tr id="_requestiftr">
273 31300a95 phildd
					<td width="22%" valign="top" class="vncellreq"><?=gettext("Interface to send update from");?></td>  
274
					<td width="78%" class="vtable">
275
					<select name="requestif" class="formselect" id="requestif">
276
				<?php
277
					$iflist = get_configured_interface_with_descr();					
278
					foreach ($iflist as $if => $ifdesc) {
279
						echo "<option value=\"{$if}\"";
280
						if ($pconfig['requestif'] == $if)
281
							echo "selected";
282
						echo ">{$ifdesc}</option>\n";
283
					}
284 8f56dd27 phildd
					unset($iflist);
285 31300a95 phildd
					$grouplist = return_gateway_groups_array();
286
					foreach ($grouplist as $name => $group) {
287
						echo "<option value=\"{$name}\"";
288
						if ($pconfig['requestif'] == $name)
289
							echo "selected";
290
						echo ">GW Group {$name}</option>\n";
291
					}
292 8f56dd27 phildd
					unset($grouplist);
293 31300a95 phildd
				?>
294 37f3e704 Matt Corallo
					</select>
295
					<br/><?= gettext("Note: This is almost always the same as the Interface to Monitor.");?>
296
					</td>
297
					</td>
298
				</tr>
299
                <tr id="_hostnametr">
300 2b2a7984 Rafael Lucas
                  <td width="22%" valign="top" class="vncellreq"><?=gettext("Hostname");?></td>
301 f1f60c92 Ermal Luçi
                  <td width="78%" class="vtable">
302
                    <input name="host" type="text" class="formfld unknown" id="host" size="30" value="<?=htmlspecialchars($pconfig['host']);?>">
303
                    <br>
304
				    <span class="vexpl">
305 16457bdd Renato Botelho
				    <span class="red"><strong><?=gettext("Note:");?><br></strong>
306 f1f60c92 Ermal Luçi
				    </span>
307 38a481ad jim-p
					<?=gettext("Enter the complete host/domain name.  example:  myhost.dyndns.org");?><br/>
308
					<?=gettext("For he.net tunnelbroker, enter your tunnel ID");?>
309 f1f60c92 Ermal Luçi
				    </span>
310
		          </td>
311
				</tr>
312 37f3e704 Matt Corallo
                <tr id="_mxtr">
313 50bfcec0 Carlos Eduardo Ramos
                  <td width="22%" valign="top" class="vncell"><?=gettext("MX"); ?></td>
314 f1f60c92 Ermal Luçi
                  <td width="78%" class="vtable">
315
                    <input name="mx" type="text" class="formfld unknown" id="mx" size="30" value="<?=htmlspecialchars($pconfig['mx']);?>">
316
                    <br>
317 2b2a7984 Rafael Lucas
					<?=gettext("Note: With DynDNS service you can only use a hostname, not an IP address.");?>
318 f1f60c92 Ermal Luçi
					<br>
319 2b2a7984 Rafael Lucas
                    <?=gettext("Set this option only if you need a special MX record. Not".
320
                   " all services support this.");?></td>
321 f1f60c92 Ermal Luçi
				</tr>
322 37f3e704 Matt Corallo
                <tr id="_wildcardtr">
323 50bfcec0 Carlos Eduardo Ramos
                  <td width="22%" valign="top" class="vncell"><?=gettext("Wildcards"); ?></td>
324 f1f60c92 Ermal Luçi
                  <td width="78%" class="vtable">
325
                    <input name="wildcard" type="checkbox" id="wildcard" value="yes" <?php if ($pconfig['wildcard']) echo "checked"; ?>>
326 50bfcec0 Carlos Eduardo Ramos
                    <?=gettext("Enable ");?><?=gettext("Wildcard"); ?></td>
327 f1f60c92 Ermal Luçi
				</tr>
328 c8c90b81 Phil Davis
                <tr id="_verboselogtr">
329
                  <td width="22%" valign="top" class="vncell"><?=gettext("Verbose logging"); ?></td>
330
                  <td width="78%" class="vtable">
331
                    <input name="verboselog" type="checkbox" id="verboselog" value="yes" <?php if ($pconfig['verboselog']) echo "checked"; ?>>
332
                    <?=gettext("Enable ");?><?=gettext("verbose logging"); ?></td>
333
				</tr>
334 aa79f351 Sebastian Chrostek
				<tr id="_curloptions">
335
                  <td width="22%" valign="top" class="vncell"><?=gettext("CURL options"); ?></td>
336
                  <td width="78%" class="vtable">
337
                    <input name="curl_ipresolve_v4" type="checkbox" id="curl_ipresolve_v4" value="yes" <?php if ($pconfig['curl_ipresolve_v4']) echo "checked"; ?>>
338
                    <?=gettext("Force IPv4 resolving"); ?><br/>
339
					<input name="curl_ssl_verifypeer" type="checkbox" id="curl_ssl_verifypeer" value="yes" <?php if ($pconfig['curl_ssl_verifypeer']) echo "checked"; ?>>
340
                    <?=gettext("Verify SSL peer"); ?>
341
				  </td>
342
				</tr>
343 37f3e704 Matt Corallo
                <tr id="_usernametr">
344 2b2a7984 Rafael Lucas
                  <td width="22%" valign="top" class="vncellreq"><?=gettext("Username");?></td>
345 f1f60c92 Ermal Luçi
                  <td width="78%" class="vtable">
346
                    <input name="username" type="text" class="formfld user" id="username" size="20" value="<?=htmlspecialchars($pconfig['username']);?>">
347 37f3e704 Matt Corallo
                    <br/><?= gettext("Username is required for all types except Namecheap, FreeDNS and Custom Entries.");?>
348 cd132e86 Edson Brandi
		    <br/><?= gettext("Route 53: Enter your Access Key ID.");?>
349 37f3e704 Matt Corallo
		    <br/><?= gettext("For Custom Entries, Username and Password represent HTTP Authentication username and passwords.");?>
350 f1f60c92 Ermal Luçi
                  </td>
351
                </tr>
352
                <tr>
353 2b2a7984 Rafael Lucas
                  <td width="22%" valign="top" class="vncellreq"><?=gettext("Password");?></td>
354 f1f60c92 Ermal Luçi
                  <td width="78%" class="vtable">
355
                    <input name="password" type="password" class="formfld pwd" id="password" size="20" value="<?=htmlspecialchars($pconfig['password']);?>">
356 d9cc4b24 gnhb
                    <br/>
357
                    <?=gettext("FreeDNS (freedns.afraid.org): Enter your \"Authentication Token\" provided by FreeDNS.");?>
358 cd132e86 Edson Brandi
		    <br/><?= gettext("Route 53: Enter your Secret Access Key.");?>
359
                  </td>
360
                </tr>
361
362
                <tr id="r53_zoneid" style="display:none">
363
                  <td width="22%" valign="top" class="vncellreq"><?=gettext("Zone ID");?></td>
364
                  <td width="78%" class="vtable">
365
                    <input name="zoneid" type="text" class="formfld user" id="zoneid" size="20" value="<?=htmlspecialchars($pconfig['zoneid']);?>">
366
                    <br/><?= gettext("Enter Zone ID that you received when you created your domain in Route 53.");?>
367 f1f60c92 Ermal Luçi
                  </td>
368
                </tr>
369 37f3e704 Matt Corallo
                <tr id="_urltr">
370
                  <td width="22%" valign="top" class="vncell"><?=gettext("Update URL");?></td>
371
                  <td width="78%" class="vtable">
372
                    <input name="updateurl" type="text" class="formfld unknown" id="updateurl" size="60" value="<?=htmlspecialchars($pconfig['updateurl']);?>">
373
                    <br/><?= gettext("This is the only field required by for Custom Dynamic DNS, and is only used by Custom Entries.");?>
374
			<br/>
375
			<?= gettext("If you need the new IP to be included in the request, put %IP% in its place.");?>
376
                  </td>
377
                </tr>
378
		<tr id="_resulttr">
379
                  <td width="22%" valign="top" class="vncell"><?=gettext("Result Match");?></td>
380
                  <td width="78%" class="vtable">
381
                    <textarea name="resultmatch" class="formpre" id="resultmatch" cols="65" rows="7"><?=htmlspecialchars($pconfig['resultmatch']);?></textarea>
382
                    <br/><?= gettext("This field is only used by Custom Dynamic DNS Entries.");?>
383
			<br/>
384
			<?= gettext("This field should be identical to what your DDNS Provider will return if the update succeeds, leave it blank to disable checking of returned results.");?>
385
			<br/>
386
			<?= gettext("If you need the new IP to be included in the request, put %IP% in its place.");?>
387
			<br/>
388 9eee0a15 N0YB
			<?= gettext("If you need to include multiple possible values, separate them with a |.  If your provider includes a |, escape it with \\|");?>
389 37f3e704 Matt Corallo
			<br/>
390
			<?= gettext("Tabs (\\t), newlines (\\n) and carriage returns (\\r) at the beginning or end of the returned results are removed before comparison.");?>
391
                  </td>
392
                </tr>
393 cd132e86 Edson Brandi
                <tr>
394
395
                <tr id="r53_ttl" style="display:none">
396
                  <td width="22%" valign="top" class="vncellreq"><?=gettext("TTL");?></td>
397
                  <td width="78%" class="vtable">
398
                    <input name="ttl" type="text" class="formfld user" id="ttl" size="20" value="<?=htmlspecialchars($pconfig['ttl']);?>">
399
                    <br/><?= gettext("Choose TTL for your dns record.");?>
400
                  </td>
401
                </tr>
402
                <tr>
403
404
405 f1f60c92 Ermal Luçi
                <tr>
406 2b2a7984 Rafael Lucas
                  <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
407 f1f60c92 Ermal Luçi
                  <td width="78%" class="vtable">
408
                    <input name="descr" type="text" class="formfld unknown" id="descr" size="60" value="<?=htmlspecialchars($pconfig['descr']);?>">
409
                  </td>
410
                </tr>
411
                <tr>
412
                  <td width="22%" valign="top">&nbsp;</td>
413
                  <td width="78%">
414 2b2a7984 Rafael Lucas
                    <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onClick="enable_change(true)">
415
					<a href="services_dyndns.php"><input name="cancel" type="button" class="formbtn" value="<?=gettext("Cancel");?>"></a>
416 f1f60c92 Ermal Luçi
					<?php if (isset($id) && $a_dyndns[$id]): ?>
417 225a2f0b Scott Ullrich
						<input name="id" type="hidden" value="<?=htmlspecialchars($id);?>">
418 f3b2b2a4 Yehuda Katz
						<input name="force" type="submit" class="formbtn" value="<?=gettext("Save & Force Update");?>" onClick="enable_change(true)">
419 f1f60c92 Ermal Luçi
					<?php endif; ?>
420
                  </td>
421
                </tr>
422
                <tr>
423
                  <td width="22%" valign="top">&nbsp;</td>
424 16457bdd Renato Botelho
                  <td width="78%"><span class="vexpl"><span class="red"><strong><?=gettext("Note:");?><br>
425 2b2a7984 Rafael Lucas
                    </strong></span><?php printf(gettext("You must configure a DNS server in %sSystem:
426
                    General setup%s or allow the DNS server list to be overridden
427
                    by DHCP/PPP on WAN for dynamic DNS updates to work."),'<a href="system.php">','</a>');?></span></td>
428 f1f60c92 Ermal Luçi
                </tr>
429
              </table>
430
</form>
431 9e9b596f Ermal Luçi
<?php include("fend.inc"); ?>
432 cd132e86 Edson Brandi
433
<script type="text/javascript">
434 37f3e704 Matt Corallo
_onTypeChange("<?php echo $pconfig['type']; ?>");
435 cd132e86 Edson Brandi
</script>
436
437 f1f60c92 Ermal Luçi
</body>
438
</html>