From 1b53cfea751d8672d1f3cf746f1119460c94efc1 Mon Sep 17 00:00:00 2001
From: Dominik Perpeet <dperpeet@redhat.com>
Date: Tue, 7 Feb 2017 19:42:14 +0100
Subject: [PATCH 3/3] Make basic selinux functionality available without
setroubleshootd
Even if setroubleshootd isn't installed, the user can still read the
enforce-mode and toggle it.
Bug https://bugzilla.redhat.com/show_bug.cgi?id=1422181
Upstream commits:
e6532bc1189c6eb36180a4022a2e0bc923fef731
selinux: Make basic functionality available without setroubleshootd
22be38a0aa420a413d9b3cc96f3e0fbc77056c1a
selinux: Rename to SELinux in the menu
c16d415707297ef3bf26aae42bffeeebd8f11108
selinux: Try to read SELinux system policy as superuser
e1b66614959d207c788cf88fe55db4c14493515d
test: Enable partial testing of selinux on rhel-atomic
---
dist/selinux/manifest.json | Bin 203 -> 190 bytes
dist/selinux/selinux.min.js | Bin 392107 -> 392030 bytes
dist/selinux/selinux.min.js.map | Bin 1335679 -> 1336700 bytes
pkg/selinux/manifest.json | 2 +-
pkg/selinux/selinux-client.es6 | 2 +-
pkg/selinux/setroubleshoot-client.js | 2 +-
pkg/selinux/setroubleshoot-view.jsx | 100 +++++++++++++++++++++--------------
pkg/selinux/setroubleshoot.js | 2 -
test/verify/check-setroubleshoot | 9 +---
dist/selinux/Makefile.deps | Bin 2627 -> 2627 bytes
10 files changed, 64 insertions(+), 53 deletions(-)
diff --git a/dist/selinux/manifest.json b/dist/selinux/manifest.json
index 67b5c5affd146684193de1bddd7ab02c6fb4cfee..ecb12797aee014aa83acc2b20e9f70777bfc8775 100644
GIT binary patch
delta 9
QcmX@jxQ}tdq>1x&02HAF3IG5A
delta 23
ecmdnTc$#s-BwmG(qWsdNoYdls{QQ!MlXL)V6$vx|
diff --git a/dist/selinux/selinux.min.js b/dist/selinux/selinux.min.js
index 1414f098008a2a610eecb270236291ad0e47fd12..62a4aefcd78c50901925e56b7136cd3b87d4d3b0 100644
GIT binary patch
delta 2403
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
Pu+b%xc>C}0LC*gH)zB>W
delta 2572
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
diff --git a/dist/selinux/selinux.min.js.map b/dist/selinux/selinux.min.js.map
index 4d6abdb9b5696031f2fa612423db44b7aff11ee2..002f9eec7ab9e23410f4796abb49a43e336f61c8 100644
GIT binary patch
delta 11425
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
XuX+?t|4Czpm#){Yl((+edbj;A>+G<V
delta 11260
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
F{|k61k>vmY
diff --git a/pkg/selinux/manifest.json b/pkg/selinux/manifest.json
index 67b5c5a..ecb1279 100644
--- a/pkg/selinux/manifest.json
+++ b/pkg/selinux/manifest.json
@@ -6,7 +6,7 @@
"tools": {
"setroubleshoot": {
- "label": "SELinux Troubleshoot",
+ "label": "SELinux",
"order": 8
}
}
diff --git a/pkg/selinux/selinux-client.es6 b/pkg/selinux/selinux-client.es6
index 299ff27..af99ac8 100644
--- a/pkg/selinux/selinux-client.es6
+++ b/pkg/selinux/selinux-client.es6
@@ -48,7 +48,7 @@ var status = {
*/
export function init(statusChangedCallback) {
var refreshInfo = function() {
- cockpit.spawn(statusCommand, { err: 'message', environ: [ "LC_ALL=C" ] }).then(
+ cockpit.spawn(statusCommand, { err: 'message', environ: [ "LC_ALL=C" ], superuser: "try" }).then(
function(output) {
/* parse output that looks like this:
* SELinux status: enabled
diff --git a/pkg/selinux/setroubleshoot-client.js b/pkg/selinux/setroubleshoot-client.js
index 6e8f695..374af79 100644
--- a/pkg/selinux/setroubleshoot-client.js
+++ b/pkg/selinux/setroubleshoot-client.js
@@ -74,7 +74,7 @@ client.init = function(capabilitiesChangedCallback) {
};
// returns a jquery promise
- client.getAlerts = function(since) {
+ client.getAlerts = function(since) {
var dfdResult = cockpit.defer();
var call;
if (since !== undefined)
diff --git a/pkg/selinux/setroubleshoot-view.jsx b/pkg/selinux/setroubleshoot-view.jsx
index 66ef400..84d2e11 100644
--- a/pkg/selinux/setroubleshoot-view.jsx
+++ b/pkg/selinux/setroubleshoot-view.jsx
@@ -329,26 +329,40 @@ var SETroubleshootPage = React.createClass({
e.stopPropagation();
},
render: function() {
+ // if selinux is disabled, we only show EmptyState
+ if (this.props.selinuxStatus.enabled === false) {
+ return (
+ <EmptyState
+ icon={ <div className="fa fa-exclamation-circle"></div> }
+ description={ _("SELinux is disabled on the system") }
+ message={null}
+ relative={false}/>
+ );
+ }
var self = this;
+ var entries;
+ var troubleshooting;
+ var title = _("SELinux Access Control Errors");
+ var emptyCaption = _("No SELinux alerts.");
if (!this.props.connected) {
- var icon;
- var description;
if (this.props.connecting) {
- icon = <div className="spinner spinner-lg" />;
- description = _("Connecting...");
+ emptyCaption = (
+ <div>
+ <div className="spinner spinner-sm"></div>
+ <span>{_("Connecting to SETroubleshoot daemon...")}</span>
+ </div>
+ );
} else {
- icon = <i className="fa fa-exclamation-circle" />;
- description = _("Couldn't connect to SETroubleshoot daemon. Please ensure that setroubleshoot-server is installed.");
+ // if we don't have setroubleshoot-server, be more subtle about saying that
+ title = "";
+ emptyCaption = (
+ <span>
+ {_("Install setroubleshoot-server to troubleshoot SELinux events.")}
+ </span>
+ );
}
-
- return (
- <EmptyState
- icon={icon}
- description={description}
- message={this.props.error} />
- );
} else {
- var entries = this.props.entries.map(function(itm) {
+ entries = this.props.entries.map(function(itm) {
itm.runFix = self.props.runFix;
var listingDetail;
if (itm.details && 'firstSeen' in itm.details) {
@@ -407,38 +421,42 @@ var SETroubleshootPage = React.createClass({
listingActions={ [dismissAction] } />
);
});
+ }
- var errorMessage;
- if (this.props.error) {
- errorMessage = (
- <div className="alert alert-danger alert-dismissable alert-ct-top">
- <span className="pficon pficon-error-circle-o" />
- <span>{this.props.error}</span>
- <button type="button" className="close" aria-hidden="true" onClick={this.handleDismissError}>
- <span className="pficon pficon-close"/>
- </button>
- </div>
- );
- }
+ troubleshooting = (
+ <cockpitListing.Listing
+ title={ title }
+ emptyCaption={ emptyCaption }
+ >
+ {entries}
+ </cockpitListing.Listing>
+ );
- return (
- <div className="container-fluid">
- <SELinuxStatus
- selinuxStatus={this.props.selinuxStatus}
- selinuxStatusError={this.props.selinuxStatusError}
- changeSelinuxMode={this.props.changeSelinuxMode}
- dismissError={this.props.dismissStatusError}
- />
- {errorMessage}
- <cockpitListing.Listing
- title={ _("SELinux Access Control Errors") }
- emptyCaption={ _("No SELinux alerts.") }
- >
- {entries}
- </cockpitListing.Listing>
+ var errorMessage;
+ if (this.props.error) {
+ errorMessage = (
+ <div className="alert alert-danger alert-dismissable alert-ct-top">
+ <span className="pficon pficon-error-circle-o" />
+ <span>{this.props.error}</span>
+ <button type="button" className="close" aria-hidden="true" onClick={this.handleDismissError}>
+ <span className="pficon pficon-close"/>
+ </button>
</div>
);
}
+
+ return (
+ <div className="container-fluid">
+ <SELinuxStatus
+ selinuxStatus={this.props.selinuxStatus}
+ selinuxStatusError={this.props.selinuxStatusError}
+ changeSelinuxMode={this.props.changeSelinuxMode}
+ dismissError={this.props.dismissStatusError}
+ />
+ {errorMessage}
+ {troubleshooting}
+ </div>
+ );
}
});
diff --git a/pkg/selinux/setroubleshoot.js b/pkg/selinux/setroubleshoot.js
index 0ff41bb..ac297c5 100644
--- a/pkg/selinux/setroubleshoot.js
+++ b/pkg/selinux/setroubleshoot.js
@@ -272,9 +272,7 @@ var initStore = function(rootElement) {
dataStore.connected = false;
window.clearTimeout(dataStore.connecting);
dataStore.connecting = null;
- dataStore.error = _("Error while connecting.");
render();
- // TODO: should we propagate the error message here?
});
}
};
diff --git a/test/verify/check-setroubleshoot b/test/verify/check-setroubleshoot
index fb0b7d2..b32c55e 100755
--- a/test/verify/check-setroubleshoot
+++ b/test/verify/check-setroubleshoot
@@ -52,8 +52,8 @@ mv -f ~/.ssh/authorized_keys.test-avc ~/.ssh/authorized_keys
"""
@skipImage("DBus API of setroubleshoot too old", "centos-7")
-@skipImage("No setroubleshoot", "continuous-atomic", "debian-8", "debian-testing", "fedora-atomic", "rhel-atomic", "ubuntu-1604")
class TestSelinux(MachineCase):
+ @skipImage("No setroubleshoot", "continuous-atomic", "debian-8", "debian-testing", "fedora-atomic", "rhel-atomic", "ubuntu-1604")
def testTroubleshootAlerts(self):
b = self.browser
@@ -144,6 +144,7 @@ class TestSelinux(MachineCase):
#b.wait_in_text("body", "No SELinux alerts.")
+ @skipImage("No cockpit-selinux", "debian-8", "debian-testing", "continuous-atomic", "fedora-atomic", "ubuntu-1604")
def testEnforcingToggle(self):
b = self.browser
m = self.machine
@@ -153,14 +154,8 @@ class TestSelinux(MachineCase):
# as happens in our virt-builder and virt-install usage
m.execute("chmod ugo+r /etc/selinux/config")
- # fix audit events first
- m.execute(script=FIX_AUDITD)
-
self.login_and_go("/selinux/setroubleshoot")
- # at the beginning, there should be no entries
- b.wait_in_text("body", "No SELinux alerts.")
-
#########################################################
# wait for the page to be present
b.wait_in_text("body", "SELinux Policy")
diff --git a/dist/selinux/Makefile.deps b/dist/selinux/Makefile.deps
index ce86875ff789723746fbde8c8cb7dfa0d428c9eb..d596f50fc7253c1bcd085909db011ca600b8c14e 100644
GIT binary patch
delta 15
WcmX>sa#&=7GmDv(q0vV7Kb!z7T?JME
delta 15
WcmX>sa#&=7GmC+hfyqYqKb!z7F$GZo
--
2.9.3