summaryrefslogtreecommitdiffstats
path: root/install/ui/src/freeipa/dns.js
diff options
context:
space:
mode:
Diffstat (limited to 'install/ui/src/freeipa/dns.js')
-rw-r--r--install/ui/src/freeipa/dns.js58
1 files changed, 58 insertions, 0 deletions
diff --git a/install/ui/src/freeipa/dns.js b/install/ui/src/freeipa/dns.js
index 5024e8b76..52cbb81f3 100644
--- a/install/ui/src/freeipa/dns.js
+++ b/install/ui/src/freeipa/dns.js
@@ -300,6 +300,11 @@ return {
fields: [
'idnssoamname',
{
+ name: 'ip_address',
+ validators: [ 'ip_address' ],
+ metadata: '@mc-opt:dnszone_add:ip_address'
+ },
+ {
name: 'idnssoarname',
required: false
},
@@ -576,11 +581,64 @@ IPA.dnszone_adder_dialog = function(spec) {
var that = IPA.entity_adder_dialog(spec);
+ function ends_with(str, suffix) {
+ return str.indexOf(suffix, str.length - suffix.length) !== -1;
+ }
+
+ var init = function() {
+ var zone_w = that.fields.get_field('idnsname').widget;
+ var reverse_zone_w = that.fields.get_field('name_from_ip').widget;
+ var ns_w = that.fields.get_field('idnssoamname').widget;
+
+ zone_w.value_changed.attach(that.check_ns_ip);
+ reverse_zone_w.value_changed.attach(that.check_ns_ip);
+ ns_w.value_changed.attach(that.check_ns_ip);
+ };
+
+ that.check_ns_ip = function() {
+ var ip_address_f = that.fields.get_field('ip_address');
+ var zone_w = that.fields.get_field('idnsname').widget;
+ var ns_w = that.fields.get_field('idnssoamname').widget;
+
+ var zone = zone_w.save()[0] || '';
+ var ns = ns_w.save()[0] || '';
+
+ var zone_is_reverse = !zone_w.is_enabled() ||
+ ends_with(zone, '.in-addr.arpa.') ||
+ ends_with(zone, '.ip6.arpa.');
+ var relative_ns = true;
+ var ns_in_zone = false;
+
+ if (ns && ns[ns.length-1] === '.') {
+ relative_ns = false;
+ ns = ns.slice(0, -1);
+ }
+
+ if (zone && zone[zone.length-1] === '.') {
+ zone = zone.slice(0, -1);
+ }
+
+ if (ns && zone && ends_with(ns, '.' + zone)) {
+ ns_in_zone = true;
+ }
+
+ if (!zone_is_reverse && (relative_ns || ns_in_zone)) {
+ ip_address_f.set_enabled(true);
+ ip_address_f.set_required(true);
+ } else {
+ ip_address_f.reset();
+ ip_address_f.set_required(false);
+ ip_address_f.set_enabled(false);
+ }
+ };
+
that.create = function() {
that.entity_adder_dialog_create();
that.container.addClass('dnszone-adder-dialog');
};
+ init();
+
return that;
};