diff --git a/install/ui/Makefile.am b/install/ui/Makefile.am
index 73f746a39..841e210e2 100644
--- a/install/ui/Makefile.am
+++ b/install/ui/Makefile.am
@@ -54,8 +54,9 @@ app_DATA = \
overpass_regular-web.ttf \
overpass_regular-web.woff \
policy.js \
- reset_password.js \
- reset_password.html \
+ range.js \
+ reset_password.js \
+ reset_password.html \
rule.js \
search.js \
selinux.js \
diff --git a/install/ui/field.js b/install/ui/field.js
index 41861c0bb..8e2d116c0 100644
--- a/install/ui/field.js
+++ b/install/ui/field.js
@@ -350,7 +350,7 @@ IPA.field = function(spec) {
if (that.widget) {
if (that.label) that.widget.label = that.label;
- if (that.title) that.widget.title = that.title;
+ if (that.tooltip) that.widget.tooltip = that.tooltip;
if (that.measurement_unit) that.widget.measurement_unit = that.measurement_unit;
that.widget.undo = that.undo;
that.widget.writable = that.writable;
diff --git a/install/ui/index.html b/install/ui/index.html
index 24e8cac36..ab51b6d57 100644
--- a/install/ui/index.html
+++ b/install/ui/index.html
@@ -53,6 +53,7 @@
+
diff --git a/install/ui/jsl.conf b/install/ui/jsl.conf
index bec553fe7..5faeed932 100644
--- a/install/ui/jsl.conf
+++ b/install/ui/jsl.conf
@@ -157,6 +157,7 @@
+process dns.js
+process automount.js
+process automember.js
++process range.js
+process trust.js
+process webui.js
+process login.js
diff --git a/install/ui/range.js b/install/ui/range.js
new file mode 100644
index 000000000..ea9b47c98
--- /dev/null
+++ b/install/ui/range.js
@@ -0,0 +1,162 @@
+/*jsl:import ipa.js */
+
+/* Authors:
+ * Petr Vobornik
+ *
+ * Copyright (C) 2010 Red Hat
+ * see file 'COPYING' for use and warranty information
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+/* REQUIRES: ipa.js, details.js, search.js, add.js, facet.js, entity.js */
+
+IPA.range = {};
+
+IPA.range.entity = function(spec) {
+
+ var that = IPA.entity(spec);
+
+ that.init = function() {
+ that.entity_init();
+
+ that.builder.search_facet({
+ columns: [
+ 'cn',
+ 'ipabaseid',
+ 'ipaidrangesize',
+ 'iparangetype'
+ ]
+ }).
+ details_facet({
+ sections: [
+ {
+ name: 'details',
+ fields: [
+ 'cn',
+ 'iparangetype',
+ {
+ name: 'ipabaseid',
+ label: IPA.messages.objects.range.ipabaseid,
+ tooltip: IPA.get_entity_param('range', 'ipabaseid').label
+ },
+ {
+ name: 'ipaidrangesize',
+ label: IPA.messages.objects.range.ipaidrangesize,
+ tooltip: IPA.get_entity_param('range', 'ipaidrangesize').label
+ },
+ {
+ name: 'ipabaserid',
+ label: IPA.messages.objects.range.ipabaserid,
+ tooltip: IPA.get_entity_param('range', 'ipabaserid').label
+ },
+ {
+ name: 'ipasecondarybaserid',
+ label: IPA.messages.objects.range.ipasecondarybaserid,
+ tooltip: IPA.get_entity_param('range', 'ipasecondarybaserid').label
+ },
+ {
+ name: 'ipanttrusteddomainsid',
+ label: IPA.messages.objects.range.ipanttrusteddomainsid,
+ tooltip: IPA.get_entity_param('range', 'ipanttrusteddomainsid').label
+ }
+ ]
+ }
+ ]
+ }).
+ adder_dialog({
+ fields: [
+ {
+ name: 'cn',
+ widget: 'range.cn'
+ },
+ {
+ name: 'ipabaseid',
+ label: IPA.messages.objects.range.ipabaseid,
+ tooltip: IPA.get_entity_param('range', 'ipabaseid').label,
+ widget: 'range.ipabaseid'
+ },
+ {
+ name: 'ipaidrangesize',
+ label: IPA.messages.objects.range.ipaidrangesize,
+ tooltip: IPA.get_entity_param('range', 'ipaidrangesize').label,
+ widget: 'range.ipaidrangesize'
+ },
+ {
+ name: 'ipabaserid',
+ label: IPA.messages.objects.range.ipabaserid,
+ tooltip: IPA.get_entity_param('range', 'ipabaserid').label,
+ widget: 'range.ipabaserid'
+ },
+ {
+ name: 'ipasecondarybaserid',
+ label: IPA.messages.objects.range.ipasecondarybaserid,
+ tooltip: IPA.get_entity_param('range', 'ipasecondarybaserid').label,
+ widget: 'type.ipasecondarybaserid'
+ },
+ {
+ name: 'ipanttrusteddomainsid',
+ label: IPA.messages.objects.range.ipanttrusteddomainsid,
+ tooltip: IPA.get_entity_param('range', 'ipanttrusteddomainsid').label,
+ widget: 'type.ipanttrusteddomainsid'
+ }
+ ],
+ widgets: [
+ {
+ type: 'details_table_section_nc',
+ name: 'range',
+ widgets: [
+ 'cn',
+ 'ipabaseid',
+ 'ipaidrangesize',
+ 'ipabaserid'
+ ]
+ },
+ {
+ type: 'multiple_choice_section',
+ name: 'type',
+ label: IPA.messages.objects.range.type,
+ choices: [
+ {
+ name: 'local',
+ label: IPA.messages.objects.range.type_local,
+ fields: ['ipasecondarybaserid'],
+ required: ['ipasecondarybaserid'],
+ enabled: true
+ },
+ {
+ name: 'ad',
+ label: IPA.messages.objects.range.type_ad,
+ fields: ['ipanttrusteddomainsid'],
+ required: ['ipanttrusteddomainsid']
+ }
+ ],
+ widgets: [
+ 'ipasecondarybaserid',
+ 'ipanttrusteddomainsid'
+ ]
+ }
+ ],
+ policies: [
+ IPA.multiple_choice_section_policy({
+ widget: 'type'
+ })
+ ]
+ });
+ };
+
+ return that;
+};
+
+IPA.register('range', IPA.range.entity);
diff --git a/install/ui/test/data/ipa_init.json b/install/ui/test/data/ipa_init.json
index 6111881ee..32ce1c1e3 100644
--- a/install/ui/test/data/ipa_init.json
+++ b/install/ui/test/data/ipa_init.json
@@ -361,6 +361,17 @@
"pwpolicy": {
"identity": "Password Policy"
},
+ "range": {
+ "details": "Range Settings",
+ "ipabaseid": "Base ID",
+ "ipabaserid": "Primary RID base",
+ "ipaidrangesize": "Range size",
+ "ipanttrusteddomainsid": "Domain SID",
+ "ipasecondarybaserid": "Secondary RID base",
+ "type": "Range type",
+ "type_ad": "Active Directory domain",
+ "type_local": "Local domain"
+ },
"role": {
"identity": "Role Settings"
},
diff --git a/install/ui/test/data/range_add.json b/install/ui/test/data/range_add.json
new file mode 100644
index 000000000..bccb88e78
--- /dev/null
+++ b/install/ui/test/data/range_add.json
@@ -0,0 +1,34 @@
+{
+ "error": null,
+ "id": null,
+ "result": {
+ "result": {
+ "cn": [
+ "DEV.EXAMPLE.COM_id_range"
+ ],
+ "dn": "cn=foo_range,cn=ranges,cn=etc,dc=idm,dc=lab,dc=bos,dc=redhat,dc=com",
+ "ipabaseid": [
+ "107400000"
+ ],
+ "ipabaserid": [
+ "1000"
+ ],
+ "ipaidrangesize": [
+ "200000"
+ ],
+ "iparangetype": [
+ "local domain range"
+ ],
+ "ipasecondarybaserid": [
+ "100000000"
+ ],
+ "objectclass": [
+ "top",
+ "ipaIDrange",
+ "ipaDomainIDRange"
+ ]
+ },
+ "summary": "Added ID range \"DEV.EXAMPLE.COM_id_range\"",
+ "value": "DEV.EXAMPLE.COM_id_range"
+ }
+}
\ No newline at end of file
diff --git a/install/ui/test/data/range_find.json b/install/ui/test/data/range_find.json
new file mode 100644
index 000000000..9d47a94fc
--- /dev/null
+++ b/install/ui/test/data/range_find.json
@@ -0,0 +1,32 @@
+{
+ "error": null,
+ "id": null,
+ "result": {
+ "count": 1,
+ "result": [
+ {
+ "cn": [
+ "DEV.EXAMPLE.COM_id_range"
+ ],
+ "dn": "cn=example.com_id_range,cn=ranges,cn=etc,dc=dev,dc=example,dc=com",
+ "ipabaseid": [
+ "107400000"
+ ],
+ "ipabaserid": [
+ "1001"
+ ],
+ "ipaidrangesize": [
+ "200000"
+ ],
+ "iparangetype": [
+ "local domain range"
+ ],
+ "ipasecondarybaserid": [
+ "100000000"
+ ]
+ }
+ ],
+ "summary": "1 range matched",
+ "truncated": false
+ }
+}
\ No newline at end of file
diff --git a/install/ui/test/data/range_find_pkeys.json b/install/ui/test/data/range_find_pkeys.json
new file mode 100644
index 000000000..21f91cdbd
--- /dev/null
+++ b/install/ui/test/data/range_find_pkeys.json
@@ -0,0 +1,17 @@
+{
+ "error": null,
+ "id": null,
+ "result": {
+ "count": 1,
+ "result": [
+ {
+ "cn": [
+ "DEV.EXAMPLE.COM_id_range"
+ ],
+ "dn": "cn=example.com_id_range,cn=ranges,cn=etc,dc=dev,dc=example,dc=com"
+ }
+ ],
+ "summary": "1 range matched",
+ "truncated": false
+ }
+}
\ No newline at end of file
diff --git a/install/ui/test/data/range_get_records.json b/install/ui/test/data/range_get_records.json
new file mode 100644
index 000000000..5f17c26bd
--- /dev/null
+++ b/install/ui/test/data/range_get_records.json
@@ -0,0 +1,40 @@
+{
+ "error": null,
+ "id": null,
+ "result": {
+ "count": 1,
+ "results": [
+ {
+ "error": null,
+ "result": {
+ "cn": [
+ "DEV.EXAMPLE.COM_id_range"
+ ],
+ "dn": "cn=example.com_id_range,cn=ranges,cn=etc,dc=dev,dc=example,dc=com",
+ "ipabaseid": [
+ "107400000"
+ ],
+ "ipabaserid": [
+ "1001"
+ ],
+ "ipaidrangesize": [
+ "200000"
+ ],
+ "iparangetype": [
+ "local domain range"
+ ],
+ "ipasecondarybaserid": [
+ "100000000"
+ ],
+ "objectclass": [
+ "top",
+ "ipaIDrange",
+ "ipaDomainIDRange"
+ ]
+ },
+ "summary": null,
+ "value": "DEV.EXAMPLE.COM_id_range"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/install/ui/test/data/range_mod.json b/install/ui/test/data/range_mod.json
new file mode 100644
index 000000000..47c72d053
--- /dev/null
+++ b/install/ui/test/data/range_mod.json
@@ -0,0 +1,43 @@
+{
+ "error": null,
+ "id": null,
+ "result": {
+ "result": {
+ "attributelevelrights": {
+ "aci": "rscwo",
+ "cn": "rscwo",
+ "ipabaseid": "rscwo",
+ "ipabaserid": "rscwo",
+ "ipaidrangesize": "rscwo",
+ "ipasecondarybaserid": "rscwo",
+ "nsaccountlock": "rscwo",
+ "objectclass": "rscwo"
+ },
+ "cn": [
+ "DEV.EXAMPLE.COM_id_range"
+ ],
+ "ipabaseid": [
+ "107400000"
+ ],
+ "ipabaserid": [
+ "1001"
+ ],
+ "ipaidrangesize": [
+ "200000"
+ ],
+ "iparangetype": [
+ "local domain range"
+ ],
+ "ipasecondarybaserid": [
+ "100000000"
+ ],
+ "objectclass": [
+ "top",
+ "ipaIDrange",
+ "ipaDomainIDRange"
+ ]
+ },
+ "summary": "Modified ID range \"DEV.EXAMPLE.COM_id_range\"",
+ "value": "DEV.EXAMPLE.COM_id_range"
+ }
+}
\ No newline at end of file
diff --git a/install/ui/test/data/range_show.json b/install/ui/test/data/range_show.json
new file mode 100644
index 000000000..0bf544fed
--- /dev/null
+++ b/install/ui/test/data/range_show.json
@@ -0,0 +1,44 @@
+{
+ "error": null,
+ "id": null,
+ "result": {
+ "result": {
+ "attributelevelrights": {
+ "aci": "rscwo",
+ "cn": "rscwo",
+ "ipabaseid": "rscwo",
+ "ipabaserid": "rscwo",
+ "ipaidrangesize": "rscwo",
+ "ipasecondarybaserid": "rscwo",
+ "nsaccountlock": "rscwo",
+ "objectclass": "rscwo"
+ },
+ "cn": [
+ "DEV.EXAMPLE.COM_id_range"
+ ],
+ "dn": "cn=example.com_id_range,cn=ranges,cn=etc,dc=dev,dc=example,dc=com",
+ "ipabaseid": [
+ "107400000"
+ ],
+ "ipabaserid": [
+ "1000"
+ ],
+ "ipaidrangesize": [
+ "200000"
+ ],
+ "iparangetype": [
+ "local domain range"
+ ],
+ "ipasecondarybaserid": [
+ "100000000"
+ ],
+ "objectclass": [
+ "top",
+ "ipaIDrange",
+ "ipaDomainIDRange"
+ ]
+ },
+ "summary": null,
+ "value": "DEV.EXAMPLE.COM_id_range"
+ }
+}
\ No newline at end of file
diff --git a/install/ui/webui.js b/install/ui/webui.js
index 9df6f76f1..e91946011 100644
--- a/install/ui/webui.js
+++ b/install/ui/webui.js
@@ -84,6 +84,7 @@ IPA.admin_navigation = function(spec) {
]},
{entity: 'selfservice'},
{entity: 'delegation'},
+ {entity: 'range'},
{entity: 'trust'},
{entity: 'config'}
]}];
diff --git a/ipalib/plugins/internal.py b/ipalib/plugins/internal.py
index 02ba5819a..88402fb54 100644
--- a/ipalib/plugins/internal.py
+++ b/ipalib/plugins/internal.py
@@ -499,6 +499,17 @@ class i18n_messages(Command):
"pwpolicy": {
"identity": _("Password Policy"),
},
+ "range": {
+ "details": _("Range Settings"),
+ "ipabaseid": _("Base ID"),
+ "ipabaserid": _("Primary RID base"),
+ "ipaidrangesize": _("Range size"),
+ "ipanttrusteddomainsid": _("Domain SID"),
+ "ipasecondarybaserid": _("Secondary RID base"),
+ "type": _("Range type"),
+ "type_ad": _("Active Directory domain"),
+ "type_local": _("Local domain"),
+ },
"role": {
"identity": _("Role Settings"),
},