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@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@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
spacewalk-commits@lists.fedorahosted.org