Project

General

Profile

Download (12.6 KB) Statistics
| Branch: | Tag: | Revision:
1
<?php
2
/* $Id$ */
3
/*
4
	Copyright (C) 2008 Ermal Lu?i
5
	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
/*
29
	pfSense_BUILDER_BINARIES:	/bin/rm
30
	pfSense_MODULE:	dyndns
31
*/
32

    
33
##|+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
/* 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
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
$id = $_GET['id'];
60
if (isset($_POST['id']))
61
	$id = $_POST['id'];
62

    
63
if (isset($id) && isset($a_dyndns[$id])) {
64
	$pconfig['username'] = $a_dyndns[$id]['username'];
65
	$pconfig['password'] = $a_dyndns[$id]['password'];
66
	$pconfig['host'] = $a_dyndns[$id]['host'];
67
	$pconfig['mx'] = $a_dyndns[$id]['mx'];
68
	$pconfig['type'] = $a_dyndns[$id]['type'];
69
	$pconfig['enable'] = !isset($a_dyndns[$id]['enable']);
70
	$pconfig['interface'] = $a_dyndns[$id]['interface'];
71
	$pconfig['wildcard'] = isset($a_dyndns[$id]['wildcard']);
72
	$pconfig['zoneid'] = $a_dyndns[$id]['zoneid'];
73
	$pconfig['ttl'] = isset($a_dyndns[$id]['ttl']);
74
	$pconfig['descr'] = $a_dyndns[$id]['descr'];
75
}
76

    
77
if ($_POST) {
78

    
79
	unset($input_errors);
80
	$pconfig = $_POST;
81
	
82
	if(($pconfig['type'] == "freedns" || $pconfig['type'] == "namecheap") && $_POST['username'] == "")
83
		$_POST['username'] = "none"; 
84

    
85
	/* input validation */
86
	$reqdfields = array();
87
	$reqdfieldsn = array();
88
	$reqdfields = array("host", "username", "password", "type");
89
	$reqdfieldsn = array(gettext("Hostname"),gettext("Username"),gettext("Password"),gettext("Service type"));
90

    
91
	do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
92

    
93
	if (($_POST['mx'] && !is_domain($_POST['mx']))) 
94
		$input_errors[] = gettext("The MX contains invalid characters.");
95
	if (($_POST['username'] && !is_dyndns_username($_POST['username'])) || (($pconfig['type'] != "namecheap") && ($_POST['username'] == ""))) 
96
		$input_errors[] = gettext("The username contains invalid characters.");
97

    
98
	if (!$input_errors) {
99
		$dyndns = array();
100
		$dyndns['type'] = $_POST['type'];
101
		$dyndns['username'] = $_POST['username'];
102
		$dyndns['password'] = $_POST['password'];
103
		$dyndns['host'] = $_POST['host'];
104
		$dyndns['mx'] = $_POST['mx'];
105
		$dyndns['wildcard'] = $_POST['wildcard'] ? true : false;
106
		$dyndns['enable'] = $_POST['enable'] ? false : true;
107
		$dyndns['interface'] = $_POST['interface'];
108
		$dyndns['zoneid'] = $_POST['zoneid'];
109
		$dyndns['ttl'] = $_POST['ttl'];
110
		$dyndns['descr'] = $_POST['descr'];
111
		$dyndns['force'] = isset($_POST['force']);
112
		
113
		if($dyndns['username'] == "none")
114
			$dyndns['username'] = "";
115

    
116
		if (isset($id) && $a_dyndns[$id])
117
			$a_dyndns[$id] = $dyndns;
118
		else
119
			$a_dyndns[] = $dyndns;
120

    
121
		write_config();
122

    
123
		services_dyndns_configure_client($dyndns);
124

    
125
		header("Location: services_dyndns.php");
126
		exit;
127
	}
128
}
129

    
130
$pgtitle = array(gettext("Services"),gettext("Dynamic DNS client"));
131
include("head.inc");
132

    
133
?>
134

    
135
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
136
<?php include("fbegin.inc"); ?>
137
<?php if ($input_errors) print_input_errors($input_errors); ?>
138
<?php if ($savemsg) print_info_box($savemsg); ?>
139
<form action="services_dyndns_edit.php" method="post" name="iform" id="iform">
140
              <table width="100%" border="0" cellpadding="6" cellspacing="0">
