import ipa-4.8.7-12.module+el8.3.0+8223+6212645f
This commit is contained in:
parent
1406ae40eb
commit
ed2b4dbae7
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1 @@
|
|||||||
SOURCES/freeipa-4.8.4.tar.gz
|
SOURCES/freeipa-4.8.7.tar.gz
|
||||||
|
@ -1 +1 @@
|
|||||||
72c91f01b2039795223417dc6761edf8ee0f36ee SOURCES/freeipa-4.8.4.tar.gz
|
0099d799a77a757eeb4a95a69a38bdec24e45026 SOURCES/freeipa-4.8.7.tar.gz
|
||||||
|
@ -1,47 +0,0 @@
|
|||||||
From 2c2cef7063315766d893b275185b422be3f3c019 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Thomas Woerner <twoerner@redhat.com>
|
|
||||||
Date: Dec 16 2019 20:37:17 +0000
|
|
||||||
Subject: DNS install check: Fix overlapping DNS zone from the master itself
|
|
||||||
|
|
||||||
|
|
||||||
The change to allow overlapping zone to be from the master itself has
|
|
||||||
introduced two issues: The check for the master itself should only executed
|
|
||||||
if options.force and options.allow_zone_overlap are both false and the
|
|
||||||
reverse zone check later on was still handling ValueError instead of
|
|
||||||
dnsutil.DNSZoneAlreadyExists.
|
|
||||||
|
|
||||||
Both issues have been fixed and the deployment with existing name servers
|
|
||||||
is properly working again.
|
|
||||||
|
|
||||||
Fixes: https://pagure.io/freeipa/issue/8150
|
|
||||||
Signed-off-by: Thomas Woerner <twoerner@redhat.com>
|
|
||||||
Reviewed-By: Florence Blanc-Renaud <frenaud@redhat.com>
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
diff --git a/ipaserver/install/dns.py b/ipaserver/install/dns.py
|
|
||||||
index 36ba6f8..9f08e86 100644
|
|
||||||
--- a/ipaserver/install/dns.py
|
|
||||||
+++ b/ipaserver/install/dns.py
|
|
||||||
@@ -135,15 +135,15 @@ def install_check(standalone, api, replica, options, hostname):
|
|
||||||
logger.warning("%s Please make sure that the domain is "
|
|
||||||
"properly delegated to this IPA server.",
|
|
||||||
e)
|
|
||||||
-
|
|
||||||
- hst = dnsutil.DNSName(hostname).make_absolute().to_text()
|
|
||||||
- if hst not in e.kwargs['ns']:
|
|
||||||
- raise ValueError(str(e))
|
|
||||||
+ else:
|
|
||||||
+ hst = dnsutil.DNSName(hostname).make_absolute().to_text()
|
|
||||||
+ if hst not in e.kwargs['ns']:
|
|
||||||
+ raise ValueError(str(e))
|
|
||||||
|
|
||||||
for reverse_zone in options.reverse_zones:
|
|
||||||
try:
|
|
||||||
dnsutil.check_zone_overlap(reverse_zone)
|
|
||||||
- except ValueError as e:
|
|
||||||
+ except dnsutil.DNSZoneAlreadyExists as e:
|
|
||||||
if options.force or options.allow_zone_overlap:
|
|
||||||
logger.warning('%s', str(e))
|
|
||||||
else:
|
|
||||||
|
|
@ -0,0 +1,409 @@
|
|||||||
|
From c2ba333b9681d008d9c528a79dbdd76ce11a3ecd Mon Sep 17 00:00:00 2001
|
||||||
|
From: Serhii Tsymbaliuk <stsymbal@redhat.com>
|
||||||
|
Date: Thu, 28 May 2020 08:47:49 +0200
|
||||||
|
Subject: [PATCH 01/22] WebUI: Fix "IPA Error 3007: RequirmentError" while
|
||||||
|
adding idoverrideuser association
|
||||||
|
|
||||||
|
Add builder for association adder dialog which allows to override behavior of the component.
|
||||||
|
Replace default implementation with a custom one for idoverrideuser.
|
||||||
|
Replace text filter with 'ID view' select box in the idoverrideuser dialog.
|
||||||
|
|
||||||
|
Ticket: https://pagure.io/freeipa/issue/8335
|
||||||
|
|
||||||
|
Signed-off-by: Serhii Tsymbaliuk <stsymbal@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
---
|
||||||
|
install/ui/src/freeipa/association.js | 13 ++++-
|
||||||
|
install/ui/src/freeipa/dialog.js | 73 ++++++++++++++++-----------
|
||||||
|
install/ui/src/freeipa/group.js | 14 +++++
|
||||||
|
install/ui/src/freeipa/idviews.js | 58 +++++++++++++++++++++
|
||||||
|
ipaserver/plugins/internal.py | 6 +++
|
||||||
|
5 files changed, 133 insertions(+), 31 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/install/ui/src/freeipa/association.js b/install/ui/src/freeipa/association.js
|
||||||
|
index f10ccb2a5..b083a79f9 100644
|
||||||
|
--- a/install/ui/src/freeipa/association.js
|
||||||
|
+++ b/install/ui/src/freeipa/association.js
|
||||||
|
@@ -25,6 +25,7 @@
|
||||||
|
define([
|
||||||
|
'dojo/_base/lang',
|
||||||
|
'dojo/Deferred',
|
||||||
|
+ './builder',
|
||||||
|
'./metadata',
|
||||||
|
'./ipa',
|
||||||
|
'./jquery',
|
||||||
|
@@ -38,7 +39,7 @@ define([
|
||||||
|
'./facet',
|
||||||
|
'./search',
|
||||||
|
'./dialog'],
|
||||||
|
- function(lang, Deferred, metadata_provider, IPA, $, metadata,
|
||||||
|
+ function(lang, Deferred, builder, metadata_provider, IPA, $, metadata,
|
||||||
|
navigation, phases, reg, rpc, su, text) {
|
||||||
|
|
||||||
|
/**
|
||||||
|
@@ -1209,7 +1210,8 @@ exp.association_facet = IPA.association_facet = function (spec, no_init) {
|
||||||
|
|
||||||
|
var pkeys = that.data.result.result[that.get_attribute_name()];
|
||||||
|
|
||||||
|
- var dialog = IPA.association_adder_dialog({
|
||||||
|
+ var dialog = builder.build('association_adder_dialog', {
|
||||||
|
+ $type: that.other_entity.name,
|
||||||
|
title: title,
|
||||||
|
entity: that.entity,
|
||||||
|
pkey: pkey,
|
||||||
|
@@ -1675,6 +1677,13 @@ IPA.attr_read_only_evaluator = function(spec) {
|
||||||
|
return that;
|
||||||
|
};
|
||||||
|
|
||||||
|
+// Create a registry for adder dialogs where key is name of 'other entity'.
|
||||||
|
+// It allows to override dialogs for some specific cases of association
|
||||||
|
+// creation.
|
||||||
|
+var dialog_builder = builder.get('association_adder_dialog');
|
||||||
|
+dialog_builder.factory = IPA.association_adder_dialog;
|
||||||
|
+reg.set('association_adder_dialog', dialog_builder.registry);
|
||||||
|
+
|
||||||
|
phases.on('registration', function() {
|
||||||
|
var w = reg.widget;
|
||||||
|
var f = reg.field;
|
||||||
|
diff --git a/install/ui/src/freeipa/dialog.js b/install/ui/src/freeipa/dialog.js
|
||||||
|
index c153120df..d67d63b6d 100644
|
||||||
|
--- a/install/ui/src/freeipa/dialog.js
|
||||||
|
+++ b/install/ui/src/freeipa/dialog.js
|
||||||
|
@@ -919,35 +919,7 @@ IPA.adder_dialog = function(spec) {
|
||||||
|
'class': 'input-group col-md-12 adder-dialog-top'
|
||||||
|
}).appendTo(container);
|
||||||
|
|
||||||
|
- var filter_placeholder = text.get('@i18n:association.filter_placeholder');
|
||||||
|
- filter_placeholder = filter_placeholder.replace('${other_entity}',
|
||||||
|
- that.other_entity.metadata.label);
|
||||||
|
-
|
||||||
|
- that.filter_field = $('<input/>', {
|
||||||
|
- type: 'text',
|
||||||
|
- name: 'filter',
|
||||||
|
- 'class': 'form-control',
|
||||||
|
- 'placeholder': filter_placeholder,
|
||||||
|
- keyup: function(event) {
|
||||||
|
- if (event.keyCode === keys.ENTER) {
|
||||||
|
- that.search();
|
||||||
|
- return false;
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
- }).appendTo(input_group);
|
||||||
|
-
|
||||||
|
- var input_group_btn = $('<div/>', {
|
||||||
|
- 'class': 'input-group-btn'
|
||||||
|
- }).appendTo(input_group);
|
||||||
|
-
|
||||||
|
- that.find_button = IPA.button({
|
||||||
|
- name: 'find',
|
||||||
|
- label: '@i18n:buttons.filter',
|
||||||
|
- click: function() {
|
||||||
|
- that.search();
|
||||||
|
- return false;
|
||||||
|
- }
|
||||||
|
- }).appendTo(input_group_btn);
|
||||||
|
+ that.filter_field = that.get_filter_field(input_group);
|
||||||
|
|
||||||
|
var row = $('<div/>', { 'class': 'row adder-dialog-main'}).appendTo(container);
|
||||||
|
//
|
||||||
|
@@ -1132,6 +1104,49 @@ IPA.adder_dialog = function(spec) {
|
||||||
|
return that.filter_field.val();
|
||||||
|
};
|
||||||
|
|
||||||
|
+ /**
|
||||||
|
+ * Return field for filtering available items
|
||||||
|
+ *
|
||||||
|
+ * Default implementation returns text input + "Filter" button.
|
||||||
|
+ * It can be overridden.
|
||||||
|
+ *
|
||||||
|
+ * @param {HTMLElement} input_group - container for a filter field
|
||||||
|
+ * @return {HTMLElement}
|
||||||
|
+ */
|
||||||
|
+ that.get_filter_field = function(input_group) {
|
||||||
|
+ var filter_placeholder = text.get(
|
||||||
|
+ '@i18n:association.filter_placeholder'
|
||||||
|
+ ).replace('${other_entity}', that.other_entity.metadata.label);
|
||||||
|
+
|
||||||
|
+ var filter_field = $('<input/>', {
|
||||||
|
+ type: 'text',
|
||||||
|
+ name: 'filter',
|
||||||
|
+ 'class': 'form-control',
|
||||||
|
+ 'placeholder': filter_placeholder,
|
||||||
|
+ keyup: function(event) {
|
||||||
|
+ if (event.keyCode === keys.ENTER) {
|
||||||
|
+ that.search();
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }).appendTo(input_group);
|
||||||
|
+
|
||||||
|
+ var input_group_btn = $('<div/>', {
|
||||||
|
+ 'class': 'input-group-btn'
|
||||||
|
+ }).appendTo(input_group);
|
||||||
|
+
|
||||||
|
+ that.find_button = IPA.button({
|
||||||
|
+ name: 'find',
|
||||||
|
+ label: '@i18n:buttons.filter',
|
||||||
|
+ click: function() {
|
||||||
|
+ that.search();
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
+ }).appendTo(input_group_btn);
|
||||||
|
+
|
||||||
|
+ return filter_field;
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
/**
|
||||||
|
* Clear rows in available table
|
||||||
|
*/
|
||||||
|
diff --git a/install/ui/src/freeipa/group.js b/install/ui/src/freeipa/group.js
|
||||||
|
index e46d8c7e3..2984bd4b2 100644
|
||||||
|
--- a/install/ui/src/freeipa/group.js
|
||||||
|
+++ b/install/ui/src/freeipa/group.js
|
||||||
|
@@ -205,6 +205,20 @@ return {
|
||||||
|
add_title: '@i18n:objects.group.add_into_sudo',
|
||||||
|
remove_method: 'remove_user',
|
||||||
|
remove_title: '@i18n:objects.group.remove_from_sudo'
|
||||||
|
+ },
|
||||||
|
+ {
|
||||||
|
+ $type: 'association',
|
||||||
|
+ name: 'member_idoverrideuser',
|
||||||
|
+ associator: IPA.serial_associator,
|
||||||
|
+ add_title: '@i18n:objects.group.add_idoverride_user',
|
||||||
|
+ remove_title: '@i18n:objects.group.remove_idoverride_users',
|
||||||
|
+ columns: [
|
||||||
|
+ {
|
||||||
|
+ name: 'ipaanchoruuid',
|
||||||
|
+ label: '@i18n:objects.idoverrideuser.anchor_label',
|
||||||
|
+ link: false
|
||||||
|
+ }
|
||||||
|
+ ]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
standard_association_facets: true,
|
||||||
|
diff --git a/install/ui/src/freeipa/idviews.js b/install/ui/src/freeipa/idviews.js
|
||||||
|
index 35dc998c8..a4fca6205 100644
|
||||||
|
--- a/install/ui/src/freeipa/idviews.js
|
||||||
|
+++ b/install/ui/src/freeipa/idviews.js
|
||||||
|
@@ -966,6 +966,58 @@ idviews.unapply_action = function(spec) {
|
||||||
|
return that;
|
||||||
|
};
|
||||||
|
|
||||||
|
+idviews.idoverrideuser_adder_dialog = function(spec) {
|
||||||
|
+
|
||||||
|
+ spec = spec || {};
|
||||||
|
+
|
||||||
|
+ var that = IPA.association_adder_dialog(spec);
|
||||||
|
+
|
||||||
|
+ that.base_search = that.search;
|
||||||
|
+
|
||||||
|
+ that.search = function() {
|
||||||
|
+ // Search for users only in case a ID view is selected
|
||||||
|
+ if (that.get_filter()) {
|
||||||
|
+ that.base_search();
|
||||||
|
+ }
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Replace default text filter with a select box for filtering by ID view
|
||||||
|
+ */
|
||||||
|
+ that.get_filter_field = function(input_group) {
|
||||||
|
+
|
||||||
|
+ var filter_field = $('<select/>', {
|
||||||
|
+ name: 'filter',
|
||||||
|
+ 'class': 'form-control',
|
||||||
|
+ change: function(event) {
|
||||||
|
+ that.search();
|
||||||
|
+ }
|
||||||
|
+ }).appendTo(input_group);
|
||||||
|
+
|
||||||
|
+ rpc.command({
|
||||||
|
+ entity: 'idview',
|
||||||
|
+ method: 'find',
|
||||||
|
+ on_success: function(data) {
|
||||||
|
+ var results = data.result;
|
||||||
|
+
|
||||||
|
+ for (var i=0; i<results.count; i++) {
|
||||||
|
+ var result = results.result[i];
|
||||||
|
+ $('<option/>', {
|
||||||
|
+ text: result.cn[0],
|
||||||
|
+ value: result.cn[0]
|
||||||
|
+ }).appendTo(filter_field);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ that.search();
|
||||||
|
+ }
|
||||||
|
+ }).execute();
|
||||||
|
+
|
||||||
|
+ return filter_field;
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ return that;
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
/**
|
||||||
|
* ID View entity specification object
|
||||||
|
* @member idviews
|
||||||
|
@@ -993,6 +1045,7 @@ idviews.register = function() {
|
||||||
|
var f = reg.facet;
|
||||||
|
var a = reg.action;
|
||||||
|
var w = reg.widget;
|
||||||
|
+ var ad = reg.association_adder_dialog;
|
||||||
|
|
||||||
|
e.register({type: 'idview', spec: idviews.spec});
|
||||||
|
e.register({
|
||||||
|
@@ -1012,6 +1065,11 @@ idviews.register = function() {
|
||||||
|
|
||||||
|
w.register('idviews_certs', idviews.idviews_certs_widget);
|
||||||
|
w.register('cert_textarea', idviews.cert_textarea_widget);
|
||||||
|
+
|
||||||
|
+ ad.register({
|
||||||
|
+ type: 'idoverrideuser',
|
||||||
|
+ factory: idviews.idoverrideuser_adder_dialog
|
||||||
|
+ });
|
||||||
|
};
|
||||||
|
|
||||||
|
phases.on('registration', idviews.register);
|
||||||
|
diff --git a/ipaserver/plugins/internal.py b/ipaserver/plugins/internal.py
|
||||||
|
index 5f2b1fdc2..7622e65dc 100644
|
||||||
|
--- a/ipaserver/plugins/internal.py
|
||||||
|
+++ b/ipaserver/plugins/internal.py
|
||||||
|
@@ -835,6 +835,9 @@ class i18n_messages(Command):
|
||||||
|
"Remove users from member managers for user group "
|
||||||
|
"'${primary_key}'"
|
||||||
|
),
|
||||||
|
+ "add_idoverride_user": _(
|
||||||
|
+ "Add user ID override into user group '${primary_key}'"
|
||||||
|
+ ),
|
||||||
|
"details": _("Group Settings"),
|
||||||
|
"external": _("External"),
|
||||||
|
"groups": _("Groups"),
|
||||||
|
@@ -868,6 +871,9 @@ class i18n_messages(Command):
|
||||||
|
"remove_users": _(
|
||||||
|
"Remove users from user group '${primary_key}'"
|
||||||
|
),
|
||||||
|
+ "remove_idoverride_users": _(
|
||||||
|
+ "Remove user ID overrides from user group '${primary_key}'"
|
||||||
|
+ ),
|
||||||
|
"type": _("Group Type"),
|
||||||
|
"user_groups": _("User Groups"),
|
||||||
|
},
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
||||||
|
From f6c460aee8542d4d81cd9970d71051c240156973 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Serhii Tsymbaliuk <stsymbal@redhat.com>
|
||||||
|
Date: Thu, 16 Jul 2020 18:52:24 +0200
|
||||||
|
Subject: [PATCH] WebUI: Fix error "unknown command
|
||||||
|
'idoverrideuser_add_member'"
|
||||||
|
|
||||||
|
There was wrong IPA.associator class used for 'Groups' -> 'User ID overrides' association,
|
||||||
|
as a result a wrong command was sent to the server.
|
||||||
|
|
||||||
|
Ticket: https://pagure.io/freeipa/issue/8416
|
||||||
|
|
||||||
|
Signed-off-by: Serhii Tsymbaliuk <stsymbal@redhat.com>
|
||||||
|
Reviewed-By: Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
---
|
||||||
|
install/ui/src/freeipa/group.js | 1 -
|
||||||
|
1 file changed, 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/install/ui/src/freeipa/group.js b/install/ui/src/freeipa/group.js
|
||||||
|
index 2984bd4b2..61c19a82f 100644
|
||||||
|
--- a/install/ui/src/freeipa/group.js
|
||||||
|
+++ b/install/ui/src/freeipa/group.js
|
||||||
|
@@ -209,7 +209,6 @@ return {
|
||||||
|
{
|
||||||
|
$type: 'association',
|
||||||
|
name: 'member_idoverrideuser',
|
||||||
|
- associator: IPA.serial_associator,
|
||||||
|
add_title: '@i18n:objects.group.add_idoverride_user',
|
||||||
|
remove_title: '@i18n:objects.group.remove_idoverride_users',
|
||||||
|
columns: [
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
||||||
|
From e35739b7e9f6bb016b37abbd92bdaee71a59a288 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Serhii Tsymbaliuk <stsymbal@redhat.com>
|
||||||
|
Date: Wed, 29 Jul 2020 09:41:36 +0200
|
||||||
|
Subject: [PATCH] WebUI tests: Add test case to cover user ID override feature
|
||||||
|
|
||||||
|
The test case includes adding an user ID override to Default Trust View
|
||||||
|
and adding the ID override to some IPA group.
|
||||||
|
|
||||||
|
Ticket: https://pagure.io/freeipa/issue/8416
|
||||||
|
|
||||||
|
Signed-off-by: Serhii Tsymbaliuk <stsymbal@redhat.com>
|
||||||
|
Reviewed-By: Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
---
|
||||||
|
ipatests/test_webui/test_trust.py | 41 +++++++++++++++++++++++++++++++
|
||||||
|
1 file changed, 41 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/ipatests/test_webui/test_trust.py b/ipatests/test_webui/test_trust.py
|
||||||
|
index c04c2fcd8..605f8a2a7 100644
|
||||||
|
--- a/ipatests/test_webui/test_trust.py
|
||||||
|
+++ b/ipatests/test_webui/test_trust.py
|
||||||
|
@@ -21,6 +21,8 @@
|
||||||
|
Trust tests
|
||||||
|
"""
|
||||||
|
|
||||||
|
+import ipatests.test_webui.data_group as group
|
||||||
|
+import ipatests.test_webui.data_idviews as idview
|
||||||
|
from ipatests.test_webui.ui_driver import UI_driver
|
||||||
|
from ipatests.test_webui.ui_driver import screenshot
|
||||||
|
from ipatests.test_webui.task_range import range_tasks
|
||||||
|
@@ -29,6 +31,8 @@ import pytest
|
||||||
|
ENTITY = 'trust'
|
||||||
|
CONFIG_ENTITY = 'trustconfig'
|
||||||
|
|
||||||
|
+DEFAULT_TRUST_VIEW = 'Default Trust View'
|
||||||
|
+
|
||||||
|
CONFIG_DATA = {
|
||||||
|
'mod': [
|
||||||
|
['combobox', 'ipantfallbackprimarygroup', 'admins'],
|
||||||
|
@@ -164,3 +168,40 @@ class test_trust(trust_tasks):
|
||||||
|
|
||||||
|
self.mod_record(CONFIG_ENTITY, CONFIG_DATA)
|
||||||
|
self.mod_record(CONFIG_ENTITY, CONFIG_DATA2)
|
||||||
|
+
|
||||||
|
+ @screenshot
|
||||||
|
+ def test_group_member_idoverrideuser(self):
|
||||||
|
+
|
||||||
|
+ self.init_app()
|
||||||
|
+
|
||||||
|
+ # Create new trust
|
||||||
|
+ data = self.get_data()
|
||||||
|
+ self.add_record(ENTITY, data)
|
||||||
|
+
|
||||||
|
+ # Create an user ID override
|
||||||
|
+ ad_domain = self.config.get('ad_domain')
|
||||||
|
+ ad_admin = self.config.get('ad_admin')
|
||||||
|
+ idoverrideuser_pkey = '{}@{}'.format(ad_admin, ad_domain).lower()
|
||||||
|
+
|
||||||
|
+ self.navigate_to_record(DEFAULT_TRUST_VIEW, entity=idview.ENTITY)
|
||||||
|
+ self.add_record(idview.ENTITY, {
|
||||||
|
+ 'pkey': idoverrideuser_pkey,
|
||||||
|
+ 'add': [
|
||||||
|
+ ('textbox', 'ipaanchoruuid_default', idoverrideuser_pkey),
|
||||||
|
+ ],
|
||||||
|
+ }, facet='idoverrideuser')
|
||||||
|
+
|
||||||
|
+ # Create new group and add the user ID override there
|
||||||
|
+ self.navigate_to_entity(group.ENTITY)
|
||||||
|
+ self.add_record(group.ENTITY, group.DATA)
|
||||||
|
+ self.navigate_to_record(group.PKEY)
|
||||||
|
+ self.add_associations([idoverrideuser_pkey],
|
||||||
|
+ facet='member_idoverrideuser', delete=True)
|
||||||
|
+
|
||||||
|
+ # Clean up data
|
||||||
|
+ self.navigate_to_entity(group.ENTITY)
|
||||||
|
+ self.delete_record(group.PKEY)
|
||||||
|
+ self.navigate_to_record(DEFAULT_TRUST_VIEW, entity=idview.ENTITY)
|
||||||
|
+ self.delete_record(idoverrideuser_pkey)
|
||||||
|
+ self.navigate_to_entity(ENTITY)
|
||||||
|
+ self.delete_record(ad_domain)
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
@ -0,0 +1,601 @@
|
|||||||
|
From 77fae8c48bbe0f4499f4d8ed91b268568c64cd7c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christian Heimes <cheimes@redhat.com>
|
||||||
|
Date: Thu, 11 Jun 2020 11:17:25 +0200
|
||||||
|
Subject: [PATCH] Move ipa-epn systemd files and run RPM hooks
|
||||||
|
|
||||||
|
The init/systemd directory is for server only and not part of
|
||||||
|
CLIENT_ONLY builds.
|
||||||
|
|
||||||
|
It's necesary to run pre/post installation hooks to make systemd aware
|
||||||
|
of new files.
|
||||||
|
|
||||||
|
Fixes: https://pagure.io/freeipa/issue/8367
|
||||||
|
Signed-off-by: Christian Heimes <cheimes@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Reviewed-By: Francois Cami <fcami@redhat.com>
|
||||||
|
---
|
||||||
|
.gitignore | 4 +--
|
||||||
|
client/Makefile.am | 1 +
|
||||||
|
client/share/Makefile.am | 5 ++++
|
||||||
|
{install => client}/share/expire_msg.template | 0
|
||||||
|
client/systemd/Makefile.am | 27 +++++++++++++++++++
|
||||||
|
{init => client}/systemd/ipa-epn.service.in | 0
|
||||||
|
{init => client}/systemd/ipa-epn.timer.in | 0
|
||||||
|
configure.ac | 24 +++++++++++++++--
|
||||||
|
freeipa.spec.in | 15 +++++++++++
|
||||||
|
init/systemd/Makefile.am | 8 +++---
|
||||||
|
install/share/Makefile.am | 5 ----
|
||||||
|
server.m4 | 19 -------------
|
||||||
|
12 files changed, 76 insertions(+), 32 deletions(-)
|
||||||
|
rename {install => client}/share/expire_msg.template (100%)
|
||||||
|
create mode 100644 client/systemd/Makefile.am
|
||||||
|
rename {init => client}/systemd/ipa-epn.service.in (100%)
|
||||||
|
rename {init => client}/systemd/ipa-epn.timer.in (100%)
|
||||||
|
|
||||||
|
#diff --git a/.gitignore b/.gitignore
|
||||||
|
#index 6584c3b4f..4cedb1ff2 100644
|
||||||
|
#--- a/.gitignore
|
||||||
|
#+++ b/.gitignore
|
||||||
|
#@@ -94,8 +94,6 @@ freeipa2-dev-doc
|
||||||
|
# /init/ipa_memcached
|
||||||
|
# /init/systemd/ipa-custodia.service
|
||||||
|
# /init/systemd/ipa.service
|
||||||
|
#-/init/systemd/ipa-epn.service
|
||||||
|
#-/init/systemd/ipa-epn.timer
|
||||||
|
# /init/tmpfilesd/ipa.conf
|
||||||
|
#
|
||||||
|
# !/install/ui/doc/Makefile.in
|
||||||
|
#@@ -116,6 +114,8 @@ freeipa2-dev-doc
|
||||||
|
# /client/ipa-getkeytab
|
||||||
|
# /client/ipa-join
|
||||||
|
# /client/ipa-rmkeytab
|
||||||
|
#+/client/systemd/ipa-epn.service
|
||||||
|
#+/client/systemd/ipa-epn.timer
|
||||||
|
#
|
||||||
|
# /ipaplatform/override.py
|
||||||
|
# /ipapython/version.py
|
||||||
|
diff --git a/client/Makefile.am b/client/Makefile.am
|
||||||
|
index 858a9369e..87da87fcd 100644
|
||||||
|
--- a/client/Makefile.am
|
||||||
|
+++ b/client/Makefile.am
|
||||||
|
@@ -95,6 +95,7 @@ SUBDIRS = \
|
||||||
|
share \
|
||||||
|
man \
|
||||||
|
sysconfig \
|
||||||
|
+ systemd \
|
||||||
|
$(NULL)
|
||||||
|
# init
|
||||||
|
|
||||||
|
diff --git a/client/share/Makefile.am b/client/share/Makefile.am
|
||||||
|
index 6d4a62d5e..1402a3a9d 100644
|
||||||
|
--- a/client/share/Makefile.am
|
||||||
|
+++ b/client/share/Makefile.am
|
||||||
|
@@ -4,3 +4,8 @@ appdir = $(IPA_DATA_DIR)/client
|
||||||
|
dist_app_DATA = \
|
||||||
|
freeipa.template \
|
||||||
|
$(NULL)
|
||||||
|
+
|
||||||
|
+epnconfdir = $(IPA_SYSCONF_DIR)/epn
|
||||||
|
+dist_epnconf_DATA = \
|
||||||
|
+ expire_msg.template \
|
||||||
|
+ $(NULL)
|
||||||
|
diff --git a/install/share/expire_msg.template b/client/share/expire_msg.template
|
||||||
|
similarity index 100%
|
||||||
|
rename from install/share/expire_msg.template
|
||||||
|
rename to client/share/expire_msg.template
|
||||||
|
diff --git a/client/systemd/Makefile.am b/client/systemd/Makefile.am
|
||||||
|
new file mode 100644
|
||||||
|
index 000000000..1f591be83
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/client/systemd/Makefile.am
|
||||||
|
@@ -0,0 +1,27 @@
|
||||||
|
+# This file will be processed with automake-1.7 to create Makefile.in
|
||||||
|
+#
|
||||||
|
+AUTOMAKE_OPTIONS = 1.7
|
||||||
|
+
|
||||||
|
+NULL =
|
||||||
|
+
|
||||||
|
+dist_noinst_DATA = \
|
||||||
|
+ ipa-epn.service.in \
|
||||||
|
+ ipa-epn.timer.in \
|
||||||
|
+ $(NULL)
|
||||||
|
+
|
||||||
|
+systemdsystemunit_DATA = \
|
||||||
|
+ ipa-epn.service \
|
||||||
|
+ ipa-epn.timer \
|
||||||
|
+ $(NULL)
|
||||||
|
+
|
||||||
|
+CLEANFILES = $(systemdsystemunit_DATA)
|
||||||
|
+
|
||||||
|
+%: %.in Makefile
|
||||||
|
+ sed \
|
||||||
|
+ -e 's|@bindir[@]|$(bindir)|g' \
|
||||||
|
+ -e 's|@IPA_SYSCONF_DIR[@]|$(IPA_SYSCONF_DIR)|g' \
|
||||||
|
+ -e 's|@localstatedir[@]|$(localstatedir)|g' \
|
||||||
|
+ -e 's|@sbindir[@]|$(sbindir)|g' \
|
||||||
|
+ -e 's|@libexecdir[@]|$(libexecdir)|g' \
|
||||||
|
+ -e 's|@sysconfenvdir[@]|$(sysconfenvdir)|g' \
|
||||||
|
+ '$(srcdir)/$@.in' >$@
|
||||||
|
diff --git a/init/systemd/ipa-epn.service.in b/client/systemd/ipa-epn.service.in
|
||||||
|
similarity index 100%
|
||||||
|
rename from init/systemd/ipa-epn.service.in
|
||||||
|
rename to client/systemd/ipa-epn.service.in
|
||||||
|
diff --git a/init/systemd/ipa-epn.timer.in b/client/systemd/ipa-epn.timer.in
|
||||||
|
similarity index 100%
|
||||||
|
rename from init/systemd/ipa-epn.timer.in
|
||||||
|
rename to client/systemd/ipa-epn.timer.in
|
||||||
|
diff --git a/configure.ac b/configure.ac
|
||||||
|
index 5ec529088..586b2532a 100644
|
||||||
|
--- a/configure.ac
|
||||||
|
+++ b/configure.ac
|
||||||
|
@@ -220,6 +220,25 @@ AC_ARG_WITH([runstatedir],
|
||||||
|
[runstatedir="/run"])
|
||||||
|
AC_SUBST([runstatedir])
|
||||||
|
|
||||||
|
+dnl ---------------------------------------------------------------------------
|
||||||
|
+dnl - Check for systemd directories
|
||||||
|
+dnl ---------------------------------------------------------------------------
|
||||||
|
+
|
||||||
|
+PKG_CHECK_EXISTS([systemd], [], [AC_MSG_ERROR([systemd not found])])
|
||||||
|
+AC_ARG_WITH([systemdsystemunitdir],
|
||||||
|
+ AS_HELP_STRING([--with-systemdsystemunitdir=DIR],
|
||||||
|
+ [Directory for systemd service files]),
|
||||||
|
+ [systemdsystemunitdir=$with_systemdsystemunitdir],
|
||||||
|
+ [systemdsystemunitdir=$($PKG_CONFIG --define-variable=prefix='${prefix}' --variable=systemdsystemunitdir systemd)])
|
||||||
|
+AC_SUBST([systemdsystemunitdir])
|
||||||
|
+
|
||||||
|
+AC_ARG_WITH([systemdtmpfilesdir],
|
||||||
|
+ AS_HELP_STRING([--with-systemdtmpfilesdir=DIR],
|
||||||
|
+ [Directory for systemd-tmpfiles configuration files]),
|
||||||
|
+ [systemdtmpfilesdir=$with_systemdtmpfilesdir],
|
||||||
|
+ [systemdtmpfilesdir=$($PKG_CONFIG --define-variable=prefix='${prefix}' --variable=tmpfilesdir systemd)])
|
||||||
|
+AC_SUBST([systemdtmpfilesdir])
|
||||||
|
+
|
||||||
|
dnl ---------------------------------------------------------------------------
|
||||||
|
dnl - Server-only configuration
|
||||||
|
dnl ---------------------------------------------------------------------------
|
||||||
|
@@ -544,6 +563,7 @@ AC_CONFIG_FILES([
|
||||||
|
client/share/Makefile
|
||||||
|
client/man/Makefile
|
||||||
|
client/sysconfig/Makefile
|
||||||
|
+ client/systemd/Makefile
|
||||||
|
contrib/completion/Makefile
|
||||||
|
contrib/Makefile
|
||||||
|
daemons/dnssec/Makefile
|
||||||
|
@@ -637,13 +657,13 @@ echo "
|
||||||
|
jslint: ${JSLINT}
|
||||||
|
LDAP libs: ${LDAP_LIBS}
|
||||||
|
OpenSSL crypto libs: ${CRYPTO_LIBS}
|
||||||
|
- KRB5 libs: ${KRB5_LIBS}"
|
||||||
|
+ KRB5 libs: ${KRB5_LIBS}
|
||||||
|
+ systemdsystemunitdir: ${systemdsystemunitdir}"
|
||||||
|
|
||||||
|
AM_COND_IF([ENABLE_SERVER], [
|
||||||
|
echo "\
|
||||||
|
KRAD libs: ${KRAD_LIBS}
|
||||||
|
krb5rundir: ${krb5rundir}
|
||||||
|
- systemdsystemunitdir: ${systemdsystemunitdir}
|
||||||
|
systemdtmpfilesdir: ${systemdtmpfilesdir}
|
||||||
|
build mode: server & client"
|
||||||
|
], [
|
||||||
|
diff --git a/freeipa.spec.in b/freeipa.spec.in
|
||||||
|
index cec57e64e..1d8f4e6aa 100755
|
||||||
|
--- a/freeipa.spec.in
|
||||||
|
+++ b/freeipa.spec.in
|
||||||
|
@@ -586,6 +586,10 @@ on the machine enrolled into a FreeIPA environment
|
||||||
|
%package client-epn
|
||||||
|
Summary: Tools to configure Expiring Password Notification in IPA
|
||||||
|
Group: System Environment/Base
|
||||||
|
+Requires: systemd-units
|
||||||
|
+Requires(post): systemd-units
|
||||||
|
+Requires(preun): systemd-units
|
||||||
|
+Requires(postun): systemd-units
|
||||||
|
Requires: %{name}-client = %{version}-%{release}
|
||||||
|
|
||||||
|
%description client-epn
|
||||||
|
@@ -1003,6 +1007,17 @@ fi
|
||||||
|
# ONLY_CLIENT
|
||||||
|
%endif
|
||||||
|
|
||||||
|
+%preun client-epn
|
||||||
|
+%systemd_preun ipa-epn.service
|
||||||
|
+%systemd_preun ipa-epn.timer
|
||||||
|
+
|
||||||
|
+%postun client-epn
|
||||||
|
+%systemd_postun ipa-epn.service
|
||||||
|
+%systemd_postun ipa-epn.timer
|
||||||
|
+
|
||||||
|
+%post client-epn
|
||||||
|
+%systemd_post ipa-epn.service
|
||||||
|
+%systemd_post ipa-epn.timer
|
||||||
|
|
||||||
|
%post client
|
||||||
|
if [ $1 -gt 1 ] ; then
|
||||||
|
diff --git a/init/systemd/Makefile.am b/init/systemd/Makefile.am
|
||||||
|
index 5053dbff6..175178787 100644
|
||||||
|
--- a/init/systemd/Makefile.am
|
||||||
|
+++ b/init/systemd/Makefile.am
|
||||||
|
@@ -2,17 +2,17 @@
|
||||||
|
#
|
||||||
|
AUTOMAKE_OPTIONS = 1.7
|
||||||
|
|
||||||
|
+NULL =
|
||||||
|
+
|
||||||
|
dist_noinst_DATA = \
|
||||||
|
ipa-custodia.service.in \
|
||||||
|
ipa.service.in \
|
||||||
|
- ipa-epn.service.in \
|
||||||
|
- ipa-epn.timer.in
|
||||||
|
+ $(NULL)
|
||||||
|
|
||||||
|
systemdsystemunit_DATA = \
|
||||||
|
ipa-custodia.service \
|
||||||
|
ipa.service \
|
||||||
|
- ipa-epn.service \
|
||||||
|
- ipa-epn.timer
|
||||||
|
+ $(NULL)
|
||||||
|
|
||||||
|
CLEANFILES = $(systemdsystemunit_DATA)
|
||||||
|
|
||||||
|
diff --git a/install/share/Makefile.am b/install/share/Makefile.am
|
||||||
|
index 496e81288..e95796dfb 100644
|
||||||
|
--- a/install/share/Makefile.am
|
||||||
|
+++ b/install/share/Makefile.am
|
||||||
|
@@ -106,8 +106,3 @@ dist_app_DATA = \
|
||||||
|
kdcproxyconfdir = $(IPA_SYSCONF_DIR)/kdcproxy
|
||||||
|
dist_kdcproxyconf_DATA = \
|
||||||
|
kdcproxy.conf
|
||||||
|
-
|
||||||
|
-epnconfdir = $(IPA_SYSCONF_DIR)/epn
|
||||||
|
-dist_epnconf_DATA = \
|
||||||
|
- expire_msg.template \
|
||||||
|
- $(NULL)
|
||||||
|
diff --git a/server.m4 b/server.m4
|
||||||
|
index d35823e80..842d599d2 100644
|
||||||
|
--- a/server.m4
|
||||||
|
+++ b/server.m4
|
||||||
|
@@ -153,22 +153,3 @@ dnl Check for libverto
|
||||||
|
dnl ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
PKG_CHECK_MODULES([LIBVERTO], [libverto])
|
||||||
|
-
|
||||||
|
-dnl ---------------------------------------------------------------------------
|
||||||
|
-dnl - Check for systemd directories
|
||||||
|
-dnl ---------------------------------------------------------------------------
|
||||||
|
-
|
||||||
|
-PKG_CHECK_EXISTS([systemd], [], [AC_MSG_ERROR([systemd not found])])
|
||||||
|
-AC_ARG_WITH([systemdsystemunitdir],
|
||||||
|
- AS_HELP_STRING([--with-systemdsystemunitdir=DIR],
|
||||||
|
- [Directory for systemd service files]),
|
||||||
|
- [systemdsystemunitdir=$with_systemdsystemunitdir],
|
||||||
|
- [systemdsystemunitdir=$($PKG_CONFIG --define-variable=prefix='${prefix}' --variable=systemdsystemunitdir systemd)])
|
||||||
|
-AC_SUBST([systemdsystemunitdir])
|
||||||
|
-
|
||||||
|
-AC_ARG_WITH([systemdtmpfilesdir],
|
||||||
|
- AS_HELP_STRING([--with-systemdtmpfilesdir=DIR],
|
||||||
|
- [Directory for systemd-tmpfiles configuration files]),
|
||||||
|
- [systemdtmpfilesdir=$with_systemdtmpfilesdir],
|
||||||
|
- [systemdtmpfilesdir=$($PKG_CONFIG --define-variable=prefix='${prefix}' --variable=tmpfilesdir systemd)])
|
||||||
|
-AC_SUBST([systemdtmpfilesdir])
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
||||||
|
From 23e2935e5c5cb402dd4f6f44eaa4b013e6a8188a Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois=20Cami?= <fcami@redhat.com>
|
||||||
|
Date: Mon, 22 Jun 2020 16:39:02 +0200
|
||||||
|
Subject: [PATCH] EPN: ship the configuration file.
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Ship and install /etc/ipa/epn.conf.
|
||||||
|
Minor fixes to the associated man page.
|
||||||
|
|
||||||
|
Fixes: https://pagure.io/freeipa/issue/8374
|
||||||
|
Signed-off-by: François Cami <fcami@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abbra@users.noreply.github.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
---
|
||||||
|
client/man/epn.conf.5 | 5 ++--
|
||||||
|
client/share/Makefile.am | 7 +++++-
|
||||||
|
client/share/epn.conf | 54 ++++++++++++++++++++++++++++++++++++++++
|
||||||
|
freeipa.spec.in | 4 ++-
|
||||||
|
4 files changed, 65 insertions(+), 5 deletions(-)
|
||||||
|
create mode 100644 client/share/epn.conf
|
||||||
|
|
||||||
|
diff --git a/client/man/epn.conf.5 b/client/man/epn.conf.5
|
||||||
|
index 38e99e25d..14f5dbb75 100644
|
||||||
|
--- a/client/man/epn.conf.5
|
||||||
|
+++ b/client/man/epn.conf.5
|
||||||
|
@@ -71,11 +71,10 @@ Specifies the From e-mail address value in the e-mails sent. The default is
|
||||||
|
root@localhost. Bounces will be sent here.
|
||||||
|
.TP
|
||||||
|
.B smtp_delay <milliseconds>
|
||||||
|
-Time to wait, in milliseconds, between each e-mail sent to try to avoid overloading the mail queue.
|
||||||
|
+Time to wait, in milliseconds, between each e-mail sent to try to avoid overloading the mail queue. The default is 0.
|
||||||
|
.TP
|
||||||
|
.B mail_from <address>
|
||||||
|
-Specifies the From: e-mal address value in the e-mails sent. The default is
|
||||||
|
-noreply@ipadefaultemaildomain. This value can be found by running
|
||||||
|
+Specifies the From: e-mail address value in the e-mails sent. The default is noreply@ipadefaultemaildomain. This value can be found by running
|
||||||
|
.I ipa config-show
|
||||||
|
.TP
|
||||||
|
.B notify_ttls <list of days>
|
||||||
|
diff --git a/client/share/Makefile.am b/client/share/Makefile.am
|
||||||
|
index 1402a3a9d..472242e62 100644
|
||||||
|
--- a/client/share/Makefile.am
|
||||||
|
+++ b/client/share/Makefile.am
|
||||||
|
@@ -5,7 +5,12 @@ dist_app_DATA = \
|
||||||
|
freeipa.template \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
-epnconfdir = $(IPA_SYSCONF_DIR)/epn
|
||||||
|
+epnconfdir = $(IPA_SYSCONF_DIR)
|
||||||
|
dist_epnconf_DATA = \
|
||||||
|
+ epn.conf \
|
||||||
|
+ $(NULL)
|
||||||
|
+
|
||||||
|
+epntemplatedir = $(IPA_SYSCONF_DIR)/epn
|
||||||
|
+dist_epntemplate_DATA = \
|
||||||
|
expire_msg.template \
|
||||||
|
$(NULL)
|
||||||
|
diff --git a/client/share/epn.conf b/client/share/epn.conf
|
||||||
|
new file mode 100644
|
||||||
|
index 000000000..0e590dfc3
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/client/share/epn.conf
|
||||||
|
@@ -0,0 +1,54 @@
|
||||||
|
+# Global IPA-EPN [0] configuration file.
|
||||||
|
+# For a complete explanation of each parameter, see the epn.conf(5)
|
||||||
|
+# manual page.
|
||||||
|
+# For best results, change no more than a single parameter at a time,
|
||||||
|
+# and test if ipa-epn(1) still works as intended, using --dry-run when
|
||||||
|
+# it makes sense.
|
||||||
|
+#
|
||||||
|
+# [0] https://github.com/freeipa/freeipa/blob/master/doc/designs/expiring-password-notification.md
|
||||||
|
+
|
||||||
|
+[global]
|
||||||
|
+
|
||||||
|
+# Specifies the SMTP server to use.
|
||||||
|
+smtp_server = localhost
|
||||||
|
+
|
||||||
|
+# Specifies the SMTP port.
|
||||||
|
+smtp_port = 25
|
||||||
|
+
|
||||||
|
+# Specifies the id of the user to authenticate with the SMTP server.
|
||||||
|
+# Default None (empty value).
|
||||||
|
+# smtp_user =
|
||||||
|
+
|
||||||
|
+# Specifies the password for the authorized user.
|
||||||
|
+# Default None (empty value).
|
||||||
|
+# smtp_password =
|
||||||
|
+
|
||||||
|
+# pecifies the number of seconds to wait for SMTP to respond.
|
||||||
|
+smtp_timeout = 60
|
||||||
|
+
|
||||||
|
+# Specifies the type of secure connection to make. Options are: none,
|
||||||
|
+# starttls and ssl.
|
||||||
|
+smtp_security = none
|
||||||
|
+
|
||||||
|
+# Specifies the From e-mail address value in the e-mails sent. Bounces will
|
||||||
|
+# be sent here.
|
||||||
|
+smtp_admin = root@localhost
|
||||||
|
+
|
||||||
|
+# Time to wait, in milliseconds, between each e-mail sent to try to avoid
|
||||||
|
+# overloading the mail queue.
|
||||||
|
+smtp_delay = 0
|
||||||
|
+
|
||||||
|
+# Specifies the From: e-mail address value in the e-mails sent.
|
||||||
|
+# The default when unset is noreply@ipadefaultemaildomain.
|
||||||
|
+# This value can be found by running ipa config-show.
|
||||||
|
+# mail_from =
|
||||||
|
+
|
||||||
|
+# The list of days before a password expiration when ipa-epn should notify
|
||||||
|
+# a user that their password will soon require a reset.
|
||||||
|
+notify_ttls = 28, 14, 7, 3, 1
|
||||||
|
+
|
||||||
|
+# Set the character set of the message.
|
||||||
|
+msg_charset = utf8
|
||||||
|
+
|
||||||
|
+# Set the message's MIME sub-content type.
|
||||||
|
+msg_subtype = plain
|
||||||
|
diff --git a/freeipa.spec.in b/freeipa.spec.in
|
||||||
|
index 5bce6f118..8cca99697 100755
|
||||||
|
--- a/freeipa.spec.in
|
||||||
|
+++ b/freeipa.spec.in
|
||||||
|
@@ -1387,13 +1387,15 @@ fi
|
||||||
|
|
||||||
|
%files client-epn
|
||||||
|
%doc README.md Contributors.txt
|
||||||
|
+%dir %{_sysconfdir}/ipa/epn
|
||||||
|
%license COPYING
|
||||||
|
%{_sbindir}/ipa-epn
|
||||||
|
%{_mandir}/man1/ipa-epn.1*
|
||||||
|
%{_mandir}/man5/epn.conf.5*
|
||||||
|
%attr(644,root,root) %{_unitdir}/ipa-epn.service
|
||||||
|
%attr(644,root,root) %{_unitdir}/ipa-epn.timer
|
||||||
|
-%attr(644,root,root) %{_sysconfdir}/ipa/epn/expire_msg.template
|
||||||
|
+%attr(600,root,root) %config(noreplace) %{_sysconfdir}/ipa/epn.conf
|
||||||
|
+%attr(644,root,root) %config(noreplace) %{_sysconfdir}/ipa/epn/expire_msg.template
|
||||||
|
|
||||||
|
%files -n python3-ipaclient
|
||||||
|
%doc README.md Contributors.txt
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
||||||
|
From 3b43950d35f78b28d4edde4fda475b5aa84f4587 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois=20Cami?= <fcami@redhat.com>
|
||||||
|
Date: Tue, 23 Jun 2020 09:39:02 +0200
|
||||||
|
Subject: [PATCH] man pages: fix epn.conf.5 and ipa-epn.1 formatting
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Fix formatting issues found with mandoc.
|
||||||
|
|
||||||
|
Signed-off-by: François Cami <fcami@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abbra@users.noreply.github.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
---
|
||||||
|
client/man/epn.conf.5 | 2 +-
|
||||||
|
client/man/ipa-epn.1 | 8 ++++----
|
||||||
|
2 files changed, 5 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/client/man/epn.conf.5 b/client/man/epn.conf.5
|
||||||
|
index 14f5dbb75..df1f0156c 100644
|
||||||
|
--- a/client/man/epn.conf.5
|
||||||
|
+++ b/client/man/epn.conf.5
|
||||||
|
@@ -16,7 +16,7 @@
|
||||||
|
.\"
|
||||||
|
.\" Author: Rob Crittenden <rcritten@@redhat.com>
|
||||||
|
.\"
|
||||||
|
-.TH "epn.conf" "5" "Apr 28 2020" "FreeIPA" "FreeIPA Manual Pages"
|
||||||
|
+.TH "EPN.CONF" "5" "April 28, 2020" "FreeIPA" "FreeIPA Manual Pages"
|
||||||
|
.SH "NAME"
|
||||||
|
epn.conf \- Expiring Password Notification configuration file
|
||||||
|
.SH "SYNOPSIS"
|
||||||
|
diff --git a/client/man/ipa-epn.1 b/client/man/ipa-epn.1
|
||||||
|
index 9999ea8ca..124fd4536 100644
|
||||||
|
--- a/client/man/ipa-epn.1
|
||||||
|
+++ b/client/man/ipa-epn.1
|
||||||
|
@@ -15,14 +15,14 @@
|
||||||
|
.\" along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
.\"
|
||||||
|
.\"
|
||||||
|
-.TH "ipa-epn" "1" "Apr 24 2020" "FreeIPA" "FreeIPA Manual Pages"
|
||||||
|
+.TH "IPA-EPN" "1" "April 24, 2020" "FreeIPA" "FreeIPA Manual Pages"
|
||||||
|
.SH "NAME"
|
||||||
|
ipa\-epn \- Send expiring password nofications
|
||||||
|
.SH "SYNOPSIS"
|
||||||
|
-ipa\-epn \[options\]
|
||||||
|
+ipa\-epn \fR[options\fR]
|
||||||
|
|
||||||
|
.SH "DESCRIPTION"
|
||||||
|
-ipa\-epn provides a method to warn users via email that their IPA account password is about to expire.
|
||||||
|
+ipa\-epn provides a method to warn users via email that their IPA account password is about to expire.
|
||||||
|
|
||||||
|
It can be used in dry\-run mode which is recommmended during setup. The output is always JSON in this case.
|
||||||
|
|
||||||
|
@@ -38,7 +38,7 @@ The \-\-to\-nbdays CLI option can be used to determine the number of notificatio
|
||||||
|
|
||||||
|
If \fB\-\-from\-nbdays\fR is not specified, ipa\-epn will look within a 24\-hour long time range in <number of days> days.
|
||||||
|
|
||||||
|
-if \fB\-\-from\-nbdays\fR is specified, the date range starts at \fB\-\-from\-nbdays\fR days in the future and ends at \fB\-\-to\-nbdays\fR in the future.
|
||||||
|
+if \fB\-\-from\-nbdays\fR is specified, the date range starts at \fB\-\-from\-nbdays\fR days in the future and ends at \fB\-\-to\-nbdays\fR in the future.
|
||||||
|
|
||||||
|
Together, these two CLI options can be used to determine how many emails would be sent in a specific time in the future.
|
||||||
|
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
||||||
|
From 2648c218467792e907435eaa5267a0f3457f634f Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois=20Cami?= <fcami@redhat.com>
|
||||||
|
Date: Tue, 23 Jun 2020 13:50:02 +0200
|
||||||
|
Subject: [PATCH] ipatests: check that EPN's configuration file is installed.
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Fixes: https://pagure.io/freeipa/issue/8374
|
||||||
|
Signed-off-by: François Cami <fcami@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abbra@users.noreply.github.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
---
|
||||||
|
ipatests/test_integration/test_epn.py | 14 ++++++++++++++
|
||||||
|
1 file changed, 14 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/ipatests/test_integration/test_epn.py b/ipatests/test_integration/test_epn.py
|
||||||
|
index 7f56d4bc0..409d588d5 100644
|
||||||
|
--- a/ipatests/test_integration/test_epn.py
|
||||||
|
+++ b/ipatests/test_integration/test_epn.py
|
||||||
|
@@ -209,6 +209,20 @@ class TestEPN(IntegrationTest):
|
||||||
|
cls.master.run_command(r'rm -f /etc/pki/tls/private/postfix.key')
|
||||||
|
cls.master.run_command(r'rm -f /etc/pki/tls/certs/postfix.pem')
|
||||||
|
|
||||||
|
+ @pytest.mark.xfail(reason='pr-ci issue 378', strict=True)
|
||||||
|
+ def test_EPN_config_file(self):
|
||||||
|
+ """Check that the EPN configuration file is installed.
|
||||||
|
+ https://pagure.io/freeipa/issue/8374
|
||||||
|
+ """
|
||||||
|
+ epn_conf = "/etc/ipa/epn.conf"
|
||||||
|
+ epn_template = "/etc/ipa/epn/expire_msg.template"
|
||||||
|
+ cmd1 = self.master.run_command(["rpm", "-qc", "freeipa-client-epn"])
|
||||||
|
+ assert epn_conf in cmd1.stdout_text
|
||||||
|
+ assert epn_template in cmd1.stdout_text
|
||||||
|
+ cmd2 = self.master.run_command(["sha256sum", epn_conf])
|
||||||
|
+ ck = "4c207b5c9c760c36db0d3b2b93da50ea49edcc4002d6d1e7383601f0ec30b957"
|
||||||
|
+ assert cmd2.stdout_text.find(ck) == 0
|
||||||
|
+
|
||||||
|
def test_EPN_smoketest_1(self):
|
||||||
|
"""No users except admin. Check --dry-run output.
|
||||||
|
With the default configuration, the result should be an empty list.
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
||||||
|
From 06accac8906f66ebbb31849d6528b39ae006b124 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois=20Cami?= <fcami@redhat.com>
|
||||||
|
Date: Wed, 24 Jun 2020 23:24:36 +0200
|
||||||
|
Subject: [PATCH] ipatests: ipa_epn: uninstall/reinstall ipa-client-epn
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Due to https://github.com/freeipa/freeipa-pr-ci/issues/378
|
||||||
|
the installed version of freeipa-client-epn is not the built
|
||||||
|
one. Temporarily force uninstall/reinstall of this package
|
||||||
|
before running the test.
|
||||||
|
|
||||||
|
Fixes: https://pagure.io/freeipa/issue/8374
|
||||||
|
Signed-off-by: François Cami <fcami@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abbra@users.noreply.github.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
---
|
||||||
|
ipatests/test_integration/test_epn.py | 20 +++++++++++++++++++-
|
||||||
|
1 file changed, 19 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/ipatests/test_integration/test_epn.py b/ipatests/test_integration/test_epn.py
|
||||||
|
index 409d588d5..9a9fb17b9 100644
|
||||||
|
--- a/ipatests/test_integration/test_epn.py
|
||||||
|
+++ b/ipatests/test_integration/test_epn.py
|
||||||
|
@@ -209,11 +209,29 @@ class TestEPN(IntegrationTest):
|
||||||
|
cls.master.run_command(r'rm -f /etc/pki/tls/private/postfix.key')
|
||||||
|
cls.master.run_command(r'rm -f /etc/pki/tls/certs/postfix.pem')
|
||||||
|
|
||||||
|
- @pytest.mark.xfail(reason='pr-ci issue 378', strict=True)
|
||||||
|
+ @pytest.mark.skip_if_platform(
|
||||||
|
+ "debian", reason="Cannot check installed packages using RPM"
|
||||||
|
+ )
|
||||||
|
def test_EPN_config_file(self):
|
||||||
|
"""Check that the EPN configuration file is installed.
|
||||||
|
https://pagure.io/freeipa/issue/8374
|
||||||
|
"""
|
||||||
|
+ # workaround for https://github.com/freeipa/freeipa-pr-ci/issues/378
|
||||||
|
+ rpm_q_cmds = [
|
||||||
|
+ ["rpm", "-qi", "freeipa-client"],
|
||||||
|
+ ["rpm", "-qi", "freeipa-client-epn"],
|
||||||
|
+ ["rpm", "-qc", "freeipa-client-epn"],
|
||||||
|
+ ["rpm", "-V", "freeipa-client-epn"],
|
||||||
|
+ ["rpm", "-qvc", "freeipa-client-epn"],
|
||||||
|
+ ["ls", "-l", "/etc/ipa", "/etc/ipa/epn"],
|
||||||
|
+ ]
|
||||||
|
+ for cmd in rpm_q_cmds:
|
||||||
|
+ self.master.run_command(cmd, raiseonerr=False)
|
||||||
|
+ tasks.uninstall_packages(self.master, ["*ipa-client-epn"])
|
||||||
|
+ tasks.install_packages(self.master, ["*ipa-client-epn"])
|
||||||
|
+ for cmd in rpm_q_cmds:
|
||||||
|
+ self.master.run_command(cmd, raiseonerr=False)
|
||||||
|
+ # end workaround
|
||||||
|
epn_conf = "/etc/ipa/epn.conf"
|
||||||
|
epn_template = "/etc/ipa/epn/expire_msg.template"
|
||||||
|
cmd1 = self.master.run_command(["rpm", "-qc", "freeipa-client-epn"])
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
@ -1,90 +0,0 @@
|
|||||||
From a8b52eaf3cf56c90e3d94fdef0b9e426052634ea Mon Sep 17 00:00:00 2001
|
|
||||||
From: Alexander Bokovoy <abokovoy@redhat.com>
|
|
||||||
Date: Wed, 18 Dec 2019 12:08:59 +0200
|
|
||||||
Subject: [PATCH] Reset per-indicator Kerberos policy
|
|
||||||
|
|
||||||
When 'ipa krbtpolicy-reset' is called, we need to reset all policy
|
|
||||||
settings, including per-indicator ones. Per-indicator policy uses
|
|
||||||
subtyped attributes (foo;bar), the current krbtpolicy-reset code does
|
|
||||||
not deal with those.
|
|
||||||
|
|
||||||
Add support for per-indicator policy reset. It is a bit tricky, as we
|
|
||||||
need to drop the values to defaults but avoid adding non-per-indicator
|
|
||||||
variants of the same attributes.
|
|
||||||
|
|
||||||
Add test to check that policy has been resetted by observing a new
|
|
||||||
Kerberos TGT for the user after its policy reset.
|
|
||||||
|
|
||||||
Fixes: https://pagure.io/freeipa/issue/8153
|
|
||||||
|
|
||||||
Signed-off-by: Alexander Bokovoy <abokovoy@redhat.com>
|
|
||||||
---
|
|
||||||
ipaserver/plugins/krbtpolicy.py | 21 +++++++++++++++++++-
|
|
||||||
ipatests/test_integration/test_krbtpolicy.py | 13 ++++++++++++
|
|
||||||
2 files changed, 33 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/ipaserver/plugins/krbtpolicy.py b/ipaserver/plugins/krbtpolicy.py
|
|
||||||
index 997fe7e81..b01c44e93 100644
|
|
||||||
--- a/ipaserver/plugins/krbtpolicy.py
|
|
||||||
+++ b/ipaserver/plugins/krbtpolicy.py
|
|
||||||
@@ -68,6 +68,8 @@ register = Registry()
|
|
||||||
_default_values = {
|
|
||||||
'krbmaxticketlife': 86400,
|
|
||||||
'krbmaxrenewableage': 604800,
|
|
||||||
+ 'krbauthindmaxticketlife': 86400,
|
|
||||||
+ 'krbauthindmaxrenewableage': 604800,
|
|
||||||
}
|
|
||||||
|
|
||||||
# These attributes never have non-optional values, so they should be
|
|
||||||
@@ -311,9 +313,26 @@ class krbtpolicy_reset(baseldap.LDAPQuery):
|
|
||||||
def_values[a] = None
|
|
||||||
# if reseting global policy - set values to default
|
|
||||||
else:
|
|
||||||
- def_values = _default_values
|
|
||||||
+ def_values = _default_values.copy()
|
|
||||||
|
|
||||||
entry = ldap.get_entry(dn, list(def_values))
|
|
||||||
+
|
|
||||||
+ # For per-indicator policies, drop them to defaults
|
|
||||||
+ for subtype in _supported_options:
|
|
||||||
+ for attr in _option_based_attrs:
|
|
||||||
+ name = '{};{}'.format(attr, subtype)
|
|
||||||
+ if name in entry:
|
|
||||||
+ if uid is not None:
|
|
||||||
+ def_values[name] = None
|
|
||||||
+ else:
|
|
||||||
+ def_values[name] = _default_values[attr]
|
|
||||||
+
|
|
||||||
+ # Remove non-subtyped attrs variants,
|
|
||||||
+ # they should never be used directly.
|
|
||||||
+ for attr in _option_based_attrs:
|
|
||||||
+ if attr in def_values:
|
|
||||||
+ del def_values[attr]
|
|
||||||
+
|
|
||||||
entry.update(def_values)
|
|
||||||
try:
|
|
||||||
ldap.update_entry(entry)
|
|
||||||
diff --git a/ipatests/test_integration/test_krbtpolicy.py b/ipatests/test_integration/test_krbtpolicy.py
|
|
||||||
index b2264de7a..08e332096 100644
|
|
||||||
--- a/ipatests/test_integration/test_krbtpolicy.py
|
|
||||||
+++ b/ipatests/test_integration/test_krbtpolicy.py
|
|
||||||
@@ -112,3 +112,16 @@ class TestPWPolicy(IntegrationTest):
|
|
||||||
assert maxlife_within_policy(result.stdout_text, 1200) is True
|
|
||||||
|
|
||||||
tasks.kdestroy_all(master)
|
|
||||||
+
|
|
||||||
+ def test_krbtpolicy_reset(self):
|
|
||||||
+ """Test a hardened kerberos ticket policy reset"""
|
|
||||||
+ master = self.master
|
|
||||||
+
|
|
||||||
+ tasks.kinit_admin(master)
|
|
||||||
+ master.run_command(['ipa', 'krbtpolicy-reset', USER2])
|
|
||||||
+ master.run_command(['kinit', USER2],
|
|
||||||
+ stdin_text=PASSWORD + '\n')
|
|
||||||
+ result = master.run_command('klist | grep krbtgt')
|
|
||||||
+ assert maxlife_within_policy(result.stdout_text, MAXLIFE) is True
|
|
||||||
+
|
|
||||||
+ tasks.kdestroy_all(master)
|
|
||||||
--
|
|
||||||
2.24.1
|
|
||||||
|
|
147
SOURCES/0003-Use-256-bit-AJP-secret_rhbz#1849914.patch
Normal file
147
SOURCES/0003-Use-256-bit-AJP-secret_rhbz#1849914.patch
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
From be48983558a560dadad410a70a4a1684565ed481 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alexander Scheel <ascheel@redhat.com>
|
||||||
|
Date: Mon, 15 Jun 2020 18:38:35 -0400
|
||||||
|
Subject: [PATCH] Clarify AJP connector creation process
|
||||||
|
|
||||||
|
We do two things:
|
||||||
|
|
||||||
|
1. Fix the xpath for AJP connector verification. An AJP connector is
|
||||||
|
one which has protocol="AJP/1.3", NOT one that has port="8009". An
|
||||||
|
AJP connector can exist on any port and port 8009 can have any
|
||||||
|
protocol. Secrets only make sense on AJP connectors, so make the
|
||||||
|
xpath match the existing comment.
|
||||||
|
|
||||||
|
2. Add some background in-line documentation about AJP secret
|
||||||
|
provisioning. This should help future developers understand why this
|
||||||
|
was added to IPA and what limitations there are in what PKI or IPA
|
||||||
|
can do. Most notably, explain why Dogtag can't upgrade the AJP
|
||||||
|
connector to have a secret in the general case.
|
||||||
|
|
||||||
|
Signed-off-by: Alexander Scheel <ascheel@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
---
|
||||||
|
ipaserver/install/dogtaginstance.py | 20 +++++++++++++++++---
|
||||||
|
1 file changed, 17 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/ipaserver/install/dogtaginstance.py b/ipaserver/install/dogtaginstance.py
|
||||||
|
index 42c9db3fb..aa3baeb7c 100644
|
||||||
|
--- a/ipaserver/install/dogtaginstance.py
|
||||||
|
+++ b/ipaserver/install/dogtaginstance.py
|
||||||
|
@@ -308,11 +308,12 @@ class DogtagInstance(service.Service):
|
||||||
|
doc = server_xml.getroot()
|
||||||
|
|
||||||
|
# no AJP connector means no need to update anything
|
||||||
|
- connectors = doc.xpath('//Connector[@port="8009"]')
|
||||||
|
+ connectors = doc.xpath('//Connector[@protocol="AJP/1.3"]')
|
||||||
|
if len(connectors) == 0:
|
||||||
|
return
|
||||||
|
|
||||||
|
- # AJP connector is set on port 8009. Use non-greedy search to find it
|
||||||
|
+ # AJP protocol is at version 1.3. Assume there is only one as
|
||||||
|
+ # Dogtag only provisions one.
|
||||||
|
connector = connectors[0]
|
||||||
|
|
||||||
|
# Detect tomcat version and choose the right option name
|
||||||
|
@@ -331,11 +332,24 @@ class DogtagInstance(service.Service):
|
||||||
|
rewrite = False
|
||||||
|
else:
|
||||||
|
if oldattr in connector.attrib:
|
||||||
|
+ # Sufficiently new Dogtag versions (10.9.0-a2) handle the
|
||||||
|
+ # upgrade for us; we need only to ensure that we're not both
|
||||||
|
+ # attempting to upgrade server.xml at the same time.
|
||||||
|
+ # Hopefully this is guaranteed for us.
|
||||||
|
self.ajp_secret = connector.attrib[oldattr]
|
||||||
|
connector.attrib[secretattr] = self.ajp_secret
|
||||||
|
del connector.attrib[oldattr]
|
||||||
|
else:
|
||||||
|
- # Generate password, don't use special chars to not break XML
|
||||||
|
+ # Generate password, don't use special chars to not break XML.
|
||||||
|
+ #
|
||||||
|
+ # If we hit this case, pkispawn was run on an older Dogtag
|
||||||
|
+ # version and we're stuck migrating, choosing a password
|
||||||
|
+ # ourselves. Dogtag can't generate one randomly because a
|
||||||
|
+ # Dogtag administrator might've configured AJP and might
|
||||||
|
+ # not be using IPA.
|
||||||
|
+ #
|
||||||
|
+ # Newer Dogtag versions will generate a random password
|
||||||
|
+ # during pkispawn.
|
||||||
|
self.ajp_secret = ipautil.ipa_generate_password(special=None)
|
||||||
|
connector.attrib[secretattr] = self.ajp_secret
|
||||||
|
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
||||||
|
From 1e804bf19da4ee274e735fd49452d4df5d73a002 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alexander Scheel <ascheel@redhat.com>
|
||||||
|
Date: Wed, 17 Jun 2020 16:00:25 -0400
|
||||||
|
Subject: [PATCH] Configure PKI AJP Secret with 256-bit secret
|
||||||
|
|
||||||
|
By default, PKI's AJP secret is generated as a 75-bit password. By
|
||||||
|
generating it in IPA, we can guarantee the strength of the AJP secret.
|
||||||
|
It makes sense to use a stronger AJP secret because it typically
|
||||||
|
isn't rotated; access to AJP allows an attacker to impersonate an admin
|
||||||
|
while talking to PKI.
|
||||||
|
|
||||||
|
Fixes: https://pagure.io/freeipa/issue/8372
|
||||||
|
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1849146
|
||||||
|
Related: https://bugzilla.redhat.com/show_bug.cgi?id=1845447
|
||||||
|
Related: https://github.com/dogtagpki/pki/pull/437
|
||||||
|
|
||||||
|
Signed-off-by: Alexander Scheel <ascheel@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
---
|
||||||
|
install/share/ipaca_customize.ini | 1 +
|
||||||
|
install/share/ipaca_default.ini | 2 ++
|
||||||
|
ipaserver/install/dogtaginstance.py | 4 +++-
|
||||||
|
3 files changed, 6 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/install/share/ipaca_customize.ini b/install/share/ipaca_customize.ini
|
||||||
|
index 6d58579af..948734241 100644
|
||||||
|
--- a/install/share/ipaca_customize.ini
|
||||||
|
+++ b/install/share/ipaca_customize.ini
|
||||||
|
@@ -12,6 +12,7 @@
|
||||||
|
#
|
||||||
|
# Predefined variables
|
||||||
|
# - ipa_ca_subject
|
||||||
|
+# - ipa_ajp_secret
|
||||||
|
# - ipa_fqdn
|
||||||
|
# - ipa_subject_base
|
||||||
|
# - pki_admin_password
|
||||||
|
diff --git a/install/share/ipaca_default.ini b/install/share/ipaca_default.ini
|
||||||
|
index 2b9900286..a51256116 100644
|
||||||
|
--- a/install/share/ipaca_default.ini
|
||||||
|
+++ b/install/share/ipaca_default.ini
|
||||||
|
@@ -12,6 +12,7 @@ ipa_ca_pem_file=/etc/ipa/ca.crt
|
||||||
|
|
||||||
|
## dynamic values
|
||||||
|
# ipa_ca_subject=
|
||||||
|
+# ipa_ajp_secret=
|
||||||
|
# ipa_subject_base=
|
||||||
|
# ipa_fqdn=
|
||||||
|
# ipa_ocsp_uri=
|
||||||
|
@@ -66,6 +67,7 @@ pki_issuing_ca=%(pki_issuing_ca_uri)s
|
||||||
|
pki_replication_password=
|
||||||
|
|
||||||
|
pki_enable_proxy=True
|
||||||
|
+pki_ajp_secret=%(ipa_ajp_secret)s
|
||||||
|
pki_restart_configured_instance=False
|
||||||
|
pki_security_domain_hostname=%(ipa_fqdn)s
|
||||||
|
pki_security_domain_https_port=443
|
||||||
|
diff --git a/ipaserver/install/dogtaginstance.py b/ipaserver/install/dogtaginstance.py
|
||||||
|
index aa3baeb7c..361d80a8c 100644
|
||||||
|
--- a/ipaserver/install/dogtaginstance.py
|
||||||
|
+++ b/ipaserver/install/dogtaginstance.py
|
||||||
|
@@ -840,7 +840,9 @@ class PKIIniLoader:
|
||||||
|
pki_subsystem_type=subsystem.lower(),
|
||||||
|
home_dir=os.path.expanduser("~"),
|
||||||
|
# for softhsm2 testing
|
||||||
|
- softhsm2_so=paths.LIBSOFTHSM2_SO
|
||||||
|
+ softhsm2_so=paths.LIBSOFTHSM2_SO,
|
||||||
|
+ # Configure a more secure AJP password by default
|
||||||
|
+ ipa_ajp_secret=ipautil.ipa_generate_password(special=None)
|
||||||
|
)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
@ -1,193 +0,0 @@
|
|||||||
From 936e27f75961c67e619ecfa641e256ce80662d68 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Alexander Bokovoy <abokovoy@redhat.com>
|
|
||||||
Date: Feb 14 2020 07:24:58 +0000
|
|
||||||
Subject: adtrust: print DNS records for external DNS case after role is enabled
|
|
||||||
|
|
||||||
|
|
||||||
We cannot gather information about required DNS records before "ADTrust
|
|
||||||
Controller" role is enabled on this server. As result, we need to call
|
|
||||||
the step to add DNS records after the role was enabled.
|
|
||||||
|
|
||||||
Fixes: https://pagure.io/freeipa/issue/8192
|
|
||||||
Signed-off-by: Alexander Bokovoy <abokovoy@redhat.com>
|
|
||||||
Reviewed-By: Florence Blanc-Renaud <frenaud@redhat.com>
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
diff --git a/install/tools/ipa-adtrust-install.in b/install/tools/ipa-adtrust-install.in
|
|
||||||
index 1abfea9..7d94b71 100644
|
|
||||||
--- a/install/tools/ipa-adtrust-install.in
|
|
||||||
+++ b/install/tools/ipa-adtrust-install.in
|
|
||||||
@@ -214,7 +214,13 @@ def main():
|
|
||||||
|
|
||||||
# Enable configured services and update DNS SRV records
|
|
||||||
service.sync_services_state(api.env.host)
|
|
||||||
- api.Command.dns_update_system_records()
|
|
||||||
+
|
|
||||||
+ dns_help = adtrust.generate_dns_service_records_help(api)
|
|
||||||
+ if dns_help:
|
|
||||||
+ for line in dns_help:
|
|
||||||
+ service.print_msg(line, sys.stdout)
|
|
||||||
+ else:
|
|
||||||
+ api.Command.dns_update_system_records()
|
|
||||||
|
|
||||||
print("""
|
|
||||||
=============================================================================
|
|
||||||
diff --git a/ipaserver/install/adtrust.py b/ipaserver/install/adtrust.py
|
|
||||||
index 70c4359..6c14e84 100644
|
|
||||||
--- a/ipaserver/install/adtrust.py
|
|
||||||
+++ b/ipaserver/install/adtrust.py
|
|
||||||
@@ -26,6 +26,8 @@ from ipaserver.install import installutils
|
|
||||||
from ipaserver.install import adtrustinstance
|
|
||||||
from ipaserver.install import service
|
|
||||||
from ipaserver.install.plugins.adtrust import update_host_cifs_keytabs
|
|
||||||
+from ipaserver.install.bindinstance import dns_zone_exists
|
|
||||||
+from ipaserver.dns_data_management import IPASystemRecords
|
|
||||||
|
|
||||||
|
|
||||||
if six.PY3:
|
|
||||||
@@ -436,6 +438,41 @@ def install(standalone, options, fstore, api):
|
|
||||||
add_new_adtrust_agents(api, options)
|
|
||||||
|
|
||||||
|
|
||||||
+def generate_dns_service_records_help(api):
|
|
||||||
+ """
|
|
||||||
+ Return list of instructions to create DNS service records for Windows
|
|
||||||
+ if in case DNS is not enabled and the DNS zone is not managed by IPA.
|
|
||||||
+ In case IPA manages the DNS zone, nothing is returned.
|
|
||||||
+ """
|
|
||||||
+
|
|
||||||
+ zone = api.env.domain
|
|
||||||
+
|
|
||||||
+ err_msg = []
|
|
||||||
+
|
|
||||||
+ ret = api.Command['dns_is_enabled']()
|
|
||||||
+ if not ret['result']:
|
|
||||||
+ err_msg.append("DNS management was not enabled at install time.")
|
|
||||||
+ else:
|
|
||||||
+ if not dns_zone_exists(zone):
|
|
||||||
+ err_msg.append(
|
|
||||||
+ "DNS zone %s cannot be managed as it is not defined in "
|
|
||||||
+ "IPA" % zone)
|
|
||||||
+
|
|
||||||
+ if err_msg:
|
|
||||||
+ err_msg.append("Add the following service records to your DNS "
|
|
||||||
+ "server for DNS zone %s: " % zone)
|
|
||||||
+ system_records = IPASystemRecords(api, all_servers=True)
|
|
||||||
+ adtrust_records = system_records.get_base_records(
|
|
||||||
+ [api.env.host], ["AD trust controller"],
|
|
||||||
+ include_master_role=False, include_kerberos_realm=False)
|
|
||||||
+ for r_name, node in adtrust_records.items():
|
|
||||||
+ for rec in IPASystemRecords.records_list_from_node(r_name, node):
|
|
||||||
+ err_msg.append(rec)
|
|
||||||
+ return err_msg
|
|
||||||
+
|
|
||||||
+ return None
|
|
||||||
+
|
|
||||||
+
|
|
||||||
@group
|
|
||||||
class ADTrustInstallInterface(ServiceAdminInstallInterface):
|
|
||||||
"""
|
|
||||||
diff --git a/ipaserver/install/adtrustinstance.py b/ipaserver/install/adtrustinstance.py
|
|
||||||
index 8699d53..a59e85d 100644
|
|
||||||
--- a/ipaserver/install/adtrustinstance.py
|
|
||||||
+++ b/ipaserver/install/adtrustinstance.py
|
|
||||||
@@ -32,10 +32,8 @@ import socket
|
|
||||||
|
|
||||||
import six
|
|
||||||
|
|
||||||
-from ipaserver.dns_data_management import IPASystemRecords
|
|
||||||
from ipaserver.install import service
|
|
||||||
from ipaserver.install import installutils
|
|
||||||
-from ipaserver.install.bindinstance import dns_zone_exists
|
|
||||||
from ipaserver.install.replication import wait_for_task
|
|
||||||
from ipalib import errors, api
|
|
||||||
from ipalib.util import normalize_zone
|
|
||||||
@@ -586,43 +584,6 @@ class ADTRUSTInstance(service.Service):
|
|
||||||
logger.critical("Failed to remove old key for %s",
|
|
||||||
self.principal)
|
|
||||||
|
|
||||||
- def srv_rec(self, host, port, prio):
|
|
||||||
- return "%(prio)d 100 %(port)d %(host)s" % dict(host=host,prio=prio,port=port)
|
|
||||||
-
|
|
||||||
- def __add_dns_service_records(self):
|
|
||||||
- """
|
|
||||||
- Add DNS service records for Windows if DNS is enabled and the DNS zone
|
|
||||||
- is managed. If there are already service records for LDAP and Kerberos
|
|
||||||
- their values are used. Otherwise default values are used.
|
|
||||||
- """
|
|
||||||
-
|
|
||||||
- zone = api.env.domain
|
|
||||||
-
|
|
||||||
- err_msg = None
|
|
||||||
-
|
|
||||||
- ret = api.Command['dns_is_enabled']()
|
|
||||||
- if not ret['result']:
|
|
||||||
- err_msg = "DNS management was not enabled at install time."
|
|
||||||
- else:
|
|
||||||
- if not dns_zone_exists(zone):
|
|
||||||
- err_msg = (
|
|
||||||
- "DNS zone %s cannot be managed as it is not defined in "
|
|
||||||
- "IPA" % zone)
|
|
||||||
-
|
|
||||||
- if err_msg:
|
|
||||||
- self.print_msg(err_msg)
|
|
||||||
- self.print_msg("Add the following service records to your DNS " \
|
|
||||||
- "server for DNS zone %s: " % zone)
|
|
||||||
- system_records = IPASystemRecords(api, all_servers=True)
|
|
||||||
- adtrust_records = system_records.get_base_records(
|
|
||||||
- [self.fqdn], ["AD trust controller"],
|
|
||||||
- include_master_role=False, include_kerberos_realm=False)
|
|
||||||
- for r_name, node in adtrust_records.items():
|
|
||||||
- for rec in IPASystemRecords.records_list_from_node(r_name, node):
|
|
||||||
- self.print_msg(rec)
|
|
||||||
- else:
|
|
||||||
- api.Command.dns_update_system_records()
|
|
||||||
-
|
|
||||||
def __configure_selinux_for_smbd(self):
|
|
||||||
try:
|
|
||||||
tasks.set_selinux_booleans(constants.SELINUX_BOOLEAN_ADTRUST,
|
|
||||||
@@ -876,8 +837,6 @@ class ADTRUSTInstance(service.Service):
|
|
||||||
self.step("map BUILTIN\\Guests to nobody group",
|
|
||||||
self.__map_Guests_to_nobody)
|
|
||||||
self.step("configuring smbd to start on boot", self.__enable)
|
|
||||||
- self.step("adding special DNS service records", \
|
|
||||||
- self.__add_dns_service_records)
|
|
||||||
|
|
||||||
if self.enable_compat:
|
|
||||||
self.step("enabling trusted domains support for older clients via Schema Compatibility plugin",
|
|
||||||
diff --git a/ipaserver/install/server/install.py b/ipaserver/install/server/install.py
|
|
||||||
index 6b08b70..afce0d7 100644
|
|
||||||
--- a/ipaserver/install/server/install.py
|
|
||||||
+++ b/ipaserver/install/server/install.py
|
|
||||||
@@ -984,6 +984,12 @@ def install(installer):
|
|
||||||
service.enable_services(host_name)
|
|
||||||
api.Command.dns_update_system_records()
|
|
||||||
|
|
||||||
+ if options.setup_adtrust:
|
|
||||||
+ dns_help = adtrust.generate_dns_service_records_help(api)
|
|
||||||
+ if dns_help:
|
|
||||||
+ for line in dns_help:
|
|
||||||
+ service.print_msg(line, sys.stdout)
|
|
||||||
+
|
|
||||||
if not options.setup_dns:
|
|
||||||
# After DNS and AD trust are configured and services are
|
|
||||||
# enabled, create a dummy instance to dump DNS configuration.
|
|
||||||
diff --git a/ipaserver/install/server/replicainstall.py b/ipaserver/install/server/replicainstall.py
|
|
||||||
index 536f0db..71ea091 100644
|
|
||||||
--- a/ipaserver/install/server/replicainstall.py
|
|
||||||
+++ b/ipaserver/install/server/replicainstall.py
|
|
||||||
@@ -1351,6 +1351,12 @@ def install(installer):
|
|
||||||
# enabled-service case, also perform update in hidden replica case.
|
|
||||||
api.Command.dns_update_system_records()
|
|
||||||
|
|
||||||
+ if options.setup_adtrust:
|
|
||||||
+ dns_help = adtrust.generate_dns_service_records_help(api)
|
|
||||||
+ if dns_help:
|
|
||||||
+ for line in dns_help:
|
|
||||||
+ service.print_msg(line, sys.stdout)
|
|
||||||
+
|
|
||||||
ca_servers = find_providing_servers('CA', api.Backend.ldap2, api=api)
|
|
||||||
api.Backend.ldap2.disconnect()
|
|
||||||
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
|||||||
From 4db18be5467c0b8f7633b281c724f469f907e573 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Florence Blanc-Renaud <flo@redhat.com>
|
|
||||||
Date: Jan 13 2020 12:08:19 +0000
|
|
||||||
Subject: AD user without override receive InternalServerError with API
|
|
||||||
|
|
||||||
|
|
||||||
When ipa commands are used by an Active Directory user that
|
|
||||||
does not have any idoverride-user set, they return the
|
|
||||||
following error message which can be misleading:
|
|
||||||
$ kinit aduser@ADDOMAIN.COM
|
|
||||||
$ ipa ping
|
|
||||||
ipa: ERROR: cannot connect to 'https://master.ipa.com/ipa/json': Internal Server Error
|
|
||||||
|
|
||||||
The fix properly handles ACIError exception received when
|
|
||||||
creating the context, and now the following message can be seen:
|
|
||||||
|
|
||||||
$ kinit aduser@ADDOMAIN.COM
|
|
||||||
$ ipa ping
|
|
||||||
ipa: ERROR: cannot connect to 'https://master.ipa.com/ipa/json': Unauthorized
|
|
||||||
|
|
||||||
with the following log in /var/log/httpd/error_log:
|
|
||||||
ipa: INFO: 401 Unauthorized: Insufficient access: Invalid credentials
|
|
||||||
|
|
||||||
Fixes: https://pagure.io/freeipa/issue/8163
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
diff --git a/ipaserver/rpcserver.py b/ipaserver/rpcserver.py
|
|
||||||
index 0495557..194cbbc 100644
|
|
||||||
--- a/ipaserver/rpcserver.py
|
|
||||||
+++ b/ipaserver/rpcserver.py
|
|
||||||
@@ -694,7 +694,7 @@ class KerberosWSGIExecutioner(WSGIExecutioner, KerberosSession):
|
|
||||||
status = HTTP_STATUS_SUCCESS
|
|
||||||
response = status.encode('utf-8')
|
|
||||||
start_response(status, self.headers)
|
|
||||||
- return self.marshal(None, e)
|
|
||||||
+ return [self.marshal(None, e)]
|
|
||||||
finally:
|
|
||||||
destroy_context()
|
|
||||||
return response
|
|
||||||
|
|
@ -0,0 +1,167 @@
|
|||||||
|
From a090b429fda35c5a9c3cfb672ab42a5985d00ff9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
Date: Mon, 8 Jun 2020 19:27:30 +0200
|
||||||
|
Subject: [PATCH] baseuser: fix ipanthomedirectorydrive option name
|
||||||
|
|
||||||
|
It should be ipanthomedirectorydrive and not ipanthomedirectoryrive.
|
||||||
|
|
||||||
|
This fixes showing the field in Web UI and also should fix CLI as it
|
||||||
|
probably never worked.
|
||||||
|
|
||||||
|
Signed-off-by: Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
---
|
||||||
|
API.txt | 8 ++++----
|
||||||
|
ipaserver/plugins/baseuser.py | 2 +-
|
||||||
|
2 files changed, 5 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/API.txt b/API.txt
|
||||||
|
index 5354a33a0..300b3d9b1 100644
|
||||||
|
--- a/API.txt
|
||||||
|
+++ b/API.txt
|
||||||
|
@@ -5085,7 +5085,7 @@ option: Str('in_role*', cli_name='in_roles')
|
||||||
|
option: Str('in_sudorule*', cli_name='in_sudorules')
|
||||||
|
option: Str('initials?', autofill=False)
|
||||||
|
option: Str('ipanthomedirectory?', autofill=False, cli_name='smb_home_dir')
|
||||||
|
-option: StrEnum('ipanthomedirectoryrive?', autofill=False, cli_name='smb_home_drive', values=[u'A:', u'B:', u'C:', u'D:', u'E:', u'F:', u'G:', u'H:', u'I:', u'J:', u'K:', u'L:', u'M:', u'N:', u'O:', u'P:', u'Q:', u'R:', u'S:', u'T:', u'U:', u'V:', u'W:', u'X:', u'Y:', u'Z:'])
|
||||||
|
+option: StrEnum('ipanthomedirectorydrive?', autofill=False, cli_name='smb_home_drive', values=[u'A:', u'B:', u'C:', u'D:', u'E:', u'F:', u'G:', u'H:', u'I:', u'J:', u'K:', u'L:', u'M:', u'N:', u'O:', u'P:', u'Q:', u'R:', u'S:', u'T:', u'U:', u'V:', u'W:', u'X:', u'Y:', u'Z:'])
|
||||||
|
option: Str('ipantlogonscript?', autofill=False, cli_name='smb_logon_script')
|
||||||
|
option: Str('ipantprofilepath?', autofill=False, cli_name='smb_profile_path')
|
||||||
|
option: Str('ipatokenradiusconfiglink?', autofill=False, cli_name='radius')
|
||||||
|
@@ -5147,7 +5147,7 @@ option: Str('givenname?', autofill=False, cli_name='first')
|
||||||
|
option: Str('homedirectory?', autofill=False, cli_name='homedir')
|
||||||
|
option: Str('initials?', autofill=False)
|
||||||
|
option: Str('ipanthomedirectory?', autofill=False, cli_name='smb_home_dir')
|
||||||
|
-option: StrEnum('ipanthomedirectoryrive?', autofill=False, cli_name='smb_home_drive', values=[u'A:', u'B:', u'C:', u'D:', u'E:', u'F:', u'G:', u'H:', u'I:', u'J:', u'K:', u'L:', u'M:', u'N:', u'O:', u'P:', u'Q:', u'R:', u'S:', u'T:', u'U:', u'V:', u'W:', u'X:', u'Y:', u'Z:'])
|
||||||
|
+option: StrEnum('ipanthomedirectorydrive?', autofill=False, cli_name='smb_home_drive', values=[u'A:', u'B:', u'C:', u'D:', u'E:', u'F:', u'G:', u'H:', u'I:', u'J:', u'K:', u'L:', u'M:', u'N:', u'O:', u'P:', u'Q:', u'R:', u'S:', u'T:', u'U:', u'V:', u'W:', u'X:', u'Y:', u'Z:'])
|
||||||
|
option: Str('ipantlogonscript?', autofill=False, cli_name='smb_logon_script')
|
||||||
|
option: Str('ipantprofilepath?', autofill=False, cli_name='smb_profile_path')
|
||||||
|
option: Str('ipasshpubkey*', autofill=False, cli_name='sshpubkey')
|
||||||
|
@@ -6185,7 +6185,7 @@ option: Str('in_role*', cli_name='in_roles')
|
||||||
|
option: Str('in_sudorule*', cli_name='in_sudorules')
|
||||||
|
option: Str('initials?', autofill=False)
|
||||||
|
option: Str('ipanthomedirectory?', autofill=False, cli_name='smb_home_dir')
|
||||||
|
-option: StrEnum('ipanthomedirectoryrive?', autofill=False, cli_name='smb_home_drive', values=[u'A:', u'B:', u'C:', u'D:', u'E:', u'F:', u'G:', u'H:', u'I:', u'J:', u'K:', u'L:', u'M:', u'N:', u'O:', u'P:', u'Q:', u'R:', u'S:', u'T:', u'U:', u'V:', u'W:', u'X:', u'Y:', u'Z:'])
|
||||||
|
+option: StrEnum('ipanthomedirectorydrive?', autofill=False, cli_name='smb_home_drive', values=[u'A:', u'B:', u'C:', u'D:', u'E:', u'F:', u'G:', u'H:', u'I:', u'J:', u'K:', u'L:', u'M:', u'N:', u'O:', u'P:', u'Q:', u'R:', u'S:', u'T:', u'U:', u'V:', u'W:', u'X:', u'Y:', u'Z:'])
|
||||||
|
option: Str('ipantlogonscript?', autofill=False, cli_name='smb_logon_script')
|
||||||
|
option: Str('ipantprofilepath?', autofill=False, cli_name='smb_profile_path')
|
||||||
|
option: Str('ipatokenradiusconfiglink?', autofill=False, cli_name='radius')
|
||||||
|
@@ -6250,7 +6250,7 @@ option: Str('givenname?', autofill=False, cli_name='first')
|
||||||
|
option: Str('homedirectory?', autofill=False, cli_name='homedir')
|
||||||
|
option: Str('initials?', autofill=False)
|
||||||
|
option: Str('ipanthomedirectory?', autofill=False, cli_name='smb_home_dir')
|
||||||
|
-option: StrEnum('ipanthomedirectoryrive?', autofill=False, cli_name='smb_home_drive', values=[u'A:', u'B:', u'C:', u'D:', u'E:', u'F:', u'G:', u'H:', u'I:', u'J:', u'K:', u'L:', u'M:', u'N:', u'O:', u'P:', u'Q:', u'R:', u'S:', u'T:', u'U:', u'V:', u'W:', u'X:', u'Y:', u'Z:'])
|
||||||
|
+option: StrEnum('ipanthomedirectorydrive?', autofill=False, cli_name='smb_home_drive', values=[u'A:', u'B:', u'C:', u'D:', u'E:', u'F:', u'G:', u'H:', u'I:', u'J:', u'K:', u'L:', u'M:', u'N:', u'O:', u'P:', u'Q:', u'R:', u'S:', u'T:', u'U:', u'V:', u'W:', u'X:', u'Y:', u'Z:'])
|
||||||
|
option: Str('ipantlogonscript?', autofill=False, cli_name='smb_logon_script')
|
||||||
|
option: Str('ipantprofilepath?', autofill=False, cli_name='smb_profile_path')
|
||||||
|
option: Str('ipasshpubkey*', autofill=False, cli_name='sshpubkey')
|
||||||
|
diff --git a/ipaserver/plugins/baseuser.py b/ipaserver/plugins/baseuser.py
|
||||||
|
index a0ed65874..e1b7763f0 100644
|
||||||
|
--- a/ipaserver/plugins/baseuser.py
|
||||||
|
+++ b/ipaserver/plugins/baseuser.py
|
||||||
|
@@ -420,7 +420,7 @@ class baseuser(LDAPObject):
|
||||||
|
label=_('SMB Home Directory'),
|
||||||
|
flags=['no_create'],
|
||||||
|
),
|
||||||
|
- StrEnum('ipanthomedirectoryrive?',
|
||||||
|
+ StrEnum('ipanthomedirectorydrive?',
|
||||||
|
cli_name='smb_home_drive',
|
||||||
|
label=_('SMB Home Directory Drive'),
|
||||||
|
flags=['no_create'],
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
||||||
|
From 691b3cddb275821630f443f22706fa75e7c7a5c8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
Date: Mon, 8 Jun 2020 19:11:33 +0200
|
||||||
|
Subject: [PATCH] webui: hide user attributes for SMB services section if empty
|
||||||
|
|
||||||
|
This section should be hidded if user object hasn't ipantuserattrs
|
||||||
|
object class. I.e. when trusts are not enabled.
|
||||||
|
|
||||||
|
Web UI framework already supports hidding of sections if the
|
||||||
|
section contains no visible field. So to achieve it we simply needs
|
||||||
|
to hide the fields. Given that attributelevelrights
|
||||||
|
contains rights only for attributes of current object classes, all
|
||||||
|
of these are regarded as not writable.
|
||||||
|
|
||||||
|
We can leverage feature of input_widget that it gets hidden
|
||||||
|
when the attribute is not writable and has no value and widget's
|
||||||
|
"hidden_if_empty" is set to true. Thus doing it here.
|
||||||
|
|
||||||
|
For this to work, it is also required to fix an issue with
|
||||||
|
"ipanthomedirectorydrive" which is optional (in API) but Web UI
|
||||||
|
doesn't offer "empty" ("") value. Adding it here.
|
||||||
|
|
||||||
|
fixes: https://pagure.io/freeipa/issue/8336
|
||||||
|
|
||||||
|
Signed-off-by: Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
Reviewed-By: Serhii Tsymbaliuk <stsymbal@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
---
|
||||||
|
install/ui/src/freeipa/user.js | 20 +++++++++++---------
|
||||||
|
1 file changed, 11 insertions(+), 9 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/install/ui/src/freeipa/user.js b/install/ui/src/freeipa/user.js
|
||||||
|
index fb626f2a1..8f1f5cd85 100644
|
||||||
|
--- a/install/ui/src/freeipa/user.js
|
||||||
|
+++ b/install/ui/src/freeipa/user.js
|
||||||
|
@@ -367,36 +367,39 @@ return {
|
||||||
|
{
|
||||||
|
name: 'smb_attributes',
|
||||||
|
label: '@i18n:objects.smb_attributes.title',
|
||||||
|
- show_cond: ['oc_ipantuserattrs'],
|
||||||
|
fields: [{
|
||||||
|
name: 'ipantlogonscript',
|
||||||
|
tooltip: {
|
||||||
|
title: '@i18n:objects.smb_attributes.ipantlogonscript_tooltip'
|
||||||
|
- }
|
||||||
|
+ },
|
||||||
|
+ hidden_if_empty: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'ipantprofilepath',
|
||||||
|
tooltip: {
|
||||||
|
title: '@i18n:objects.smb_attributes.ipantprofilepath_tooltip'
|
||||||
|
- }
|
||||||
|
+ },
|
||||||
|
+ hidden_if_empty: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'ipanthomedirectory',
|
||||||
|
tooltip: {
|
||||||
|
title: '@i18n:objects.smb_attributes.ipanthomedirectory_tooltip'
|
||||||
|
- }
|
||||||
|
+ },
|
||||||
|
+ hidden_if_empty: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'ipanthomedirectorydrive',
|
||||||
|
$type: 'select',
|
||||||
|
options: IPA.create_options([
|
||||||
|
- 'A:', 'B:', 'C:', 'D:', 'E:', 'F:', 'G:', 'H:', 'I:',
|
||||||
|
- 'J:', 'K:', 'L:', 'M:', 'N:', 'O:', 'P:', 'Q:', 'R:',
|
||||||
|
- 'S:', 'T:', 'U:', 'V:', 'W:', 'X:', 'Y:', 'Z:'
|
||||||
|
+ '', 'A:', 'B:', 'C:', 'D:', 'E:', 'F:', 'G:', 'H:',
|
||||||
|
+ 'I:', 'J:', 'K:', 'L:', 'M:', 'N:', 'O:', 'P:', 'Q:',
|
||||||
|
+ 'R:', 'S:', 'T:', 'U:', 'V:', 'W:', 'X:', 'Y:', 'Z:'
|
||||||
|
]),
|
||||||
|
tooltip: {
|
||||||
|
title: '@i18n:objects.smb_attributes.ipanthomedirectorydrive_tooltip'
|
||||||
|
- }
|
||||||
|
+ },
|
||||||
|
+ hidden_if_empty: true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
@@ -482,7 +485,6 @@ return {
|
||||||
|
IPA.user.self_service_other_user_evaluator,
|
||||||
|
IPA.user.preserved_user_evaluator,
|
||||||
|
IPA.user.is_locked_evaluator,
|
||||||
|
- IPA.object_class_evaluator,
|
||||||
|
IPA.cert.certificate_evaluator
|
||||||
|
],
|
||||||
|
summary_conditions: [
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
@ -1,82 +0,0 @@
|
|||||||
From 6332aed9ba67e2ee759a9d988ba92139486469d4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: François Cami <fcami@redhat.com>
|
|
||||||
Date: Feb 14 2020 16:38:19 +0000
|
|
||||||
Subject: ipa-client-automount: call save_domain() for each change
|
|
||||||
|
|
||||||
|
|
||||||
Call sssdconfig.save_domain(domain) after each configuration
|
|
||||||
change during ipa-client-automount --uninstall.
|
|
||||||
|
|
||||||
Previously, sssdconfig.save_domain(domain) was called only
|
|
||||||
outside of the domain detection loop which changed the domain
|
|
||||||
configuration. This introduced issues as this method's behavior
|
|
||||||
is only consistent when configuration items are removed in a
|
|
||||||
certain order: https://pagure.io/SSSD/sssd/issue/4149
|
|
||||||
Plus, it is more correct to save the configuration from within
|
|
||||||
the loop if ever we support multiple domains.
|
|
||||||
|
|
||||||
Fixes: https://pagure.io/freeipa/issue/8190
|
|
||||||
Signed-off-by: François Cami <fcami@redhat.com>
|
|
||||||
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
diff --git a/ipaclient/install/ipa_client_automount.py b/ipaclient/install/ipa_client_automount.py
|
|
||||||
index 3ef257a..fdf974d 100644
|
|
||||||
--- a/ipaclient/install/ipa_client_automount.py
|
|
||||||
+++ b/ipaclient/install/ipa_client_automount.py
|
|
||||||
@@ -355,9 +355,10 @@ def uninstall(fstore, statestore):
|
|
||||||
continue
|
|
||||||
if provider == "ipa":
|
|
||||||
domain.remove_option('ipa_automount_location')
|
|
||||||
+ sssdconfig.save_domain(domain)
|
|
||||||
domain.remove_provider('autofs')
|
|
||||||
+ sssdconfig.save_domain(domain)
|
|
||||||
break
|
|
||||||
- sssdconfig.save_domain(domain)
|
|
||||||
sssdconfig.write(paths.SSSD_CONF)
|
|
||||||
sssd = services.service('sssd', api)
|
|
||||||
sssd.restart()
|
|
||||||
|
|
||||||
From 7ae804c726970ae467a7f76efa21bae40405551d Mon Sep 17 00:00:00 2001
|
|
||||||
From: François Cami <fcami@redhat.com>
|
|
||||||
Date: Feb 14 2020 16:38:19 +0000
|
|
||||||
Subject: ipatests: make sure ipa-client-automount reverts sssd.conf
|
|
||||||
|
|
||||||
|
|
||||||
Due to https://pagure.io/SSSD/sssd/issue/4149 ipa-client-automount
|
|
||||||
fails to remove the ipa_automount_location entry from sssd.conf.
|
|
||||||
Test that autofs_provider and ipa_automount_location are removed.
|
|
||||||
|
|
||||||
Fixes: https://pagure.io/freeipa/issue/8190
|
|
||||||
Signed-off-by: François Cami <fcami@redhat.com>
|
|
||||||
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
diff --git a/ipatests/test_integration/test_nfs.py b/ipatests/test_integration/test_nfs.py
|
|
||||||
index 7d29836..532dd61 100644
|
|
||||||
--- a/ipatests/test_integration/test_nfs.py
|
|
||||||
+++ b/ipatests/test_integration/test_nfs.py
|
|
||||||
@@ -332,6 +332,20 @@ class TestIpaClientAutomountFileRestore(IntegrationTest):
|
|
||||||
"ipa-client-automount", "--uninstall", "-U"
|
|
||||||
])
|
|
||||||
|
|
||||||
+ if not no_sssd:
|
|
||||||
+ # https://pagure.io/freeipa/issue/8190
|
|
||||||
+ # check that no ipa_automount_location is left in sssd.conf
|
|
||||||
+ # also check for autofs_provider for good measure
|
|
||||||
+ grep_automount_in_sssdconf_cmd = \
|
|
||||||
+ "egrep ipa_automount_location\\|autofs_provider " \
|
|
||||||
+ "/etc/sssd/sssd.conf"
|
|
||||||
+ cmd = self.clients[0].run_command(
|
|
||||||
+ grep_automount_in_sssdconf_cmd, raiseonerr=False
|
|
||||||
+ )
|
|
||||||
+ assert cmd.returncode == 1, \
|
|
||||||
+ "PG8190 regression found: ipa_automount_location still " \
|
|
||||||
+ "present in sssd.conf"
|
|
||||||
+
|
|
||||||
cmd = self.clients[0].run_command(grep_automount_command)
|
|
||||||
assert cmd.stdout_text.split() == after_ipa_client_install
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,93 @@
|
|||||||
|
From 42dd1628a1211363c860917e474ecc5b9c1fdb84 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
Date: Thu, 2 Jul 2020 15:50:00 +0300
|
||||||
|
Subject: [PATCH] selinux: allow oddjobd to set up ipa_helper_t context for
|
||||||
|
execution
|
||||||
|
|
||||||
|
On Fedora 32+ and RHEL 8.3.0+ execution of ipa_helper_t context requires
|
||||||
|
SELinux policy permission to use 'noatsecure'. This comes most likely
|
||||||
|
from execve() setup by glibc.
|
||||||
|
|
||||||
|
Add SELinux interface ipa_helper_noatsecure() that can be called by
|
||||||
|
oddjob's SELinux policy definition.
|
||||||
|
|
||||||
|
In addition, if ipa_helper_t runs ipa-getkeytab, libkrb5 will attempt to
|
||||||
|
access SELinux configuration and produce AVC for that. Allow reading
|
||||||
|
general userspace SELinux configuration.
|
||||||
|
|
||||||
|
Fixes: https://pagure.io/freeipa/issue/8395
|
||||||
|
Signed-off-by: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
Reviewed-By: Christian Heimes <cheimes@redhat.com>
|
||||||
|
---
|
||||||
|
selinux/ipa.if | 18 ++++++++++++++++++
|
||||||
|
selinux/ipa.te | 1 +
|
||||||
|
2 files changed, 19 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/selinux/ipa.if b/selinux/ipa.if
|
||||||
|
index ea971b8fa..783db8b78 100644
|
||||||
|
--- a/selinux/ipa.if
|
||||||
|
+++ b/selinux/ipa.if
|
||||||
|
@@ -419,3 +419,21 @@ ifndef(`dirsrv_systemctl',`
|
||||||
|
ps_process_pattern($1, dirsrv_t)
|
||||||
|
')
|
||||||
|
')
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+########################################
|
||||||
|
+## <summary>
|
||||||
|
+## Allow ipa_helper noatsecure
|
||||||
|
+## </summary>
|
||||||
|
+## <param name="domain">
|
||||||
|
+## <summary>
|
||||||
|
+## Domain allowed access.
|
||||||
|
+## </summary>
|
||||||
|
+## </param>
|
||||||
|
+#
|
||||||
|
+interface(`ipa_helper_noatsecure',`
|
||||||
|
+ gen_require(`
|
||||||
|
+ type ipa_helper_t;
|
||||||
|
+ ')
|
||||||
|
+ allow $1 ipa_helper_t:process { noatsecure };
|
||||||
|
+')
|
||||||
|
diff --git a/selinux/ipa.te b/selinux/ipa.te
|
||||||
|
index 587e5e585..383979094 100644
|
||||||
|
--- a/selinux/ipa.te
|
||||||
|
+++ b/selinux/ipa.te
|
||||||
|
@@ -115,6 +115,7 @@ optional_policy(`
|
||||||
|
|
||||||
|
|
||||||
|
allow ipa_helper_t self:capability { net_admin dac_read_search dac_override chown };
|
||||||
|
+seutil_read_config(ipa_helper_t);
|
||||||
|
|
||||||
|
#kernel bug
|
||||||
|
dontaudit ipa_helper_t self:capability2 block_suspend;
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
||||||
|
From 0d70addbbf2a99e7398a518bc98d5fe109469bb5 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
Date: Fri, 3 Jul 2020 17:20:49 +0300
|
||||||
|
Subject: [PATCH] selinux: support running ipa-custodia with PrivateTmp=yes
|
||||||
|
|
||||||
|
Related: https://pagure.io/freeipa/issue/8395
|
||||||
|
Signed-off-by: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
Reviewed-By: Christian Heimes <cheimes@redhat.com>
|
||||||
|
---
|
||||||
|
selinux/ipa.te | 4 ++++
|
||||||
|
1 file changed, 4 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/selinux/ipa.te b/selinux/ipa.te
|
||||||
|
index 383979094..a3381217a 100644
|
||||||
|
--- a/selinux/ipa.te
|
||||||
|
+++ b/selinux/ipa.te
|
||||||
|
@@ -390,3 +390,7 @@ optional_policy(`
|
||||||
|
sssd_search_lib(ipa_custodia_t)
|
||||||
|
sssd_stream_connect(ipa_custodia_t)
|
||||||
|
')
|
||||||
|
+
|
||||||
|
+optional_policy(`
|
||||||
|
+ systemd_private_tmp(ipa_custodia_tmp_t)
|
||||||
|
+')
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
@ -0,0 +1,180 @@
|
|||||||
|
From 128500198d3782a76616cf1d971d5aeb17e8c1da Mon Sep 17 00:00:00 2001
|
||||||
|
From: Fraser Tweedale <ftweedal@redhat.com>
|
||||||
|
Date: Thu, 11 Jun 2020 22:42:38 +1000
|
||||||
|
Subject: [PATCH] fix iPAddress cert issuance for >1 host/service
|
||||||
|
|
||||||
|
The 'cert_request' command accumulates DNS names from the CSR,
|
||||||
|
before checking that all IP addresses in the CSR are reachable from
|
||||||
|
those DNS names. Before adding a DNS name to the set, we check that
|
||||||
|
that it corresponds to the FQDN of a known host/service principal
|
||||||
|
(including principal aliases). When a DNS name maps to a
|
||||||
|
"alternative" principal (i.e. not the one given via the 'principal'
|
||||||
|
argument), this check was not being performed correctly.
|
||||||
|
Specifically, we were looking for the 'krbprincipalname' field on
|
||||||
|
the RPC response object directly, instead of its 'result' field.
|
||||||
|
|
||||||
|
To resolve the issue, dereference the RPC response to its 'result'
|
||||||
|
field before invoking the '_dns_name_matches_principal' subroutine.
|
||||||
|
|
||||||
|
Fixes: https://pagure.io/freeipa/issue/8368
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
---
|
||||||
|
ipaserver/plugins/cert.py | 6 +-
|
||||||
|
.../test_cert_request_ip_address.py | 62 +++++++++++++++++--
|
||||||
|
2 files changed, 61 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/ipaserver/plugins/cert.py b/ipaserver/plugins/cert.py
|
||||||
|
index d353bc3ea..fe7ea34f5 100644
|
||||||
|
--- a/ipaserver/plugins/cert.py
|
||||||
|
+++ b/ipaserver/plugins/cert.py
|
||||||
|
@@ -827,13 +827,13 @@ class cert_request(Create, BaseCertMethod, VirtualCommand):
|
||||||
|
try:
|
||||||
|
if principal_type == HOST:
|
||||||
|
alt_principal_obj = api.Command['host_show'](
|
||||||
|
- name, all=True)
|
||||||
|
+ name, all=True)['result']
|
||||||
|
elif principal_type == KRBTGT:
|
||||||
|
alt_principal = kerberos.Principal(
|
||||||
|
(u'host', name), principal.realm)
|
||||||
|
elif principal_type == SERVICE:
|
||||||
|
alt_principal_obj = api.Command['service_show'](
|
||||||
|
- alt_principal, all=True)
|
||||||
|
+ alt_principal, all=True)['result']
|
||||||
|
except errors.NotFound:
|
||||||
|
# We don't want to issue any certificates referencing
|
||||||
|
# machines we don't know about. Nothing is stored in this
|
||||||
|
@@ -866,7 +866,7 @@ class cert_request(Create, BaseCertMethod, VirtualCommand):
|
||||||
|
pass
|
||||||
|
|
||||||
|
# Now check write access and caacl
|
||||||
|
- altdn = alt_principal_obj['result']['dn']
|
||||||
|
+ altdn = alt_principal_obj['dn']
|
||||||
|
if not ldap.can_write(altdn, "usercertificate"):
|
||||||
|
raise errors.ACIError(info=_(
|
||||||
|
"Insufficient privilege to create a certificate "
|
||||||
|
diff --git a/ipatests/test_xmlrpc/test_cert_request_ip_address.py b/ipatests/test_xmlrpc/test_cert_request_ip_address.py
|
||||||
|
index bf4de05bf..c0475d30d 100644
|
||||||
|
--- a/ipatests/test_xmlrpc/test_cert_request_ip_address.py
|
||||||
|
+++ b/ipatests/test_xmlrpc/test_cert_request_ip_address.py
|
||||||
|
@@ -28,10 +28,16 @@ from ipatests.test_xmlrpc.tracker.host_plugin import HostTracker
|
||||||
|
from ipatests.test_xmlrpc.tracker.user_plugin import UserTracker
|
||||||
|
from ipatests.test_xmlrpc.xmlrpc_test import XMLRPC_test
|
||||||
|
|
||||||
|
-host_fqdn = f'iptest.{api.env.domain}'
|
||||||
|
+host_shortname = 'iptest'
|
||||||
|
+host_fqdn = f'{host_shortname}.{api.env.domain}'
|
||||||
|
host_princ = f'host/{host_fqdn}'
|
||||||
|
host_ptr = f'{host_fqdn}.'
|
||||||
|
|
||||||
|
+host2_shortname = 'iptest2'
|
||||||
|
+host2_fqdn = f'{host2_shortname}.{api.env.domain}'
|
||||||
|
+host2_princ = f'host/{host2_fqdn}'
|
||||||
|
+host2_ptr = f'{host2_fqdn}.'
|
||||||
|
+
|
||||||
|
other_fqdn = f'other.{api.env.domain}'
|
||||||
|
other_ptr = f'{other_fqdn}.'
|
||||||
|
|
||||||
|
@@ -39,6 +45,10 @@ ipv4_address = '169.254.0.42'
|
||||||
|
ipv4_revzone_s = '0.254.169.in-addr.arpa.'
|
||||||
|
ipv4_revrec_s = '42'
|
||||||
|
|
||||||
|
+host2_ipv4_address = '169.254.0.43'
|
||||||
|
+host2_ipv4_revzone_s = '0.254.169.in-addr.arpa.'
|
||||||
|
+host2_ipv4_revrec_s = '43'
|
||||||
|
+
|
||||||
|
ipv6_address = 'fe80::8f18:bdab:4299:95fa'
|
||||||
|
ipv6_revzone_s = '0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa.'
|
||||||
|
ipv6_revrec_s = 'a.f.5.9.9.9.2.4.b.a.d.b.8.1.f.8'
|
||||||
|
@@ -46,7 +56,13 @@ ipv6_revrec_s = 'a.f.5.9.9.9.2.4.b.a.d.b.8.1.f.8'
|
||||||
|
|
||||||
|
@pytest.fixture(scope='class')
|
||||||
|
def host(request, xmlrpc_setup):
|
||||||
|
- tr = HostTracker('iptest')
|
||||||
|
+ tr = HostTracker(host_shortname)
|
||||||
|
+ return tr.make_fixture(request)
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+@pytest.fixture(scope='class')
|
||||||
|
+def host2(request, xmlrpc_setup):
|
||||||
|
+ tr = HostTracker(host2_shortname)
|
||||||
|
return tr.make_fixture(request)
|
||||||
|
|
||||||
|
|
||||||
|
@@ -88,6 +104,12 @@ def ipv6_revzone(host):
|
||||||
|
yield from _zone_setup(host, ipv6_revzone_s)
|
||||||
|
|
||||||
|
|
||||||
|
+@pytest.fixture(scope='class')
|
||||||
|
+def host2_ipv4_ptr(host2, ipv4_revzone):
|
||||||
|
+ yield from _record_setup(
|
||||||
|
+ host2, ipv4_revzone, host2_ipv4_revrec_s, ptrrecord=host2_ptr)
|
||||||
|
+
|
||||||
|
+
|
||||||
|
@pytest.fixture(scope='class')
|
||||||
|
def ipv4_ptr(host, ipv4_revzone):
|
||||||
|
yield from _record_setup(
|
||||||
|
@@ -100,16 +122,22 @@ def ipv6_ptr(host, ipv6_revzone):
|
||||||
|
host, ipv6_revzone, ipv6_revrec_s, ptrrecord=host_ptr)
|
||||||
|
|
||||||
|
|
||||||
|
+@pytest.fixture(scope='class')
|
||||||
|
+def host2_ipv4_a(host2):
|
||||||
|
+ yield from _record_setup(
|
||||||
|
+ host2, api.env.domain, host2_shortname, arecord=host2_ipv4_address)
|
||||||
|
+
|
||||||
|
+
|
||||||
|
@pytest.fixture(scope='class')
|
||||||
|
def ipv4_a(host):
|
||||||
|
yield from _record_setup(
|
||||||
|
- host, api.env.domain, 'iptest', arecord=ipv4_address)
|
||||||
|
+ host, api.env.domain, host_shortname, arecord=ipv4_address)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope='class')
|
||||||
|
def ipv6_aaaa(host):
|
||||||
|
yield from _record_setup(
|
||||||
|
- host, api.env.domain, 'iptest', aaaarecord=ipv6_address)
|
||||||
|
+ host, api.env.domain, host_shortname, aaaarecord=ipv6_address)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope='class')
|
||||||
|
@@ -210,6 +238,12 @@ csr_cname2 = csr([
|
||||||
|
x509.DNSName(f'cname2.{api.env.domain}'),
|
||||||
|
x509.IPAddress(ipaddress.ip_address(ipv4_address)),
|
||||||
|
])
|
||||||
|
+csr_two_dnsname_two_ip = csr([
|
||||||
|
+ x509.DNSName(host_fqdn),
|
||||||
|
+ x509.IPAddress(ipaddress.ip_address(ipv4_address)),
|
||||||
|
+ x509.DNSName(host2_fqdn),
|
||||||
|
+ x509.IPAddress(ipaddress.ip_address(host2_ipv4_address)),
|
||||||
|
+])
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
@@ -449,3 +483,23 @@ class TestIPAddressCNAME(XMLRPC_test):
|
||||||
|
def test_two_levels(self, host, csr_cname2):
|
||||||
|
with pytest.raises(errors.ValidationError, match=PAT_FWD):
|
||||||
|
host.run_command('cert_request', csr_cname2, principal=host_princ)
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+@pytest.mark.tier1
|
||||||
|
+class TestTwoHostsTwoIPAddresses(XMLRPC_test):
|
||||||
|
+ """
|
||||||
|
+ Test certificate issuance with CSR containing two hosts
|
||||||
|
+ and two IP addresses (one for each host).
|
||||||
|
+
|
||||||
|
+ """
|
||||||
|
+ def test_host_exists(
|
||||||
|
+ self, host, host2, ipv4_a, ipv4_ptr, host2_ipv4_a, host2_ipv4_ptr,
|
||||||
|
+ ):
|
||||||
|
+ # for convenience, this test also establishes the DNS
|
||||||
|
+ # record fixtures, which have class scope
|
||||||
|
+ host.ensure_exists()
|
||||||
|
+ host2.ensure_exists()
|
||||||
|
+
|
||||||
|
+ def test_issuance(self, host, csr_two_dnsname_two_ip):
|
||||||
|
+ host.run_command(
|
||||||
|
+ 'cert_request', csr_two_dnsname_two_ip, principal=host_princ)
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
@ -1,62 +0,0 @@
|
|||||||
From 14dbf04148c6284b176eca34aa70df4bef09b857 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Alexander Bokovoy <abokovoy@redhat.com>
|
|
||||||
Date: Feb 12 2020 14:16:42 +0000
|
|
||||||
Subject: install/updates: move external members past schema compat update
|
|
||||||
|
|
||||||
|
|
||||||
There is an ordering discrepancy because the base compat tree
|
|
||||||
configuration is in install/updates/80-schema_compat.update so it is ran
|
|
||||||
after 50-externalmembers.update. And since at that point
|
|
||||||
cn=groups,cn=Schema ... does not exist yet, external members
|
|
||||||
configuration is not applied.
|
|
||||||
|
|
||||||
Move it around to make sure it is applied after Schema Compatibility
|
|
||||||
plugin configuration is created.
|
|
||||||
|
|
||||||
Fixes: https://pagure.io/freeipa/issue/8193
|
|
||||||
Signed-off-by: Alexander Bokovoy <abokovoy@redhat.com>
|
|
||||||
Reviewed-By: Florence Blanc-Renaud <flo@redhat.com>
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
diff --git a/install/updates/50-externalmembers.update b/install/updates/50-externalmembers.update
|
|
||||||
deleted file mode 100644
|
|
||||||
index 6b9c5dd..0000000
|
|
||||||
--- a/install/updates/50-externalmembers.update
|
|
||||||
+++ /dev/null
|
|
||||||
@@ -1,3 +0,0 @@
|
|
||||||
-dn: cn=groups,cn=Schema Compatibility,cn=plugins,cn=config
|
|
||||||
-addifexist: schema-compat-entry-attribute: ipaexternalmember=%deref_r("member","ipaexternalmember")
|
|
||||||
-addifexist: schema-compat-entry-attribute: objectclass=ipaexternalgroup
|
|
||||||
diff --git a/install/updates/81-externalmembers.update b/install/updates/81-externalmembers.update
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..6b9c5dd
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/install/updates/81-externalmembers.update
|
|
||||||
@@ -0,0 +1,3 @@
|
|
||||||
+dn: cn=groups,cn=Schema Compatibility,cn=plugins,cn=config
|
|
||||||
+addifexist: schema-compat-entry-attribute: ipaexternalmember=%deref_r("member","ipaexternalmember")
|
|
||||||
+addifexist: schema-compat-entry-attribute: objectclass=ipaexternalgroup
|
|
||||||
diff --git a/install/updates/Makefile.am b/install/updates/Makefile.am
|
|
||||||
index 68facba..8a4d9cc 100644
|
|
||||||
--- a/install/updates/Makefile.am
|
|
||||||
+++ b/install/updates/Makefile.am
|
|
||||||
@@ -52,7 +52,6 @@ app_DATA = \
|
|
||||||
50-krbenctypes.update \
|
|
||||||
50-nis.update \
|
|
||||||
50-ipaconfig.update \
|
|
||||||
- 50-externalmembers.update \
|
|
||||||
55-pbacmemberof.update \
|
|
||||||
59-trusts-sysacount.update \
|
|
||||||
60-trusts.update \
|
|
||||||
@@ -65,7 +64,8 @@ app_DATA = \
|
|
||||||
73-winsync.update \
|
|
||||||
73-certmap.update \
|
|
||||||
75-user-trust-attributes.update \
|
|
||||||
- 80-schema_compat.update \
|
|
||||||
+ 80-schema_compat.update \
|
|
||||||
+ 81-externalmembers.update \
|
|
||||||
90-post_upgrade_plugins.update \
|
|
||||||
$(NULL)
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,118 @@
|
|||||||
|
From 9ded9e2573a00c388533f2a09365c499a4e2961e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alexander Scheel <ascheel@redhat.com>
|
||||||
|
Date: Fri, 19 Jun 2020 08:48:56 -0400
|
||||||
|
Subject: [PATCH] Specify cert_paths when calling PKIConnection
|
||||||
|
|
||||||
|
PKIConnection now defaults to specifying verify=True. We've introduced
|
||||||
|
a new parameter, cert_paths, to specify additional paths (directories or
|
||||||
|
files) to load as certificates. Specify the IPA CA certificate file so
|
||||||
|
we can guarantee connections succeed and validate the peer's certificate.
|
||||||
|
|
||||||
|
Point to IPA CA certificate during pkispawn
|
||||||
|
|
||||||
|
Bump pki_version to 10.9.0-0.4 (aka -b2)
|
||||||
|
|
||||||
|
Fixes: https://pagure.io/freeipa/issue/8379
|
||||||
|
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1849155
|
||||||
|
Related: https://github.com/dogtagpki/pki/pull/443
|
||||||
|
Related: https://bugzilla.redhat.com/show_bug.cgi?id=1426572
|
||||||
|
Signed-off-by: Alexander Scheel <ascheel@redhat.com>
|
||||||
|
Signed-off-by: Christian Heimes <cheimes@redhat.com>
|
||||||
|
Reviewed-By: Christian Heimes <cheimes@redhat.com>
|
||||||
|
---
|
||||||
|
freeipa.spec.in | 6 +++---
|
||||||
|
install/tools/ipa-pki-wait-running.in | 3 ++-
|
||||||
|
ipaserver/install/cainstance.py | 7 +++++++
|
||||||
|
ipaserver/install/dogtaginstance.py | 3 ++-
|
||||||
|
ipaserver/plugins/dogtag.py | 11 +++++------
|
||||||
|
5 files changed, 19 insertions(+), 11 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/freeipa.spec.in b/freeipa.spec.in
|
||||||
|
index 74e752ea5..d00b9d640 100755
|
||||||
|
--- a/freeipa.spec.in
|
||||||
|
+++ b/freeipa.spec.in
|
||||||
|
@@ -112,9 +112,9 @@
|
||||||
|
# Fedora
|
||||||
|
%endif
|
||||||
|
|
||||||
|
-# 10.7.3 supports LWCA key replication using AES
|
||||||
|
-# https://pagure.io/freeipa/issue/8020
|
||||||
|
-%global pki_version 10.7.3-1
|
||||||
|
+# PKIConnection has been modified to always validate certs.
|
||||||
|
+# https://pagure.io/freeipa/issue/8379
|
||||||
|
+%global pki_version 10.9.0-0.4
|
||||||
|
|
||||||
|
# https://pagure.io/certmonger/issue/90
|
||||||
|
%global certmonger_version 0.79.7-1
|
||||||
|
diff --git a/install/tools/ipa-pki-wait-running.in b/install/tools/ipa-pki-wait-running.in
|
||||||
|
index 69f5ec296..4f0f2f34a 100644
|
||||||
|
--- a/install/tools/ipa-pki-wait-running.in
|
||||||
|
+++ b/install/tools/ipa-pki-wait-running.in
|
||||||
|
@@ -59,7 +59,8 @@ def get_conn(hostname, subsystem):
|
||||||
|
"""
|
||||||
|
conn = PKIConnection(
|
||||||
|
hostname=hostname,
|
||||||
|
- subsystem=subsystem
|
||||||
|
+ subsystem=subsystem,
|
||||||
|
+ cert_paths=paths.IPA_CA_CRT
|
||||||
|
)
|
||||||
|
logger.info(
|
||||||
|
"Created connection %s://%s:%s/%s",
|
||||||
|
diff --git a/ipaserver/install/cainstance.py b/ipaserver/install/cainstance.py
|
||||||
|
index 706bc28cc..9294f1dba 100644
|
||||||
|
--- a/ipaserver/install/cainstance.py
|
||||||
|
+++ b/ipaserver/install/cainstance.py
|
||||||
|
@@ -509,6 +509,13 @@ class CAInstance(DogtagInstance):
|
||||||
|
else:
|
||||||
|
pki_pin = None
|
||||||
|
|
||||||
|
+ # When spawning a CA instance, always point to IPA_CA_CRT if it
|
||||||
|
+ # exists. Later, when we're performing step 2 of an external CA
|
||||||
|
+ # installation, we'll overwrite this key to point to the real
|
||||||
|
+ # external CA.
|
||||||
|
+ if os.path.exists(paths.IPA_CA_CRT):
|
||||||
|
+ cfg['pki_cert_chain_path'] = paths.IPA_CA_CRT
|
||||||
|
+
|
||||||
|
if self.clone:
|
||||||
|
if self.no_db_setup:
|
||||||
|
cfg.update(
|
||||||
|
diff --git a/ipaserver/install/dogtaginstance.py b/ipaserver/install/dogtaginstance.py
|
||||||
|
index 361d80a8c..7e295665c 100644
|
||||||
|
--- a/ipaserver/install/dogtaginstance.py
|
||||||
|
+++ b/ipaserver/install/dogtaginstance.py
|
||||||
|
@@ -70,7 +70,8 @@ def get_security_domain():
|
||||||
|
connection = PKIConnection(
|
||||||
|
protocol='https',
|
||||||
|
hostname=api.env.ca_host,
|
||||||
|
- port='8443'
|
||||||
|
+ port='8443',
|
||||||
|
+ cert_paths=paths.IPA_CA_CRT
|
||||||
|
)
|
||||||
|
domain_client = pki.system.SecurityDomainClient(connection)
|
||||||
|
info = domain_client.get_security_domain_info()
|
||||||
|
diff --git a/ipaserver/plugins/dogtag.py b/ipaserver/plugins/dogtag.py
|
||||||
|
index 4de26d76f..b300f6b18 100644
|
||||||
|
--- a/ipaserver/plugins/dogtag.py
|
||||||
|
+++ b/ipaserver/plugins/dogtag.py
|
||||||
|
@@ -2082,13 +2082,12 @@ class kra(Backend):
|
||||||
|
'https',
|
||||||
|
self.kra_host,
|
||||||
|
str(self.kra_port),
|
||||||
|
- 'kra')
|
||||||
|
+ 'kra',
|
||||||
|
+ cert_paths=paths.IPA_CA_CRT
|
||||||
|
+ )
|
||||||
|
|
||||||
|
- connection.session.cert = (paths.RA_AGENT_PEM, paths.RA_AGENT_KEY)
|
||||||
|
- # uncomment the following when this commit makes it to release
|
||||||
|
- # https://git.fedorahosted.org/cgit/pki.git/commit/?id=71ae20c
|
||||||
|
- # connection.set_authentication_cert(paths.RA_AGENT_PEM,
|
||||||
|
- # paths.RA_AGENT_KEY)
|
||||||
|
+ connection.set_authentication_cert(paths.RA_AGENT_PEM,
|
||||||
|
+ paths.RA_AGENT_KEY)
|
||||||
|
|
||||||
|
try:
|
||||||
|
yield KRAClient(connection, crypto)
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
@ -1,67 +0,0 @@
|
|||||||
From 30b8c8b9985a5eb41e700b80fd03f95548e45fba Mon Sep 17 00:00:00 2001
|
|
||||||
From: Alexander Bokovoy <abokovoy@redhat.com>
|
|
||||||
Date: Mon, 17 Feb 2020 13:58:51 +0200
|
|
||||||
Subject: [PATCH] kdb: make sure audit_as_req callback signature change is
|
|
||||||
preserved
|
|
||||||
|
|
||||||
audit_as_req() callback has changed its signature with MIT krb5 commit
|
|
||||||
20991d55efbe1f987c1dbc1065f2d58c8f34031b in 2017, we should preserve the
|
|
||||||
change for any newer DAL versions. Otherwise audit_as_req() callback
|
|
||||||
would reference wrong data and we might crash.
|
|
||||||
|
|
||||||
Fixes: https://pagure.io/freeipa/issue/8200
|
|
||||||
Signed-off-by: Alexander Bokovoy <abokovoy@redhat.com>
|
|
||||||
Reviewed-By: Christian Heimes <cheimes@redhat.com>
|
|
||||||
---
|
|
||||||
daemons/ipa-kdb/ipa_kdb.h | 2 +-
|
|
||||||
daemons/ipa-kdb/ipa_kdb_audit_as.c | 2 +-
|
|
||||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/daemons/ipa-kdb/ipa_kdb.h b/daemons/ipa-kdb/ipa_kdb.h
|
|
||||||
index 7519f26e26..ae37a5a033 100644
|
|
||||||
--- a/daemons/ipa-kdb/ipa_kdb.h
|
|
||||||
+++ b/daemons/ipa-kdb/ipa_kdb.h
|
|
||||||
@@ -345,7 +345,7 @@ krb5_error_code ipadb_check_allowed_to_delegate(krb5_context kcontext,
|
|
||||||
|
|
||||||
void ipadb_audit_as_req(krb5_context kcontext,
|
|
||||||
krb5_kdc_req *request,
|
|
||||||
-#if (KRB5_KDB_DAL_MAJOR_VERSION == 7)
|
|
||||||
+#if (KRB5_KDB_DAL_MAJOR_VERSION >= 7)
|
|
||||||
const krb5_address *local_addr,
|
|
||||||
const krb5_address *remote_addr,
|
|
||||||
#endif
|
|
||||||
diff --git a/daemons/ipa-kdb/ipa_kdb_audit_as.c b/daemons/ipa-kdb/ipa_kdb_audit_as.c
|
|
||||||
index 77748a75d6..a60bc82b6d 100644
|
|
||||||
--- a/daemons/ipa-kdb/ipa_kdb_audit_as.c
|
|
||||||
+++ b/daemons/ipa-kdb/ipa_kdb_audit_as.c
|
|
||||||
@@ -25,7 +25,7 @@
|
|
||||||
|
|
||||||
void ipadb_audit_as_req(krb5_context kcontext,
|
|
||||||
krb5_kdc_req *request,
|
|
||||||
-#if (KRB5_KDB_DAL_MAJOR_VERSION == 7)
|
|
||||||
+#if (KRB5_KDB_DAL_MAJOR_VERSION >= 7)
|
|
||||||
const krb5_address *local_addr,
|
|
||||||
const krb5_address *remote_addr,
|
|
||||||
#endif
|
|
||||||
#From 4eb48492b354ecc30ffe1dd9654dcc0e0e833d64 Mon Sep 17 00:00:00 2001
|
|
||||||
#From: Alexander Bokovoy <abokovoy@redhat.com>
|
|
||||||
#Date: Mon, 17 Feb 2020 14:21:10 +0200
|
|
||||||
#Subject: [PATCH] Azure Pipelines: re-enable nodejs:12 stream for Fedora 31+
|
|
||||||
#
|
|
||||||
#Reviewed-By: Christian Heimes <cheimes@redhat.com>
|
|
||||||
#---
|
|
||||||
# ipatests/azure/templates/prepare-build.yml | 1 +
|
|
||||||
# 1 file changed, 1 insertion(+)
|
|
||||||
#
|
|
||||||
#diff --git a/ipatests/azure/templates/prepare-build.yml b/ipatests/azure/templates/prepare-build.yml
|
|
||||||
#index 0528efe129..643910f085 100644
|
|
||||||
#--- a/ipatests/azure/templates/prepare-build.yml
|
|
||||||
#+++ b/ipatests/azure/templates/prepare-build.yml
|
|
||||||
#@@ -13,6 +13,7 @@ steps:
|
|
||||||
# for metalink in $(sudo dnf repolist -v |grep Repo-metalink | awk '{print $2}' ) ; do echo '###############' ; echo '####' ; echo $metalink ; echo '####' ; curl $metalink ; done
|
|
||||||
# echo "Fastestmirror results:"
|
|
||||||
# sudo cat /var/cache/dnf/fastestmirror.cache
|
|
||||||
#+ sudo dnf -y module enable nodejs:12
|
|
||||||
# sudo dnf makecache || :
|
|
||||||
# echo "Installing base development environment"
|
|
||||||
# sudo dnf install -y \
|
|
@ -0,0 +1,34 @@
|
|||||||
|
From d83b760d1f76a3ba8e527dd27551e51a600b22c0 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christian Heimes <cheimes@redhat.com>
|
||||||
|
Date: Wed, 15 Jul 2020 10:23:35 +0200
|
||||||
|
Subject: [PATCH] Add missing SELinux rule for ipa-custodia.sock
|
||||||
|
|
||||||
|
A SELinux rule for ipa_custodia_stream_connect(httpd_t) was not copied
|
||||||
|
from upstream rules. It breaks installations on systems that don't have
|
||||||
|
ipa_custodia_stream_connect in SELinux domain for apache, e.g. RHEL 8.3.
|
||||||
|
|
||||||
|
Fixes: https://pagure.io/freeipa/issue/8412
|
||||||
|
Signed-off-by: Christian Heimes <cheimes@redhat.com>
|
||||||
|
Reviewed-By: Thomas Woerner <twoerner@redhat.com>
|
||||||
|
---
|
||||||
|
selinux/ipa.te | 7 +++++++
|
||||||
|
1 file changed, 7 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/selinux/ipa.te b/selinux/ipa.te
|
||||||
|
index a3381217a4..c4c3fa805e 100644
|
||||||
|
--- a/selinux/ipa.te
|
||||||
|
+++ b/selinux/ipa.te
|
||||||
|
@@ -378,6 +378,13 @@ optional_policy(`
|
||||||
|
ipa_search_lib(ipa_custodia_t)
|
||||||
|
')
|
||||||
|
|
||||||
|
+optional_policy(`
|
||||||
|
+ gen_require(`
|
||||||
|
+ type httpd_t;
|
||||||
|
+ ')
|
||||||
|
+ ipa_custodia_stream_connect(httpd_t)
|
||||||
|
+')
|
||||||
|
+
|
||||||
|
optional_policy(`
|
||||||
|
pki_manage_tomcat_etc_rw(ipa_custodia_t)
|
||||||
|
pki_read_tomcat_cert(ipa_custodia_t)
|
@ -1,120 +0,0 @@
|
|||||||
From 3d7d58d8214f3c899c0afd1a3a6a6678f38b7b39 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Rob Crittenden <rcritten@redhat.com>
|
|
||||||
Date: Jan 13 2020 18:41:53 +0000
|
|
||||||
Subject: Allow an empty cookie in dogtag-ipa-ca-renew-agent-submit
|
|
||||||
|
|
||||||
|
|
||||||
A "cookie" is used with certmonger to track the state of a
|
|
||||||
request across multiple requests to a CA (in ca-cookie). This
|
|
||||||
is used with the certmonger POLL operation to submit a request
|
|
||||||
to the CA for the status of a certificate request. This, along
|
|
||||||
with the profile, are passed to the certmonger CA helper
|
|
||||||
scripts via environment variables when a request is made. It is
|
|
||||||
cleared from the certmonger request once the certificate is
|
|
||||||
issued.
|
|
||||||
|
|
||||||
This CA helper can do a number of things:
|
|
||||||
|
|
||||||
- SUBMIT new certicate requests (including the CA)
|
|
||||||
- POLL for status of an existing certificate request
|
|
||||||
- For non renewal masters, POLL to see if an updated cert is in
|
|
||||||
LDAP
|
|
||||||
|
|
||||||
A POLL operation requires a cookie so that the state about the
|
|
||||||
request can be passed to the CA. For the case of retrieving an
|
|
||||||
updated cert from LDAP there is no state to maintain. It just
|
|
||||||
checks LDAP and returns either a cert or WAIT_WITH_DELAY if one
|
|
||||||
is not yet available.
|
|
||||||
|
|
||||||
There are two kinds of cookies in operation here:
|
|
||||||
1. The CERTMONGER_CA_COOKIE environment variable passed via
|
|
||||||
certmonger to this helper which is a JSON object.
|
|
||||||
2. The cookie value within the JSON object which contains the
|
|
||||||
URL to be passed to dogtag.
|
|
||||||
|
|
||||||
For the purposes of clarity "cookie" here is the value within
|
|
||||||
the JSON.
|
|
||||||
|
|
||||||
The CERTMONGER_CA_COOKIE is deconstructed and reconstructed as
|
|
||||||
the request is processed, doing double duty. It initially comes
|
|
||||||
in as a JSON dict object with two keys: profile and cookie.
|
|
||||||
In call_handler the CERTMONGER_CA_COOKIE is decomposed into a
|
|
||||||
python object and the profile compared to the requested profile
|
|
||||||
(and request rejected if they don't match) and the cookie key
|
|
||||||
overrides the CERTMONGER_CA_COOKIE environment variable. This is
|
|
||||||
then reversed at the end of the request when it again becomes a
|
|
||||||
JSON object containing the profile and cookie.
|
|
||||||
|
|
||||||
This script was previously enforcing that a cookie be available on
|
|
||||||
all POLL requests, whether it is actually required or not. This
|
|
||||||
patch relaxes that requirement.
|
|
||||||
|
|
||||||
The first request of a non-renewal master for an updated certicate
|
|
||||||
from LDAP is a SUBMIT operation. This is significant because it
|
|
||||||
doesn't require a cookie: there is no state on a new request. If
|
|
||||||
there is no updated cert in LDAP then the tracking request goes
|
|
||||||
into the CA_WORKING state and certmonger will wait 8 hours (as
|
|
||||||
returned by this script) and try again.
|
|
||||||
|
|
||||||
Subsequent requests are done using POLL. This required a cookie
|
|
||||||
so all such requests would fail with the ca-error
|
|
||||||
Invalid cookie: u'' as it was empty (because there is no state).
|
|
||||||
|
|
||||||
There is no need to fail early on a missing cookie. Enforcement
|
|
||||||
will be done later if needed (and it isn't always needed). So
|
|
||||||
if CERTMONGER_CA_COOKIE is an empty string then generate a new
|
|
||||||
CERTMONGER_CA_COOKIE containing the requested profile and an empty
|
|
||||||
cookie. It still will fail if certmonger doesn't set a cookie at
|
|
||||||
all.
|
|
||||||
|
|
||||||
An example of a cookie when retrieving a new RA Agent certificate
|
|
||||||
is:
|
|
||||||
|
|
||||||
{"profile": "caServerCert", "cookie": "state=retrieve&requestId=20"}
|
|
||||||
|
|
||||||
This will result in this request to the CA:
|
|
||||||
[09/Jan/2020:14:29:54 -0500] "GET
|
|
||||||
/ca/ee/ca/displayCertFromRequest?requestId=20&importCert=true&xml=true
|
|
||||||
HTTP/1.1" 200 9857
|
|
||||||
|
|
||||||
For a renewal, the reconstructed cookie will consist of:
|
|
||||||
|
|
||||||
{"profile": "caServerCert", "cookie": ""}
|
|
||||||
|
|
||||||
https://pagure.io/freeipa/issue/8164
|
|
||||||
|
|
||||||
Reviewed-By: Florence Blanc-Renaud <frenaud@redhat.com>
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
diff --git a/install/certmonger/dogtag-ipa-ca-renew-agent-submit.in b/install/certmonger/dogtag-ipa-ca-renew-agent-submit.in
|
|
||||||
index 10efb4c..95ad080 100644
|
|
||||||
--- a/install/certmonger/dogtag-ipa-ca-renew-agent-submit.in
|
|
||||||
+++ b/install/certmonger/dogtag-ipa-ca-renew-agent-submit.in
|
|
||||||
@@ -123,7 +123,9 @@ def call_handler(_handler, *args, **kwargs):
|
|
||||||
operation = os.environ['CERTMONGER_OPERATION']
|
|
||||||
if operation == 'POLL':
|
|
||||||
cookie = os.environ.pop('CERTMONGER_CA_COOKIE', None)
|
|
||||||
- if cookie is not None:
|
|
||||||
+ if cookie is None:
|
|
||||||
+ return (UNCONFIGURED, "Cookie not provided")
|
|
||||||
+ if len(cookie) > 0:
|
|
||||||
try:
|
|
||||||
context = json.loads(cookie)
|
|
||||||
if not isinstance(context, dict):
|
|
||||||
@@ -131,7 +133,13 @@ def call_handler(_handler, *args, **kwargs):
|
|
||||||
except (TypeError, ValueError):
|
|
||||||
return (UNCONFIGURED, "Invalid cookie: %r" % cookie)
|
|
||||||
else:
|
|
||||||
- return (UNCONFIGURED, "Cookie not provided")
|
|
||||||
+ # Reconstruct the data for the missing cookie. Sanity checking
|
|
||||||
+ # is done elsewhere, when needed.
|
|
||||||
+ context = dict(cookie=u'')
|
|
||||||
+ profile = os.environ.get('CERTMONGER_CA_PROFILE')
|
|
||||||
+ if profile is not None:
|
|
||||||
+ profile = profile.encode('ascii').decode('raw_unicode_escape')
|
|
||||||
+ context['profile'] = profile
|
|
||||||
|
|
||||||
if 'profile' in context:
|
|
||||||
profile = context.pop('profile')
|
|
||||||
|
|
@ -0,0 +1,189 @@
|
|||||||
|
From ca880cfb117fc870a6e2710b9e31b2f67d5651e1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Florence Blanc-Renaud <flo@redhat.com>
|
||||||
|
Date: Wed, 29 Jul 2020 13:35:49 +0200
|
||||||
|
Subject: [PATCH] ipa-client-install: use the authselect backup during
|
||||||
|
uninstall
|
||||||
|
|
||||||
|
When ipa-client-install is run on a system with no existing
|
||||||
|
authselect configuration (for instance a fedora 31 new install),
|
||||||
|
uninstallation is picking sssd profile but this may lead to
|
||||||
|
a configuration with differences compared to the pre-ipa-client
|
||||||
|
state.
|
||||||
|
|
||||||
|
Now that authselect provides an option to backup the existing
|
||||||
|
configuration prior to setting a profile, the client install
|
||||||
|
can save the backup name and uninstall is able to apply the
|
||||||
|
backup in order to go back to the pre-ipa-client state.
|
||||||
|
|
||||||
|
Fixes: https://pagure.io/freeipa/issue/8189
|
||||||
|
Reviewed-By: Francois Cami <fcami@redhat.com>
|
||||||
|
Reviewed-By: Michal Polovka <mpolovka@redhat.com>
|
||||||
|
---
|
||||||
|
ipaplatform/redhat/authconfig.py | 37 ++++++++++++++------------------
|
||||||
|
1 file changed, 16 insertions(+), 21 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/ipaplatform/redhat/authconfig.py b/ipaplatform/redhat/authconfig.py
|
||||||
|
index 758376f2b..89f452d66 100644
|
||||||
|
--- a/ipaplatform/redhat/authconfig.py
|
||||||
|
+++ b/ipaplatform/redhat/authconfig.py
|
||||||
|
@@ -27,6 +27,7 @@ from ipaplatform.paths import paths
|
||||||
|
from ipapython import ipautil
|
||||||
|
from ipapython.admintool import ScriptError
|
||||||
|
import os
|
||||||
|
+import time
|
||||||
|
|
||||||
|
FILES_TO_NOT_BACKUP = ['passwd', 'group', 'shadow', 'gshadow']
|
||||||
|
|
||||||
|
@@ -103,28 +104,16 @@ class RedHatAuthSelect(RedHatAuthToolBase):
|
||||||
|
def configure(self, sssd, mkhomedir, statestore, sudo=True):
|
||||||
|
# In the statestore, the following keys are used for the
|
||||||
|
# 'authselect' module:
|
||||||
|
+ # Old method:
|
||||||
|
# profile: name of the profile configured pre-installation
|
||||||
|
# features_list: list of features configured pre-installation
|
||||||
|
# mkhomedir: True if installation was called with --mkhomedir
|
||||||
|
# profile and features_list are used when reverting to the
|
||||||
|
# pre-install state
|
||||||
|
- cfg = self._parse_authselect_output()
|
||||||
|
- if cfg:
|
||||||
|
- statestore.backup_state('authselect', 'profile', cfg[0])
|
||||||
|
- statestore.backup_state(
|
||||||
|
- 'authselect', 'features_list', " ".join(cfg[1]))
|
||||||
|
- else:
|
||||||
|
- # cfg = None means that the current conf is not managed by
|
||||||
|
- # authselect but by authconfig.
|
||||||
|
- # As we are using authselect to configure the host,
|
||||||
|
- # it will not be possible to revert to a custom authconfig
|
||||||
|
- # configuration later (during uninstall)
|
||||||
|
- # Best thing to do will be to use sssd profile at this time
|
||||||
|
- logger.warning(
|
||||||
|
- "WARNING: The configuration pre-client installation is not "
|
||||||
|
- "managed by authselect and cannot be backed up. "
|
||||||
|
- "Uninstallation may not be able to revert to the original "
|
||||||
|
- "state.")
|
||||||
|
+ # New method:
|
||||||
|
+ # backup: name of the authselect backup
|
||||||
|
+ backup_name = "pre_ipaclient_{}".format(time.strftime("%Y%m%d%H%M%S"))
|
||||||
|
+ statestore.backup_state('authselect', 'backup', backup_name)
|
||||||
|
|
||||||
|
cmd = [paths.AUTHSELECT, "select", "sssd"]
|
||||||
|
if mkhomedir:
|
||||||
|
@@ -133,6 +122,7 @@ class RedHatAuthSelect(RedHatAuthToolBase):
|
||||||
|
if sudo:
|
||||||
|
cmd.append("with-sudo")
|
||||||
|
cmd.append("--force")
|
||||||
|
+ cmd.append("--backup={}".format(backup_name))
|
||||||
|
|
||||||
|
ipautil.run(cmd)
|
||||||
|
|
||||||
|
@@ -179,10 +169,15 @@ class RedHatAuthSelect(RedHatAuthToolBase):
|
||||||
|
else:
|
||||||
|
features = []
|
||||||
|
|
||||||
|
- cmd = [paths.AUTHSELECT, "select", profile]
|
||||||
|
- cmd.extend(features)
|
||||||
|
- cmd.append("--force")
|
||||||
|
- ipautil.run(cmd)
|
||||||
|
+ backup = statestore.restore_state('authselect', 'backup')
|
||||||
|
+ if backup:
|
||||||
|
+ cmd = [paths.AUTHSELECT, "backup-restore", backup]
|
||||||
|
+ ipautil.run(cmd)
|
||||||
|
+ else:
|
||||||
|
+ cmd = [paths.AUTHSELECT, "select", profile]
|
||||||
|
+ cmd.extend(features)
|
||||||
|
+ cmd.append("--force")
|
||||||
|
+ ipautil.run(cmd)
|
||||||
|
|
||||||
|
def backup(self, path):
|
||||||
|
current = self._get_authselect_current_output()
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
||||||
|
# Not needed for 4.7.8 release
|
||||||
|
#
|
||||||
|
#From 3eaab97e317584bc47d4a27a607267ed90df7ff7 Mon Sep 17 00:00:00 2001
|
||||||
|
#From: Florence Blanc-Renaud <flo@redhat.com>
|
||||||
|
#Date: Wed, 29 Jul 2020 13:40:26 +0200
|
||||||
|
#Subject: [PATCH] ipatests: remove the xfail for test_nfs.py
|
||||||
|
#
|
||||||
|
#Related: https://pagure.io/freeipa/issue/8189
|
||||||
|
#Reviewed-By: Francois Cami <fcami@redhat.com>
|
||||||
|
#Reviewed-By: Michal Polovka <mpolovka@redhat.com>
|
||||||
|
#---
|
||||||
|
# ipatests/test_integration/test_nfs.py | 4 ----
|
||||||
|
# 1 file changed, 4 deletions(-)
|
||||||
|
#
|
||||||
|
#diff --git a/ipatests/test_integration/test_nfs.py b/ipatests/test_integration/test_nfs.py
|
||||||
|
#index 7272b0d44..832c56cca 100644
|
||||||
|
#--- a/ipatests/test_integration/test_nfs.py
|
||||||
|
#+++ b/ipatests/test_integration/test_nfs.py
|
||||||
|
#@@ -363,10 +363,6 @@ class TestIpaClientAutomountFileRestore(IntegrationTest):
|
||||||
|
# cmd = self.clients[0].run_command(sha256nsswitch_cmd)
|
||||||
|
# assert cmd.stdout_text == orig_sha256
|
||||||
|
#
|
||||||
|
#- @pytest.mark.xfail(
|
||||||
|
#- reason="https://pagure.io/freeipa/issue/8189",
|
||||||
|
#- strict=True
|
||||||
|
#- )
|
||||||
|
# def test_nsswitch_backup_restore_sssd(self):
|
||||||
|
# self.nsswitch_backup_restore()
|
||||||
|
#
|
||||||
|
#--
|
||||||
|
#2.26.2
|
||||||
|
|
||||||
|
From 4baf6b292f28481ece483bb8ecbd6a0807d9d45a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Florence Blanc-Renaud <flo@redhat.com>
|
||||||
|
Date: Wed, 29 Jul 2020 17:57:53 +0200
|
||||||
|
Subject: [PATCH] ipatests: fix test_authselect
|
||||||
|
|
||||||
|
Before the code fix, install/uninstall on a config without
|
||||||
|
any authselect profile was not able to restore the exact
|
||||||
|
state but configured sssd profile instead.
|
||||||
|
|
||||||
|
Now that the code is doing a pre-install backup, uninstall
|
||||||
|
restores the exact state and the test needs to be updated
|
||||||
|
accordingly.
|
||||||
|
|
||||||
|
Related: https://pagure.io/freeipa/issue/8189
|
||||||
|
Reviewed-By: Francois Cami <fcami@redhat.com>
|
||||||
|
Reviewed-By: Michal Polovka <mpolovka@redhat.com>
|
||||||
|
---
|
||||||
|
ipatests/test_integration/test_authselect.py | 13 ++++++++-----
|
||||||
|
1 file changed, 8 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/ipatests/test_integration/test_authselect.py b/ipatests/test_integration/test_authselect.py
|
||||||
|
index bdf7d9f77..cba23e707 100644
|
||||||
|
--- a/ipatests/test_integration/test_authselect.py
|
||||||
|
+++ b/ipatests/test_integration/test_authselect.py
|
||||||
|
@@ -100,7 +100,9 @@ class TestClientInstallation(IntegrationTest):
|
||||||
|
['rm', '-f', '/etc/authselect/authselect.conf'])
|
||||||
|
result = self._install_client()
|
||||||
|
assert result.returncode == 0
|
||||||
|
- assert self.msg_warn_install in result.stderr_text
|
||||||
|
+ # With the fix for 8189, there is no warning any more
|
||||||
|
+ # because install is performing a pre-install backup
|
||||||
|
+ assert self.msg_warn_install not in result.stderr_text
|
||||||
|
# Client installation must configure the 'sssd' profile
|
||||||
|
# with sudo
|
||||||
|
check_authselect_profile(self.client, default_profile, ('with-sudo',))
|
||||||
|
@@ -109,12 +111,13 @@ class TestClientInstallation(IntegrationTest):
|
||||||
|
"""
|
||||||
|
Test client un-installation when there was no authselect profile
|
||||||
|
"""
|
||||||
|
- # As the client did not have any authselect profile before install,
|
||||||
|
- # uninstall must print a warning about restoring 'sssd' profile
|
||||||
|
- # by default
|
||||||
|
+ # The client did not have any authselect profile before install,
|
||||||
|
+ # but uninstall must be able to restore the backup
|
||||||
|
+ # Check that no profile is configured after uninstall
|
||||||
|
result = self._uninstall_client()
|
||||||
|
assert result.returncode == 0
|
||||||
|
- check_authselect_profile(self.client, default_profile)
|
||||||
|
+ assert not self.client.transport.file_exists(
|
||||||
|
+ '/etc/authselect/authselect.conf')
|
||||||
|
|
||||||
|
def test_install_client_preconfigured_profile(self):
|
||||||
|
"""
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
@ -0,0 +1,32 @@
|
|||||||
|
From 66a5a0efd538e31a190ca6ecb775bc1dfc4ee232 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Date: Wed, 29 Jul 2020 13:42:43 -0400
|
||||||
|
Subject: [PATCH] Replace SSLCertVerificationError with CertificateError for
|
||||||
|
py36
|
||||||
|
|
||||||
|
This exception was added in python 3.7. Use CertificateError
|
||||||
|
instead which is an alias and will work with older python releases.
|
||||||
|
|
||||||
|
https://bugzilla.redhat.com/show_bug.cgi?id=1858318
|
||||||
|
|
||||||
|
Reviewed-By: Florence Blanc-Renaud <flo@redhat.com>
|
||||||
|
---
|
||||||
|
ipaserver/install/server/upgrade.py | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/ipaserver/install/server/upgrade.py b/ipaserver/install/server/upgrade.py
|
||||||
|
index 2c36bc0e2..2c1517865 100644
|
||||||
|
--- a/ipaserver/install/server/upgrade.py
|
||||||
|
+++ b/ipaserver/install/server/upgrade.py
|
||||||
|
@@ -667,7 +667,7 @@ def http_certificate_ensure_ipa_ca_dnsname(http):
|
||||||
|
|
||||||
|
try:
|
||||||
|
cert.match_hostname(expect)
|
||||||
|
- except ssl.SSLCertVerificationError:
|
||||||
|
+ except ssl.CertificateError:
|
||||||
|
if certs.is_ipa_issued_cert(api, cert):
|
||||||
|
request_id = certmonger.get_request_id(
|
||||||
|
{'cert-file': paths.HTTPD_CERT_FILE})
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
@ -0,0 +1,103 @@
|
|||||||
|
From c72ef1ed965aca79da4576d9579dec5459e14b99 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christian Heimes <cheimes@redhat.com>
|
||||||
|
Date: Fri, 8 May 2020 15:27:01 +0200
|
||||||
|
Subject: [PATCH] SELinux: Backport dirsrv_systemctl interface
|
||||||
|
|
||||||
|
Signed-off-by: Christian Heimes <cheimes@redhat.com>
|
||||||
|
Reviewed-By: Florence Blanc-Renaud <frenaud@redhat.com>
|
||||||
|
Reviewed-By: Christian Heimes <cheimes@redhat.com>
|
||||||
|
---
|
||||||
|
selinux/ipa.if | 27 +++++++++++++++++++++++++++
|
||||||
|
1 file changed, 27 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/selinux/ipa.if b/selinux/ipa.if
|
||||||
|
index cefae5d90..ea971b8fa 100644
|
||||||
|
--- a/selinux/ipa.if
|
||||||
|
+++ b/selinux/ipa.if
|
||||||
|
@@ -392,3 +392,30 @@ ifndef(`apache_manage_pid_files',`
|
||||||
|
manage_sock_files_pattern($1, httpd_var_run_t, httpd_var_run_t)
|
||||||
|
')
|
||||||
|
')
|
||||||
|
+
|
||||||
|
+########################################
|
||||||
|
+## <summary>
|
||||||
|
+## Execute dirsrv server in the dirsrv domain.
|
||||||
|
+## Backport from https://github.com/fedora-selinux/selinux-policy-contrib/pull/241
|
||||||
|
+## </summary>
|
||||||
|
+## <param name="domain">
|
||||||
|
+## <summary>
|
||||||
|
+## Domain allowed to transition.
|
||||||
|
+## </summary>
|
||||||
|
+## </param>
|
||||||
|
+#
|
||||||
|
+ifndef(`dirsrv_systemctl',`
|
||||||
|
+ interface(`dirsrv_systemctl',`
|
||||||
|
+ gen_require(`
|
||||||
|
+ type dirsrv_unit_file_t;
|
||||||
|
+ type dirsrv_t;
|
||||||
|
+ ')
|
||||||
|
+
|
||||||
|
+ systemd_exec_systemctl($1)
|
||||||
|
+ init_reload_services($1)
|
||||||
|
+ allow $1 dirsrv_unit_file_t:file read_file_perms;
|
||||||
|
+ allow $1 dirsrv_unit_file_t:service manage_service_perms;
|
||||||
|
+
|
||||||
|
+ ps_process_pattern($1, dirsrv_t)
|
||||||
|
+ ')
|
||||||
|
+')
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
||||||
|
From f76c56c6072418c78f138678b1c4dd917fea6ee1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Zdenek Pytela <zpytela@redhat.com>
|
||||||
|
Date: Thu, 7 May 2020 16:17:12 +0200
|
||||||
|
Subject: [PATCH] Allow ipa-adtrust-install restart sssd and dirsrv services
|
||||||
|
|
||||||
|
Allow ipa_helper_t connect to init using /run/systemd/private socket.
|
||||||
|
Allow ipa_helper_t read init process state.
|
||||||
|
Allow ipa_helper_t manage sssd and dirsrv units.
|
||||||
|
|
||||||
|
See: https://bugzilla.redhat.com/show_bug.cgi?id=1820298
|
||||||
|
See: https://github.com/fedora-selinux/selinux-policy-contrib/pull/241
|
||||||
|
Reviewed-By: Florence Blanc-Renaud <frenaud@redhat.com>
|
||||||
|
Reviewed-By: Christian Heimes <cheimes@redhat.com>
|
||||||
|
---
|
||||||
|
selinux/ipa.te | 8 ++++++++
|
||||||
|
1 file changed, 8 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/selinux/ipa.te b/selinux/ipa.te
|
||||||
|
index b1e29c8e2..587e5e585 100644
|
||||||
|
--- a/selinux/ipa.te
|
||||||
|
+++ b/selinux/ipa.te
|
||||||
|
@@ -147,6 +147,9 @@ auth_use_nsswitch(ipa_helper_t)
|
||||||
|
|
||||||
|
files_list_tmp(ipa_helper_t)
|
||||||
|
|
||||||
|
+init_read_state(ipa_helper_t)
|
||||||
|
+init_stream_connect(ipa_helper_t)
|
||||||
|
+
|
||||||
|
ipa_manage_pid_files(ipa_helper_t)
|
||||||
|
ipa_read_lib(ipa_helper_t)
|
||||||
|
|
||||||
|
@@ -156,6 +159,10 @@ optional_policy(`
|
||||||
|
dirsrv_stream_connect(ipa_helper_t)
|
||||||
|
')
|
||||||
|
|
||||||
|
+optional_policy(`
|
||||||
|
+ dirsrv_systemctl(ipa_helper_t)
|
||||||
|
+')
|
||||||
|
+
|
||||||
|
optional_policy(`
|
||||||
|
ldap_stream_connect(ipa_helper_t)
|
||||||
|
')
|
||||||
|
@@ -182,6 +189,7 @@ optional_policy(`
|
||||||
|
|
||||||
|
optional_policy(`
|
||||||
|
sssd_manage_lib_files(ipa_helper_t)
|
||||||
|
+ sssd_systemctl(ipa_helper_t)
|
||||||
|
')
|
||||||
|
|
||||||
|
########################################
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
@ -0,0 +1,84 @@
|
|||||||
|
From 81c955e561dd42ab70a39bf636c90e82a9d7d899 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Florence Blanc-Renaud <flo@redhat.com>
|
||||||
|
Date: Mon, 3 Aug 2020 18:52:07 +0200
|
||||||
|
Subject: [PATCH] CAless installation: set the perms on KDC cert file
|
||||||
|
|
||||||
|
In CA less installation, the KDC certificate file does not have
|
||||||
|
the expected 644 permissions. As a consequence, WebUI login
|
||||||
|
fails.
|
||||||
|
|
||||||
|
The fix makes sure that the KDC cert file is saved with 644 perms.
|
||||||
|
|
||||||
|
Fixes: https://pagure.io/freeipa/issue/8440
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
---
|
||||||
|
ipaserver/install/krbinstance.py | 2 ++
|
||||||
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/ipaserver/install/krbinstance.py b/ipaserver/install/krbinstance.py
|
||||||
|
index 09d14693c..1910ff374 100644
|
||||||
|
--- a/ipaserver/install/krbinstance.py
|
||||||
|
+++ b/ipaserver/install/krbinstance.py
|
||||||
|
@@ -536,6 +536,8 @@ class KrbInstance(service.Service):
|
||||||
|
certs.install_pem_from_p12(self.pkcs12_info[0],
|
||||||
|
self.pkcs12_info[1],
|
||||||
|
paths.KDC_CERT)
|
||||||
|
+ # The KDC cert needs to be readable by everyone
|
||||||
|
+ os.chmod(paths.KDC_CERT, 0o644)
|
||||||
|
certs.install_key_from_p12(self.pkcs12_info[0],
|
||||||
|
self.pkcs12_info[1],
|
||||||
|
paths.KDC_KEY)
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
||||||
|
From 295dd4235f693b7b4b4270b46a28cb6e7b3d00b4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Florence Blanc-Renaud <flo@redhat.com>
|
||||||
|
Date: Mon, 3 Aug 2020 18:53:47 +0200
|
||||||
|
Subject: [PATCH] ipatests: check KDC cert permissions in CA less install
|
||||||
|
|
||||||
|
The KDC certificate file must be stored with 644 permissions.
|
||||||
|
Add a test checking the file permissions on server + replica.
|
||||||
|
|
||||||
|
Related: https://pagure.io/freeipa/issue/8440
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
---
|
||||||
|
ipatests/test_integration/test_caless.py | 9 +++++++++
|
||||||
|
1 file changed, 9 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/ipatests/test_integration/test_caless.py b/ipatests/test_integration/test_caless.py
|
||||||
|
index a7b2cbbbc..1ea7d9896 100644
|
||||||
|
--- a/ipatests/test_integration/test_caless.py
|
||||||
|
+++ b/ipatests/test_integration/test_caless.py
|
||||||
|
@@ -1527,6 +1527,13 @@ class TestCertInstall(CALessBase):
|
||||||
|
assert result.returncode == 0
|
||||||
|
|
||||||
|
|
||||||
|
+def verify_kdc_cert_perms(host):
|
||||||
|
+ """Verify that the KDC cert pem file has 0644 perms"""
|
||||||
|
+ cmd = host.run_command(['stat', '-c',
|
||||||
|
+ '"%a %G:%U"', paths.KDC_CERT])
|
||||||
|
+ assert "644 root:root" in cmd.stdout_text
|
||||||
|
+
|
||||||
|
+
|
||||||
|
class TestPKINIT(CALessBase):
|
||||||
|
"""Install master and replica with PKINIT"""
|
||||||
|
num_replicas = 1
|
||||||
|
@@ -1540,6 +1547,7 @@ class TestPKINIT(CALessBase):
|
||||||
|
result = cls.install_server(pkinit_pkcs12_exists=True,
|
||||||
|
pkinit_pin=_DEFAULT)
|
||||||
|
assert result.returncode == 0
|
||||||
|
+ verify_kdc_cert_perms(cls.master)
|
||||||
|
|
||||||
|
@replica_install_teardown
|
||||||
|
def test_server_replica_install_pkinit(self):
|
||||||
|
@@ -1549,6 +1557,7 @@ class TestPKINIT(CALessBase):
|
||||||
|
pkinit_pin=_DEFAULT)
|
||||||
|
assert result.returncode == 0
|
||||||
|
self.verify_installation()
|
||||||
|
+ verify_kdc_cert_perms(self.replicas[0])
|
||||||
|
|
||||||
|
|
||||||
|
class TestServerReplicaCALessToCAFull(CALessBase):
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
@ -0,0 +1,145 @@
|
|||||||
|
From b95817e35716bbab000633043817202e17d7c53e Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois=20Cami?= <fcami@redhat.com>
|
||||||
|
Date: Thu, 6 Aug 2020 17:07:36 +0200
|
||||||
|
Subject: [PATCH] IPA-EPN: Use a helper to retrieve LDAP attributes from an
|
||||||
|
entry
|
||||||
|
|
||||||
|
Allow for empty attributes.
|
||||||
|
|
||||||
|
Reviewed-By: Francois Cami <fcami@redhat.com>
|
||||||
|
---
|
||||||
|
ipaclient/install/ipa_epn.py | 22 +++++++++++++++-------
|
||||||
|
1 file changed, 15 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/ipaclient/install/ipa_epn.py b/ipaclient/install/ipa_epn.py
|
||||||
|
index 65f9f3d47..0d1ae2add 100644
|
||||||
|
--- a/ipaclient/install/ipa_epn.py
|
||||||
|
+++ b/ipaclient/install/ipa_epn.py
|
||||||
|
@@ -122,22 +122,30 @@ class EPNUserList:
|
||||||
|
"""Return len(self)."""
|
||||||
|
return len(self._expiring_password_user_dq)
|
||||||
|
|
||||||
|
+ def get_ldap_attr(self, entry, attr):
|
||||||
|
+ """Get a single value from a multi-valued attr in a safe way"""
|
||||||
|
+ return str(entry.get(attr, [""]).pop(0))
|
||||||
|
+
|
||||||
|
def add(self, entry):
|
||||||
|
"""Parses and appends an LDAP user entry with the uid, cn,
|
||||||
|
givenname, sn, krbpasswordexpiration and mail attributes.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
self._sorted = False
|
||||||
|
+ if entry.get("mail") is None:
|
||||||
|
+ logger.error("IPA-EPN: No mail address defined for: %s",
|
||||||
|
+ entry.dn)
|
||||||
|
+ return
|
||||||
|
self._expiring_password_user_dq.append(
|
||||||
|
dict(
|
||||||
|
- uid=str(entry["uid"].pop(0)),
|
||||||
|
- cn=str(entry["cn"].pop(0)),
|
||||||
|
- givenname=str(entry["givenname"].pop(0)),
|
||||||
|
- sn=str(entry["sn"].pop(0)),
|
||||||
|
- krbpasswordexpiration=str(
|
||||||
|
- entry["krbpasswordexpiration"].pop(0)
|
||||||
|
+ uid=self.get_ldap_attr(entry, "uid"),
|
||||||
|
+ cn=self.get_ldap_attr(entry, "cn"),
|
||||||
|
+ givenname=self.get_ldap_attr(entry, "givenname"),
|
||||||
|
+ sn=self.get_ldap_attr(entry, "sn"),
|
||||||
|
+ krbpasswordexpiration=(
|
||||||
|
+ self.get_ldap_attr(entry,"krbpasswordexpiration")
|
||||||
|
),
|
||||||
|
- mail=str(entry["mail"]),
|
||||||
|
+ mail=str(entry.get("mail")),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
except IndexError as e:
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
||||||
|
From 8e810d8cf38ec60d76178bd673e218fb05d56c8e Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois=20Cami?= <fcami@redhat.com>
|
||||||
|
Date: Thu, 6 Aug 2020 17:13:19 +0200
|
||||||
|
Subject: [PATCH] IPA-EPN: fix configuration file typo
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Signed-off-by: François Cami <fcami@redhat.com>
|
||||||
|
Reviewed-By: Francois Cami <fcami@redhat.com>
|
||||||
|
---
|
||||||
|
client/share/epn.conf | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/client/share/epn.conf b/client/share/epn.conf
|
||||||
|
index 0e590dfc3..e3645801c 100644
|
||||||
|
--- a/client/share/epn.conf
|
||||||
|
+++ b/client/share/epn.conf
|
||||||
|
@@ -23,7 +23,7 @@ smtp_port = 25
|
||||||
|
# Default None (empty value).
|
||||||
|
# smtp_password =
|
||||||
|
|
||||||
|
-# pecifies the number of seconds to wait for SMTP to respond.
|
||||||
|
+# Specifies the number of seconds to wait for SMTP to respond.
|
||||||
|
smtp_timeout = 60
|
||||||
|
|
||||||
|
# Specifies the type of secure connection to make. Options are: none,
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
||||||
|
From 1b1dbcbe9d83ba35f3cfdd01399f123816ec6e5b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Date: Thu, 6 Aug 2020 18:57:10 -0400
|
||||||
|
Subject: [PATCH] IPA-EPN: Test that users without givenname and/or mail are
|
||||||
|
handled
|
||||||
|
|
||||||
|
The admin user does not have a givenname by default, allow for that.
|
||||||
|
|
||||||
|
Report errors for users without a default e-mail address.
|
||||||
|
|
||||||
|
Update the SHA256 hash with the typo fix.
|
||||||
|
|
||||||
|
Reviewed-By: Francois Cami <fcami@redhat.com>
|
||||||
|
---
|
||||||
|
ipatests/test_integration/test_epn.py | 22 +++++++++++++++++++++-
|
||||||
|
1 file changed, 21 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/ipatests/test_integration/test_epn.py b/ipatests/test_integration/test_epn.py
|
||||||
|
index 18f73c722..c5c73835a 100644
|
||||||
|
--- a/ipatests/test_integration/test_epn.py
|
||||||
|
+++ b/ipatests/test_integration/test_epn.py
|
||||||
|
@@ -240,7 +240,7 @@ class TestEPN(IntegrationTest):
|
||||||
|
assert epn_conf in cmd1.stdout_text
|
||||||
|
assert epn_template in cmd1.stdout_text
|
||||||
|
cmd2 = self.master.run_command(["sha256sum", epn_conf])
|
||||||
|
- ck = "4c207b5c9c760c36db0d3b2b93da50ea49edcc4002d6d1e7383601f0ec30b957"
|
||||||
|
+ ck = "192481b52fb591112afd7b55b12a44c6618fdbc7e05a3b1866fd67ec579c51df"
|
||||||
|
assert cmd2.stdout_text.find(ck) == 0
|
||||||
|
|
||||||
|
def test_EPN_smoketest_1(self):
|
||||||
|
@@ -591,3 +591,23 @@ class TestEPN(IntegrationTest):
|
||||||
|
self.master.put_file_contents('/etc/ipa/epn.conf', epn_conf)
|
||||||
|
result = tasks.ipa_epn(self.master, raiseonerr=False)
|
||||||
|
assert "smtp_delay cannot be less than zero" in result.stderr_text
|
||||||
|
+
|
||||||
|
+ def test_EPN_admin(self):
|
||||||
|
+ """The admin user is special and has no givenName by default
|
||||||
|
+ It also doesn't by default have an e-mail address
|
||||||
|
+ Check --dry-run output.
|
||||||
|
+ """
|
||||||
|
+ epn_conf = textwrap.dedent('''
|
||||||
|
+ [global]
|
||||||
|
+ ''')
|
||||||
|
+ self.master.put_file_contents('/etc/ipa/epn.conf', epn_conf)
|
||||||
|
+ self.master.run_command(
|
||||||
|
+ ['ipa', 'user-mod', 'admin', '--password-expiration',
|
||||||
|
+ datetime_to_generalized_time(
|
||||||
|
+ datetime.datetime.utcnow() + datetime.timedelta(days=7)
|
||||||
|
+ )]
|
||||||
|
+ )
|
||||||
|
+ (unused, stderr_text, _unused) = self._check_epn_output(
|
||||||
|
+ self.master, dry_run=True
|
||||||
|
+ )
|
||||||
|
+ assert "uid=admin" in stderr_text
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
404
SOURCES/0014-IPA-EPN-enhance-input-validation_rhbz#1866291.patch
Normal file
404
SOURCES/0014-IPA-EPN-enhance-input-validation_rhbz#1866291.patch
Normal file
@ -0,0 +1,404 @@
|
|||||||
|
From 9479a393a71fe1de7d62ca2b50a7d3d8698d4ba1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois=20Cami?= <fcami@redhat.com>
|
||||||
|
Date: Tue, 4 Aug 2020 11:05:31 +0200
|
||||||
|
Subject: [PATCH] ipatests: tasks.py: fix ipa-epn invocation
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
tasks.py::ipa_epn would previously fail to invoke ipa-epn with
|
||||||
|
from_nbdays=0.
|
||||||
|
|
||||||
|
Related: https://pagure.io/freeipa/issue/8449
|
||||||
|
Signed-off-by: François Cami <fcami@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Reviewed-By: Florence Blanc-Renaud <frenaud@redhat.com>
|
||||||
|
---
|
||||||
|
ipatests/pytest_ipa/integration/tasks.py | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/ipatests/pytest_ipa/integration/tasks.py b/ipatests/pytest_ipa/integration/tasks.py
|
||||||
|
index a3f7cc838..c0a592750 100755
|
||||||
|
--- a/ipatests/pytest_ipa/integration/tasks.py
|
||||||
|
+++ b/ipatests/pytest_ipa/integration/tasks.py
|
||||||
|
@@ -1470,9 +1470,9 @@ def ipa_epn(
|
||||||
|
cmd.append("--dry-run")
|
||||||
|
if mailtest:
|
||||||
|
cmd.append("--mail-test")
|
||||||
|
- if from_nbdays:
|
||||||
|
+ if from_nbdays is not None:
|
||||||
|
cmd.extend(("--from-nbdays", str(from_nbdays)))
|
||||||
|
- if to_nbdays:
|
||||||
|
+ if to_nbdays is not None:
|
||||||
|
cmd.extend(("--to-nbdays", str(to_nbdays)))
|
||||||
|
return host.run_command(cmd, raiseonerr=raiseonerr)
|
||||||
|
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
||||||
|
From 3b8fdd87760cfb8ec739c67298f012cf0bd3ac39 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois=20Cami?= <fcami@redhat.com>
|
||||||
|
Date: Wed, 5 Aug 2020 10:02:31 +0200
|
||||||
|
Subject: [PATCH] ipatests: test_epn: test_EPN_nbdays enhancements
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Enhance test_EPN_nbdays so that it checks:
|
||||||
|
* that no emails get sent when using --dry-run
|
||||||
|
* that --from-nbdays implies --dry-run
|
||||||
|
* that --to-nbdays requires --from-nbdays
|
||||||
|
* illegal inputs for nbdays:
|
||||||
|
** from-nbdays > to-nbdays
|
||||||
|
** non-numerical input
|
||||||
|
** decimal input
|
||||||
|
|
||||||
|
Fixes: https://pagure.io/freeipa/issue/8449
|
||||||
|
Signed-off-by: François Cami <fcami@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Reviewed-By: Florence Blanc-Renaud <frenaud@redhat.com>
|
||||||
|
---
|
||||||
|
ipatests/test_integration/test_epn.py | 130 +++++++++++++++++++++++---
|
||||||
|
1 file changed, 117 insertions(+), 13 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/ipatests/test_integration/test_epn.py b/ipatests/test_integration/test_epn.py
|
||||||
|
index f4c123c6d..18f73c722 100644
|
||||||
|
--- a/ipatests/test_integration/test_epn.py
|
||||||
|
+++ b/ipatests/test_integration/test_epn.py
|
||||||
|
@@ -15,6 +15,13 @@
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
+######
|
||||||
|
+# This test suite will _expectedly_ fail if run at the end of the UTC day
|
||||||
|
+# because users would be created during day N and then EPN output checked
|
||||||
|
+# during day N+1. This is expected and should be ignored as it does not
|
||||||
|
+# reflect a product bug. -- fcami
|
||||||
|
+######
|
||||||
|
+
|
||||||
|
from __future__ import print_function, absolute_import
|
||||||
|
|
||||||
|
import base64
|
||||||
|
@@ -178,12 +185,14 @@ class TestEPN(IntegrationTest):
|
||||||
|
from_nbdays=None,
|
||||||
|
to_nbdays=None,
|
||||||
|
raiseonerr=True,
|
||||||
|
+ validatejson=True
|
||||||
|
):
|
||||||
|
result = tasks.ipa_epn(host, raiseonerr=raiseonerr, dry_run=dry_run,
|
||||||
|
from_nbdays=from_nbdays,
|
||||||
|
to_nbdays=to_nbdays)
|
||||||
|
- json.dumps(json.loads(result.stdout_text), ensure_ascii=False)
|
||||||
|
- return (result.stdout_text, result.stderr_text)
|
||||||
|
+ if validatejson:
|
||||||
|
+ json.dumps(json.loads(result.stdout_text), ensure_ascii=False)
|
||||||
|
+ return (result.stdout_text, result.stderr_text, result.returncode)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def install(cls, mh):
|
||||||
|
@@ -244,12 +253,12 @@ class TestEPN(IntegrationTest):
|
||||||
|
''')
|
||||||
|
self.master.put_file_contents('/etc/ipa/epn.conf', epn_conf)
|
||||||
|
# check EPN on client (LDAP+GSSAPI)
|
||||||
|
- (stdout_text, unused) = self._check_epn_output(
|
||||||
|
+ (stdout_text, unused, _unused) = self._check_epn_output(
|
||||||
|
self.clients[0], dry_run=True
|
||||||
|
)
|
||||||
|
assert len(json.loads(stdout_text)) == 0
|
||||||
|
# check EPN on master (LDAPI)
|
||||||
|
- (stdout_text, unused) = self._check_epn_output(
|
||||||
|
+ (stdout_text, unused, _unused) = self._check_epn_output(
|
||||||
|
self.master, dry_run=True
|
||||||
|
)
|
||||||
|
assert len(json.loads(stdout_text)) == 0
|
||||||
|
@@ -292,10 +301,10 @@ class TestEPN(IntegrationTest):
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
- (stdout_text_client, unused) = self._check_epn_output(
|
||||||
|
+ (stdout_text_client, unused, _unused) = self._check_epn_output(
|
||||||
|
self.clients[0], dry_run=True
|
||||||
|
)
|
||||||
|
- (stdout_text_master, unused) = self._check_epn_output(
|
||||||
|
+ (stdout_text_master, unused, _unused) = self._check_epn_output(
|
||||||
|
self.master, dry_run=True
|
||||||
|
)
|
||||||
|
assert stdout_text_master == stdout_text_client
|
||||||
|
@@ -331,10 +340,10 @@ class TestEPN(IntegrationTest):
|
||||||
|
password=None,
|
||||||
|
)
|
||||||
|
|
||||||
|
- (stdout_text_client, unused) = self._check_epn_output(
|
||||||
|
+ (stdout_text_client, unused, _unused) = self._check_epn_output(
|
||||||
|
self.clients[0], dry_run=True
|
||||||
|
)
|
||||||
|
- (stdout_text_master, unused) = self._check_epn_output(
|
||||||
|
+ (stdout_text_master, unused, _unused) = self._check_epn_output(
|
||||||
|
self.master, dry_run=True
|
||||||
|
)
|
||||||
|
assert stdout_text_master == stdout_text_client
|
||||||
|
@@ -344,22 +353,117 @@ class TestEPN(IntegrationTest):
|
||||||
|
expected_users = ["user1", "user3", "user7", "user14", "user28"]
|
||||||
|
assert sorted(user_lst) == sorted(expected_users)
|
||||||
|
|
||||||
|
- def test_EPN_nbdays(self):
|
||||||
|
+ def test_EPN_nbdays_0(self, cleanupmail):
|
||||||
|
"""Test the to/from nbdays options (implies --dry-run)
|
||||||
|
|
||||||
|
We have a set of users installed with varying expiration
|
||||||
|
dates. Confirm that to/from nbdays finds them.
|
||||||
|
+
|
||||||
|
+ Make sure --dry-run does not accidentally send emails.
|
||||||
|
"""
|
||||||
|
|
||||||
|
- # Compare the notify_ttls values
|
||||||
|
+ # Use the notify_ttls values with a 1-day sliding window
|
||||||
|
for i in self.notify_ttls:
|
||||||
|
user_list = []
|
||||||
|
- (stdout_text_client, unused) = self._check_epn_output(
|
||||||
|
- self.clients[0], from_nbdays=i, to_nbdays=i + 1, dry_run=True)
|
||||||
|
+ (stdout_text_client, unused, _unused) = self._check_epn_output(
|
||||||
|
+ self.clients[0], from_nbdays=i, to_nbdays=i + 1, dry_run=True
|
||||||
|
+ )
|
||||||
|
for user in json.loads(stdout_text_client):
|
||||||
|
user_list.append(user["uid"])
|
||||||
|
assert len(user_list) == 1
|
||||||
|
- assert user_list[0] == "user%d" % i
|
||||||
|
+ userid = "user{id}".format(id=i)
|
||||||
|
+ assert user_list[0] == userid
|
||||||
|
+
|
||||||
|
+ # Check that the user list is expected for any given notify_ttls.
|
||||||
|
+ (stdout_text_client, unused, _unused) = self._check_epn_output(
|
||||||
|
+ self.clients[0], to_nbdays=i
|
||||||
|
+ )
|
||||||
|
+ user_list = [user["uid"] for user in json.loads(stdout_text_client)]
|
||||||
|
+ assert len(user_list) == 1
|
||||||
|
+ assert user_list[0] == "user{id}".format(id=i - 1)
|
||||||
|
+
|
||||||
|
+ # make sure no emails were sent
|
||||||
|
+ result = self.clients[0].run_command(['ls', '-lha', '/var/mail/'])
|
||||||
|
+ assert userid not in result.stdout_text
|
||||||
|
+
|
||||||
|
+ def test_EPN_nbdays_1(self, cleanupmail):
|
||||||
|
+ """Test that for a given range, we find the users in that range"""
|
||||||
|
+
|
||||||
|
+ # Use hardcoded date ranges for now
|
||||||
|
+ for date_range in [(0, 5), (7, 15), (1, 20)]:
|
||||||
|
+ expected_user_list = ["user{i}".format(i=i)
|
||||||
|
+ for i in range(date_range[0], date_range[1])]
|
||||||
|
+ (stdout_text_client, unused, _unused) = self._check_epn_output(
|
||||||
|
+ self.clients[0],
|
||||||
|
+ from_nbdays=date_range[0],
|
||||||
|
+ to_nbdays=date_range[1]
|
||||||
|
+ )
|
||||||
|
+ user_list = [user["uid"] for user in json.loads(stdout_text_client)]
|
||||||
|
+ for user in expected_user_list:
|
||||||
|
+ assert user in user_list
|
||||||
|
+ for user in user_list:
|
||||||
|
+ assert user in expected_user_list
|
||||||
|
+
|
||||||
|
+ # Test the to/from nbdays options behavior with illegal input
|
||||||
|
+
|
||||||
|
+ def test_EPN_nbdays_input_0(self):
|
||||||
|
+ """Make sure that --to-nbdays implies --dry-run ;
|
||||||
|
+ therefore check that the output is valid JSON and contains the
|
||||||
|
+ expected user.
|
||||||
|
+ """
|
||||||
|
+
|
||||||
|
+ (stdout_text_client, unused, _unused) = self._check_epn_output(
|
||||||
|
+ self.clients[0], to_nbdays=5, dry_run=False
|
||||||
|
+ )
|
||||||
|
+ assert len(json.loads(stdout_text_client)) == 1
|
||||||
|
+ assert json.loads(stdout_text_client)[0]["uid"] == "user4"
|
||||||
|
+
|
||||||
|
+ def test_EPN_nbdays_input_1(self):
|
||||||
|
+ """Make sure that --from-nbdays cannot be used without --to-nbdays"""
|
||||||
|
+
|
||||||
|
+ (unused, stderr_text_client, rc) = \
|
||||||
|
+ self._check_epn_output(
|
||||||
|
+ self.clients[0], from_nbdays=3,
|
||||||
|
+ raiseonerr=False, validatejson=False
|
||||||
|
+ )
|
||||||
|
+ assert "You cannot specify --from-nbdays without --to-nbdays" \
|
||||||
|
+ in stderr_text_client
|
||||||
|
+ assert rc > 0
|
||||||
|
+
|
||||||
|
+ @pytest.mark.xfail(reason='freeipa ticket 8444', strict=True)
|
||||||
|
+ def test_EPN_nbdays_input_2(self):
|
||||||
|
+ """alpha input"""
|
||||||
|
+
|
||||||
|
+ (unused, stderr, rc) = self._check_epn_output(
|
||||||
|
+ self.clients[0], to_nbdays="abc",
|
||||||
|
+ raiseonerr=False, validatejson=False
|
||||||
|
+ )
|
||||||
|
+ assert "error: --to-nbdays must be an integer." in stderr
|
||||||
|
+ assert rc > 0
|
||||||
|
+
|
||||||
|
+ @pytest.mark.xfail(reason='freeipa ticket 8444', strict=True)
|
||||||
|
+ def test_EPN_nbdays_input_3(self):
|
||||||
|
+ """from_nbdays > to_nbdays"""
|
||||||
|
+
|
||||||
|
+ (unused, stderr, rc) = self._check_epn_output(
|
||||||
|
+ self.clients[0], from_nbdays=9, to_nbdays=7,
|
||||||
|
+ raiseonerr=False, validatejson=False
|
||||||
|
+ )
|
||||||
|
+ assert "error: --from-nbdays must be smaller than --to-nbdays." in \
|
||||||
|
+ stderr
|
||||||
|
+ assert rc > 0
|
||||||
|
+
|
||||||
|
+ @pytest.mark.xfail(reason='freeipa ticket 8444', strict=True)
|
||||||
|
+ def test_EPN_nbdays_input_4(self):
|
||||||
|
+ """decimal input"""
|
||||||
|
+
|
||||||
|
+ (unused, stderr, rc) = self._check_epn_output(
|
||||||
|
+ self.clients[0], to_nbdays=7.3,
|
||||||
|
+ raiseonerr=False, validatejson=False
|
||||||
|
+ )
|
||||||
|
+ logger.info(stderr)
|
||||||
|
+ assert rc > 0
|
||||||
|
+ assert "error: --to-nbdays must be an integer." in stderr
|
||||||
|
|
||||||
|
# From here the tests build on one another:
|
||||||
|
# 1) add auth
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
||||||
|
From b4266023e04729db12de2f7e0de4da9e1d00db38 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois=20Cami?= <fcami@redhat.com>
|
||||||
|
Date: Fri, 7 Aug 2020 19:08:39 +0200
|
||||||
|
Subject: [PATCH] ipatests: test_epn: update error messages
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Update error messages in the test.
|
||||||
|
|
||||||
|
Fixes: https://pagure.io/freeipa/issue/8449
|
||||||
|
Signed-off-by: François Cami <fcami@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Reviewed-By: Florence Blanc-Renaud <frenaud@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Reviewed-By: Florence Blanc-Renaud <frenaud@redhat.com>
|
||||||
|
---
|
||||||
|
ipatests/test_integration/test_epn.py | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/ipatests/test_integration/test_epn.py b/ipatests/test_integration/test_epn.py
|
||||||
|
index e03521193..af662140a 100644
|
||||||
|
--- a/ipatests/test_integration/test_epn.py
|
||||||
|
+++ b/ipatests/test_integration/test_epn.py
|
||||||
|
@@ -458,7 +458,7 @@ class TestEPN(IntegrationTest):
|
||||||
|
self.clients[0], to_nbdays="abc",
|
||||||
|
raiseonerr=False, validatejson=False
|
||||||
|
)
|
||||||
|
- assert "error: --to-nbdays must be an integer." in stderr
|
||||||
|
+ assert "error: --to-nbdays must be a positive integer." in stderr
|
||||||
|
assert rc > 0
|
||||||
|
|
||||||
|
@pytest.mark.xfail(reason='freeipa ticket 8444', strict=True)
|
||||||
|
@@ -483,7 +483,7 @@ class TestEPN(IntegrationTest):
|
||||||
|
)
|
||||||
|
logger.info(stderr)
|
||||||
|
assert rc > 0
|
||||||
|
- assert "error: --to-nbdays must be an integer." in stderr
|
||||||
|
+ assert "error: --to-nbdays must be a positive integer." in stderr
|
||||||
|
|
||||||
|
# From here the tests build on one another:
|
||||||
|
# 1) add auth
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
||||||
|
From 2809084a44e3b174fa48a611e79f04358e1d6dca Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois=20Cami?= <fcami@redhat.com>
|
||||||
|
Date: Wed, 5 Aug 2020 09:05:31 +0200
|
||||||
|
Subject: [PATCH] IPA-EPN: enhance input validation
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Enhance input validation:
|
||||||
|
* make sure --from-nbdays and --to-nbdays are integer
|
||||||
|
* make sure --from-nbdays < --to-nbdays
|
||||||
|
|
||||||
|
Fixes: https://pagure.io/freeipa/issue/8444
|
||||||
|
Signed-off-by: François Cami <fcami@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Reviewed-By: Florence Blanc-Renaud <frenaud@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Reviewed-By: Florence Blanc-Renaud <frenaud@redhat.com>
|
||||||
|
---
|
||||||
|
ipaclient/install/ipa_epn.py | 28 +++++++++++++++++++++++++--
|
||||||
|
ipatests/test_integration/test_epn.py | 3 ---
|
||||||
|
2 files changed, 26 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/ipaclient/install/ipa_epn.py b/ipaclient/install/ipa_epn.py
|
||||||
|
index 82d7b3f57..88c926e88 100644
|
||||||
|
--- a/ipaclient/install/ipa_epn.py
|
||||||
|
+++ b/ipaclient/install/ipa_epn.py
|
||||||
|
@@ -246,9 +246,33 @@ class EPN(admintool.AdminTool):
|
||||||
|
|
||||||
|
def validate_options(self):
|
||||||
|
super(EPN, self).validate_options(needs_root=True)
|
||||||
|
- if self.options.to_nbdays:
|
||||||
|
+ if self.options.to_nbdays is not None:
|
||||||
|
+ try:
|
||||||
|
+ if int(self.options.to_nbdays) < 0:
|
||||||
|
+ raise RuntimeError('Input is negative.')
|
||||||
|
+ except Exception as e:
|
||||||
|
+ self.option_parser.error(
|
||||||
|
+ "--to-nbdays must be a positive integer. "
|
||||||
|
+ "{error}".format(error=e)
|
||||||
|
+ )
|
||||||
|
self.options.dry_run = True
|
||||||
|
- if self.options.from_nbdays and not self.options.to_nbdays:
|
||||||
|
+ if self.options.from_nbdays is not None:
|
||||||
|
+ try:
|
||||||
|
+ if int(self.options.from_nbdays) < 0:
|
||||||
|
+ raise RuntimeError('Input is negative.')
|
||||||
|
+ except Exception as e:
|
||||||
|
+ self.option_parser.error(
|
||||||
|
+ "--from-nbdays must be a positive integer. "
|
||||||
|
+ "{error}".format(error=e)
|
||||||
|
+ )
|
||||||
|
+ if self.options.from_nbdays is not None and \
|
||||||
|
+ self.options.to_nbdays is not None:
|
||||||
|
+ if int(self.options.from_nbdays) >= int(self.options.to_nbdays):
|
||||||
|
+ self.option_parser.error(
|
||||||
|
+ "--from-nbdays must be smaller than --to-nbdays."
|
||||||
|
+ )
|
||||||
|
+ if self.options.from_nbdays is not None and \
|
||||||
|
+ self.options.to_nbdays is None:
|
||||||
|
self.option_parser.error(
|
||||||
|
"You cannot specify --from-nbdays without --to-nbdays"
|
||||||
|
)
|
||||||
|
diff --git a/ipatests/test_integration/test_epn.py b/ipatests/test_integration/test_epn.py
|
||||||
|
index af662140a..fc26888cb 100644
|
||||||
|
--- a/ipatests/test_integration/test_epn.py
|
||||||
|
+++ b/ipatests/test_integration/test_epn.py
|
||||||
|
@@ -450,7 +450,6 @@ class TestEPN(IntegrationTest):
|
||||||
|
in stderr_text_client
|
||||||
|
assert rc > 0
|
||||||
|
|
||||||
|
- @pytest.mark.xfail(reason='freeipa ticket 8444', strict=True)
|
||||||
|
def test_EPN_nbdays_input_2(self):
|
||||||
|
"""alpha input"""
|
||||||
|
|
||||||
|
@@ -461,7 +460,6 @@ class TestEPN(IntegrationTest):
|
||||||
|
assert "error: --to-nbdays must be a positive integer." in stderr
|
||||||
|
assert rc > 0
|
||||||
|
|
||||||
|
- @pytest.mark.xfail(reason='freeipa ticket 8444', strict=True)
|
||||||
|
def test_EPN_nbdays_input_3(self):
|
||||||
|
"""from_nbdays > to_nbdays"""
|
||||||
|
|
||||||
|
@@ -473,7 +471,6 @@ class TestEPN(IntegrationTest):
|
||||||
|
stderr
|
||||||
|
assert rc > 0
|
||||||
|
|
||||||
|
- @pytest.mark.xfail(reason='freeipa ticket 8444', strict=True)
|
||||||
|
def test_EPN_nbdays_input_4(self):
|
||||||
|
"""decimal input"""
|
||||||
|
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
@ -0,0 +1,141 @@
|
|||||||
|
From 3cf7fb1014ae40fd5a5278f27577a8196a4af051 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois=20Cami?= <fcami@redhat.com>
|
||||||
|
Date: Fri, 7 Aug 2020 07:51:53 +0200
|
||||||
|
Subject: [PATCH] ipatests: test_epn: add test_EPN_connection_refused
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Add a test for EPN behavior when the configured SMTP does not
|
||||||
|
accept connections.
|
||||||
|
|
||||||
|
Fixes: https://pagure.io/freeipa/issue/8445
|
||||||
|
Signed-off-by: François Cami <fcami@redhat.com>
|
||||||
|
Reviewed-By: Florence Blanc-Renaud <frenaud@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
---
|
||||||
|
ipatests/test_integration/test_epn.py | 27 ++++++++++++++++++++++++---
|
||||||
|
1 file changed, 24 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/ipatests/test_integration/test_epn.py b/ipatests/test_integration/test_epn.py
|
||||||
|
index c5c73835a..1a25d3710 100644
|
||||||
|
--- a/ipatests/test_integration/test_epn.py
|
||||||
|
+++ b/ipatests/test_integration/test_epn.py
|
||||||
|
@@ -182,14 +182,20 @@ class TestEPN(IntegrationTest):
|
||||||
|
self,
|
||||||
|
host,
|
||||||
|
dry_run=False,
|
||||||
|
+ mailtest=False,
|
||||||
|
from_nbdays=None,
|
||||||
|
to_nbdays=None,
|
||||||
|
raiseonerr=True,
|
||||||
|
validatejson=True
|
||||||
|
):
|
||||||
|
- result = tasks.ipa_epn(host, raiseonerr=raiseonerr, dry_run=dry_run,
|
||||||
|
- from_nbdays=from_nbdays,
|
||||||
|
- to_nbdays=to_nbdays)
|
||||||
|
+ result = tasks.ipa_epn(
|
||||||
|
+ host,
|
||||||
|
+ from_nbdays=from_nbdays,
|
||||||
|
+ to_nbdays=to_nbdays,
|
||||||
|
+ mailtest=mailtest,
|
||||||
|
+ dry_run=dry_run,
|
||||||
|
+ raiseonerr=raiseonerr
|
||||||
|
+ )
|
||||||
|
if validatejson:
|
||||||
|
json.dumps(json.loads(result.stdout_text), ensure_ascii=False)
|
||||||
|
return (result.stdout_text, result.stderr_text, result.returncode)
|
||||||
|
@@ -243,6 +249,21 @@ class TestEPN(IntegrationTest):
|
||||||
|
ck = "192481b52fb591112afd7b55b12a44c6618fdbc7e05a3b1866fd67ec579c51df"
|
||||||
|
assert cmd2.stdout_text.find(ck) == 0
|
||||||
|
|
||||||
|
+ @pytest.mark.xfail(reason='freeipa ticket 8445', strict=True)
|
||||||
|
+ def test_EPN_connection_refused(self):
|
||||||
|
+ """Test EPN behavior when the configured SMTP is down
|
||||||
|
+ """
|
||||||
|
+
|
||||||
|
+ self.master.run_command(["systemctl", "stop", "postfix"])
|
||||||
|
+ (unused, stderr_text, rc) = self._check_epn_output(
|
||||||
|
+ self.master, mailtest=True,
|
||||||
|
+ raiseonerr=False, validatejson=False
|
||||||
|
+ )
|
||||||
|
+ self.master.run_command(["systemctl", "start", "postfix"])
|
||||||
|
+ assert "IPA-EPN: Could not connect to the configured SMTP server" in \
|
||||||
|
+ stderr_text
|
||||||
|
+ assert rc > 0
|
||||||
|
+
|
||||||
|
def test_EPN_smoketest_1(self):
|
||||||
|
"""No users except admin. Check --dry-run output.
|
||||||
|
With the default configuration, the result should be an empty list.
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
||||||
|
From 53f330b053740b169d211aa16b3b36fb61157bbd Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois=20Cami?= <fcami@redhat.com>
|
||||||
|
Date: Fri, 7 Aug 2020 06:19:31 +0200
|
||||||
|
Subject: [PATCH] IPA-EPN: Fix SMTP connection error handling
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Enhance error message when SMTP is down.
|
||||||
|
|
||||||
|
Fixes: https://pagure.io/freeipa/issue/8445
|
||||||
|
Signed-off-by: François Cami <fcami@redhat.com>
|
||||||
|
Reviewed-By: Florence Blanc-Renaud <frenaud@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
---
|
||||||
|
ipaclient/install/ipa_epn.py | 17 ++++++++++-------
|
||||||
|
ipatests/test_integration/test_epn.py | 1 -
|
||||||
|
2 files changed, 10 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/ipaclient/install/ipa_epn.py b/ipaclient/install/ipa_epn.py
|
||||||
|
index 0d1ae2add..82d7b3f57 100644
|
||||||
|
--- a/ipaclient/install/ipa_epn.py
|
||||||
|
+++ b/ipaclient/install/ipa_epn.py
|
||||||
|
@@ -38,6 +38,7 @@ from email.mime.multipart import MIMEMultipart
|
||||||
|
from email.mime.text import MIMEText
|
||||||
|
from email.header import Header
|
||||||
|
from email.utils import make_msgid
|
||||||
|
+from socket import error as socketerror
|
||||||
|
|
||||||
|
from ipaplatform.paths import paths
|
||||||
|
from ipalib import api, errors
|
||||||
|
@@ -640,13 +641,15 @@ class MTAClient:
|
||||||
|
port=self._smtp_port,
|
||||||
|
timeout=self._smtp_timeout,
|
||||||
|
)
|
||||||
|
- except smtplib.SMTPException as e:
|
||||||
|
- logger.error(
|
||||||
|
- "IPA-EPN: Unable to connect to %s:%s: %s",
|
||||||
|
- self._smtp_hostname,
|
||||||
|
- self._smtp_port,
|
||||||
|
- e,
|
||||||
|
- )
|
||||||
|
+ except (socketerror, smtplib.SMTPException) as e:
|
||||||
|
+ msg = \
|
||||||
|
+ "IPA-EPN: Could not connect to the configured SMTP server: " \
|
||||||
|
+ "{host}:{port}: {error}".format(
|
||||||
|
+ host=self._smtp_hostname,
|
||||||
|
+ port=self._smtp_port,
|
||||||
|
+ error=e
|
||||||
|
+ )
|
||||||
|
+ raise admintool.ScriptError(msg)
|
||||||
|
|
||||||
|
try:
|
||||||
|
self._conn.ehlo()
|
||||||
|
diff --git a/ipatests/test_integration/test_epn.py b/ipatests/test_integration/test_epn.py
|
||||||
|
index 1a25d3710..e03521193 100644
|
||||||
|
--- a/ipatests/test_integration/test_epn.py
|
||||||
|
+++ b/ipatests/test_integration/test_epn.py
|
||||||
|
@@ -249,7 +249,6 @@ class TestEPN(IntegrationTest):
|
||||||
|
ck = "192481b52fb591112afd7b55b12a44c6618fdbc7e05a3b1866fd67ec579c51df"
|
||||||
|
assert cmd2.stdout_text.find(ck) == 0
|
||||||
|
|
||||||
|
- @pytest.mark.xfail(reason='freeipa ticket 8445', strict=True)
|
||||||
|
def test_EPN_connection_refused(self):
|
||||||
|
"""Test EPN behavior when the configured SMTP is down
|
||||||
|
"""
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
@ -0,0 +1,110 @@
|
|||||||
|
From 4a97145c3a76a4d9ebf52b3905410a0bd7bec856 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Date: Tue, 4 Aug 2020 15:09:56 -0400
|
||||||
|
Subject: [PATCH] Set mode of /etc/ipa/ca.crt to 0644 in CA-less installations
|
||||||
|
|
||||||
|
It was previously being set to 0444 which triggered a warning
|
||||||
|
in freeipa-healthcheck.
|
||||||
|
|
||||||
|
Even root needs DAC_OVERRIDE capability to write to a 0o444 file
|
||||||
|
which may not be available in some environments.
|
||||||
|
|
||||||
|
https://pagure.io/freeipa/issue/8441
|
||||||
|
|
||||||
|
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
---
|
||||||
|
ipaserver/install/certs.py | 2 +-
|
||||||
|
ipaserver/install/server/install.py | 5 ++---
|
||||||
|
2 files changed, 3 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/ipaserver/install/certs.py b/ipaserver/install/certs.py
|
||||||
|
index 22ee79bd1..51d9f9221 100644
|
||||||
|
--- a/ipaserver/install/certs.py
|
||||||
|
+++ b/ipaserver/install/certs.py
|
||||||
|
@@ -329,7 +329,7 @@ class CertDB:
|
||||||
|
ipautil.backup_file(cacert_fname)
|
||||||
|
root_nicknames = self.find_root_cert(nickname)[:-1]
|
||||||
|
with open(cacert_fname, "w") as f:
|
||||||
|
- os.fchmod(f.fileno(), stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH)
|
||||||
|
+ os.fchmod(f.fileno(), 0o644)
|
||||||
|
for root in root_nicknames:
|
||||||
|
result = self.run_certutil(["-L", "-n", root, "-a"],
|
||||||
|
capture_output=True)
|
||||||
|
diff --git a/ipaserver/install/server/install.py b/ipaserver/install/server/install.py
|
||||||
|
index b53c58e2a..6a593602f 100644
|
||||||
|
--- a/ipaserver/install/server/install.py
|
||||||
|
+++ b/ipaserver/install/server/install.py
|
||||||
|
@@ -891,9 +891,8 @@ def install(installer):
|
||||||
|
|
||||||
|
ca.install_step_0(False, None, options, custodia=custodia)
|
||||||
|
else:
|
||||||
|
- # Put the CA cert where other instances expect it
|
||||||
|
- x509.write_certificate(http_ca_cert, paths.IPA_CA_CRT)
|
||||||
|
- os.chmod(paths.IPA_CA_CRT, 0o444)
|
||||||
|
+ # /etc/ipa/ca.crt is created as a side-effect of
|
||||||
|
+ # dsinstance::enable_ssl() via export_ca_cert()
|
||||||
|
|
||||||
|
if not options.no_pkinit:
|
||||||
|
x509.write_certificate(http_ca_cert, paths.KDC_CA_BUNDLE_PEM)
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
||||||
|
From da2079ce2cc841aec56da872131112eb24326f81 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Date: Tue, 4 Aug 2020 15:12:20 -0400
|
||||||
|
Subject: [PATCH] ipatests: Check permissions of /etc/ipa/ca.crt new
|
||||||
|
installations
|
||||||
|
|
||||||
|
It should be 0644 root:root for both CA-ful and CA-less installs.
|
||||||
|
|
||||||
|
https://pagure.io/freeipa/issue/8441
|
||||||
|
|
||||||
|
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
---
|
||||||
|
ipatests/test_integration/test_caless.py | 8 ++++++++
|
||||||
|
ipatests/test_integration/test_installation.py | 10 ++++++++++
|
||||||
|
2 files changed, 18 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/ipatests/test_integration/test_caless.py b/ipatests/test_integration/test_caless.py
|
||||||
|
index 1ea7d9896..16dfbb320 100644
|
||||||
|
--- a/ipatests/test_integration/test_caless.py
|
||||||
|
+++ b/ipatests/test_integration/test_caless.py
|
||||||
|
@@ -394,6 +394,14 @@ class CALessBase(IntegrationTest):
|
||||||
|
host, cert_from_ldap.public_bytes(x509.Encoding.PEM))
|
||||||
|
assert cert_from_ldap == expected_cacrt
|
||||||
|
|
||||||
|
+ result = host.run_command(
|
||||||
|
+ ["/usr/bin/stat", "-c", "%U:%G:%a", paths.IPA_CA_CRT]
|
||||||
|
+ )
|
||||||
|
+ (owner, group, mode) = result.stdout_text.strip().split(':')
|
||||||
|
+ assert owner == "root"
|
||||||
|
+ assert group == "root"
|
||||||
|
+ assert mode == "644"
|
||||||
|
+
|
||||||
|
# Verify certmonger was not started
|
||||||
|
result = host.run_command(['getcert', 'list'], raiseonerr=False)
|
||||||
|
assert result.returncode == 0
|
||||||
|
diff --git a/ipatests/test_integration/test_installation.py b/ipatests/test_integration/test_installation.py
|
||||||
|
index 100a5a766..fb1990083 100644
|
||||||
|
--- a/ipatests/test_integration/test_installation.py
|
||||||
|
+++ b/ipatests/test_integration/test_installation.py
|
||||||
|
@@ -346,6 +346,16 @@ class TestInstallCA(IntegrationTest):
|
||||||
|
status = tasks.wait_for_request(self.master, request_id[0], 300)
|
||||||
|
assert status == "MONITORING"
|
||||||
|
|
||||||
|
+ def test_ipa_ca_crt_permissions(self):
|
||||||
|
+ """Verify that /etc/ipa/ca.cert is mode 0644 root:root"""
|
||||||
|
+ result = self.master.run_command(
|
||||||
|
+ ["/usr/bin/stat", "-c", "%U:%G:%a", paths.IPA_CA_CRT]
|
||||||
|
+ )
|
||||||
|
+ out = str(result.stdout_text.strip())
|
||||||
|
+ (owner, group, mode) = out.split(':')
|
||||||
|
+ assert mode == "644"
|
||||||
|
+ assert owner == "root"
|
||||||
|
+ assert group == "root"
|
||||||
|
|
||||||
|
class TestInstallWithCA_KRA1(InstallTestBase1):
|
||||||
|
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
@ -0,0 +1,62 @@
|
|||||||
|
From 438285470610dee4aa6a56523df22307840ede87 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois=20Cami?= <fcami@redhat.com>
|
||||||
|
Date: Mon, 7 Sep 2020 11:07:21 +0200
|
||||||
|
Subject: [PATCH] SELinux Policy: let custodia replicate keys
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Enhance the SELinux policy so that custodia can replicate sub-CA keys
|
||||||
|
and certificates:
|
||||||
|
allow ipa_custodia_t self:tcp_socket { bind create };
|
||||||
|
allow ipa_custodia_t node_t:tcp_socket node_bind;
|
||||||
|
allow ipa_custodia_t pki_tomcat_cert_t:dir remove_name;
|
||||||
|
allow ipa_custodia_t pki_tomcat_cert_t:file create;
|
||||||
|
allow ipa_custodia_t pki_tomcat_cert_t:file unlink;
|
||||||
|
allow ipa_custodia_t self:process execmem;
|
||||||
|
|
||||||
|
Found by: test_replica_promotion::TestSubCAkeyReplication
|
||||||
|
|
||||||
|
Fixes: https://pagure.io/freeipa/issue/8488
|
||||||
|
Signed-off-by: François Cami <fcami@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
---
|
||||||
|
selinux/ipa.te | 11 +++++++++++
|
||||||
|
1 file changed, 11 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/selinux/ipa.te b/selinux/ipa.te
|
||||||
|
index c4c3fa805..3fa4ba980 100644
|
||||||
|
--- a/selinux/ipa.te
|
||||||
|
+++ b/selinux/ipa.te
|
||||||
|
@@ -72,6 +72,9 @@ logging_log_file(ipa_custodia_log_t)
|
||||||
|
type ipa_custodia_tmp_t;
|
||||||
|
files_tmp_file(ipa_custodia_tmp_t)
|
||||||
|
|
||||||
|
+type pki_tomcat_cert_t;
|
||||||
|
+type node_t;
|
||||||
|
+
|
||||||
|
########################################
|
||||||
|
#
|
||||||
|
# ipa_otpd local policy
|
||||||
|
@@ -323,10 +326,18 @@ optional_policy(`
|
||||||
|
allow ipa_custodia_t self:capability { setgid setuid };
|
||||||
|
allow ipa_custodia_t self:fifo_file rw_fifo_file_perms;
|
||||||
|
allow ipa_custodia_t self:netlink_route_socket { create_socket_perms nlmsg_read };
|
||||||
|
+allow ipa_custodia_t self:process execmem;
|
||||||
|
allow ipa_custodia_t self:unix_stream_socket create_stream_socket_perms;
|
||||||
|
allow ipa_custodia_t self:unix_dgram_socket create_socket_perms;
|
||||||
|
+allow ipa_custodia_t self:tcp_socket { bind create };
|
||||||
|
allow ipa_custodia_t self:udp_socket create_socket_perms;
|
||||||
|
|
||||||
|
+allow ipa_custodia_t node_t:tcp_socket node_bind;
|
||||||
|
+
|
||||||
|
+allow ipa_custodia_t pki_tomcat_cert_t:dir remove_name;
|
||||||
|
+allow ipa_custodia_t pki_tomcat_cert_t:file create;
|
||||||
|
+allow ipa_custodia_t pki_tomcat_cert_t:file unlink;
|
||||||
|
+
|
||||||
|
manage_dirs_pattern(ipa_custodia_t,ipa_custodia_log_t,ipa_custodia_log_t)
|
||||||
|
manage_files_pattern(ipa_custodia_t, ipa_custodia_log_t, ipa_custodia_log_t)
|
||||||
|
logging_log_filetrans(ipa_custodia_t, ipa_custodia_log_t, { dir file })
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
@ -0,0 +1,117 @@
|
|||||||
|
Adapted version of d1c860e59b52. to make it apply without commits
|
||||||
|
|
||||||
|
34b4d9bce5 - ipatests: Test ipa user login with wrong password
|
||||||
|
ab36d79adc - ipatests: Test for ipa-nis-manage CLI tool.
|
||||||
|
|
||||||
|
From d1c860e59b5237178066ed963cc2fa50d99cd690 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois=20Cami?= <fcami@redhat.com>
|
||||||
|
Date: Wed, 16 Sep 2020 17:07:21 +0200
|
||||||
|
Subject: [PATCH] ipatests: check that pkispawn log is not empty
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Since commits:
|
||||||
|
https://github.com/dogtagpki/pki/commit/0102d836f4eac0fcea0adddb4c98d5ea05e4e8f6
|
||||||
|
https://github.com/dogtagpki/pki/commit/de217557a642d799b1c4c390efa55493707c738e
|
||||||
|
pkispawn will not honor the pki_log_level configuration item.
|
||||||
|
All 10.9 Dogtag versions have these commits.
|
||||||
|
This affects FreeIPA in that it makes debugging Dogtag installation issues next
|
||||||
|
to impossible.
|
||||||
|
Adding --debug to the pkispawn CLI is required to revert to the previous
|
||||||
|
behavior.
|
||||||
|
Therefore check that the log is not empty and contains DEBUG+INFO lines.
|
||||||
|
|
||||||
|
Fixes: https://pagure.io/freeipa/issue/8503
|
||||||
|
Signed-off-by: François Cami <fcami@redhat.com>
|
||||||
|
Reviewed-By: Thomas Woerner <twoerner@redhat.com>
|
||||||
|
Reviewed-By: Christian Heimes <cheimes@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Reviewed-By: Thomas Woerner <twoerner@redhat.com>
|
||||||
|
Reviewed-By: Christian Heimes <cheimes@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
---
|
||||||
|
ipatests/test_integration/test_commands.py | 23 ++++++++++++++++++++++
|
||||||
|
1 file changed, 23 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/ipatests/test_integration/test_commands.py b/ipatests/test_integration/test_commands.py
|
||||||
|
index fa6abd81e..3a12bcde2 100644
|
||||||
|
--- a/ipatests/test_integration/test_commands.py
|
||||||
|
+++ b/ipatests/test_integration/test_commands.py
|
||||||
|
@@ -1295,3 +1295,26 @@ class TestIPACommand(IntegrationTest):
|
||||||
|
assert msg2 not in result.stderr_text
|
||||||
|
finally:
|
||||||
|
bashrc_backup.restore()
|
||||||
|
+
|
||||||
|
+ def test_pkispawn_log_is_present(self):
|
||||||
|
+ """
|
||||||
|
+ This testcase checks if pkispawn logged properly.
|
||||||
|
+ It is a candidate from being moved out of test_commands.
|
||||||
|
+ """
|
||||||
|
+ result = self.master.run_command(
|
||||||
|
+ ["ls", "/var/log/pki/"]
|
||||||
|
+ )
|
||||||
|
+ pkispawnlogfile = None
|
||||||
|
+ for file in result.stdout_text.splitlines():
|
||||||
|
+ if file.startswith("pki-ca-spawn"):
|
||||||
|
+ pkispawnlogfile = file
|
||||||
|
+ break
|
||||||
|
+ assert pkispawnlogfile is not None
|
||||||
|
+ pkispawnlogfile = os.path.sep.join(("/var/log/pki", pkispawnlogfile))
|
||||||
|
+ pkispawnlog = self.master.get_file_contents(
|
||||||
|
+ pkispawnlogfile, encoding='utf-8'
|
||||||
|
+ )
|
||||||
|
+ # Totally arbitrary. pkispawn debug logs tend to be > 10KiB.
|
||||||
|
+ assert len(pkispawnlog) > 1024
|
||||||
|
+ assert "DEBUG" in pkispawnlog
|
||||||
|
+ assert "INFO" in pkispawnlog
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
||||||
|
From 97c6d2d2c2359b8ff5585afa0d2e5f5599cd5048 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois=20Cami?= <fcami@redhat.com>
|
||||||
|
Date: Thu, 17 Sep 2020 07:31:59 +0200
|
||||||
|
Subject: [PATCH] dogtaginstance.py: add --debug to pkispawn
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Since commits:
|
||||||
|
https://github.com/dogtagpki/pki/commit/0102d836f4eac0fcea0adddb4c98d5ea05e4e8f6
|
||||||
|
https://github.com/dogtagpki/pki/commit/de217557a642d799b1c4c390efa55493707c738e
|
||||||
|
pkispawn will not honor the pki_log_level configuration item.
|
||||||
|
All 10.9 Dogtag versions have these commits.
|
||||||
|
This affects FreeIPA in that it makes debugging Dogtag installation issues next
|
||||||
|
to impossible.
|
||||||
|
Adding --debug to the pkispawn CLI is required to revert to the previous
|
||||||
|
behavior.
|
||||||
|
|
||||||
|
Fixes: https://pagure.io/freeipa/issue/8503
|
||||||
|
Signed-off-by: François Cami <fcami@redhat.com>
|
||||||
|
Reviewed-By: Thomas Woerner <twoerner@redhat.com>
|
||||||
|
Reviewed-By: Christian Heimes <cheimes@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Reviewed-By: Thomas Woerner <twoerner@redhat.com>
|
||||||
|
Reviewed-By: Christian Heimes <cheimes@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
---
|
||||||
|
ipaserver/install/dogtaginstance.py | 3 ++-
|
||||||
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/ipaserver/install/dogtaginstance.py b/ipaserver/install/dogtaginstance.py
|
||||||
|
index 524262ad7..03fdd7c0b 100644
|
||||||
|
--- a/ipaserver/install/dogtaginstance.py
|
||||||
|
+++ b/ipaserver/install/dogtaginstance.py
|
||||||
|
@@ -183,7 +183,8 @@ class DogtagInstance(service.Service):
|
||||||
|
subsystem = self.subsystem
|
||||||
|
args = [paths.PKISPAWN,
|
||||||
|
"-s", subsystem,
|
||||||
|
- "-f", cfg_file]
|
||||||
|
+ "-f", cfg_file,
|
||||||
|
+ "--debug"]
|
||||||
|
|
||||||
|
with open(cfg_file) as f:
|
||||||
|
logger.debug(
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
@ -0,0 +1,549 @@
|
|||||||
|
From 52929cbadf0252fcac1019b74663a2808061ea1b Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois=20Cami?= <fcami@redhat.com>
|
||||||
|
Date: Thu, 17 Sep 2020 11:30:45 +0200
|
||||||
|
Subject: [PATCH] ipatests: enhance TestSubCAkeyReplication
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
enhance the test suite so that it covers:
|
||||||
|
- deleting subCAs (disabling them first)
|
||||||
|
- checking what happens when creating a dozen+ subCAs at a time
|
||||||
|
- adding a subCA that already exists and expect failure
|
||||||
|
|
||||||
|
Related: https://pagure.io/freeipa/issue/8488
|
||||||
|
Signed-off-by: François Cami <fcami@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
Reviewed-By: Christian Heimes <cheimes@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Reviewed-By: Ondrej Mosnacek <omosnace@redhat.com>
|
||||||
|
Reviewed-By: Lukas Vrabec <lvrabec@redhat.com>
|
||||||
|
Reviewed-By: Zdenek Pytela <zpytela@redhat.com>
|
||||||
|
Reviewed-By: Thomas Woerner <twoerner@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
Reviewed-By: Christian Heimes <cheimes@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Reviewed-By: Ondrej Mosnacek <omosnace@redhat.com>
|
||||||
|
Reviewed-By: Lukas Vrabec <lvrabec@redhat.com>
|
||||||
|
Reviewed-By: Zdenek Pytela <zpytela@redhat.com>
|
||||||
|
Reviewed-By: Thomas Woerner <twoerner@redhat.com>
|
||||||
|
---
|
||||||
|
.../test_replica_promotion.py | 52 +++++++++++++++++--
|
||||||
|
1 file changed, 47 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/ipatests/test_integration/test_replica_promotion.py b/ipatests/test_integration/test_replica_promotion.py
|
||||||
|
index 82117054f..f0b72e1f8 100644
|
||||||
|
--- a/ipatests/test_integration/test_replica_promotion.py
|
||||||
|
+++ b/ipatests/test_integration/test_replica_promotion.py
|
||||||
|
@@ -474,17 +474,35 @@ class TestSubCAkeyReplication(IntegrationTest):
|
||||||
|
SERVER_CERT_NICK: 'u,u,u',
|
||||||
|
}
|
||||||
|
|
||||||
|
- def add_subca(self, host, name, subject):
|
||||||
|
+ def add_subca(self, host, name, subject, raiseonerr=True):
|
||||||
|
result = host.run_command([
|
||||||
|
'ipa', 'ca-add', name,
|
||||||
|
'--subject', subject,
|
||||||
|
- '--desc', self.SUBCA_DESC,
|
||||||
|
+ '--desc', self.SUBCA_DESC],
|
||||||
|
+ raiseonerr=raiseonerr
|
||||||
|
+ )
|
||||||
|
+ if raiseonerr:
|
||||||
|
+ assert "ipa: ERROR:" not in result.stderr_text
|
||||||
|
+ auth_id = "".join(re.findall(AUTH_ID_RE, result.stdout_text))
|
||||||
|
+ return '{} {}'.format(IPA_CA_NICKNAME, auth_id)
|
||||||
|
+ else:
|
||||||
|
+ assert "ipa: ERROR:" in result.stderr_text
|
||||||
|
+ assert result.returncode != 0
|
||||||
|
+ return result
|
||||||
|
+
|
||||||
|
+ def del_subca(self, host, name):
|
||||||
|
+ host.run_command([
|
||||||
|
+ 'ipa', 'ca-disable', name
|
||||||
|
])
|
||||||
|
- auth_id = "".join(re.findall(AUTH_ID_RE, result.stdout_text))
|
||||||
|
- return '{} {}'.format(IPA_CA_NICKNAME, auth_id)
|
||||||
|
+ result = host.run_command([
|
||||||
|
+ 'ipa', 'ca-del', name
|
||||||
|
+ ])
|
||||||
|
+ assert "Deleted CA \"{}\"".format(name) in result.stdout_text
|
||||||
|
|
||||||
|
def check_subca(self, host, name, cert_nick):
|
||||||
|
- host.run_command(['ipa', 'ca-show', name])
|
||||||
|
+ result = host.run_command(['ipa', 'ca-show', name])
|
||||||
|
+ # ipa ca-show returns 0 even if the cert cannot be found locally.
|
||||||
|
+ assert "ipa: ERROR:" not in result.stderr_text
|
||||||
|
tasks.run_certutil(
|
||||||
|
host, ['-L', '-n', cert_nick], paths.PKI_TOMCAT_ALIAS_DIR
|
||||||
|
)
|
||||||
|
@@ -627,6 +645,30 @@ class TestSubCAkeyReplication(IntegrationTest):
|
||||||
|
ssl = replica.run_command(ssl_cmd)
|
||||||
|
assert 'Issuer: CN = {}'.format(self.SUBCA_MASTER) in ssl.stdout_text
|
||||||
|
|
||||||
|
+ def test_del_subca_master_on_replica(self):
|
||||||
|
+ self.del_subca(self.replicas[0], self.SUBCA_MASTER)
|
||||||
|
+
|
||||||
|
+ def test_del_subca_replica(self):
|
||||||
|
+ self.del_subca(self.replicas[0], self.SUBCA_REPLICA)
|
||||||
|
+
|
||||||
|
+ def test_scale_add_subca(self):
|
||||||
|
+ master = self.master
|
||||||
|
+ replica = self.replicas[0]
|
||||||
|
+
|
||||||
|
+ subcas = {}
|
||||||
|
+ for i in range(0, 16):
|
||||||
|
+ name = "_".join((self.SUBCA_MASTER, str(i)))
|
||||||
|
+ cn = "_".join((self.SUBCA_MASTER_CN, str(i)))
|
||||||
|
+ subcas[name] = self.add_subca(master, name, cn)
|
||||||
|
+ self.add_subca(master, name, cn, raiseonerr=False)
|
||||||
|
+
|
||||||
|
+ # give replication some time
|
||||||
|
+ time.sleep(15)
|
||||||
|
+
|
||||||
|
+ for name in subcas:
|
||||||
|
+ self.check_subca(replica, name, subcas[name])
|
||||||
|
+ self.del_subca(replica, name)
|
||||||
|
+
|
||||||
|
|
||||||
|
class TestReplicaInstallCustodia(IntegrationTest):
|
||||||
|
"""
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
||||||
|
From 5a5962426d8174212f0b7efef1a9e53aaecb5901 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois=20Cami?= <fcami@redhat.com>
|
||||||
|
Date: Fri, 18 Sep 2020 11:55:37 +0200
|
||||||
|
Subject: [PATCH] SELinux: Add dedicated policy for ipa-pki-retrieve-key
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Add proper labeling, transition and policy for ipa-pki-retrieve-key.
|
||||||
|
Make sure tomcat_t can execute ipa-pki-retrieve-key.
|
||||||
|
|
||||||
|
Fixes: https://pagure.io/freeipa/issue/8488
|
||||||
|
Signed-off-by: Christian Heimes <cheimes@redhat.com>
|
||||||
|
Signed-off-by: François Cami <fcami@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
Reviewed-By: Christian Heimes <cheimes@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Reviewed-By: Ondrej Mosnacek <omosnace@redhat.com>
|
||||||
|
Reviewed-By: Lukas Vrabec <lvrabec@redhat.com>
|
||||||
|
Reviewed-By: Zdenek Pytela <zpytela@redhat.com>
|
||||||
|
Reviewed-By: Thomas Woerner <twoerner@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
Reviewed-By: Christian Heimes <cheimes@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Reviewed-By: Ondrej Mosnacek <omosnace@redhat.com>
|
||||||
|
Reviewed-By: Lukas Vrabec <lvrabec@redhat.com>
|
||||||
|
Reviewed-By: Zdenek Pytela <zpytela@redhat.com>
|
||||||
|
Reviewed-By: Thomas Woerner <twoerner@redhat.com>
|
||||||
|
---
|
||||||
|
selinux/ipa.fc | 1 +
|
||||||
|
selinux/ipa.te | 28 ++++++++++++++++++++++++++++
|
||||||
|
2 files changed, 29 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/selinux/ipa.fc b/selinux/ipa.fc
|
||||||
|
index a98cc4665..1176f383c 100644
|
||||||
|
--- a/selinux/ipa.fc
|
||||||
|
+++ b/selinux/ipa.fc
|
||||||
|
@@ -30,5 +30,6 @@
|
||||||
|
/usr/libexec/ipa/custodia/ipa-custodia-pki-tomcat -- gen_context(system_u:object_r:ipa_custodia_pki_tomcat_exec_t,s0)
|
||||||
|
/usr/libexec/ipa/custodia/ipa-custodia-pki-tomcat-wrapped -- gen_context(system_u:object_r:ipa_custodia_pki_tomcat_exec_t,s0)
|
||||||
|
/usr/libexec/ipa/custodia/ipa-custodia-ra-agent -- gen_context(system_u:object_r:ipa_custodia_ra_agent_exec_t,s0)
|
||||||
|
+/usr/libexec/ipa/ipa-pki-retrieve-key -- gen_context(system_u:object_r:ipa_pki_retrieve_key_exec_t,s0)
|
||||||
|
|
||||||
|
/var/log/ipa-custodia.audit.log(/.*)? -- gen_context(system_u:object_r:ipa_custodia_log_t,s0)
|
||||||
|
diff --git a/selinux/ipa.te b/selinux/ipa.te
|
||||||
|
index 3fa4ba980..26daed293 100644
|
||||||
|
--- a/selinux/ipa.te
|
||||||
|
+++ b/selinux/ipa.te
|
||||||
|
@@ -75,6 +75,9 @@ files_tmp_file(ipa_custodia_tmp_t)
|
||||||
|
type pki_tomcat_cert_t;
|
||||||
|
type node_t;
|
||||||
|
|
||||||
|
+type ipa_pki_retrieve_key_exec_t;
|
||||||
|
+init_script_file(ipa_pki_retrieve_key_exec_t)
|
||||||
|
+
|
||||||
|
########################################
|
||||||
|
#
|
||||||
|
# ipa_otpd local policy
|
||||||
|
@@ -412,3 +415,28 @@ optional_policy(`
|
||||||
|
optional_policy(`
|
||||||
|
systemd_private_tmp(ipa_custodia_tmp_t)
|
||||||
|
')
|
||||||
|
+
|
||||||
|
+optional_policy(`
|
||||||
|
+ gen_require(`
|
||||||
|
+ type tomcat_t;
|
||||||
|
+ ')
|
||||||
|
+ can_exec(tomcat_t, ipa_pki_retrieve_key_exec_t)
|
||||||
|
+ pki_manage_tomcat_etc_rw(ipa_pki_retrieve_key_exec_t)
|
||||||
|
+')
|
||||||
|
+
|
||||||
|
+optional_policy(`
|
||||||
|
+ gen_require(`
|
||||||
|
+ type devlog_t;
|
||||||
|
+ ')
|
||||||
|
+
|
||||||
|
+ dontaudit ipa_custodia_t devlog_t:lnk_file read_lnk_file_perms;
|
||||||
|
+')
|
||||||
|
+
|
||||||
|
+optional_policy(`
|
||||||
|
+ java_exec(ipa_custodia_pki_tomcat_exec_t)
|
||||||
|
+ # allow Java to read system status and RNG
|
||||||
|
+ dev_read_urand(ipa_custodia_t)
|
||||||
|
+ dev_read_rand(ipa_custodia_t)
|
||||||
|
+ kernel_read_network_state(ipa_custodia_t)
|
||||||
|
+ dev_read_sysfs(ipa_custodia_t)
|
||||||
|
+')
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
||||||
|
From c126610ea6605a1ff36cecf2e2f5b2cb97130831 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois=20Cami?= <fcami@redhat.com>
|
||||||
|
Date: Fri, 18 Sep 2020 17:45:39 +0200
|
||||||
|
Subject: [PATCH] SELinux Policy: let custodia_t map custodia_tmp_t
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
This is used by the JVM perf counters.
|
||||||
|
|
||||||
|
Related: https://pagure.io/freeipa/issue/8488
|
||||||
|
Signed-off-by: François Cami <fcami@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
Reviewed-By: Christian Heimes <cheimes@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Reviewed-By: Ondrej Mosnacek <omosnace@redhat.com>
|
||||||
|
Reviewed-By: Lukas Vrabec <lvrabec@redhat.com>
|
||||||
|
Reviewed-By: Zdenek Pytela <zpytela@redhat.com>
|
||||||
|
Reviewed-By: Thomas Woerner <twoerner@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
Reviewed-By: Christian Heimes <cheimes@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Reviewed-By: Ondrej Mosnacek <omosnace@redhat.com>
|
||||||
|
Reviewed-By: Lukas Vrabec <lvrabec@redhat.com>
|
||||||
|
Reviewed-By: Zdenek Pytela <zpytela@redhat.com>
|
||||||
|
Reviewed-By: Thomas Woerner <twoerner@redhat.com>
|
||||||
|
---
|
||||||
|
selinux/ipa.te | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/selinux/ipa.te b/selinux/ipa.te
|
||||||
|
index 26daed293..0a9ccaf83 100644
|
||||||
|
--- a/selinux/ipa.te
|
||||||
|
+++ b/selinux/ipa.te
|
||||||
|
@@ -347,6 +347,7 @@ logging_log_filetrans(ipa_custodia_t, ipa_custodia_log_t, { dir file })
|
||||||
|
|
||||||
|
manage_dirs_pattern(ipa_custodia_t, ipa_custodia_tmp_t, ipa_custodia_tmp_t)
|
||||||
|
manage_files_pattern(ipa_custodia_t, ipa_custodia_tmp_t, ipa_custodia_tmp_t)
|
||||||
|
+mmap_exec_files_pattern(ipa_custodia_t, ipa_custodia_tmp_t, ipa_custodia_tmp_t)
|
||||||
|
files_tmp_filetrans(ipa_custodia_t, ipa_custodia_tmp_t, { dir file })
|
||||||
|
|
||||||
|
kernel_dgram_send(ipa_custodia_t)
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
||||||
|
From 310dbd6eec337f0747d73fa87363083a742fc5dc Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois=20Cami?= <fcami@redhat.com>
|
||||||
|
Date: Mon, 21 Sep 2020 11:32:52 +0200
|
||||||
|
Subject: [PATCH] SELinux Policy: ipa_pki_retrieve_key_exec_t =>
|
||||||
|
ipa_pki_retrieve_key_t
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Grant pki_manage_tomcat_etc_rw to ipa_pki_retrieve_key_t instead of
|
||||||
|
ipa_pki_retrieve_key_exec_t.
|
||||||
|
As suggested by Ondrej Mosnáček.
|
||||||
|
|
||||||
|
Fixes: https://pagure.io/freeipa/issue/8488
|
||||||
|
Signed-off-by: François Cami <fcami@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
Reviewed-By: Christian Heimes <cheimes@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Reviewed-By: Ondrej Mosnacek <omosnace@redhat.com>
|
||||||
|
Reviewed-By: Lukas Vrabec <lvrabec@redhat.com>
|
||||||
|
Reviewed-By: Zdenek Pytela <zpytela@redhat.com>
|
||||||
|
Reviewed-By: Thomas Woerner <twoerner@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
Reviewed-By: Christian Heimes <cheimes@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Reviewed-By: Ondrej Mosnacek <omosnace@redhat.com>
|
||||||
|
Reviewed-By: Lukas Vrabec <lvrabec@redhat.com>
|
||||||
|
Reviewed-By: Zdenek Pytela <zpytela@redhat.com>
|
||||||
|
Reviewed-By: Thomas Woerner <twoerner@redhat.com>
|
||||||
|
---
|
||||||
|
selinux/ipa.te | 4 +++-
|
||||||
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/selinux/ipa.te b/selinux/ipa.te
|
||||||
|
index 0a9ccaf83..92a3b2359 100644
|
||||||
|
--- a/selinux/ipa.te
|
||||||
|
+++ b/selinux/ipa.te
|
||||||
|
@@ -78,6 +78,8 @@ type node_t;
|
||||||
|
type ipa_pki_retrieve_key_exec_t;
|
||||||
|
init_script_file(ipa_pki_retrieve_key_exec_t)
|
||||||
|
|
||||||
|
+type ipa_pki_retrieve_key_t;
|
||||||
|
+
|
||||||
|
########################################
|
||||||
|
#
|
||||||
|
# ipa_otpd local policy
|
||||||
|
@@ -422,7 +424,7 @@ optional_policy(`
|
||||||
|
type tomcat_t;
|
||||||
|
')
|
||||||
|
can_exec(tomcat_t, ipa_pki_retrieve_key_exec_t)
|
||||||
|
- pki_manage_tomcat_etc_rw(ipa_pki_retrieve_key_exec_t)
|
||||||
|
+ pki_manage_tomcat_etc_rw(ipa_pki_retrieve_key_t)
|
||||||
|
')
|
||||||
|
|
||||||
|
optional_policy(`
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
||||||
|
From 0518c63768b50973f3d3129547f5b4b95335f4a8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois=20Cami?= <fcami@redhat.com>
|
||||||
|
Date: Mon, 21 Sep 2020 11:37:12 +0200
|
||||||
|
Subject: [PATCH] SELinux Policy: ipa_custodia_pki_tomcat_exec_t =>
|
||||||
|
ipa_custodia_pki_tomcat_t
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
ipa_custodia_pki_tomcat_exec_t was granted java_exec by mistake ; replace by
|
||||||
|
ipa_custodia_pki_tomcat_t.
|
||||||
|
As suggested by Ondrej Mosnáček.
|
||||||
|
|
||||||
|
Fixes: https://pagure.io/freeipa/issue/8488
|
||||||
|
Signed-off-by: François Cami <fcami@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
Reviewed-By: Christian Heimes <cheimes@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Reviewed-By: Ondrej Mosnacek <omosnace@redhat.com>
|
||||||
|
Reviewed-By: Lukas Vrabec <lvrabec@redhat.com>
|
||||||
|
Reviewed-By: Zdenek Pytela <zpytela@redhat.com>
|
||||||
|
Reviewed-By: Thomas Woerner <twoerner@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
Reviewed-By: Christian Heimes <cheimes@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Reviewed-By: Ondrej Mosnacek <omosnace@redhat.com>
|
||||||
|
Reviewed-By: Lukas Vrabec <lvrabec@redhat.com>
|
||||||
|
Reviewed-By: Zdenek Pytela <zpytela@redhat.com>
|
||||||
|
Reviewed-By: Thomas Woerner <twoerner@redhat.com>
|
||||||
|
---
|
||||||
|
selinux/ipa.te | 4 +++-
|
||||||
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/selinux/ipa.te b/selinux/ipa.te
|
||||||
|
index 92a3b2359..b2c618a53 100644
|
||||||
|
--- a/selinux/ipa.te
|
||||||
|
+++ b/selinux/ipa.te
|
||||||
|
@@ -63,6 +63,8 @@ init_script_file(ipa_custodia_dmldap_exec_t)
|
||||||
|
type ipa_custodia_pki_tomcat_exec_t;
|
||||||
|
init_script_file(ipa_custodia_pki_tomcat_exec_t)
|
||||||
|
|
||||||
|
+type ipa_custodia_pki_tomcat_t;
|
||||||
|
+
|
||||||
|
type ipa_custodia_ra_agent_exec_t;
|
||||||
|
init_script_file(ipa_custodia_ra_agent_exec_t)
|
||||||
|
|
||||||
|
@@ -436,7 +438,7 @@ optional_policy(`
|
||||||
|
')
|
||||||
|
|
||||||
|
optional_policy(`
|
||||||
|
- java_exec(ipa_custodia_pki_tomcat_exec_t)
|
||||||
|
+ java_exec(ipa_custodia_pki_tomcat_t)
|
||||||
|
# allow Java to read system status and RNG
|
||||||
|
dev_read_urand(ipa_custodia_t)
|
||||||
|
dev_read_rand(ipa_custodia_t)
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
||||||
|
From 25cf7af0d41bbd34621f37c95802675b42baeae9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois=20Cami?= <fcami@redhat.com>
|
||||||
|
Date: Tue, 22 Sep 2020 11:36:13 +0200
|
||||||
|
Subject: [PATCH] SELinux Policy: flag ipa_pki_retrieve_key_exec_t as
|
||||||
|
domain_type
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Fixes: https://pagure.io/freeipa/issue/8488
|
||||||
|
Signed-off-by: François Cami <fcami@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
Reviewed-By: Christian Heimes <cheimes@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Reviewed-By: Ondrej Mosnacek <omosnace@redhat.com>
|
||||||
|
Reviewed-By: Lukas Vrabec <lvrabec@redhat.com>
|
||||||
|
Reviewed-By: Zdenek Pytela <zpytela@redhat.com>
|
||||||
|
Reviewed-By: Thomas Woerner <twoerner@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
Reviewed-By: Christian Heimes <cheimes@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Reviewed-By: Ondrej Mosnacek <omosnace@redhat.com>
|
||||||
|
Reviewed-By: Lukas Vrabec <lvrabec@redhat.com>
|
||||||
|
Reviewed-By: Zdenek Pytela <zpytela@redhat.com>
|
||||||
|
Reviewed-By: Thomas Woerner <twoerner@redhat.com>
|
||||||
|
---
|
||||||
|
selinux/ipa.te | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/selinux/ipa.te b/selinux/ipa.te
|
||||||
|
index b2c618a53..42b010133 100644
|
||||||
|
--- a/selinux/ipa.te
|
||||||
|
+++ b/selinux/ipa.te
|
||||||
|
@@ -78,6 +78,7 @@ type pki_tomcat_cert_t;
|
||||||
|
type node_t;
|
||||||
|
|
||||||
|
type ipa_pki_retrieve_key_exec_t;
|
||||||
|
+domain_type(ipa_pki_retrieve_key_exec_t)
|
||||||
|
init_script_file(ipa_pki_retrieve_key_exec_t)
|
||||||
|
|
||||||
|
type ipa_pki_retrieve_key_t;
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
||||||
|
From 7ad04841245668e3126cb1718ef7ec1b744526e8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois=20Cami?= <fcami@redhat.com>
|
||||||
|
Date: Tue, 22 Sep 2020 13:12:05 +0200
|
||||||
|
Subject: [PATCH] SELinux Policy: make interfaces for kernel modules
|
||||||
|
non-optional
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Interfaces for kernel modules do not need to be in an optional module.
|
||||||
|
Also make sure ipa_custodia_t can log.
|
||||||
|
Suggested by Lukas Vrabec.
|
||||||
|
|
||||||
|
Fixes: https://pagure.io/freeipa/issue/8488
|
||||||
|
Signed-off-by: François Cami <fcami@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
Reviewed-By: Christian Heimes <cheimes@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Reviewed-By: Ondrej Mosnacek <omosnace@redhat.com>
|
||||||
|
Reviewed-By: Lukas Vrabec <lvrabec@redhat.com>
|
||||||
|
Reviewed-By: Zdenek Pytela <zpytela@redhat.com>
|
||||||
|
Reviewed-By: Thomas Woerner <twoerner@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
Reviewed-By: Christian Heimes <cheimes@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Reviewed-By: Ondrej Mosnacek <omosnace@redhat.com>
|
||||||
|
Reviewed-By: Lukas Vrabec <lvrabec@redhat.com>
|
||||||
|
Reviewed-By: Zdenek Pytela <zpytela@redhat.com>
|
||||||
|
Reviewed-By: Thomas Woerner <twoerner@redhat.com>
|
||||||
|
---
|
||||||
|
selinux/ipa.te | 16 +++++++++-------
|
||||||
|
1 file changed, 9 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/selinux/ipa.te b/selinux/ipa.te
|
||||||
|
index 42b010133..f984a0f94 100644
|
||||||
|
--- a/selinux/ipa.te
|
||||||
|
+++ b/selinux/ipa.te
|
||||||
|
@@ -78,10 +78,9 @@ type pki_tomcat_cert_t;
|
||||||
|
type node_t;
|
||||||
|
|
||||||
|
type ipa_pki_retrieve_key_exec_t;
|
||||||
|
-domain_type(ipa_pki_retrieve_key_exec_t)
|
||||||
|
-init_script_file(ipa_pki_retrieve_key_exec_t)
|
||||||
|
-
|
||||||
|
type ipa_pki_retrieve_key_t;
|
||||||
|
+domain_type(ipa_pki_retrieve_key_t)
|
||||||
|
+init_script_file(ipa_pki_retrieve_key_exec_t)
|
||||||
|
|
||||||
|
########################################
|
||||||
|
#
|
||||||
|
@@ -356,6 +355,7 @@ mmap_exec_files_pattern(ipa_custodia_t, ipa_custodia_tmp_t, ipa_custodia_tmp_t)
|
||||||
|
files_tmp_filetrans(ipa_custodia_t, ipa_custodia_tmp_t, { dir file })
|
||||||
|
|
||||||
|
kernel_dgram_send(ipa_custodia_t)
|
||||||
|
+kernel_read_network_state(ipa_custodia_t)
|
||||||
|
|
||||||
|
auth_read_passwd(ipa_custodia_t)
|
||||||
|
|
||||||
|
@@ -366,6 +366,10 @@ can_exec(ipa_custodia_t, ipa_custodia_ra_agent_exec_t)
|
||||||
|
corecmd_exec_bin(ipa_custodia_t)
|
||||||
|
corecmd_mmap_bin_files(ipa_custodia_t)
|
||||||
|
|
||||||
|
+dev_read_urand(ipa_custodia_t)
|
||||||
|
+dev_read_rand(ipa_custodia_t)
|
||||||
|
+dev_read_sysfs(ipa_custodia_t)
|
||||||
|
+
|
||||||
|
domain_use_interactive_fds(ipa_custodia_t)
|
||||||
|
|
||||||
|
files_mmap_usr_files(ipa_custodia_t)
|
||||||
|
@@ -377,6 +381,8 @@ files_read_etc_files(ipa_custodia_t)
|
||||||
|
libs_exec_ldconfig(ipa_custodia_t)
|
||||||
|
libs_ldconfig_exec_entry_type(ipa_custodia_t)
|
||||||
|
|
||||||
|
+logging_send_syslog_msg(ipa_custodia_t)
|
||||||
|
+
|
||||||
|
miscfiles_read_generic_certs(ipa_custodia_t)
|
||||||
|
miscfiles_read_localization(ipa_custodia_t)
|
||||||
|
|
||||||
|
@@ -441,8 +447,4 @@ optional_policy(`
|
||||||
|
optional_policy(`
|
||||||
|
java_exec(ipa_custodia_pki_tomcat_t)
|
||||||
|
# allow Java to read system status and RNG
|
||||||
|
- dev_read_urand(ipa_custodia_t)
|
||||||
|
- dev_read_rand(ipa_custodia_t)
|
||||||
|
- kernel_read_network_state(ipa_custodia_t)
|
||||||
|
- dev_read_sysfs(ipa_custodia_t)
|
||||||
|
')
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
||||||
|
From 6a31605c1d249416ed7627755bca23a1cc45a581 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois=20Cami?= <fcami@redhat.com>
|
||||||
|
Date: Tue, 22 Sep 2020 13:34:40 +0200
|
||||||
|
Subject: [PATCH] SELinux Policy: Allow tomcat_t to read kerberos keytabs
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
This is required to fix:
|
||||||
|
avc: denied { search } for pid=1930 comm="ipa-pki-retriev" name="krb5" dev="dm-0" ino=8620822 scontext=system_u:system_r:tomcat_t:s0 tcontext=system_u:object_r:krb5_keytab_t:s0 tclass=dir permissive=0
|
||||||
|
|
||||||
|
Macros suggested by: Ondrej Mosnacek
|
||||||
|
|
||||||
|
Fixes: https://pagure.io/freeipa/issue/8488
|
||||||
|
Signed-off-by: François Cami <fcami@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
Reviewed-By: Christian Heimes <cheimes@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Reviewed-By: Ondrej Mosnacek <omosnace@redhat.com>
|
||||||
|
Reviewed-By: Lukas Vrabec <lvrabec@redhat.com>
|
||||||
|
Reviewed-By: Zdenek Pytela <zpytela@redhat.com>
|
||||||
|
Reviewed-By: Thomas Woerner <twoerner@redhat.com>
|
||||||
|
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
||||||
|
Reviewed-By: Christian Heimes <cheimes@redhat.com>
|
||||||
|
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
|
||||||
|
Reviewed-By: Ondrej Mosnacek <omosnace@redhat.com>
|
||||||
|
Reviewed-By: Lukas Vrabec <lvrabec@redhat.com>
|
||||||
|
Reviewed-By: Zdenek Pytela <zpytela@redhat.com>
|
||||||
|
Reviewed-By: Thomas Woerner <twoerner@redhat.com>
|
||||||
|
---
|
||||||
|
selinux/ipa.te | 8 ++++++++
|
||||||
|
1 file changed, 8 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/selinux/ipa.te b/selinux/ipa.te
|
||||||
|
index f984a0f94..fa577191c 100644
|
||||||
|
--- a/selinux/ipa.te
|
||||||
|
+++ b/selinux/ipa.te
|
||||||
|
@@ -448,3 +448,11 @@ optional_policy(`
|
||||||
|
java_exec(ipa_custodia_pki_tomcat_t)
|
||||||
|
# allow Java to read system status and RNG
|
||||||
|
')
|
||||||
|
+
|
||||||
|
+optional_policy(`
|
||||||
|
+ gen_require(`
|
||||||
|
+ type tomcat_t;
|
||||||
|
+ ')
|
||||||
|
+ kerberos_read_config(tomcat_t)
|
||||||
|
+ kerberos_read_keytab(tomcat_t)
|
||||||
|
+')
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
@ -0,0 +1,68 @@
|
|||||||
|
From 58c3343a67a3922dcc84d3d4b1deca515c48a6f8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois=20Cami?= <fcami@redhat.com>
|
||||||
|
Date: Wed, 23 Sep 2020 09:17:53 +0200
|
||||||
|
Subject: [PATCH] SELinux: do not double-define node_t and pki_tomcat_cert_t
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
node_t and pki_tomcat_cert_t are defined in other modules.
|
||||||
|
Do not double-define them.
|
||||||
|
|
||||||
|
Fixes: https://pagure.io/freeipa/issue/8513
|
||||||
|
Signed-off-by: François Cami <fcami@redhat.com>
|
||||||
|
Reviewed-By: Christian Heimes <cheimes@redhat.com>
|
||||||
|
---
|
||||||
|
selinux/ipa.te | 25 ++++++++++++++++---------
|
||||||
|
1 file changed, 16 insertions(+), 9 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/selinux/ipa.te b/selinux/ipa.te
|
||||||
|
index fa577191c..d80e64a0b 100644
|
||||||
|
--- a/selinux/ipa.te
|
||||||
|
+++ b/selinux/ipa.te
|
||||||
|
@@ -74,9 +74,6 @@ logging_log_file(ipa_custodia_log_t)
|
||||||
|
type ipa_custodia_tmp_t;
|
||||||
|
files_tmp_file(ipa_custodia_tmp_t)
|
||||||
|
|
||||||
|
-type pki_tomcat_cert_t;
|
||||||
|
-type node_t;
|
||||||
|
-
|
||||||
|
type ipa_pki_retrieve_key_exec_t;
|
||||||
|
type ipa_pki_retrieve_key_t;
|
||||||
|
domain_type(ipa_pki_retrieve_key_t)
|
||||||
|
@@ -339,12 +336,6 @@ allow ipa_custodia_t self:unix_dgram_socket create_socket_perms;
|
||||||
|
allow ipa_custodia_t self:tcp_socket { bind create };
|
||||||
|
allow ipa_custodia_t self:udp_socket create_socket_perms;
|
||||||
|
|
||||||
|
-allow ipa_custodia_t node_t:tcp_socket node_bind;
|
||||||
|
-
|
||||||
|
-allow ipa_custodia_t pki_tomcat_cert_t:dir remove_name;
|
||||||
|
-allow ipa_custodia_t pki_tomcat_cert_t:file create;
|
||||||
|
-allow ipa_custodia_t pki_tomcat_cert_t:file unlink;
|
||||||
|
-
|
||||||
|
manage_dirs_pattern(ipa_custodia_t,ipa_custodia_log_t,ipa_custodia_log_t)
|
||||||
|
manage_files_pattern(ipa_custodia_t, ipa_custodia_log_t, ipa_custodia_log_t)
|
||||||
|
logging_log_filetrans(ipa_custodia_t, ipa_custodia_log_t, { dir file })
|
||||||
|
@@ -456,3 +447,19 @@ optional_policy(`
|
||||||
|
kerberos_read_config(tomcat_t)
|
||||||
|
kerberos_read_keytab(tomcat_t)
|
||||||
|
')
|
||||||
|
+
|
||||||
|
+optional_policy(`
|
||||||
|
+ gen_require(`
|
||||||
|
+ type node_t;
|
||||||
|
+ ')
|
||||||
|
+ allow ipa_custodia_t node_t:tcp_socket node_bind;
|
||||||
|
+')
|
||||||
|
+
|
||||||
|
+optional_policy(`
|
||||||
|
+ gen_require(`
|
||||||
|
+ type pki_tomcat_cert_t;
|
||||||
|
+ ')
|
||||||
|
+ allow ipa_custodia_t pki_tomcat_cert_t:dir remove_name;
|
||||||
|
+ allow ipa_custodia_t pki_tomcat_cert_t:file create;
|
||||||
|
+ allow ipa_custodia_t pki_tomcat_cert_t:file unlink;
|
||||||
|
+')
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,134 @@
|
|||||||
|
From 2f8e87ce9ccaab51b32a395c6cf6c764434ed0e2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Thomas Woerner <twoerner@redhat.com>
|
||||||
|
Date: Thu, 11 Jun 2020 10:40:57 +0200
|
||||||
|
Subject: [PATCH] Revert "WebUI: use python3-rjsmin to minify JavaScript files"
|
||||||
|
|
||||||
|
This reverts commit d986e844bbd37ccc7a532175631a55acd315cda3.
|
||||||
|
---
|
||||||
|
.lgtm.yml | 4 ++--
|
||||||
|
freeipa.spec.in | 2 +-
|
||||||
|
install/ui/build/freeipa/Makefile.am | 2 +-
|
||||||
|
install/ui/src/webui.profile.js | 4 ++--
|
||||||
|
install/ui/util/build/README | 4 ++--
|
||||||
|
install/ui/util/compile.sh | 8 ++++----
|
||||||
|
6 files changed, 12 insertions(+), 12 deletions(-)
|
||||||
|
|
||||||
|
#diff --git a/.lgtm.yml b/.lgtm.yml
|
||||||
|
#index b3898116e..e63615918 100644
|
||||||
|
#--- a/.lgtm.yml
|
||||||
|
#+++ b/.lgtm.yml
|
||||||
|
#@@ -39,7 +39,7 @@ extraction:
|
||||||
|
# - python3-setuptools
|
||||||
|
# - python3-wheel
|
||||||
|
# - nodejs
|
||||||
|
#- - python3-rjsmin
|
||||||
|
#+ - uglifyjs
|
||||||
|
# - systemd
|
||||||
|
# - 389-ds-base-dev
|
||||||
|
# - libssl-dev
|
||||||
|
#@@ -79,7 +79,7 @@ extraction:
|
||||||
|
# - python3-setuptools
|
||||||
|
# - python3-wheel
|
||||||
|
# - nodejs
|
||||||
|
#- - python3-rjsmin
|
||||||
|
#+ - uglifyjs
|
||||||
|
# - systemd
|
||||||
|
# - 389-ds-base-dev
|
||||||
|
# - libssl-dev
|
||||||
|
diff --git a/freeipa.spec.in b/freeipa.spec.in
|
||||||
|
index b6eb79593..a4682497a 100755
|
||||||
|
--- a/freeipa.spec.in
|
||||||
|
+++ b/freeipa.spec.in
|
||||||
|
@@ -191,7 +191,7 @@ BuildRequires: libsss_idmap-devel
|
||||||
|
BuildRequires: libsss_certmap-devel
|
||||||
|
BuildRequires: libsss_nss_idmap-devel >= %{sssd_version}
|
||||||
|
BuildRequires: nodejs(abi)
|
||||||
|
-BuildRequires: python3-rjsmin
|
||||||
|
+BuildRequires: uglify-js
|
||||||
|
BuildRequires: libverto-devel
|
||||||
|
BuildRequires: libunistring-devel
|
||||||
|
# 0.13.0: https://bugzilla.redhat.com/show_bug.cgi?id=1584773
|
||||||
|
diff --git a/install/ui/build/freeipa/Makefile.am b/install/ui/build/freeipa/Makefile.am
|
||||||
|
index f4d97819e..05e82f4da 100644
|
||||||
|
--- a/install/ui/build/freeipa/Makefile.am
|
||||||
|
+++ b/install/ui/build/freeipa/Makefile.am
|
||||||
|
@@ -18,6 +18,6 @@ widgets := $(wildcard ../../src/freeipa/widgets/*.js)
|
||||||
|
nav := $(wildcard ../../src/freeipa/navigation/*.js)
|
||||||
|
|
||||||
|
app.js: $(core) $(base) $(widgets) $(nav)
|
||||||
|
- PYTHON=$(PYTHON) $(srcdir)/../../util/make-ui.sh
|
||||||
|
+ $(srcdir)/../../util/make-ui.sh
|
||||||
|
|
||||||
|
core.js: app.js
|
||||||
|
diff --git a/install/ui/src/webui.profile.js b/install/ui/src/webui.profile.js
|
||||||
|
index 2d4d691dc..1d7a6cc84 100644
|
||||||
|
--- a/install/ui/src/webui.profile.js
|
||||||
|
+++ b/install/ui/src/webui.profile.js
|
||||||
|
@@ -9,7 +9,7 @@ var profile = (function(){
|
||||||
|
releaseName: "lib",
|
||||||
|
action: "release",
|
||||||
|
|
||||||
|
- // optimization done separately by python3-rjsmin
|
||||||
|
+ // optimization done separately by uglify.js
|
||||||
|
layerOptimize: false,
|
||||||
|
optimize: false,
|
||||||
|
cssOptimize: false,
|
||||||
|
@@ -123,4 +123,4 @@ var profile = (function(){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
-})();
|
||||||
|
+})();
|
||||||
|
\ No newline at end of file
|
||||||
|
diff --git a/install/ui/util/build/README b/install/ui/util/build/README
|
||||||
|
index 2c4e0ecac..0772532d4 100644
|
||||||
|
--- a/install/ui/util/build/README
|
||||||
|
+++ b/install/ui/util/build/README
|
||||||
|
@@ -1,5 +1,5 @@
|
||||||
|
build.js is builded dojo builder, with applied patches from 'patches' folder, by
|
||||||
|
-itself and compiled using python3-rjsmin
|
||||||
|
+itself and compiled using uglify.js
|
||||||
|
|
||||||
|
_base/configRhino.js is unmodifed file from dojo/dojo. Required for a build to work.
|
||||||
|
|
||||||
|
@@ -9,4 +9,4 @@ Available via Academic Free License >= 2.1 OR the modified BSD license.
|
||||||
|
see: http://dojotoolkit.org/license for details
|
||||||
|
|
||||||
|
= License =
|
||||||
|
-Full Dojo license is in LICENSE file.
|
||||||
|
+Full Dojo license is in LICENSE file.
|
||||||
|
\ No newline at end of file
|
||||||
|
diff --git a/install/ui/util/compile.sh b/install/ui/util/compile.sh
|
||||||
|
index 1516b815f..d14f90ab0 100755
|
||||||
|
--- a/install/ui/util/compile.sh
|
||||||
|
+++ b/install/ui/util/compile.sh
|
||||||
|
@@ -26,14 +26,14 @@ RDIR=$DIR/../release
|
||||||
|
usage() {
|
||||||
|
cat <<-__EOF__;
|
||||||
|
NAME
|
||||||
|
- compile.sh - Compiles layer file of Dojo build using Python rjsmin.
|
||||||
|
+ compile.sh - Compiles layer file of Dojo build using uglify.js.
|
||||||
|
Deletes all other files.
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
path/to/compile.sh [--help] --release RELEASE --layer NAME/NAME
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
- Compiles layer file of Dojo build output using Python rjsmin.
|
||||||
|
+ Compiles layer file of Dojo build output using uglify.js.
|
||||||
|
Deletes all other files.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
@@ -105,7 +105,7 @@ if [[ ! $OUTPUT_FILE ]] ; then
|
||||||
|
OUTPUT_FILE=$RDIR/$RELEASE/$LAYER.js
|
||||||
|
fi
|
||||||
|
|
||||||
|
-# compile using python rjsmin
|
||||||
|
+# compile using uglifyjs
|
||||||
|
echo "Minimizing: $RDIR/$RELEASE/$LAYER.js"
|
||||||
|
echo "Target file: $OUTPUT_FILE"
|
||||||
|
-${PYTHON:-python3} -m rjsmin < $RDIR/$RELEASE/$LAYER.js > $OUTPUT_FILE
|
||||||
|
+uglifyjs $RDIR/$RELEASE/$LAYER.js > $OUTPUT_FILE
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
@ -1,16 +0,0 @@
|
|||||||
-----BEGIN PGP SIGNATURE-----
|
|
||||||
|
|
||||||
iQIzBAABCgAdFiEEhAodHH8+xLL+UwQ1RxniuKu/YhoFAl302dsACgkQRxniuKu/
|
|
||||||
Yhrd0RAAvUv30O5rSlww30kxqV3oQb5CIJYSGb/jpWMAhj1Nr+1Ye1P3rCyJLP4R
|
|
||||||
+fVu23bgIywv8qkWPZdQxohkYCuiTZa8ogl3gXWJDRCp5f5oKWALzwU+Zlu8HlVj
|
|
||||||
z8UAOFXEO1fYwvwpOPdr+gGiTS5pLq39EIBZSVjvuviXR0adwVcVvw0R2YXYmiLE
|
|
||||||
x5uaM289YQ4hKY/V0rgqNn0nYiogFcFvSlhkM9oi4+JiKypocPqKTjM4n8EcdXv4
|
|
||||||
rSJ6Zv6FgnyoREBITCZjKaTn8OTkhqhhzMOgMzWr8QSmNl44UKA9aq5ZIEJgEnMR
|
|
||||||
N3vW6Br1f4TDJ3JyWeMoizQcNeTFyuoxN9HhGpvDotx+6g+j2yNfAK7ZZAtjULhm
|
|
||||||
m13zb1svCbGtvRxB8QfIQe62l3drooimWRf5o9fgPVU0MIxgL7x7AulxrZekik6J
|
|
||||||
NdwXiz75SKfbFZZWVdf9FjJkaBZ3CpJMJnDQiQyCs+xBWOpXYGYkz9a1NRoFgCdC
|
|
||||||
y8bY9ErfzhLdcgjbZ3EE24FkWMBeUdW+BC4AYSChZlqUZ9CMTQIdyqPVSG/u5sc9
|
|
||||||
2Rn1YasAfu0P3DJgRCI0BUcxkxFet5M8hfB0iuLE4OJTKnyhmmOUKmO2wUSw0QIr
|
|
||||||
ogzzN9DF84wwXD1P4X6WFEzOOthCdLPUHyDo3u5fVIy4QWZZDlQ=
|
|
||||||
=TTzs
|
|
||||||
-----END PGP SIGNATURE-----
|
|
16
SOURCES/freeipa-4.8.7.tar.gz.asc
Normal file
16
SOURCES/freeipa-4.8.7.tar.gz.asc
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
-----BEGIN PGP SIGNATURE-----
|
||||||
|
|
||||||
|
iQIzBAABCgAdFiEEhAodHH8+xLL+UwQ1RxniuKu/YhoFAl7hNhYACgkQRxniuKu/
|
||||||
|
Yhq2rxAAnK8YHbQtivjssWz6BBRiU5TKootA3fSqfvbhACYG14629/Dpc5IIkYZ1
|
||||||
|
0AE4CUFA7Oi92emFbxrLJyeSuxuzTxSVmydJ5HW/OTkRRSnmjL5oeBg2D++B9OaO
|
||||||
|
qVAXRZbi5YNfW5y//9BIRzCGw0RHpbR/QjZ1ipDymky6nr5IS+EhfZ0iHeEyiNXd
|
||||||
|
OP3OJv538HSvRrv3mJvz52pKVfegw1OTd8yUnmuPEc9ClQfPQHjXqsOeFYCbR8fg
|
||||||
|
59y0twMMrOc2J4eL0OkNE/By+o+1vAMUwEs736sCdbJJPigerfuK0e7ZxP+x98BP
|
||||||
|
bmIBxv7eUf20Rn3An7+vTqQP60V4tS+FOnc2LD3OpHH4vy34ovWZfYZWVKbg0z1+
|
||||||
|
5E/0TWifhlibbRZctDaxkZfFVchQnixHnO0Awv8wNxRzh/XvvsTPz1zJXk5kHk3r
|
||||||
|
Ws2/GbeWTiJLe8sIXJz0MNTayWLnsDJG6BCRf+K0HwCdL80p4TG71dTwa9PW5HEy
|
||||||
|
UklxW/zfr+chS1AszNgb8wJa6WtDHfQnktJwSSj7CkD3JdUVx+L/cJiOfbCM+WUi
|
||||||
|
BRzhVhNUDX/FkpGUyvC4AYXX+wcwHph9BDChUDqcG886aIK28TAsie3Vwz/F7hKP
|
||||||
|
TYpF1+YIImcRfUQ737pnbHL12o5yzfhkBfD2GMsojEd0x71B3PY=
|
||||||
|
=B33Z
|
||||||
|
-----END PGP SIGNATURE-----
|
383
SPECS/ipa.spec
383
SPECS/ipa.spec
@ -52,23 +52,33 @@
|
|||||||
%global linter_options --disable-pylint --without-jslint
|
%global linter_options --disable-pylint --without-jslint
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
# Include SELinux subpackage
|
||||||
|
%if 0%{?fedora} >= 30 || 0%{?rhel} >= 8
|
||||||
|
%global with_selinux 1
|
||||||
|
%global selinuxtype targeted
|
||||||
|
%global modulename ipa
|
||||||
|
%endif
|
||||||
|
|
||||||
%if 0%{?rhel}
|
%if 0%{?rhel}
|
||||||
%global package_name ipa
|
%global package_name ipa
|
||||||
%global alt_name freeipa
|
%global alt_name freeipa
|
||||||
%global krb5_version 1.17-12
|
%global krb5_version 1.18.2-2
|
||||||
%global krb5_kdb_version 7.0
|
%global krb5_kdb_version 8.0
|
||||||
# 0.7.16: https://github.com/drkjam/netaddr/issues/71
|
# 0.7.16: https://github.com/drkjam/netaddr/issues/71
|
||||||
%global python_netaddr_version 0.7.19
|
%global python_netaddr_version 0.7.19
|
||||||
# Require 4.7.0 which brings Python 3 bindings
|
# Require 4.7.0 which brings Python 3 bindings
|
||||||
%global samba_version 4.11.2-11
|
%global samba_version 4.12.3-12
|
||||||
|
%global slapi_nis_version 0.56.4
|
||||||
# Require 3.14.3-24 - Allow ipa_ods_exporter_t domain to read krb5_keytab files
|
# Require 3.14.3-24 - Allow ipa_ods_exporter_t domain to read krb5_keytab files
|
||||||
%global selinux_policy_version 3.14.3-24
|
# SELinux context for /etc/named directory, RHBZ#1759495
|
||||||
|
%global selinux_policy_version 3.14.3-52
|
||||||
%global slapi_nis_version 0.56.1-4
|
%global slapi_nis_version 0.56.1-4
|
||||||
%global python_ldap_version 3.1.0-1
|
%global python_ldap_version 3.1.0-1
|
||||||
# python3-lib389
|
# python3-lib389
|
||||||
# Fix for "Installation fails: Replica Busy"
|
# Fix for "Installation fails: Replica Busy"
|
||||||
# https://pagure.io/389-ds-base/issue/49818
|
# https://pagure.io/389-ds-base/issue/49818
|
||||||
%global ds_version 1.4.2.4-6
|
%global ds_version 1.4.2.4-6
|
||||||
|
%global httpd_version 2.4.6-31
|
||||||
|
|
||||||
%else
|
%else
|
||||||
# Fedora
|
# Fedora
|
||||||
@ -80,10 +90,14 @@
|
|||||||
# 0.7.16: https://github.com/drkjam/netaddr/issues/71
|
# 0.7.16: https://github.com/drkjam/netaddr/issues/71
|
||||||
%global python_netaddr_version 0.7.16
|
%global python_netaddr_version 0.7.16
|
||||||
# Require 4.7.0 which brings Python 3 bindings
|
# Require 4.7.0 which brings Python 3 bindings
|
||||||
|
# Require 4.12 which has DsRGetForestTrustInformation access rights fixes
|
||||||
|
#global samba_version 2:4.12
|
||||||
%global samba_version 2:4.9.0
|
%global samba_version 2:4.9.0
|
||||||
# DNSSEC AVC violation, RHBZ#1537971
|
# SELinux context for /etc/named directory, RHBZ#1759495
|
||||||
%global selinux_policy_version 3.13.1-283.24
|
#global selinux_policy_version 3.14.3-52
|
||||||
%global slapi_nis_version 0.56.1
|
%global selinux_policy_version 3.14.3-41
|
||||||
|
#global slapi_nis_version 0.56.4
|
||||||
|
%global slapi_nis_version 0.56.3
|
||||||
|
|
||||||
# fix for segfault in python3-ldap, https://pagure.io/freeipa/issue/7324
|
# fix for segfault in python3-ldap, https://pagure.io/freeipa/issue/7324
|
||||||
%global python_ldap_version 3.1.0-1
|
%global python_ldap_version 3.1.0-1
|
||||||
@ -95,14 +109,12 @@
|
|||||||
# Some packages don't provide new dist aliases.
|
# Some packages don't provide new dist aliases.
|
||||||
# https://docs.fedoraproject.org/en-US/packaging-guidelines/Python/
|
# https://docs.fedoraproject.org/en-US/packaging-guidelines/Python/
|
||||||
%{?python_disable_dependency_generator}
|
%{?python_disable_dependency_generator}
|
||||||
|
# Fedora
|
||||||
|
%endif
|
||||||
|
|
||||||
%endif # Fedora
|
# PKIConnection has been modified to always validate certs.
|
||||||
|
# https://pagure.io/freeipa/issue/8379
|
||||||
# Require Dogtag PKI 10.6.8-3 (10.6.7 was never pushed to stable)
|
%global pki_version 10.9.0-0.4
|
||||||
# 10.6.7 fixes UpdateNumberRange clone installation issue
|
|
||||||
# https://pagure.io/freeipa/issue/7654 and empty token issue
|
|
||||||
# and https://pagure.io/dogtagpki/issue/3073
|
|
||||||
%global pki_version 10.8.0
|
|
||||||
|
|
||||||
# https://pagure.io/certmonger/issue/90
|
# https://pagure.io/certmonger/issue/90
|
||||||
%global certmonger_version 0.79.7-3
|
%global certmonger_version 0.79.7-3
|
||||||
@ -117,6 +129,7 @@
|
|||||||
|
|
||||||
%global sssd_version 2.2.3-11
|
%global sssd_version 2.2.3-11
|
||||||
|
|
||||||
|
%define krb5_base_version %(LC_ALL=C rpm -q --qf '%%{VERSION}' krb5-devel | grep -Eo '^[^.]+\.[^.]+')
|
||||||
%global kdcproxy_version 0.4-3
|
%global kdcproxy_version 0.4-3
|
||||||
|
|
||||||
%global plugin_dir %{_libdir}/dirsrv/plugins
|
%global plugin_dir %{_libdir}/dirsrv/plugins
|
||||||
@ -127,7 +140,7 @@
|
|||||||
|
|
||||||
# Work-around fact that RPM SPEC parser does not accept
|
# Work-around fact that RPM SPEC parser does not accept
|
||||||
# "Version: @VERSION@" in freeipa.spec.in used for Autoconf string replacement
|
# "Version: @VERSION@" in freeipa.spec.in used for Autoconf string replacement
|
||||||
%define IPA_VERSION 4.8.4
|
%define IPA_VERSION 4.8.7
|
||||||
%define AT_SIGN @
|
%define AT_SIGN @
|
||||||
# redefine IPA_VERSION only if its value matches the Autoconf placeholder
|
# redefine IPA_VERSION only if its value matches the Autoconf placeholder
|
||||||
%if "%{IPA_VERSION}" == "%{AT_SIGN}VERSION%{AT_SIGN}"
|
%if "%{IPA_VERSION}" == "%{AT_SIGN}VERSION%{AT_SIGN}"
|
||||||
@ -136,7 +149,7 @@
|
|||||||
|
|
||||||
Name: %{package_name}
|
Name: %{package_name}
|
||||||
Version: %{IPA_VERSION}
|
Version: %{IPA_VERSION}
|
||||||
Release: 7%{?dist}
|
Release: 12%{?dist}
|
||||||
Summary: The Identity, Policy and Audit system
|
Summary: The Identity, Policy and Audit system
|
||||||
|
|
||||||
License: GPLv3+
|
License: GPLv3+
|
||||||
@ -151,16 +164,29 @@ Source1: https://releases.pagure.org/freeipa/freeipa-%{version}.tar.gz.as
|
|||||||
# RHEL spec file only: END: Change branding to IPA and Identity Management
|
# RHEL spec file only: END: Change branding to IPA and Identity Management
|
||||||
|
|
||||||
# RHEL spec file only: START
|
# RHEL spec file only: START
|
||||||
Patch0001: 0001-DNS-install-check-Fix-overlapping-DNS-zone-from-the-master-itself_2c2cef7_rhbz#1784003.patch
|
Patch0001: 0001-WebUI-Fix-IPA-Error-3007-RequirmentError-while-addin_rhbz#1757045.patch
|
||||||
Patch0002: 0002-krbtktpolicy-reset.patch
|
Patch0002: 0002-EPN-does-not-ship-its-default-configuration_rhbz#1847999.patch
|
||||||
Patch0003: 0003-adtrust-print-DNS-records-for-external-DNS-case-after-role-is-enabled_936e27f_rhbz#1665051.patch
|
Patch0003: 0003-Use-256-bit-AJP-secret_rhbz#1849914.patch
|
||||||
Patch0004: 0004-AD-user-without-override-receive-InternalServerError-with-API_4db18be_rhbz#1782572.patch
|
Patch0004: 0004-baseuser-fix-ipanthomedirectorydrive-option-name_rhbz#1851411.patch
|
||||||
Patch0005: 0005-ipa-client-automount-fails-after-repeated-installation-uninstallation_rhbz#1790886.patch
|
Patch0005: 0005-selinux-don-t-audit-rules-deny-fetching-trust-topology_rhbz#1845596.patch
|
||||||
Patch0006: 0006-install-updates-move-external-members-past-schema-compat-update_14dbf04_rhbz#1803165.patch
|
Patch0006: 0006-fix-iPAddress-cert-issuance-for-1-host-service_rhbz#1846352.patch
|
||||||
Patch0007: 0007-kdb-make-sure-audit_as_req-callback-signature-change-is-preserved_rhbz#1803786.patch
|
Patch0007: 0007-Specify-cert_paths-when-calling-PKIConnection_rhbz#1849155.patch
|
||||||
Patch0008: 0008-Allow-an-empty-cookie-in-dogtag-ipa-ca-renew-agent-submit_3d7d58d_rhbz#1790663.patch
|
Patch0008: 0008-Add-missing-SELinux-rule-for-ipa-custodia.sock_rhbz#1857157.patch
|
||||||
|
Patch0009: 0009-ipa-client-install-use-the-authselect-backup-during_rhbz#1810179.patch
|
||||||
|
Patch0010: 0010-Replace-SSLCertVerificationError-with-CertificateErr_rhbz#1858318.patch
|
||||||
|
Patch0011: 0011-Fix-AVC-denial-during-ipa-adtrust-install---add-agents_rhbz#1859213.patch
|
||||||
|
Patch0012: 0012-CAless-installation-set-the-perms-on-KDC-cert-file_rhbz#1863616.patch
|
||||||
|
Patch0013: 0013-IPA-EPN-Use-a-helper-to-retrieve-LDAP-attributes-fro_rhbz#1866938.patch
|
||||||
|
Patch0014: 0014-IPA-EPN-enhance-input-validation_rhbz#1866291.patch
|
||||||
|
Patch0015: 0015-IPA-EPN-Fix-SMTP-connection-error-handling_rhbz#1863079.patch
|
||||||
|
Patch0016: 0016-Set-mode-of-etc-ipa-ca.crt-to-0644-in-CA-less-instal_rhbz#1870202.patch
|
||||||
|
Patch0017: 0017-SELinux-Policy-let-custodia-replicate-keys_rhbz#1868432.patch
|
||||||
|
Patch0018: 0018-dogtaginstance.py-add-debug-to-pkispawn_rhbz#1879604.patch
|
||||||
|
Patch0019: 0019-SELinux-add-dedicated-policy-for-ipa-pki-retrieve-key-ipatests-enhance-TestSubCAkeyReplication_rhbz#1870202.patch
|
||||||
|
Patch0020: 0020-SELinux-do-not-double-define-node_t-and-pki_tomcat_c_rhbz#1870202.patch
|
||||||
Patch1001: 1001-Change-branding-to-IPA-and-Identity-Management.patch
|
Patch1001: 1001-Change-branding-to-IPA-and-Identity-Management.patch
|
||||||
Patch1002: 1002-4.8.0-Remove-csrgen.patch
|
Patch1002: 1002-4.8.0-Remove-csrgen.patch
|
||||||
|
Patch1003: 1003-Revert-WebUI-use-python3-rjsmin-to-minify-JavaScript.patch
|
||||||
# RHEL spec file only: END
|
# RHEL spec file only: END
|
||||||
|
|
||||||
# For the timestamp trick in patch application
|
# For the timestamp trick in patch application
|
||||||
@ -189,7 +215,6 @@ BuildRequires: systemd
|
|||||||
# systemd-tmpfiles which is executed from make install requires apache user
|
# systemd-tmpfiles which is executed from make install requires apache user
|
||||||
BuildRequires: httpd
|
BuildRequires: httpd
|
||||||
BuildRequires: nspr-devel
|
BuildRequires: nspr-devel
|
||||||
BuildRequires: nss-devel >= %{nss_version}
|
|
||||||
BuildRequires: openssl-devel
|
BuildRequires: openssl-devel
|
||||||
BuildRequires: libini_config-devel
|
BuildRequires: libini_config-devel
|
||||||
BuildRequires: cyrus-sasl-devel
|
BuildRequires: cyrus-sasl-devel
|
||||||
@ -210,7 +235,8 @@ BuildRequires: libunistring-devel
|
|||||||
# 0.13.0: https://bugzilla.redhat.com/show_bug.cgi?id=1584773
|
# 0.13.0: https://bugzilla.redhat.com/show_bug.cgi?id=1584773
|
||||||
# 0.13.0-2: fix for missing dependency on python-six
|
# 0.13.0-2: fix for missing dependency on python-six
|
||||||
BuildRequires: python3-lesscpy >= 0.13.0-2
|
BuildRequires: python3-lesscpy >= 0.13.0-2
|
||||||
%endif # ONLY_CLIENT
|
# ONLY_CLIENT
|
||||||
|
%endif
|
||||||
|
|
||||||
#
|
#
|
||||||
# Build dependencies for makeapi/makeaci
|
# Build dependencies for makeapi/makeaci
|
||||||
@ -237,7 +263,8 @@ BuildRequires: python3-twine
|
|||||||
BuildRequires: twine
|
BuildRequires: twine
|
||||||
%endif
|
%endif
|
||||||
BuildRequires: python3-wheel
|
BuildRequires: python3-wheel
|
||||||
%endif # with_wheels
|
# with_wheels
|
||||||
|
%endif
|
||||||
|
|
||||||
#
|
#
|
||||||
# Build dependencies for lint and fastcheck
|
# Build dependencies for lint and fastcheck
|
||||||
@ -287,7 +314,8 @@ BuildRequires: python3-sss-murmur
|
|||||||
BuildRequires: python3-sssdconfig >= %{sssd_version}
|
BuildRequires: python3-sssdconfig >= %{sssd_version}
|
||||||
BuildRequires: python3-systemd
|
BuildRequires: python3-systemd
|
||||||
BuildRequires: python3-yubico
|
BuildRequires: python3-yubico
|
||||||
%endif # with_lint
|
# with_lint
|
||||||
|
%endif
|
||||||
|
|
||||||
#
|
#
|
||||||
# Build dependencies for unit tests
|
# Build dependencies for unit tests
|
||||||
@ -295,8 +323,14 @@ BuildRequires: python3-yubico
|
|||||||
%if ! %{ONLY_CLIENT}
|
%if ! %{ONLY_CLIENT}
|
||||||
BuildRequires: libcmocka-devel
|
BuildRequires: libcmocka-devel
|
||||||
# Required by ipa_kdb_tests
|
# Required by ipa_kdb_tests
|
||||||
BuildRequires: %{_libdir}/krb5/plugins/kdb/db2.so
|
BuildRequires: krb5-server >= %{krb5_version}
|
||||||
%endif # ONLY_CLIENT
|
# ONLY_CLIENT
|
||||||
|
%endif
|
||||||
|
|
||||||
|
# Build dependencies for SELinux policy
|
||||||
|
%if 0%{?with_selinux}
|
||||||
|
BuildRequires: selinux-policy-devel >= %{selinux_policy_version}
|
||||||
|
%endif
|
||||||
|
|
||||||
%description
|
%description
|
||||||
IPA is an integrated solution to provide centrally managed Identity (users,
|
IPA is an integrated solution to provide centrally managed Identity (users,
|
||||||
@ -316,23 +350,22 @@ Requires: %{name}-common = %{version}-%{release}
|
|||||||
Requires: python3-ipaserver = %{version}-%{release}
|
Requires: python3-ipaserver = %{version}-%{release}
|
||||||
Requires: python3-ldap >= %{python_ldap_version}
|
Requires: python3-ldap >= %{python_ldap_version}
|
||||||
Requires: 389-ds-base >= %{ds_version}
|
Requires: 389-ds-base >= %{ds_version}
|
||||||
Requires: openldap-clients >= 2.4.46-11
|
Requires: openldap-clients > 2.4.35-4
|
||||||
Requires: nss >= %{nss_version}
|
|
||||||
Requires: nss-tools >= %{nss_version}
|
Requires: nss-tools >= %{nss_version}
|
||||||
Requires(post): krb5-server >= %{krb5_version}
|
Requires(post): krb5-server >= %{krb5_version}
|
||||||
Requires(post): krb5-kdb-version = %{krb5_kdb_version}
|
Requires(post): krb5-kdb-version = %{krb5_kdb_version}
|
||||||
Requires: krb5-pkinit-openssl >= %{krb5_version}
|
Requires: krb5-pkinit-openssl >= %{krb5_version}
|
||||||
Requires: cyrus-sasl-gssapi%{?_isa}
|
Requires: cyrus-sasl-gssapi%{?_isa}
|
||||||
Requires: chrony
|
Requires: chrony
|
||||||
Requires: httpd >= 2.4.6-31
|
Requires: httpd >= %{httpd_version}
|
||||||
Requires(preun): python3
|
Requires(preun): python3
|
||||||
Requires(postun): python3
|
Requires(postun): python3
|
||||||
Requires: python3-gssapi >= 1.2.0-5
|
Requires: python3-gssapi >= 1.2.0-5
|
||||||
Requires: python3-systemd
|
Requires: python3-systemd
|
||||||
Requires: python3-mod_wsgi
|
Requires: python3-mod_wsgi
|
||||||
Requires: mod_auth_gssapi >= 1.5.0
|
Requires: mod_auth_gssapi >= 1.5.0
|
||||||
Requires: mod_ssl
|
Requires: mod_ssl >= %{httpd_version}
|
||||||
Requires: mod_session
|
Requires: mod_session >= %{httpd_version}
|
||||||
# 0.9.9: https://github.com/adelton/mod_lookup_identity/pull/3
|
# 0.9.9: https://github.com/adelton/mod_lookup_identity/pull/3
|
||||||
Requires: mod_lookup_identity >= 0.9.9
|
Requires: mod_lookup_identity >= 0.9.9
|
||||||
Requires: acl
|
Requires: acl
|
||||||
@ -426,7 +459,7 @@ If you are installing an IPA server, you need to install this package.
|
|||||||
Summary: Common files used by IPA server
|
Summary: Common files used by IPA server
|
||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
Requires: %{name}-client-common = %{version}-%{release}
|
Requires: %{name}-client-common = %{version}-%{release}
|
||||||
Requires: httpd >= 2.4.6-31
|
Requires: httpd >= %{httpd_version}
|
||||||
Requires: systemd-units >= 38
|
Requires: systemd-units >= 38
|
||||||
Requires: custodia >= 0.3.1
|
Requires: custodia >= 0.3.1
|
||||||
%if 0%{?rhel} > 7
|
%if 0%{?rhel} > 7
|
||||||
@ -478,6 +511,7 @@ Requires: %{name}-common = %{version}-%{release}
|
|||||||
Requires: samba >= %{samba_version}
|
Requires: samba >= %{samba_version}
|
||||||
Requires: samba-winbind
|
Requires: samba-winbind
|
||||||
Requires: libsss_idmap
|
Requires: libsss_idmap
|
||||||
|
Obsoletes: ipa-idoverride-memberof-plugin <= 0.1
|
||||||
|
|
||||||
Requires(post): python3
|
Requires(post): python3
|
||||||
Requires: python3-samba
|
Requires: python3-samba
|
||||||
@ -501,7 +535,8 @@ Cross-realm trusts with Active Directory in IPA require working Samba 4
|
|||||||
installation. This package is provided for convenience to install all required
|
installation. This package is provided for convenience to install all required
|
||||||
dependencies at once.
|
dependencies at once.
|
||||||
|
|
||||||
%endif # ONLY_CLIENT
|
# ONLY_CLIENT
|
||||||
|
%endif
|
||||||
|
|
||||||
|
|
||||||
%package client
|
%package client
|
||||||
@ -544,6 +579,9 @@ Obsoletes: %{alt_name}-admintools < 4.4.1
|
|||||||
Obsoletes: %{name}-admintools < 4.4.1
|
Obsoletes: %{name}-admintools < 4.4.1
|
||||||
Provides: %{name}-admintools = %{version}-%{release}
|
Provides: %{name}-admintools = %{version}-%{release}
|
||||||
|
|
||||||
|
# Conflict with crypto-policies < 20200629-1 to get AD-SUPPORT policy module
|
||||||
|
Conflicts: crypto-policies < 20200629-1
|
||||||
|
|
||||||
%description client
|
%description client
|
||||||
IPA is an integrated solution to provide centrally managed Identity (users,
|
IPA is an integrated solution to provide centrally managed Identity (users,
|
||||||
hosts, services), Authentication (SSO, 2FA), and Authorization
|
hosts, services), Authentication (SSO, 2FA), and Authorization
|
||||||
@ -571,6 +609,17 @@ Requires: cifs-utils
|
|||||||
This package provides command-line tools to deploy Samba domain member
|
This package provides command-line tools to deploy Samba domain member
|
||||||
on the machine enrolled into a FreeIPA environment
|
on the machine enrolled into a FreeIPA environment
|
||||||
|
|
||||||
|
%if ! %{ONLY_CLIENT}
|
||||||
|
%package client-epn
|
||||||
|
Summary: Tools to configure Expiring Password Notification in IPA
|
||||||
|
Group: System Environment/Base
|
||||||
|
Requires: %{name}-client = %{version}-%{release}
|
||||||
|
|
||||||
|
%description client-epn
|
||||||
|
This package provides a service to collect and send expiring password
|
||||||
|
notifications via email (SMTP).
|
||||||
|
%endif
|
||||||
|
|
||||||
%package -n python3-ipaclient
|
%package -n python3-ipaclient
|
||||||
Summary: Python libraries used by IPA client
|
Summary: Python libraries used by IPA client
|
||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
@ -695,6 +744,13 @@ Obsoletes: %{alt_name}-common < %{version}
|
|||||||
|
|
||||||
Conflicts: %{alt_name}-python < %{version}
|
Conflicts: %{alt_name}-python < %{version}
|
||||||
|
|
||||||
|
%if 0%{?with_selinux}
|
||||||
|
# This ensures that the *-selinux package and all it’s dependencies are not
|
||||||
|
# pulled into containers and other systems that do not use SELinux. The
|
||||||
|
# policy defines types and file contexts for client and server.
|
||||||
|
Requires: (%{name}-selinux = %{version}-%{release} if selinux-policy-%{selinuxtype})
|
||||||
|
%endif
|
||||||
|
|
||||||
%description common
|
%description common
|
||||||
IPA is an integrated solution to provide centrally managed Identity (users,
|
IPA is an integrated solution to provide centrally managed Identity (users,
|
||||||
hosts, services), Authentication (SSO, 2FA), and Authorization
|
hosts, services), Authentication (SSO, 2FA), and Authorization
|
||||||
@ -717,12 +773,14 @@ Requires: ldns-utils
|
|||||||
Requires: python3-coverage
|
Requires: python3-coverage
|
||||||
Requires: python3-cryptography >= 1.6
|
Requires: python3-cryptography >= 1.6
|
||||||
Requires: python3-polib
|
Requires: python3-polib
|
||||||
Requires: python3-pytest >= 2.6
|
Requires: python3-pytest >= 3.9.1
|
||||||
Requires: python3-pytest-multihost >= 0.5
|
Requires: python3-pytest-multihost >= 0.5
|
||||||
Requires: python3-pytest-sourceorder
|
Requires: python3-pytest-sourceorder
|
||||||
Requires: python3-sssdconfig >= %{sssd_version}
|
Requires: python3-sssdconfig >= %{sssd_version}
|
||||||
Requires: tar
|
Requires: tar
|
||||||
Requires: xz
|
Requires: xz
|
||||||
|
Requires: openssh-clients
|
||||||
|
Requires: sshpass
|
||||||
|
|
||||||
%description -n python3-ipatests
|
%description -n python3-ipatests
|
||||||
IPA is an integrated solution to provide centrally managed Identity (users,
|
IPA is an integrated solution to provide centrally managed Identity (users,
|
||||||
@ -732,7 +790,23 @@ features for further integration with Linux based clients (SUDO, automount)
|
|||||||
and integration with Active Directory based infrastructures (Trusts).
|
and integration with Active Directory based infrastructures (Trusts).
|
||||||
This package contains tests that verify IPA functionality under Python 3.
|
This package contains tests that verify IPA functionality under Python 3.
|
||||||
|
|
||||||
%endif # with_ipatests
|
# with_ipatests
|
||||||
|
%endif
|
||||||
|
|
||||||
|
|
||||||
|
%if 0%{?with_selinux}
|
||||||
|
# SELinux subpackage
|
||||||
|
%package selinux
|
||||||
|
Summary: FreeIPA SELinux policy
|
||||||
|
BuildArch: noarch
|
||||||
|
Requires: selinux-policy-%{selinuxtype}
|
||||||
|
Requires(post): selinux-policy-%{selinuxtype}
|
||||||
|
%{?selinux_requires}
|
||||||
|
|
||||||
|
%description selinux
|
||||||
|
Custom SELinux policy module for FreeIPA
|
||||||
|
# with_selinux
|
||||||
|
%endif
|
||||||
|
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
@ -869,15 +943,28 @@ mkdir -p %{buildroot}%{_sysconfdir}/httpd/conf.d/
|
|||||||
mkdir -p %{buildroot}%{_libdir}/krb5/plugins/libkrb5
|
mkdir -p %{buildroot}%{_libdir}/krb5/plugins/libkrb5
|
||||||
touch %{buildroot}%{_libdir}/krb5/plugins/libkrb5/winbind_krb5_locator.so
|
touch %{buildroot}%{_libdir}/krb5/plugins/libkrb5/winbind_krb5_locator.so
|
||||||
|
|
||||||
%endif # ONLY_CLIENT
|
# ONLY_CLIENT
|
||||||
|
%endif
|
||||||
|
|
||||||
/bin/touch %{buildroot}%{_sysconfdir}/ipa/default.conf
|
/bin/touch %{buildroot}%{_sysconfdir}/ipa/default.conf
|
||||||
/bin/touch %{buildroot}%{_sysconfdir}/ipa/ca.crt
|
/bin/touch %{buildroot}%{_sysconfdir}/ipa/ca.crt
|
||||||
|
|
||||||
%if ! %{ONLY_CLIENT}
|
%if ! %{ONLY_CLIENT}
|
||||||
mkdir -p %{buildroot}%{_sysconfdir}/cron.d
|
mkdir -p %{buildroot}%{_sysconfdir}/cron.d
|
||||||
%endif # ONLY_CLIENT
|
# ONLY_CLIENT
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if %{ONLY_CLIENT}
|
||||||
|
# Remove ipa-epn parts as we don't have ipa-epn systemd integration generated
|
||||||
|
# for client-only build
|
||||||
|
rm %{buildroot}/%{_sbindir}/ipa-epn
|
||||||
|
rm %{buildroot}/%{_sysconfdir}/ipa/epn.conf
|
||||||
|
rm -rf %{buildroot}/%{_sysconfdir}/ipa/epn
|
||||||
|
rm %{buildroot}/%{_mandir}/man1/ipa-epn.1*
|
||||||
|
rm %{buildroot}/%{_mandir}/man5/epn.conf.5*
|
||||||
|
rm %{buildroot}/%{_unitdir}/ipa-epn.service
|
||||||
|
rm %{buildroot}/%{_unitdir}/ipa-epn.timer
|
||||||
|
%endif
|
||||||
|
|
||||||
%if ! %{ONLY_CLIENT}
|
%if ! %{ONLY_CLIENT}
|
||||||
|
|
||||||
@ -989,7 +1076,8 @@ if [ $1 -eq 0 ]; then
|
|||||||
/bin/systemctl reload-or-try-restart oddjobd
|
/bin/systemctl reload-or-try-restart oddjobd
|
||||||
fi
|
fi
|
||||||
|
|
||||||
%endif # ONLY_CLIENT
|
# ONLY_CLIENT
|
||||||
|
%endif
|
||||||
|
|
||||||
|
|
||||||
%post client
|
%post client
|
||||||
@ -1027,6 +1115,28 @@ if [ $1 -gt 1 ] ; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
%if 0%{?with_selinux}
|
||||||
|
# SELinux contexts are saved so that only affected files can be
|
||||||
|
# relabeled after the policy module installation
|
||||||
|
%pre selinux
|
||||||
|
%selinux_relabel_pre -s %{selinuxtype}
|
||||||
|
|
||||||
|
%post selinux
|
||||||
|
semodule -d ipa_custodia &> /dev/null || true;
|
||||||
|
%selinux_modules_install -s %{selinuxtype} %{_datadir}/selinux/packages/%{selinuxtype}/%{modulename}.pp.bz2
|
||||||
|
|
||||||
|
%postun selinux
|
||||||
|
if [ $1 -eq 0 ]; then
|
||||||
|
%selinux_modules_uninstall -s %{selinuxtype} %{modulename}
|
||||||
|
semodule -e ipa_custodia &> /dev/null || true;
|
||||||
|
fi
|
||||||
|
|
||||||
|
%posttrans selinux
|
||||||
|
%selinux_relabel_post -s %{selinuxtype}
|
||||||
|
# with_selinux
|
||||||
|
%endif
|
||||||
|
|
||||||
|
|
||||||
%triggerin client -- openssh-server
|
%triggerin client -- openssh-server
|
||||||
# Has the client been configured?
|
# Has the client been configured?
|
||||||
restore=0
|
restore=0
|
||||||
@ -1093,11 +1203,12 @@ fi
|
|||||||
%{_sbindir}/ipa-cert-fix
|
%{_sbindir}/ipa-cert-fix
|
||||||
%{_libexecdir}/certmonger/dogtag-ipa-ca-renew-agent-submit
|
%{_libexecdir}/certmonger/dogtag-ipa-ca-renew-agent-submit
|
||||||
%{_libexecdir}/certmonger/ipa-server-guard
|
%{_libexecdir}/certmonger/ipa-server-guard
|
||||||
%{_libexecdir}/ipa/custodia/ipa-custodia-dmldap
|
|
||||||
%{_libexecdir}/ipa/custodia/ipa-custodia-pki-tomcat
|
|
||||||
%{_libexecdir}/ipa/custodia/ipa-custodia-pki-tomcat-wrapped
|
|
||||||
%{_libexecdir}/ipa/custodia/ipa-custodia-ra-agent
|
|
||||||
%dir %{_libexecdir}/ipa
|
%dir %{_libexecdir}/ipa
|
||||||
|
%dir %{_libexecdir}/ipa/custodia
|
||||||
|
%attr(755,root,root) %{_libexecdir}/ipa/custodia/ipa-custodia-dmldap
|
||||||
|
%attr(755,root,root) %{_libexecdir}/ipa/custodia/ipa-custodia-pki-tomcat
|
||||||
|
%attr(755,root,root) %{_libexecdir}/ipa/custodia/ipa-custodia-pki-tomcat-wrapped
|
||||||
|
%attr(755,root,root) %{_libexecdir}/ipa/custodia/ipa-custodia-ra-agent
|
||||||
%{_libexecdir}/ipa/ipa-custodia
|
%{_libexecdir}/ipa/ipa-custodia
|
||||||
%{_libexecdir}/ipa/ipa-custodia-check
|
%{_libexecdir}/ipa/ipa-custodia-check
|
||||||
%{_libexecdir}/ipa/ipa-httpd-kdcproxy
|
%{_libexecdir}/ipa/ipa-httpd-kdcproxy
|
||||||
@ -1105,8 +1216,10 @@ fi
|
|||||||
%{_libexecdir}/ipa/ipa-pki-retrieve-key
|
%{_libexecdir}/ipa/ipa-pki-retrieve-key
|
||||||
%{_libexecdir}/ipa/ipa-pki-wait-running
|
%{_libexecdir}/ipa/ipa-pki-wait-running
|
||||||
%{_libexecdir}/ipa/ipa-otpd
|
%{_libexecdir}/ipa/ipa-otpd
|
||||||
|
%{_libexecdir}/ipa/ipa-print-pac
|
||||||
%dir %{_libexecdir}/ipa/oddjob
|
%dir %{_libexecdir}/ipa/oddjob
|
||||||
%attr(0755,root,root) %{_libexecdir}/ipa/oddjob/org.freeipa.server.conncheck
|
%attr(0755,root,root) %{_libexecdir}/ipa/oddjob/org.freeipa.server.conncheck
|
||||||
|
%attr(0755,root,root) %{_libexecdir}/ipa/oddjob/org.freeipa.server.trust-enable-agent
|
||||||
%config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freeipa.server.conf
|
%config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freeipa.server.conf
|
||||||
%config(noreplace) %{_sysconfdir}/oddjobd.conf.d/ipa-server.conf
|
%config(noreplace) %{_sysconfdir}/oddjobd.conf.d/ipa-server.conf
|
||||||
%dir %{_libexecdir}/ipa/certmonger
|
%dir %{_libexecdir}/ipa/certmonger
|
||||||
@ -1182,7 +1295,6 @@ fi
|
|||||||
%{_usr}/share/ipa/*.ldif
|
%{_usr}/share/ipa/*.ldif
|
||||||
%{_usr}/share/ipa/*.uldif
|
%{_usr}/share/ipa/*.uldif
|
||||||
%{_usr}/share/ipa/*.template
|
%{_usr}/share/ipa/*.template
|
||||||
%{_usr}/share/ipa/bind.ipa-ext.conf
|
|
||||||
%dir %{_usr}/share/ipa/advise
|
%dir %{_usr}/share/ipa/advise
|
||||||
%dir %{_usr}/share/ipa/advise/legacy
|
%dir %{_usr}/share/ipa/advise/legacy
|
||||||
%{_usr}/share/ipa/advise/legacy/*.template
|
%{_usr}/share/ipa/advise/legacy/*.template
|
||||||
@ -1223,16 +1335,17 @@ fi
|
|||||||
%dir %{_sysconfdir}/ipa/html
|
%dir %{_sysconfdir}/ipa/html
|
||||||
%config(noreplace) %{_sysconfdir}/ipa/html/ssbrowser.html
|
%config(noreplace) %{_sysconfdir}/ipa/html/ssbrowser.html
|
||||||
%config(noreplace) %{_sysconfdir}/ipa/html/unauthorized.html
|
%config(noreplace) %{_sysconfdir}/ipa/html/unauthorized.html
|
||||||
%ghost %attr(0644,root,apache) %config(noreplace) %{_sysconfdir}/httpd/conf.d/ipa-rewrite.conf
|
%ghost %attr(0644,root,root) %config(noreplace) %{_sysconfdir}/httpd/conf.d/ipa-rewrite.conf
|
||||||
%ghost %attr(0644,root,apache) %config(noreplace) %{_sysconfdir}/httpd/conf.d/ipa.conf
|
%ghost %attr(0644,root,root) %config(noreplace) %{_sysconfdir}/httpd/conf.d/ipa.conf
|
||||||
%ghost %attr(0644,root,apache) %config(noreplace) %{_sysconfdir}/httpd/conf.d/ipa-kdc-proxy.conf
|
%ghost %attr(0644,root,root) %config(noreplace) %{_sysconfdir}/httpd/conf.d/ipa-kdc-proxy.conf
|
||||||
%ghost %attr(0644,root,apache) %config(noreplace) %{_sysconfdir}/httpd/conf.d/ipa-pki-proxy.conf
|
%ghost %attr(0640,root,root) %config(noreplace) %{_sysconfdir}/httpd/conf.d/ipa-pki-proxy.conf
|
||||||
%ghost %attr(0644,root,apache) %config(noreplace) %{_sysconfdir}/ipa/kdcproxy/ipa-kdc-proxy.conf
|
%ghost %attr(0644,root,root) %config(noreplace) %{_sysconfdir}/ipa/kdcproxy/ipa-kdc-proxy.conf
|
||||||
%ghost %attr(0644,root,apache) %config(noreplace) %{_usr}/share/ipa/html/ca.crt
|
%ghost %attr(0644,root,root) %config(noreplace) %{_usr}/share/ipa/html/ca.crt
|
||||||
%ghost %attr(0640,root,named) %config(noreplace) %{_sysconfdir}/named/ipa-ext.conf
|
%ghost %attr(0640,root,named) %config(noreplace) %{_sysconfdir}/named/ipa-ext.conf
|
||||||
%ghost %attr(0644,root,apache) %{_usr}/share/ipa/html/krb.con
|
%ghost %attr(0640,root,named) %config(noreplace) %{_sysconfdir}/named/ipa-options-ext.conf
|
||||||
%ghost %attr(0644,root,apache) %{_usr}/share/ipa/html/krb5.ini
|
%ghost %attr(0644,root,root) %{_usr}/share/ipa/html/krb.con
|
||||||
%ghost %attr(0644,root,apache) %{_usr}/share/ipa/html/krbrealm.con
|
%ghost %attr(0644,root,root) %{_usr}/share/ipa/html/krb5.ini
|
||||||
|
%ghost %attr(0644,root,root) %{_usr}/share/ipa/html/krbrealm.con
|
||||||
%dir %{_usr}/share/ipa/updates/
|
%dir %{_usr}/share/ipa/updates/
|
||||||
%{_usr}/share/ipa/updates/*
|
%{_usr}/share/ipa/updates/*
|
||||||
%dir %{_localstatedir}/lib/ipa
|
%dir %{_localstatedir}/lib/ipa
|
||||||
@ -1244,8 +1357,8 @@ fi
|
|||||||
%attr(755,root,root) %dir %{_localstatedir}/lib/ipa/certs
|
%attr(755,root,root) %dir %{_localstatedir}/lib/ipa/certs
|
||||||
%attr(700,root,root) %dir %{_localstatedir}/lib/ipa/private
|
%attr(700,root,root) %dir %{_localstatedir}/lib/ipa/private
|
||||||
%attr(700,root,root) %dir %{_localstatedir}/lib/ipa/passwds
|
%attr(700,root,root) %dir %{_localstatedir}/lib/ipa/passwds
|
||||||
%ghost %{_localstatedir}/lib/ipa/pki-ca/publish
|
%ghost %attr(775,root,pkiuser) %{_localstatedir}/lib/ipa/pki-ca/publish
|
||||||
%ghost %{_localstatedir}/named/dyndb-ldap/ipa
|
%ghost %attr(770,named,named) %{_localstatedir}/named/dyndb-ldap/ipa
|
||||||
%dir %attr(0700,root,root) %{_sysconfdir}/ipa/custodia
|
%dir %attr(0700,root,root) %{_sysconfdir}/ipa/custodia
|
||||||
%dir %{_usr}/share/ipa/schema.d
|
%dir %{_usr}/share/ipa/schema.d
|
||||||
%attr(0644,root,root) %{_usr}/share/ipa/schema.d/README
|
%attr(0644,root,root) %{_usr}/share/ipa/schema.d/README
|
||||||
@ -1277,9 +1390,10 @@ fi
|
|||||||
%ghost %{_libdir}/krb5/plugins/libkrb5/winbind_krb5_locator.so
|
%ghost %{_libdir}/krb5/plugins/libkrb5/winbind_krb5_locator.so
|
||||||
%{_sysconfdir}/dbus-1/system.d/oddjob-ipa-trust.conf
|
%{_sysconfdir}/dbus-1/system.d/oddjob-ipa-trust.conf
|
||||||
%{_sysconfdir}/oddjobd.conf.d/oddjobd-ipa-trust.conf
|
%{_sysconfdir}/oddjobd.conf.d/oddjobd-ipa-trust.conf
|
||||||
%%attr(755,root,root) %{_libexecdir}/ipa/oddjob/com.redhat.idm.trust-fetch-domains
|
%attr(755,root,root) %{_libexecdir}/ipa/oddjob/com.redhat.idm.trust-fetch-domains
|
||||||
|
|
||||||
%endif # ONLY_CLIENT
|
# ONLY_CLIENT
|
||||||
|
%endif
|
||||||
|
|
||||||
|
|
||||||
%files client
|
%files client
|
||||||
@ -1308,6 +1422,20 @@ fi
|
|||||||
%{_sbindir}/ipa-client-samba
|
%{_sbindir}/ipa-client-samba
|
||||||
%{_mandir}/man1/ipa-client-samba.1*
|
%{_mandir}/man1/ipa-client-samba.1*
|
||||||
|
|
||||||
|
%if ! %{ONLY_CLIENT}
|
||||||
|
%files client-epn
|
||||||
|
%doc README.md Contributors.txt
|
||||||
|
%dir %{_sysconfdir}/ipa/epn
|
||||||
|
%license COPYING
|
||||||
|
%{_sbindir}/ipa-epn
|
||||||
|
%{_mandir}/man1/ipa-epn.1*
|
||||||
|
%{_mandir}/man5/epn.conf.5*
|
||||||
|
%attr(644,root,root) %{_unitdir}/ipa-epn.service
|
||||||
|
%attr(644,root,root) %{_unitdir}/ipa-epn.timer
|
||||||
|
%attr(600,root,root) %config(noreplace) %{_sysconfdir}/ipa/epn.conf
|
||||||
|
%attr(644,root,root) %config(noreplace) %{_sysconfdir}/ipa/epn/expire_msg.template
|
||||||
|
%endif
|
||||||
|
|
||||||
%files -n python3-ipaclient
|
%files -n python3-ipaclient
|
||||||
%doc README.md Contributors.txt
|
%doc README.md Contributors.txt
|
||||||
%license COPYING
|
%license COPYING
|
||||||
@ -1334,19 +1462,19 @@ fi
|
|||||||
%doc README.md Contributors.txt
|
%doc README.md Contributors.txt
|
||||||
%license COPYING
|
%license COPYING
|
||||||
%dir %attr(0755,root,root) %{_sysconfdir}/ipa/
|
%dir %attr(0755,root,root) %{_sysconfdir}/ipa/
|
||||||
%ghost %attr(0644,root,apache) %config(noreplace) %{_sysconfdir}/ipa/default.conf
|
%ghost %attr(0644,root,root) %config(noreplace) %{_sysconfdir}/ipa/default.conf
|
||||||
%ghost %attr(0644,root,apache) %config(noreplace) %{_sysconfdir}/ipa/ca.crt
|
%ghost %attr(0644,root,root) %config(noreplace) %{_sysconfdir}/ipa/ca.crt
|
||||||
%dir %attr(0755,root,root) %{_sysconfdir}/ipa/nssdb
|
%dir %attr(0755,root,root) %{_sysconfdir}/ipa/nssdb
|
||||||
# old dbm format
|
# old dbm format
|
||||||
%ghost %config(noreplace) %{_sysconfdir}/ipa/nssdb/cert8.db
|
%ghost %attr(644,root,root) %config(noreplace) %{_sysconfdir}/ipa/nssdb/cert8.db
|
||||||
%ghost %config(noreplace) %{_sysconfdir}/ipa/nssdb/key3.db
|
%ghost %attr(644,root,root) %config(noreplace) %{_sysconfdir}/ipa/nssdb/key3.db
|
||||||
%ghost %config(noreplace) %{_sysconfdir}/ipa/nssdb/secmod.db
|
%ghost %attr(644,root,root) %config(noreplace) %{_sysconfdir}/ipa/nssdb/secmod.db
|
||||||
# new sql format
|
# new sql format
|
||||||
%ghost %config(noreplace) %{_sysconfdir}/ipa/nssdb/cert9.db
|
%ghost %attr(644,root,root) %config(noreplace) %{_sysconfdir}/ipa/nssdb/cert9.db
|
||||||
%ghost %config(noreplace) %{_sysconfdir}/ipa/nssdb/key4.db
|
%ghost %attr(644,root,root) %config(noreplace) %{_sysconfdir}/ipa/nssdb/key4.db
|
||||||
%ghost %config(noreplace) %{_sysconfdir}/ipa/nssdb/pkcs11.txt
|
%ghost %attr(644,root,root) %config(noreplace) %{_sysconfdir}/ipa/nssdb/pkcs11.txt
|
||||||
%ghost %config(noreplace) %{_sysconfdir}/ipa/nssdb/pwdfile.txt
|
%ghost %attr(600,root,root) %config(noreplace) %{_sysconfdir}/ipa/nssdb/pwdfile.txt
|
||||||
%ghost %config(noreplace) %{_sysconfdir}/pki/ca-trust/source/ipa.p11-kit
|
%ghost %attr(644,root,root) %config(noreplace) %{_sysconfdir}/pki/ca-trust/source/ipa.p11-kit
|
||||||
%dir %{_localstatedir}/lib/ipa-client
|
%dir %{_localstatedir}/lib/ipa-client
|
||||||
%dir %{_localstatedir}/lib/ipa-client/pki
|
%dir %{_localstatedir}/lib/ipa-client/pki
|
||||||
%dir %{_localstatedir}/lib/ipa-client/sysrestore
|
%dir %{_localstatedir}/lib/ipa-client/sysrestore
|
||||||
@ -1376,7 +1504,6 @@ fi
|
|||||||
%{python3_sitelib}/ipapython-*.egg-info
|
%{python3_sitelib}/ipapython-*.egg-info
|
||||||
%{python3_sitelib}/ipalib-*.egg-info
|
%{python3_sitelib}/ipalib-*.egg-info
|
||||||
%{python3_sitelib}/ipaplatform-*.egg-info
|
%{python3_sitelib}/ipaplatform-*.egg-info
|
||||||
%{python3_sitelib}/ipaplatform-*-nspkg.pth
|
|
||||||
|
|
||||||
|
|
||||||
%if 0%{?with_ipatests}
|
%if 0%{?with_ipatests}
|
||||||
@ -1394,13 +1521,119 @@ fi
|
|||||||
%{_mandir}/man1/ipa-test-config.1*
|
%{_mandir}/man1/ipa-test-config.1*
|
||||||
%{_mandir}/man1/ipa-test-task.1*
|
%{_mandir}/man1/ipa-test-task.1*
|
||||||
|
|
||||||
%endif # with_ipatests
|
# with_ipatests
|
||||||
|
%endif
|
||||||
|
|
||||||
|
|
||||||
|
%if 0%{?with_selinux}
|
||||||
|
%files selinux
|
||||||
|
%{_datadir}/selinux/packages/%{selinuxtype}/%{modulename}.pp.*
|
||||||
|
%ghost %{_sharedstatedir}/selinux/%{selinuxtype}/active/modules/200/%{modulename}
|
||||||
|
# with_selinux
|
||||||
|
%endif
|
||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Wed Mar 18 2020 Thomas Woerner <twoerner@redhat.com> - 4.8.4-7
|
* Wed Sep 23 2020 Thomas Woerner <twoerner@redhat.com> - 4.8.7-12
|
||||||
- Update dependencies for openldap-client
|
- Require selinux sub package in the proper version
|
||||||
Resolves: RHBZ#1781799
|
Related: RHBZ#1868432
|
||||||
|
- SELinux: do not double-define node_t and pki_tomcat_cert_t
|
||||||
|
Related: RHBZ#1868432
|
||||||
|
- SELinux: add dedicated policy for ipa-pki-retrieve-key + ipatests
|
||||||
|
Related: RHBZ#1868432
|
||||||
|
- dogtaginstance.py: add --debug to pkispawn
|
||||||
|
Resolves: RHBZ#1879604
|
||||||
|
|
||||||
|
* Thu Sep 10 2020 Thomas Woerner <twoerner@redhat.com> - 4.8.7-11
|
||||||
|
- SELinux Policy: let custodia replicate keys
|
||||||
|
Resolves: RHBZ#1868432
|
||||||
|
|
||||||
|
* Wed Aug 19 2020 Thomas Woerner <twoerner@redhat.com> - 4.8.7-10
|
||||||
|
- Set mode of /etc/ipa/ca.crt to 0644 in CA-less installations
|
||||||
|
Resolves: RHBZ#1870202
|
||||||
|
|
||||||
|
* Mon Aug 17 2020 Thomas Woerner <twoerner@redhat.com> - 4.8.7-9
|
||||||
|
- CAless installation: set the perms on KDC cert file
|
||||||
|
Resolves: RHBZ#1863616
|
||||||
|
- EPN: handle empty attributes
|
||||||
|
Resolves: RHBZ#1866938
|
||||||
|
- IPA-EPN: enhance input validation
|
||||||
|
Resolves: RHBZ#1866291
|
||||||
|
- EPN: enhance input validation
|
||||||
|
Resolves: RHBZ#1863079
|
||||||
|
- Require new samba build 4.12.3-52
|
||||||
|
Related: RHBZ#1868558
|
||||||
|
- Require new selinux-policy build 3.14.3-52
|
||||||
|
Related: RHBZ#1869311
|
||||||
|
|
||||||
|
* Fri Jul 31 2020 Thomas Woerner <twoerner@redhat.com> - 4.8.7-8
|
||||||
|
- [WebUI] IPA Error 3007: RequirmentError" while adding members in
|
||||||
|
"User ID overrides" tab (updated)
|
||||||
|
Resolves: RHBZ#1757045
|
||||||
|
- ipa-client-install: use the authselect backup during uninstall
|
||||||
|
Resolves: RHBZ#1810179
|
||||||
|
- Replace SSLCertVerificationError with CertificateError for py36
|
||||||
|
Resolves: RHBZ#1858318
|
||||||
|
- Fix AVC denial during ipa-adtrust-install --add-agents
|
||||||
|
Resolves: RHBZ#1859213
|
||||||
|
|
||||||
|
* Wed Jul 15 2020 Thomas Woerner <twoerner@redhat.com> - 4.8.7-7
|
||||||
|
- replica install failing with avc denial for custodia component
|
||||||
|
Resolves: RHBZ#1857157
|
||||||
|
|
||||||
|
* Tue Jul 14 2020 Thomas Woerner <twoerner@redhat.com> - 4.8.7-6
|
||||||
|
- selinux don't audit rules deny fetching trust topology
|
||||||
|
Resolves: RHBZ#1845596
|
||||||
|
- fix iPAddress cert issuance for >1 host/service
|
||||||
|
Resolves: RHBZ#1846352
|
||||||
|
- Specify cert_paths when calling PKIConnection
|
||||||
|
Resolves: RHBZ#1849155
|
||||||
|
- Update crypto policy to allow AD-SUPPORT when installing IPA
|
||||||
|
Resolves: RHBZ#1851139
|
||||||
|
- Add version to ipa-idoverride-memberof obsoletes
|
||||||
|
Related: RHBZ#1846434
|
||||||
|
|
||||||
|
* Thu Jul 02 2020 Thomas Woerner <twoerner@redhat.com> - 4.8.7-5
|
||||||
|
- Add missing ipa-selinux package
|
||||||
|
Resolves: RHBZ#1853263
|
||||||
|
|
||||||
|
* Mon Jun 29 2020 Thomas Woerner <twoerner@redhat.com> - 4.8.7-4
|
||||||
|
- Remove client-epn left over files for ONLY_CLIENT
|
||||||
|
Related: RHBZ#1847999
|
||||||
|
|
||||||
|
* Mon Jun 29 2020 Thomas Woerner <twoerner@redhat.com> - 4.8.7-3
|
||||||
|
- [WebUI] IPA Error 3007: RequirmentError" while adding members in
|
||||||
|
"User ID overrides" tab
|
||||||
|
Resolves: RHBZ#1757045
|
||||||
|
- EPN does not ship its default configuration ( /etc/ipa/epn.conf ) in
|
||||||
|
freeipa-client-epn
|
||||||
|
Resolves: RHBZ#1847999
|
||||||
|
- FreeIPA - Utilize 256-bit AJP connector passwords
|
||||||
|
Resolves: RHBZ#1849914
|
||||||
|
- ipa: typo issue in ipanthomedirectoryrive deffinition
|
||||||
|
Resolves: RHBZ#1851411
|
||||||
|
|
||||||
|
* Thu Jun 11 2020 Thomas Woerner <twoerner@redhat.com> - 4.8.7-2
|
||||||
|
- Remove ipa-idoverride-memberof as superceded by ipa-server 4.8.7
|
||||||
|
Resolves: RHBZ#1846434
|
||||||
|
|
||||||
|
* Thu Jun 11 2020 Thomas Woerner <twoerner@redhat.com> - 4.8.7-1
|
||||||
|
- Upstream release FreeIPA 4.8.7
|
||||||
|
- Require new samba build 4.12.3-0
|
||||||
|
Related: RHBZ#1818765
|
||||||
|
- New client-epn sub package
|
||||||
|
Resolves: RHBZ#913799
|
||||||
|
|
||||||
|
* Tue Jun 02 2020 Thomas Woerner <twoerner@redhat.com> - 4.8.6-2
|
||||||
|
- Support krb5 1.18
|
||||||
|
Resolves: RHBZ#1817579
|
||||||
|
|
||||||
|
* Tue Apr 28 2020 Thomas Woerner <twoerner@redhat.com> - 4.8.6-1
|
||||||
|
- Upstream release FreeIPA 4.8.6
|
||||||
|
- New SELinux sub package to provide own module
|
||||||
|
- Depend on selinux-policy-devel 3.14.3-43 for build due to a makefile issue in
|
||||||
|
SELinux external policy support
|
||||||
|
Related: RHBZ#1818765
|
||||||
|
|
||||||
* Mon Feb 17 2020 Thomas Woerner <twoerner@redhat.com> - 4.8.4-6
|
* Mon Feb 17 2020 Thomas Woerner <twoerner@redhat.com> - 4.8.4-6
|
||||||
- Allow an empty cookie in dogtag-ipa-ca-renew-agent-submit
|
- Allow an empty cookie in dogtag-ipa-ca-renew-agent-submit
|
||||||
|
Loading…
Reference in New Issue
Block a user