summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTed Trask <ttrask01@yahoo.com>2010-04-15 07:21:45 +0000
committerTed Trask <ttrask01@yahoo.com>2010-04-15 07:21:45 +0000
commit40fdfb0119f899a4cb2134554431afd8e2403cfa (patch)
treefe8d8e8ec1d1a6b90604de2aa640925acd7bc974
parent063695d2720d467076fea72bea5facd7c9f333db (diff)
downloadacf-tinydns-40fdfb0119f899a4cb2134554431afd8e2403cfa.tar.bz2
acf-tinydns-40fdfb0119f899a4cb2134554431afd8e2403cfa.tar.xz
Added validation to edit page to prevent A records for hosts outside domain.
-rw-r--r--tinydns-edit-html.lsp56
1 files changed, 44 insertions, 12 deletions
diff --git a/tinydns-edit-html.lsp b/tinydns-edit-html.lsp
index cbde5b4..33169d5 100644
--- a/tinydns-edit-html.lsp
+++ b/tinydns-edit-html.lsp
@@ -43,7 +43,9 @@
var code = "000" + val.charCodeAt(0).toString(8)
return "\\" + code.slice(-3)
}
- function finishForm(entry){
+ function finishForm(entry, force){
+ var addresspresent = false;
+ var notindomain = false;
var entrytext = entry.find("select").val() + entry.find("input:not(.submit)").map(function(){
var val = $(this).val().replace(/^\s\s*/, '').replace(/\s\s*$/, '');
if (this.name != "dontconvertme") {
@@ -55,9 +57,20 @@
else
val = "<%= html.html_escape(domain) %>";
}
+ if (this.name == "address" && val != "")
+ addresspresent = true;
+ if (this.name == "testme" && val != "" && null == val.match(/\.?<%= string.gsub(html.html_escape(domain), "[\\%[%]%.%*%?%+%{%^%$]", "\\%1") %>$/i))
+ notindomain = true;
return val
}).get().join(":");
- entry.empty().append(entrytext);
+ if (addresspresent && notindomain) {
+ if (force)
+ entry.empty().append(entrytext);
+ return false;
+ }
+ else
+ entry.empty().append(entrytext);
+ return true;
}
function createForm(entry){
var entrytext = entry.text();
@@ -84,18 +97,31 @@
}
for (i=0; i<entryType.num; i++){
if (entries[i] === null) { entries[i] = ""; }
- if (entryType.descriptions[i] == "Domain" || entryType.descriptions[i] == "Alias" || entryType.descriptions[i] == "Host" || entryType.descriptions[i] == "Domain Service" )
- form = form + '<dt>' + entryType.descriptions[i] + '</dt><dd><input type="text" value="' + entries[i].replace(/\\\d{3}/g, octal_to_char).replace(/\.?<%= string.gsub(html.html_escape(domain), "[\\%[%]%.%*%?%+%{%^%$]", "\\%1") %>$/i, "") + '" name="fixme"> . <%= html.html_escape(domain) %></dd>';
- else if (entryType.descriptions[i] == "Comment")
- form = form + '<dt>' + entryType.descriptions[i] + '</dt><dd><input type="text" value="' + entries[i] + '" name="dontconvertme"></dd>';
- else
- form = form + '<dt>' + entryType.descriptions[i] + '</dt><dd><input type="text" value="' + entries[i].replace(/\\\d{3}/g, octal_to_char) + '"></dd>';
+ var name = "";
+ var value = entries[i];
+ var extra = "";
+ if (entryType.descriptions[i] == "Comment")
+ name = "dontconvertme"
+ else {
+ value = value.replace(/\\\d{3}/g, octal_to_char);
+ if (entryType.descriptions[i] == "Domain" || entryType.descriptions[i] == "Alias" || entryType.descriptions[i] == "Host" || entryType.descriptions[i] == "Domain Service" ) {
+ name = "fixme";
+ value = value.replace(/\.?<%= string.gsub(html.html_escape(domain), "[\\%[%]%.%*%?%+%{%^%$]", "\\%1") %>$/i, "")
+ extra = " . <%= html.html_escape(domain) %>"
+ }
+ else if (entryType.descriptions[i] == "IP address")
+ name = "address";
+ else if (entryType.descriptions[i] == "Name server" || entryType.descriptions[i] == "Mail exchanger" || entryType.descriptions[i] == "Server")
+ name = "testme";
+
+ }
+ form = form + '<dt>' + entryType.descriptions[i] + '</dt><dd><input type="text" value="' + value + '" name="' + name + '">' + extra + '</dd>';
}
form = form + "\n</dl>";
entry.empty().append(form);
entry.find("select").change(function(){
var entry = $(this).parent();
- finishForm(entry);
+ finishForm(entry, true);
createForm(entry);
});
entry.find("input.submit").click(function() {
@@ -109,7 +135,8 @@
}
var entry = parent.find("td:eq(1)");
if (entry.find("select").is("select")){
- finishForm(entry);
+ if ( ! finishForm(entry) )
+ alert("Error: Cannot set IP address for host outside of <%= html.html_escape(domain) %> domain");
} else {
createForm(entry);
}
@@ -130,22 +157,27 @@
});
}
function submitFile(){
+ var success = true;
var file = "";
var lines = $("#entries").find("tr").find("td:eq(1)");
lines.each(function(){
var elem = jQuery(this);
if (elem.find("select").is("select")){
- finishForm(elem);
+ success = finishForm(elem) && success;
}
file = file + elem.text() + "\n";
});
$("input[name='filecontent']").val(file);
+ if ( ! success ) {
+ alert("Error: Cannot set IP address for host outside of <%= html.html_escape(domain) %> domain");
+ return false;
+ }
}
$(function(){
addLinks($("#entries").find("tr"));
$("#entries").append(addEntry).find("a:last").click(addLine);
- $("input.submit").click(submitFile);
+ $("form").submit(submitFile);
<% if form.value.filecontent.linenumber then %>
$("#entries tr:eq(<%= form.value.filecontent.linenumber - 1 %>)").find("a:eq(2)").click();
var top = $("#entries tr:eq(<%= form.value.filecontent.linenumber - 1 %>)").offset().top;