141
                <tr>
142
                  <td colspan="2" valign="top" class="optsect_t">
143
				  <table border="0" cellspacing="0" cellpadding="0" width="100%">
144
				  <tr><td class="optsect_s"><strong><?=gettext("Dynamic DNS client");?></strong></td></tr>
145
				  </table>
146
				  </td>
147
                </tr>
148
                <tr>
149
                  <td width="22%" valign="top" class="vncell"><?=gettext("Disable");?></td>
150
				  <td width="78%" class="vtable">
151
				    <input name="enable" type="checkbox" id="enable" value="<?=gettext("yes");?>" <?php if ($pconfig['enable']) echo "checked"; ?>>
152
				  </td>
153
                </tr>
154
                <tr>
155
                  <td width="22%" valign="top" class="vncellreq"><?=gettext("Service type");?></td>
156
                  <td width="78%" class="vtable">
157
			<select name="type" class="formselect" id="type">
158
                      <?php
159
						$types = explode(",", "DNS-O-Matic, DynDNS (dynamic),DynDNS (static),DynDNS (custom),DHS,DyNS,easyDNS,No-IP,ODS.org,ZoneEdit,Loopia,freeDNS, DNSexit, OpenDNS, Namecheap, HE.net, HE.net Tunnelbroker, SelfHost, Route 53");
160
						$vals = explode(" ", "dnsomatic dyndns dyndns-static dyndns-custom dhs dyns easydns noip ods zoneedit loopia freedns dnsexit opendns namecheap he-net he-net-tunnelbroker selfhost route53");
161
						$j = 0; for ($j = 0; $j < count($vals); $j++): ?>
162
                      <option value="<?=$vals[$j];?>" <?php if ($vals[$j] == $pconfig['type']) echo "selected";?>>
163
                      <?=htmlspecialchars($types[$j]);?>
164
                      </option>
165
                      <?php endfor; ?>
166
                    </select></td>
167
				</tr>
168
				<tr>
169
				   <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface to monitor");?></td>  
170
				   <td width="78%" class="vtable">
171
				   <select name="interface" class="formselect" id="interface">
172
				   <?php $iflist = get_configured_interface_with_descr();
173
				   		foreach ($iflist as $if => $ifdesc):?>
174
							<option value="<?=$if;?>" <?php if ($pconfig['interface'] == $if) echo "selected";?>><?=$ifdesc;?></option>
175
					<?php endforeach; ?>
176
					</select>
177
					</td>
178
					</td>
179
				</tr>	
180
                <tr>
181
                  <td width="22%" valign="top" class="vncellreq"><?=gettext("Hostname");?></td>
182
                  <td width="78%" class="vtable">
183
                    <input name="host" type="text" class="formfld unknown" id="host" size="30" value="<?=htmlspecialchars($pconfig['host']);?>">
184
                    <br>
185
				    <span class="vexpl">
186
				    <span class="red"><strong><?=gettext("Note:");?><br></strong>
187
				    </span>
188
					<?=gettext("Enter the complete host/domain name.  example:  myhost.dyndns.org");?><br/>
189
					<?=gettext("For he.net tunnelbroker, enter your tunnel ID");?>
190
				    </span>
191
		          </td>
192
				</tr>
193
                <tr>
194
                  <td width="22%" valign="top" class="vncell"><?=gettext("MX"); ?></td>
195
                  <td width="78%" class="vtable">
196
                    <input name="mx" type="text" class="formfld unknown" id="mx" size="30" value="<?=htmlspecialchars($pconfig['mx']);?>">
197
                    <br>
198
					<?=gettext("Note: With DynDNS service you can only use a hostname, not an IP address.");?>
199
					<br>
200
                    <?=gettext("Set this option only if you need a special MX record. Not".
201
                   " all services support this.");?></td>
202
				</tr>
203
                <tr>
204
                  <td width="22%" valign="top" class="vncell"><?=gettext("Wildcards"); ?></td>
205
                  <td width="78%" class="vtable">
206
                    <input name="wildcard" type="checkbox" id="wildcard" value="yes" <?php if ($pconfig['wildcard']) echo "checked"; ?>>
207
                    <?=gettext("Enable ");?><?=gettext("Wildcard"); ?></td>
208
				</tr>
209
                <tr>
