client/rhel/spacewalk-oscap/spacewalk-oscap.spec
| 2
java/code/src/com/redhat/rhn/common/db/datasource/xml/scap_queries.xml
| 23 +++
java/code/src/com/redhat/rhn/frontend/dto/XccdfTestResultDto.java
| 17 ++
java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/SerializerRegistry.java
| 1
java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/XccdfTestResultDtoSerializer.java
| 68 ++++++++++
java/code/src/com/redhat/rhn/frontend/xmlrpc/system/scap/SystemScapHandler.java
| 28 +++-
java/code/src/com/redhat/rhn/manager/audit/ScapManager.java
| 18 ++
7 files changed, 155 insertions(+), 2 deletions(-)
New commits:
commit 7f4d409829a08f15a2e0e90ebfc0fdfeb23b45b2
Author: Simon Lukasik <slukasik(a)redhat.com>
Date: Fri Apr 27 11:31:02 2012 +0200
API: List Xccdf Scans for given machine.
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/scap_queries.xml
b/java/code/src/com/redhat/rhn/common/db/datasource/xml/scap_queries.xml
index bb750e2..a14dd3b 100644
--- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/scap_queries.xml
+++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/scap_queries.xml
@@ -58,6 +58,29 @@
</query>
</mode>
+<mode name="latest_testresults_by_server"
class="com.redhat.rhn.frontend.dto.XccdfTestResultDto">
+ <query params="user_id, sid">
+ SELECT
+ tr.id AS xid,
+ xp.identifier AS profile,
+ ras.path AS path,
+ sa.completion_time AS completed
+ FROM rhnUserServerPerms usp,
+ rhnXccdfTestresult tr,
+ rhnXccdfProfile xp,
+ rhnActionScap ras,
+ rhnServerAction sa
+ WHERE usp.user_id = :user_id
+ AND usp.server_id = :sid
+ AND usp.server_id = tr.server_id
+ AND sa.server_id = tr.server_id
+ AND tr.action_scap_id = ras.id
+ AND sa.action_id = ras.action_id
+ AND tr.profile_id = xp.id
+ ORDER BY completed DESC
+ </query>
+</mode>
+
<query name="testresult_counts" multiple="t"
column="xid">
SELECT tr.id as xid, rrt.label, count(rr.id) as count
FROM rhnXccdfTestresult tr,
diff --git a/java/code/src/com/redhat/rhn/frontend/dto/XccdfTestResultDto.java
b/java/code/src/com/redhat/rhn/frontend/dto/XccdfTestResultDto.java
index 0e650f0..1397c1b 100644
--- a/java/code/src/com/redhat/rhn/frontend/dto/XccdfTestResultDto.java
+++ b/java/code/src/com/redhat/rhn/frontend/dto/XccdfTestResultDto.java
@@ -27,6 +27,7 @@ public class XccdfTestResultDto extends XccdfTestResultCounts {
private String serverName;
private String profile;
private Date completed;
+ private String path;
/**
* Returns id of xccdf:TestResult
@@ -109,4 +110,20 @@ public class XccdfTestResultDto extends XccdfTestResultCounts {
public void setCompleted(Date completedIn) {
this.completed = completedIn;
}
+
+ /**
+ * Returns the path of xccdf document
+ * @return the path
+ */
+ public String getPath() {
+ return this.path;
+ }
+
+ /**
+ * Sets the path of xccdf document
+ * @param pathIn to set
+ */
+ public void setPath(String pathIn) {
+ this.path = pathIn;
+ }
}
diff --git
a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/SerializerRegistry.java
b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/SerializerRegistry.java
index c0eb35f..aaebfbb 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/SerializerRegistry.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/SerializerRegistry.java
@@ -116,6 +116,7 @@ public class SerializerRegistry {
SERIALIZER_CLASSES.add(NetworkDtoSerializer.class);
SERIALIZER_CLASSES.add(DistChannelMapSerializer.class);
SERIALIZER_CLASSES.add(ContentSourceSerializer.class);
+ SERIALIZER_CLASSES.add(XccdfTestResultDtoSerializer.class);
}
/**
diff --git
a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/XccdfTestResultDtoSerializer.java
b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/XccdfTestResultDtoSerializer.java
new file mode 100644
index 0000000..2b5a56d
--- /dev/null
+++
b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/XccdfTestResultDtoSerializer.java
@@ -0,0 +1,68 @@
+/**
+ * Copyright (c) 2012 Red Hat, Inc.
+ *
+ * This software is licensed to you under the GNU General Public License,
+ * version 2 (GPLv2). There is NO WARRANTY for this software, express or
+ * implied, including the implied warranties of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+ * along with this software; if not, see
+ *
http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+ *
+ * Red Hat trademarks are not licensed under GPLv2. No permission is
+ * granted to use or replicate Red Hat trademarks that are incorporated
+ * in this software or its documentation.
+ */
+
+package com.redhat.rhn.frontend.xmlrpc.serializer;
+
+import java.io.IOException;
+import java.io.Writer;
+
+import redstone.xmlrpc.XmlRpcCustomSerializer;
+import redstone.xmlrpc.XmlRpcException;
+import redstone.xmlrpc.XmlRpcSerializer;
+
+import com.redhat.rhn.frontend.dto.XccdfTestResultDto;
+import com.redhat.rhn.frontend.xmlrpc.serializer.util.SerializerHelper;
+
+
+/**
+ * XccdfTestResultDtoSerializer
+ * @version $Rev$
+ * @xmlrpc.doc
+ * #struct("OpenSCAP XCCDF Scan")
+ * #prop_desc("int", "xid", "XCCDF TestResult ID")
+ * #prop_desc("string", "profile", "XCCDF Profile")
+ * #prop_desc("string", "path", "Path to XCCDF
document")
+ * #prop_desc($date, "completed", "Scan completion time")
+ * #struct_end()
+ */
+public class XccdfTestResultDtoSerializer implements XmlRpcCustomSerializer {
+
+ /**
+ * {@inheritDoc}
+ */
+ public Class getSupportedClass() {
+ return XccdfTestResultDto.class;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void serialize(Object value, Writer output,
+ XmlRpcSerializer builtInSerializer) throws XmlRpcException, IOException {
+ XccdfTestResultDto dto = (XccdfTestResultDto) value;
+ SerializerHelper helper = new SerializerHelper(builtInSerializer);
+ addToHelper(helper, "xid", dto.getXid());
+ addToHelper(helper, "profile", dto.getProfile());
+ addToHelper(helper, "path", dto.getPath());
+ addToHelper(helper, "completed", dto.getCompleted());
+ helper.writeTo(output);
+ }
+
+ private static void addToHelper(SerializerHelper helper, String label, Object value)
{
+ if (value != null) {
+ helper.add(label, value);
+ }
+ }
+}
diff --git
a/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/scap/SystemScapHandler.java
b/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/scap/SystemScapHandler.java
index e76c120..393a0c2 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/scap/SystemScapHandler.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/scap/SystemScapHandler.java
@@ -22,10 +22,13 @@ import java.util.List;
import com.redhat.rhn.domain.action.scap.ScapAction;
import com.redhat.rhn.domain.user.User;
+import com.redhat.rhn.frontend.dto.XccdfTestResultDto;
import com.redhat.rhn.frontend.xmlrpc.BaseHandler;
-import com.redhat.rhn.manager.action.ActionManager;
import com.redhat.rhn.manager.MissingCapabilityException;
import com.redhat.rhn.manager.MissingEntitlementException;
+import com.redhat.rhn.manager.action.ActionManager;
+import com.redhat.rhn.manager.audit.ScapManager;
+import com.redhat.rhn.manager.system.SystemManager;
/**
* SystemScapHandler
@@ -36,6 +39,29 @@ import com.redhat.rhn.manager.MissingEntitlementException;
public class SystemScapHandler extends BaseHandler {
/**
+ * List OpenSCAP XCCDF scans for a given system.
+ * @param sessionKey The session key.
+ * @param serverId The server ID.
+ * @return a list of dto holding this info.
+ *
+ * @xmlrpc.doc Return a list of finished OpenSCAP scans for a given system.
+ * @xmlrpc.param #session_key()
+ * @xmlrpc.param #param("int", "serverId")
+ * @xmlrpc.returntype
+ * #array()
+ * $XccdfTestResultDtoSerializer
+ * #array_end()
+ */
+ public List<XccdfTestResultDto> listXccdfScans(String sessionKey, Integer
serverId) {
+ User loggedInUser = getLoggedInUser(sessionKey);
+
+ /* Make sure the system is available to user and throw a nice exception.
+ * If it was not done, an empty list would be returned. */
+ SystemManager.ensureAvailableToUser(loggedInUser, new Long(serverId));
+ return ScapManager.latestTestResultByServerId(loggedInUser, new Long(serverId));
+ }
+
+ /**
* Run OpenSCAP XCCDF Evaluation on a given list of servers
* @param sessionKey The session key.
* @param serverIds The list of server ids,
diff --git a/java/code/src/com/redhat/rhn/manager/audit/ScapManager.java
b/java/code/src/com/redhat/rhn/manager/audit/ScapManager.java
index bea4102..cc2911c 100644
--- a/java/code/src/com/redhat/rhn/manager/audit/ScapManager.java
+++ b/java/code/src/com/redhat/rhn/manager/audit/ScapManager.java
@@ -29,6 +29,7 @@ import com.redhat.rhn.domain.server.Server;
import com.redhat.rhn.domain.user.User;
import com.redhat.rhn.frontend.dto.XccdfIdentDto;
import com.redhat.rhn.frontend.dto.XccdfRuleResultDto;
+import com.redhat.rhn.frontend.dto.XccdfTestResultDto;
import com.redhat.rhn.manager.BaseManager;
import com.redhat.rhn.manager.action.ActionManager;
import com.redhat.rhn.manager.rhnset.RhnSetDecl;
@@ -70,6 +71,23 @@ public class ScapManager extends BaseManager {
}
/**
+ * Show brief results of all scans accessible by user.
+ * Sorted by date, descending.
+ * @param user The user requesting the data.
+ * @param systemId The id of system
+ * @return The list of scan results.
+ */
+ public static List<XccdfTestResultDto> latestTestResultByServerId(
+ User user, Long systemId) {
+ SelectMode m = ModeFactory.getMode("scap_queries",
+ "latest_testresults_by_server");
+ HashMap<String, Long> params = new HashMap<String, Long>();
+ params.put("user_id", user.getId());
+ params.put("sid", systemId);
+ return (List<XccdfTestResultDto>) m.execute(params);
+ }
+
+ /**
* Show brief results of all scans for given system
* @param server The system for which to search
* @return The list of scan results in brief
commit 98bfd861156a5b6e39ec6b97dde31b58653ca8ab
Author: Simon Lukasik <slukasik(a)redhat.com>
Date: Fri Apr 27 13:51:37 2012 +0200
Spacewalk-oscap requires oscap tool of particular version.
In rhel 5.7 there is oscap tool which takes slightly different
command-line arguments.
diff --git a/client/rhel/spacewalk-oscap/spacewalk-oscap.spec
b/client/rhel/spacewalk-oscap/spacewalk-oscap.spec
index b861b0c..9efeedd 100644
--- a/client/rhel/spacewalk-oscap/spacewalk-oscap.spec
+++ b/client/rhel/spacewalk-oscap/spacewalk-oscap.spec
@@ -11,7 +11,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u}
-n)
BuildArch: noarch
BuildRequires: python-devel
BuildRequires: rhnlib
-Requires: openscap-utils
+Requires: openscap-utils >= 0.8.0
Requires: libxslt
Requires: rhnlib
Requires: rhn-check