210
                  <td width="22%" valign="top" class="vncellreq"><?=gettext("Username");?></td>
211
                  <td width="78%" class="vtable">
212
                    <input name="username" type="text" class="formfld user" id="username" size="20" value="<?=htmlspecialchars($pconfig['username']);?>">
213
                    <br/><?= gettext("Username is required for all types except Namecheap and FreeDNS.");?>
214
		    <br/><?= gettext("Route 53: Enter your Access Key ID.");?>
215
                  </td>
216
                </tr>
217
                <tr>
218
                  <td width="22%" valign="top" class="vncellreq"><?=gettext("Password");?></td>
219
                  <td width="78%" class="vtable">
220
                    <input name="password" type="password" class="formfld pwd" id="password" size="20" value="<?=htmlspecialchars($pconfig['password']);?>">
221
                    <br/>
222
                    <?=gettext("FreeDNS (freedns.afraid.org): Enter your \"Authentication Token\" provided by FreeDNS.");?>
223
		    <br/><?= gettext("Route 53: Enter your Secret Access Key.");?>
224
                  </td>
225
                </tr>
226

    
227
                <tr id="r53_zoneid" style="display:none">
228
                  <td width="22%" valign="top" class="vncellreq"><?=gettext("Zone ID");?></td>
229
                  <td width="78%" class="vtable">
230
                    <input name="zoneid" type="text" class="formfld user" id="zoneid" size="20" value="<?=htmlspecialchars($pconfig['zoneid']);?>">
231
                    <br/><?= gettext("Enter Zone ID that you received when you created your domain in Route 53.");?>
232
                  </td>
233
                </tr>
234
                <tr>
235

    
236
                <tr id="r53_ttl" style="display:none">
237
                  <td width="22%" valign="top" class="vncellreq"><?=gettext("TTL");?></td>
238
                  <td width="78%" class="vtable">
239
                    <input name="ttl" type="text" class="formfld user" id="ttl" size="20" value="<?=htmlspecialchars($pconfig['ttl']);?>">
240
                    <br/><?= gettext("Choose TTL for your dns record.");?>
241
                  </td>
242
                </tr>
243
                <tr>
244

    
245

    
246
                <tr>
247
                  <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
248
                  <td width="78%" class="vtable">
249
                    <input name="descr" type="text" class="formfld unknown" id="descr" size="60" value="<?=htmlspecialchars($pconfig['descr']);?>">
250
                  </td>
251
                </tr>
252
                <tr>
253
                  <td width="22%" valign="top">&nbsp;</td>
254
                  <td width="78%">
255
                    <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onClick="enable_change(true)">
256
					<a href="services_dyndns.php"><input name="cancel" type="button" class="formbtn" value="<?=gettext("Cancel");?>"></a>
257
					<?php if (isset($id) && $a_dyndns[$id]): ?>
258
						<input name="id" type="hidden" value="<?=htmlspecialchars($id);?>">
259
						<input name="force" type="submit" class="formbtn" value="<?=gettext("Save & Force Update");?>" onClick="enable_change(true)">
260
					<?php endif; ?>
261
                  </td>
262
                </tr>
263
                <tr>
264
                  <td width="22%" valign="top">&nbsp;</td>
265
                  <td width="78%"><span class="vexpl"><span class="red"><strong><?=gettext("Note:");?><br>
266
                    </strong></span><?php printf(gettext("You must configure a DNS server in %sSystem:
267
                    General setup%s or allow the DNS server list to be overridden
268
                    by DHCP/PPP on WAN for dynamic DNS updates to work."),'<a href="system.php">','</a>');?></span></td>
269
                </tr>
270
              </table>
271
</form>
272
<?php include("fend.inc"); ?>
273

    
274
<script type="text/javascript">
275
var selectmenu=document.getElementById("type")
276
selectmenu.onchange=function(){ 
277
       var chosenoption=this.options[this.selectedIndex] 
278
       if (chosenoption.value=="route53"){
279
               document.getElementById("r53_zoneid").style.display="";
280
               document.getElementById("r53_ttl").style.display="";
281
       } else if (chosenoption.value !="route53"){
282
               document.getElementById("r53_zoneid").style.display="none";
283
               document.getElementById("r53_ttl").style.display="none";
284
       }
285
}
286
</script>
287

    
288
</body>
289
</html>
(158-158/245)