Changes to 'refs/tags/spacewalk-java-0.6.41-1'
by John Matthews
Tag 'spacewalk-java-0.6.41-1' created by John Matthews <jmatthew(a)redhat.com> at 2009-08-06 01:28 +0000
Tagging package [spacewalk-java] version [0.6.41-1] in directory [java/].
Changes since spacewalk-web-0.6.18-1:
John Matthews (1):
Automatic commit of package [spacewalk-java] release [0.6.41-1].
Joshua Roys (4):
509474 - integration of Joshua's audit feature.
509474 - adding directory to RPM installation and fixing jsps
adding Audit to perl nav
509474 - fixing NPE
Mike McCune (4):
509474 - switching to exists() check
509474 - removing un-needed check now that RPM installs this dir
509474 - checkstyle and unit test
509474 - make sure we symlink to stringtree-json
---
contrib/aup.c | 43
java/buildconf/build-props.xml | 2
java/code/src/com/redhat/rhn/frontend/action/audit/AuditAction.java | 77 +
java/code/src/com/redhat/rhn/frontend/action/audit/AuditMachineAction.java | 116 ++
java/code/src/com/redhat/rhn/frontend/action/audit/AuditSearchAction.java | 276 ++++++
java/code/src/com/redhat/rhn/frontend/dto/AuditDto.java | 106 ++
java/code/src/com/redhat/rhn/frontend/dto/AuditMachineDto.java | 95 ++
java/code/src/com/redhat/rhn/frontend/dto/AuditReviewDto.java | 98 ++
java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml | 12
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml | 20
java/code/src/com/redhat/rhn/frontend/strings/nav/StringResource_en_US.xml | 7
java/code/src/com/redhat/rhn/manager/audit/AuditManager.java | 450 ++++++++++
java/code/src/com/redhat/rhn/manager/audit/test/AuditManagerTest.java | 51 +
java/code/webapp/WEB-INF/nav/sitenav-authenticated.xml | 7
java/code/webapp/WEB-INF/pages/audit/auditsearch.jsp | 184 ++++
java/code/webapp/WEB-INF/pages/audit/auditview.jsp | 285 ++++++
java/code/webapp/WEB-INF/pages/audit/machine.jsp | 70 +
java/code/webapp/WEB-INF/pages/audit/overview.jsp | 48 +
java/code/webapp/WEB-INF/struts-config.xml | 48 +
java/spacewalk-java.spec | 17
rel-eng/packages/spacewalk-java | 2
spacewalk/setup/bin/spacewalk-setup | 6
web/html/nav/sitenav-authenticated.xml | 7
23 files changed, 2024 insertions(+), 3 deletions(-)
---
14 years, 8 months
java/spacewalk-java.spec rel-eng/packages
by John Matthews
java/spacewalk-java.spec | 12 +++++++++++-
rel-eng/packages/spacewalk-java | 2 +-
2 files changed, 12 insertions(+), 2 deletions(-)
New commits:
commit 2d87fe42730d4a10cc27daff7152725856807488
Author: John Matthews <jmatthew(a)redhat.com>
Date: Wed Aug 5 21:28:37 2009 -0400
Automatic commit of package [spacewalk-java] release [0.6.41-1].
diff --git a/java/spacewalk-java.spec b/java/spacewalk-java.spec
index c53da15..ac6b470 100644
--- a/java/spacewalk-java.spec
+++ b/java/spacewalk-java.spec
@@ -12,7 +12,7 @@ Name: spacewalk-java
Summary: Spacewalk Java site packages
Group: Applications/Internet
License: GPLv2
-Version: 0.6.40
+Version: 0.6.41
Release: 1%{?dist}
URL: https://fedorahosted.org/spacewalk
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
@@ -257,6 +257,16 @@ fi
%attr(644, root, root) %{_datadir}/rhn/lib/rhn.jar
%changelog
+* Wed Aug 05 2009 John Matthews <jmatthew(a)redhat.com> 0.6.41-1
+- 509474 - make sure we symlink to stringtree-json (mmccune(a)redhat.com)
+- 509474 - fixing NPE (joshua.roys(a)gtri.gatech.edu)
+- 509474 - removing un-needed check now that RPM installs this dir
+ (mmccune(a)redhat.com)
+- 509474 - adding directory to RPM installation and fixing jsps
+ (joshua.roys(a)gtri.gatech.edu)
+- 509474 - switching to exists() check (mmccune(a)redhat.com)
+- 509474 - integration of Joshua's audit feature. (joshua.roys(a)gtri.gatech.edu)
+
* Wed Aug 05 2009 Pradeep Kilambi <pkilambi(a)redhat.com> 0.6.40-1
- Merge branch 'master' of ssh://pkilambi@git.fedorahosted.org/git/spacewalk
(joshua.roys(a)gtri.gatech.edu)
diff --git a/rel-eng/packages/spacewalk-java b/rel-eng/packages/spacewalk-java
index 9d7fa96..21418a0 100644
--- a/rel-eng/packages/spacewalk-java
+++ b/rel-eng/packages/spacewalk-java
@@ -1 +1 @@
-0.6.40-1 java/
+0.6.41-1 java/
14 years, 8 months
8 commits - contrib/aup.c java/buildconf java/code java/spacewalk-java.spec spacewalk/setup web/html
by Mike McCune
contrib/aup.c | 43
java/buildconf/build-props.xml | 2
java/code/src/com/redhat/rhn/frontend/action/audit/AuditAction.java | 77 +
java/code/src/com/redhat/rhn/frontend/action/audit/AuditMachineAction.java | 116 ++
java/code/src/com/redhat/rhn/frontend/action/audit/AuditSearchAction.java | 276 ++++++
java/code/src/com/redhat/rhn/frontend/dto/AuditDto.java | 106 ++
java/code/src/com/redhat/rhn/frontend/dto/AuditMachineDto.java | 95 ++
java/code/src/com/redhat/rhn/frontend/dto/AuditReviewDto.java | 98 ++
java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml | 12
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml | 20
java/code/src/com/redhat/rhn/frontend/strings/nav/StringResource_en_US.xml | 7
java/code/src/com/redhat/rhn/manager/audit/AuditManager.java | 450 ++++++++++
java/code/src/com/redhat/rhn/manager/audit/test/AuditManagerTest.java | 51 +
java/code/webapp/WEB-INF/nav/sitenav-authenticated.xml | 7
java/code/webapp/WEB-INF/pages/audit/auditsearch.jsp | 184 ++++
java/code/webapp/WEB-INF/pages/audit/auditview.jsp | 285 ++++++
java/code/webapp/WEB-INF/pages/audit/machine.jsp | 70 +
java/code/webapp/WEB-INF/pages/audit/overview.jsp | 48 +
java/code/webapp/WEB-INF/struts-config.xml | 48 +
java/spacewalk-java.spec | 5
spacewalk/setup/bin/spacewalk-setup | 6
web/html/nav/sitenav-authenticated.xml | 7
22 files changed, 2012 insertions(+), 1 deletion(-)
New commits:
commit e5d4ac3729e3adf7e83076630de3cc81c0622783
Author: Mike McCune <mmccune(a)redhat.com>
Date: Wed Aug 5 16:56:00 2009 -0700
509474 - make sure we symlink to stringtree-json
diff --git a/java/buildconf/build-props.xml b/java/buildconf/build-props.xml
index 46f0865..c23c3bc 100644
--- a/java/buildconf/build-props.xml
+++ b/java/buildconf/build-props.xml
@@ -108,7 +108,7 @@
commons-validator concurrent dom4j hibernate3 jta
jaf jasper5-compiler jasper5-runtime javamail jcommon jdom
jfreechart jspapi jpam log4j redstone-xmlrpc-client redstone-xmlrpc
- oro oscache quartz sitemesh struts taglibs-core
+ oro oscache quartz stringtree-json sitemesh struts taglibs-core
taglibs-standard tanukiwrapper postgresql-jdbc
xalan-j2 xerces-j2 xml-commons-apis" />
commit 2f1b8106af8da8c404d1f6b977612c0c7e5ea4ca
Author: Mike McCune <mmccune(a)redhat.com>
Date: Wed Aug 5 16:33:03 2009 -0700
509474 - checkstyle and unit test
diff --git a/java/code/src/com/redhat/rhn/frontend/action/audit/AuditAction.java b/java/code/src/com/redhat/rhn/frontend/action/audit/AuditAction.java
index 19fefca..b216823 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/audit/AuditAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/audit/AuditAction.java
@@ -1,4 +1,17 @@
-
+/**
+ * Copyright (c) 2009 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.action.audit;
import com.redhat.rhn.common.db.datasource.DataResult;
diff --git a/java/code/src/com/redhat/rhn/frontend/action/audit/AuditMachineAction.java b/java/code/src/com/redhat/rhn/frontend/action/audit/AuditMachineAction.java
index b010490..47722a0 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/audit/AuditMachineAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/audit/AuditMachineAction.java
@@ -1,4 +1,17 @@
-
+/**
+ * Copyright (c) 2009 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.action.audit;
import com.redhat.rhn.common.db.datasource.DataResult;
diff --git a/java/code/src/com/redhat/rhn/frontend/action/audit/AuditSearchAction.java b/java/code/src/com/redhat/rhn/frontend/action/audit/AuditSearchAction.java
index 43e2751..7adefe6 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/audit/AuditSearchAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/audit/AuditSearchAction.java
@@ -1,4 +1,17 @@
-
+/**
+ * Copyright (c) 2009 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.action.audit;
import com.redhat.rhn.common.util.DatePicker;
diff --git a/java/code/src/com/redhat/rhn/frontend/dto/AuditDto.java b/java/code/src/com/redhat/rhn/frontend/dto/AuditDto.java
index d0316a1..475bb23 100644
--- a/java/code/src/com/redhat/rhn/frontend/dto/AuditDto.java
+++ b/java/code/src/com/redhat/rhn/frontend/dto/AuditDto.java
@@ -1,4 +1,17 @@
-
+/**
+ * Copyright (c) 2009 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.dto;
import java.util.Date;
diff --git a/java/code/src/com/redhat/rhn/frontend/dto/AuditMachineDto.java b/java/code/src/com/redhat/rhn/frontend/dto/AuditMachineDto.java
index 01a7ed0..2813046 100644
--- a/java/code/src/com/redhat/rhn/frontend/dto/AuditMachineDto.java
+++ b/java/code/src/com/redhat/rhn/frontend/dto/AuditMachineDto.java
@@ -1,4 +1,17 @@
-
+/**
+ * Copyright (c) 2009 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.dto;
import java.util.Date;
diff --git a/java/code/src/com/redhat/rhn/frontend/dto/AuditReviewDto.java b/java/code/src/com/redhat/rhn/frontend/dto/AuditReviewDto.java
index 5a174ce..49ca0da 100644
--- a/java/code/src/com/redhat/rhn/frontend/dto/AuditReviewDto.java
+++ b/java/code/src/com/redhat/rhn/frontend/dto/AuditReviewDto.java
@@ -1,4 +1,17 @@
-
+/**
+ * Copyright (c) 2009 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.dto;
import java.util.Date;
diff --git a/java/code/src/com/redhat/rhn/manager/audit/AuditManager.java b/java/code/src/com/redhat/rhn/manager/audit/AuditManager.java
index a6be89d..51a2ed4 100644
--- a/java/code/src/com/redhat/rhn/manager/audit/AuditManager.java
+++ b/java/code/src/com/redhat/rhn/manager/audit/AuditManager.java
@@ -1,11 +1,24 @@
-
+/**
+ * Copyright (c) 2009 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.manager.audit;
+import com.redhat.rhn.common.conf.Config;
import com.redhat.rhn.common.db.datasource.DataResult;
import com.redhat.rhn.frontend.dto.AuditDto;
import com.redhat.rhn.frontend.dto.AuditMachineDto;
import com.redhat.rhn.frontend.dto.AuditReviewDto;
-//import com.redhat.rhn.manager.BaseManager;
import org.apache.log4j.Logger;
@@ -35,7 +48,8 @@ public class AuditManager /* extends BaseManager */ {
private AuditManager() {
}
- private static String logDirStr = "/var/satellite/systemlogs";
+ private static String logDirStr = Config.get().getString("web.audit.logdir",
+ "/var/satellite/systemlogs");
private static File logDir = new File(logDirStr);
private static File reviewFile = new File(logDirStr + "/audit-review.log");
@@ -318,7 +332,7 @@ public class AuditManager /* extends BaseManager */ {
hostDir = new File(logDirStr + "/" + machineName + "/audit");
if (hostDir == null || !hostDir.exists()) {
- return null;
+ return new DataResult(new LinkedList());
}
for (String auditLog : hostDir.list()) {
diff --git a/java/code/src/com/redhat/rhn/manager/audit/test/AuditManagerTest.java b/java/code/src/com/redhat/rhn/manager/audit/test/AuditManagerTest.java
new file mode 100644
index 0000000..3e28cc4
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/manager/audit/test/AuditManagerTest.java
@@ -0,0 +1,51 @@
+/**
+ * Copyright (c) 2009 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.manager.audit.test;
+
+import com.redhat.rhn.common.conf.Config;
+import com.redhat.rhn.common.db.datasource.DataResult;
+import com.redhat.rhn.frontend.dto.AuditMachineDto;
+import com.redhat.rhn.manager.audit.AuditManager;
+import com.redhat.rhn.testing.TestUtils;
+
+import java.io.File;
+
+import junit.framework.TestCase;
+
+
+public class AuditManagerTest extends TestCase {
+
+
+ public void testGetMachines() throws Exception {
+ String testdir = "/tmp/sw-audit-test";
+ String machinename = TestUtils.randomString();
+ Config.get().setString("web.audit.logdir", testdir);
+ File newdir = new File(testdir);
+ if (!newdir.exists()) {
+ newdir.mkdir();
+ }
+ File machinedir = new File(testdir + "/" + machinename);
+ machinedir.mkdir();
+
+ DataResult dr = AuditManager.getMachines();
+ assertNotNull(dr);
+ assertTrue(dr.size() == 1);
+ AuditMachineDto dto = (AuditMachineDto) dr.get(0);
+ assertEquals(machinename, dto.getName());
+
+ machinedir.delete();
+ newdir.delete();
+ }
+}
commit df8b91f90d7c141bccbd8eb91939b8e8aea1b8a7
Author: Joshua Roys <joshua.roys(a)gtri.gatech.edu>
Date: Wed Aug 5 15:31:01 2009 -0700
509474 - fixing NPE
diff --git a/java/code/src/com/redhat/rhn/manager/audit/AuditManager.java b/java/code/src/com/redhat/rhn/manager/audit/AuditManager.java
index cf406e3..a6be89d 100644
--- a/java/code/src/com/redhat/rhn/manager/audit/AuditManager.java
+++ b/java/code/src/com/redhat/rhn/manager/audit/AuditManager.java
@@ -317,7 +317,7 @@ public class AuditManager /* extends BaseManager */ {
// otherwise, just look up this one machine
hostDir = new File(logDirStr + "/" + machineName + "/audit");
- if (hostDir == null) {
+ if (hostDir == null || !hostDir.exists()) {
return null;
}
commit f52e74c8b13072be93cbf63855041c40c561ba00
Author: Joshua Roys <joshua.roys(a)gtri.gatech.edu>
Date: Tue Jul 28 16:58:09 2009 -0700
adding Audit to perl nav
diff --git a/web/html/nav/sitenav-authenticated.xml b/web/html/nav/sitenav-authenticated.xml
index 332601c..273fdea 100644
--- a/web/html/nav/sitenav-authenticated.xml
+++ b/web/html/nav/sitenav-authenticated.xml
@@ -114,6 +114,13 @@
</rhn-tab>
</rhn-tab>
</rhn-tab>
+ <rhn-tab name="Audit" url="/rhn/audit/Overview.do">
+ <rhn-tab-directory>/rhn/audit</rhn-tab-directory>
+ <rhn-tab name="Overview" url="/rhn/audit/Overview.do">
+ <rhn-tab name="Reviews" url="/rhn/audit/Machine.do" />
+ </rhn-tab>
+ <rhn-tab name="Search" url="/rhn/audit/Search.do" />
+ </rhn-tab>
<rhn-tab name="Configuration" url="/rhn/configuration/Overview.do" acl="org_entitlement(rhn_provisioning);user_role(config_admin)">
<rhn-tab-directory>/rhn/configuration</rhn-tab-directory>
<rhn-tab name="Overview" url="/rhn/configuration/Overview.do" acl="org_entitlement(rhn_provisioning);user_role(config_admin)" />
commit f98743558f9858ba32abdd75eb1640a6a0604b6c
Author: Mike McCune <mmccune(a)redhat.com>
Date: Tue Jul 28 16:56:59 2009 -0700
509474 - removing un-needed check now that RPM installs this dir
diff --git a/java/code/src/com/redhat/rhn/manager/audit/AuditManager.java b/java/code/src/com/redhat/rhn/manager/audit/AuditManager.java
index 0e79a45..cf406e3 100644
--- a/java/code/src/com/redhat/rhn/manager/audit/AuditManager.java
+++ b/java/code/src/com/redhat/rhn/manager/audit/AuditManager.java
@@ -249,10 +249,6 @@ public class AuditManager /* extends BaseManager */ {
Date lastReview, firstUnreviewed;
LinkedList<AuditMachineDto> hosts = new LinkedList<AuditMachineDto>();
- if (!logDir.exists()) {
- return new DataResult<AuditMachineDto>(null);
- }
-
for (File host : logDir.listFiles()) {
if (host.isDirectory()) {
aurev = getLastReview(host.getName());
commit 31b009b1b2438bdb23afad26d1d133e59457ff40
Author: Joshua Roys <joshua.roys(a)gtri.gatech.edu>
Date: Tue Jul 28 15:59:42 2009 -0700
509474 - adding directory to RPM installation and fixing jsps
diff --git a/java/code/webapp/WEB-INF/pages/audit/auditview.jsp b/java/code/webapp/WEB-INF/pages/audit/auditview.jsp
index b23d902..f0672e0 100644
--- a/java/code/webapp/WEB-INF/pages/audit/auditview.jsp
+++ b/java/code/webapp/WEB-INF/pages/audit/auditview.jsp
@@ -202,7 +202,7 @@
</div>
<c:set var="resultList" value="${requestScope.result}" />
-<rl:listset name="auditList" legend="audit list">
+<rl:listset name="auditList">
<rl:list dataset="resultList">
<rl:column sortable="false"
bound="false"
diff --git a/java/code/webapp/WEB-INF/pages/audit/machine.jsp b/java/code/webapp/WEB-INF/pages/audit/machine.jsp
index 847ec0c..ef3430f 100644
--- a/java/code/webapp/WEB-INF/pages/audit/machine.jsp
+++ b/java/code/webapp/WEB-INF/pages/audit/machine.jsp
@@ -18,7 +18,7 @@
<%--
<div style="font-weight: bold; text-align: center;">Machine: <c:out value="${machine}" /></div>
--%>
-<rl:listset name="auditList" legend="audit list">
+<rl:listset name="auditList">
<rl:list>
<rl:column sortable="true"
sortattr="name"
diff --git a/java/code/webapp/WEB-INF/pages/audit/overview.jsp b/java/code/webapp/WEB-INF/pages/audit/overview.jsp
index ec12c64..9b7b16e 100644
--- a/java/code/webapp/WEB-INF/pages/audit/overview.jsp
+++ b/java/code/webapp/WEB-INF/pages/audit/overview.jsp
@@ -16,7 +16,7 @@
<bean:message key="audit.overview.jsp.header"/>
</rhn:toolbar>
-<rl:listset name="auditList" legend="audit list">
+<rl:listset name="auditList">
<rl:list>
<rl:column sortable="true"
sortattr="name"
diff --git a/java/spacewalk-java.spec b/java/spacewalk-java.spec
index 067943a..c53da15 100644
--- a/java/spacewalk-java.spec
+++ b/java/spacewalk-java.spec
@@ -192,6 +192,7 @@ install -d -m 755 $RPM_BUILD_ROOT/%{cobprofdir}
install -d -m 755 $RPM_BUILD_ROOT/%{cobprofdirup}
install -d -m 755 $RPM_BUILD_ROOT/%{cobprofdirwiz}
install -d -m 755 $RPM_BUILD_ROOT/%{cobdirsnippets}
+install -d -m 755 $RPM_BUILD_ROOT/%{_var}/satellite/systemlogs
install -d -m 755 $RPM_BUILD_ROOT/%{_sysconfdir}/logrotate.d
install -m 755 conf/rhn.xml $RPM_BUILD_ROOT/%{_sysconfdir}/tomcat5/Catalina/localhost/rhn.xml
@@ -207,6 +208,8 @@ ln -s -f /usr/sbin/tanukiwrapper $RPM_BUILD_ROOT/%{_bindir}/taskomaticd
ln -s -f %{_javadir}/ojdbc14.jar $RPM_BUILD_ROOT%{jardir}/ojdbc14.jar
install -d -m 755 $RPM_BUILD_ROOT/%{realcobsnippetsdir}
ln -s -f %{cobdirsnippets} $RPM_BUILD_ROOT/%{realcobsnippetsdir}/spacewalk
+touch $RPM_BUILD_ROOT/%{_var}/satellite/systemlogs/audit-review.log
+
%clean
rm -rf $RPM_BUILD_ROOT
@@ -234,6 +237,8 @@ fi
%{appdir}/*
%config(noreplace) %{_sysconfdir}/tomcat5/Catalina/localhost/rhn.xml
%{realcobsnippetsdir}/spacewalk
+%attr(755, apache, root) %{_var}/satellite/systemlogs
+%attr(644, tomcat, root) %{_var}/satellite/systemlogs/audit-review.log
%files -n spacewalk-taskomatic
%attr(755, root, root) %{_initrddir}/taskomatic
commit 66a73d5c6f9332a13e984919ffdcfde596e352b9
Author: Mike McCune <mmccune(a)redhat.com>
Date: Tue Jul 28 10:42:48 2009 -0700
509474 - switching to exists() check
diff --git a/java/code/src/com/redhat/rhn/manager/audit/AuditManager.java b/java/code/src/com/redhat/rhn/manager/audit/AuditManager.java
index eafa1be..0e79a45 100644
--- a/java/code/src/com/redhat/rhn/manager/audit/AuditManager.java
+++ b/java/code/src/com/redhat/rhn/manager/audit/AuditManager.java
@@ -249,7 +249,7 @@ public class AuditManager /* extends BaseManager */ {
Date lastReview, firstUnreviewed;
LinkedList<AuditMachineDto> hosts = new LinkedList<AuditMachineDto>();
- if (logDir == null) {
+ if (!logDir.exists()) {
return new DataResult<AuditMachineDto>(null);
}
commit b6c10889cc06566260c01aaca469f6fc255be749
Author: Joshua Roys <joshua.roys(a)gtri.gatech.edu>
Date: Thu Jul 2 18:39:27 2009 -0700
509474 - integration of Joshua's audit feature.
diff --git a/contrib/aup.c b/contrib/aup.c
new file mode 100644
index 0000000..368d4db
--- /dev/null
+++ b/contrib/aup.c
@@ -0,0 +1,43 @@
+#include <auparse.h>
+#include <err.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+int
+main(int argc, char *argv[]) {
+ auparse_state_t *aup_state;
+ FILE *aufile = stdin;
+
+ if (argc > 1
+ && strcmp(argv[1], "-")
+ && (!(aufile = fopen(argv[1], "r")))) {
+ errx(EXIT_FAILURE, "failed fopen");
+ }
+
+ if ( (aup_state = auparse_init(AUSOURCE_FILE_POINTER, aufile)) == NULL) {
+ errx(EXIT_FAILURE, "failed auparse_init");
+ }
+
+ while(auparse_next_event(aup_state) > 0) {
+ printf("serial=%lu\n", auparse_get_serial(aup_state));
+ printf("seconds=%lu\n", auparse_get_time(aup_state));
+
+ do {
+ do {
+ printf("%s=%s\n",
+ auparse_get_field_name(aup_state),
+ auparse_interpret_field(aup_state)
+ );
+ } while(auparse_next_field(aup_state) > 0);
+
+ printf("\n");
+ } while(auparse_next_record(aup_state) > 0);
+ }
+
+ auparse_destroy(aup_state);
+
+ /*fclose(aufile);*/
+
+ return (0);
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/audit/AuditAction.java b/java/code/src/com/redhat/rhn/frontend/action/audit/AuditAction.java
new file mode 100644
index 0000000..19fefca
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/audit/AuditAction.java
@@ -0,0 +1,64 @@
+
+package com.redhat.rhn.frontend.action.audit;
+
+import com.redhat.rhn.common.db.datasource.DataResult;
+import com.redhat.rhn.frontend.struts.RequestContext;
+import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.frontend.taglibs.list.ListTagHelper;
+import com.redhat.rhn.frontend.taglibs.list.helper.ListHelper;
+import com.redhat.rhn.frontend.taglibs.list.helper.Listable;
+import com.redhat.rhn.manager.audit.AuditManager;
+
+import org.apache.log4j.Logger;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+
+import java.util.Enumeration;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * AuditAction
+ * @version $Rev$
+ */
+public class AuditAction extends RhnAction implements Listable {
+
+ private static Logger log = Logger.getLogger(AuditAction.class);
+
+ /** {@inheritDoc} */
+ public ActionForward execute(ActionMapping mapping,
+ ActionForm form,
+ HttpServletRequest request,
+ HttpServletResponse response) {
+ Enumeration paramNames;
+ ListHelper helper = new ListHelper(this, request);
+ Map forwardParams = makeParamMap(request);
+ String str;
+
+ helper.execute();
+
+ request.setAttribute(ListTagHelper.PARENT_URL, request.getRequestURI());
+
+ // set up parameters to forward
+ paramNames = request.getParameterNames();
+
+ while (paramNames.hasMoreElements()) {
+ str = (String) paramNames.nextElement();
+ forwardParams.put(str, request.getParameter(str));
+ }
+
+ return getStrutsDelegate().forwardParams(
+ mapping.findForward("default"),
+ forwardParams);
+ }
+
+ /** {@inheritDoc} */
+ public DataResult getResult(RequestContext context) {
+ return AuditManager.getMachines();
+ }
+}
+
+// vim: ts=4:expandtab
diff --git a/java/code/src/com/redhat/rhn/frontend/action/audit/AuditMachineAction.java b/java/code/src/com/redhat/rhn/frontend/action/audit/AuditMachineAction.java
new file mode 100644
index 0000000..b010490
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/audit/AuditMachineAction.java
@@ -0,0 +1,103 @@
+
+package com.redhat.rhn.frontend.action.audit;
+
+import com.redhat.rhn.common.db.datasource.DataResult;
+import com.redhat.rhn.frontend.struts.RequestContext;
+import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.frontend.taglibs.list.ListTagHelper;
+import com.redhat.rhn.frontend.taglibs.list.helper.ListHelper;
+import com.redhat.rhn.frontend.taglibs.list.helper.Listable;
+import com.redhat.rhn.manager.audit.AuditManager;
+
+import org.apache.log4j.Logger;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionMessage;
+import org.apache.struts.action.ActionMessages;
+
+import java.io.IOException;
+import java.util.Enumeration;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * AuditMachineAction
+ * @version $Rev$
+ */
+public class AuditMachineAction extends RhnAction implements Listable {
+
+ private static Logger log = Logger.getLogger(AuditMachineAction.class);
+
+ /** {@inheritDoc} */
+ public ActionForward execute(ActionMapping mapping,
+ ActionForm form,
+ HttpServletRequest request,
+ HttpServletResponse response) {
+ ActionMessages amsgs;
+ Enumeration paramNames;
+ ListHelper helper = new ListHelper(this, request);
+ Long start, end;
+ Map forwardParams = makeParamMap(request);
+ RequestContext requestContext = new RequestContext(request);
+ String str, reviewed, machine, username;
+
+ helper.execute();
+
+ request.setAttribute(ListTagHelper.PARENT_URL, request.getRequestURI());
+
+ machine = request.getParameter("machine");
+ reviewed = request.getParameter("reviewed");
+
+ // is this a review?
+ if (reviewed != null && reviewed.length() > 0) {
+ start = Long.parseLong(request.getParameter("startMilli"));
+ end = Long.parseLong(request.getParameter("endMilli"));
+ username = requestContext.getLoggedInUser().getLogin();
+
+ log.debug("reviewed: " + machine + ", " + start + ", " + end +
+ ", " + username);
+
+ try {
+ AuditManager.markReviewed(machine, start, end, username);
+
+ forwardParams.put("machine", machine);
+
+ return getStrutsDelegate().forwardParams(
+ mapping.findForward("success"),
+ forwardParams); // to send "machine" over
+ }
+ catch (IOException ioex) {
+ log.warn("failed to write review!", ioex);
+ amsgs = new ActionMessages();
+ amsgs.add(ActionMessages.GLOBAL_MESSAGE,
+ new ActionMessage("Failed to save review!", false));
+ addMessages(request, amsgs);
+ }
+ }
+
+ // set up parameters to forward
+ paramNames = request.getParameterNames();
+
+ while (paramNames.hasMoreElements()) {
+ str = (String) paramNames.nextElement();
+ forwardParams.put(str, request.getParameter(str));
+ }
+
+ request.setAttribute("machine", machine);
+
+ return getStrutsDelegate().forwardParams(
+ mapping.findForward("default"),
+ forwardParams);
+ }
+
+ /** {@inheritDoc} */
+ public DataResult getResult(RequestContext context) {
+ return AuditManager.getMachineReviewSections(
+ context.getParam("machine", false));
+ }
+}
+
+// vim: ts=4:expandtab
diff --git a/java/code/src/com/redhat/rhn/frontend/action/audit/AuditSearchAction.java b/java/code/src/com/redhat/rhn/frontend/action/audit/AuditSearchAction.java
new file mode 100644
index 0000000..43e2751
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/audit/AuditSearchAction.java
@@ -0,0 +1,263 @@
+
+package com.redhat.rhn.frontend.action.audit;
+
+import com.redhat.rhn.common.util.DatePicker;
+import com.redhat.rhn.frontend.action.common.DateRangePicker;
+import com.redhat.rhn.frontend.dto.AuditReviewDto;
+import com.redhat.rhn.frontend.struts.RequestContext;
+import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.frontend.taglibs.list.ListTagHelper;
+import com.redhat.rhn.manager.audit.AuditManager;
+
+import org.apache.log4j.Logger;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionMessage;
+import org.apache.struts.action.ActionMessages;
+import org.apache.struts.action.DynaActionForm;
+import org.stringtree.json.JSONWriter;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.Date;
+import java.util.Enumeration;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * AuditSearchAction
+ * @version $Rev$
+ */
+public class AuditSearchAction extends RhnAction {
+
+ private static Logger log = Logger.getLogger(AuditSearchAction.class);
+
+ private Long processStartMilli(DynaActionForm dform,
+ HttpServletRequest request) {
+ Calendar yesterday;
+ Long startMilli = (Long)dform.get("startMilli");
+ String startDisp;
+
+ if (startMilli != null && startMilli >= 0) {
+ startDisp = (new Date(startMilli)).toString();
+ }
+ else {
+ yesterday = Calendar.getInstance();
+ yesterday.add(Calendar.DAY_OF_YEAR, -7);
+ startMilli = yesterday.getTime().getTime();
+ startDisp = "<<";
+ }
+
+ request.setAttribute("startDisp", startDisp);
+ request.setAttribute("startMilli", startMilli);
+
+ return startMilli;
+ }
+
+ private Long processEndMilli(DynaActionForm dform,
+ HttpServletRequest request) {
+ Long endMilli = (Long)dform.get("endMilli");
+ String endDisp;
+
+ if (endMilli != null && endMilli > 0 && endMilli != Long.MAX_VALUE) {
+ endDisp = (new Date(endMilli)).toString();
+ }
+ else {
+ endMilli = Calendar.getInstance().getTime().getTime();
+ endDisp = ">>";
+ }
+
+ request.setAttribute("endDisp", endDisp);
+ request.setAttribute("endMilli", endMilli);
+
+ return endMilli;
+ }
+
+ private DateRangePicker.DatePickerResults processTimeArgs(
+ DynaActionForm dform,
+ HttpServletRequest request,
+ Boolean processDates) {
+ Date start, end;
+ DateRangePicker drp = new DateRangePicker(dform, request,
+ new Date(processStartMilli(dform, request)),
+ new Date(processEndMilli(dform, request)),
+ DatePicker.YEAR_RANGE_NEGATIVE,
+ "probedetails.jsp.start_date", "probedetails.jsp.end_date");
+ DateRangePicker.DatePickerResults dpresults =
+ drp.processDatePickers(processDates);
+
+ if (processDates) { // we need to redo {start,end}{Disp,Milli}
+ start = dpresults.getStart().getDate();
+ end = dpresults.getEnd().getDate();
+ request.setAttribute("startDisp", start.toString());
+ request.setAttribute("startMilli", start.getTime());
+ request.setAttribute("endDisp", end.toString());
+ request.setAttribute("endMilli", end.getTime());
+ }
+
+ return dpresults;
+ }
+
+ private List prepareAuditTypes() {
+ BufferedReader brdr;
+ LinkedList<String> typelist;
+ Process proc;
+ String str = "";
+
+ // set up types for checkboxes
+ try { // cache this, maybe...
+ proc = Runtime.getRuntime().exec("/sbin/ausearch -m");
+ brdr = new BufferedReader(
+ new InputStreamReader(proc.getErrorStream()));
+
+ brdr.readLine(); // Argument is required for -m
+ str = brdr.readLine(); // Valid message types are: ...
+ str = str.substring(str.indexOf(':') + 2);
+ }
+ catch (IOException ioex) {
+ log.warn("failed to get ausearch types", ioex);
+ }
+
+ typelist = new LinkedList<String>();
+
+ for (String type : str.split(" ")) {
+ if (!type.equals("ALL")) {
+ typelist.add(type);
+ }
+ }
+
+ Collections.sort(typelist);
+
+ return typelist;
+ }
+
+ /** {@inheritDoc} */
+ public ActionForward execute(ActionMapping mapping,
+ ActionForm form,
+ HttpServletRequest request,
+ HttpServletResponse response) {
+ ActionMessages amsgs;
+ AuditReviewDto aureview;
+ Boolean parseDates, submitted, unrev;
+ DateRangePicker.DatePickerResults dpresults;
+ DynaActionForm dform = (DynaActionForm)form;
+ Enumeration paramNames;
+ JSONWriter jsonwr = new JSONWriter();
+ List result = null;
+ Long start, end;
+ Map forwardParams = makeParamMap(request);
+ Map<String, String[]> typemap;
+ RequestContext requestContext = new RequestContext(request);
+ String machine, str;
+ String[] autypes;
+
+ request.setAttribute(ListTagHelper.PARENT_URL, request.getRequestURI());
+ request.setAttribute("user", requestContext.getLoggedInUser());
+
+ // what audit types are we looking at?
+ autypes = dform.getStrings("autypes");
+ // what machine are we looking at?
+ machine = dform.getString("machine");
+ // should we look at the DatePickers?
+ parseDates = (Boolean)dform.get("parseDates") != null;
+ // did we receive a form with some checkboxes checked?
+ submitted = (autypes != null && autypes.length > 0);
+ // can we mark this section reviewed?
+ unrev = (Boolean)dform.get("unreviewable") != null;
+
+ // handle search times & make displayable versions
+ dpresults = processTimeArgs(dform, request, parseDates);
+
+ if (parseDates || unrev) {
+ // if we have to process the DatePickers, it means that the user
+ // entered a time, which means it's probably not a reviewable
+ // section
+ request.setAttribute("unreviewable", "true");
+ }
+ else if (!submitted && request.getParameter("machine") != null) {
+ log.debug("auto-submit!");
+ // this is a click-through from the review list.
+ // we skip the search dialog and return the default selection
+ submitted = true;
+ typemap = AuditManager.getAuditTypeMap();
+ autypes = typemap.get("default");
+ }
+
+ amsgs = new ActionMessages();
+ amsgs.add(dpresults.getErrors()); // possibly empty
+
+ // search?
+ if (submitted && dpresults.getErrors().isEmpty()) {
+ start = dpresults.getStart().getDate().getTime();
+ end = dpresults.getEnd().getDate().getTime();
+
+ // search!
+ result = AuditManager.getAuditLogs(autypes, machine, start, end);
+
+ if (result == null) {
+ amsgs.add(ActionMessages.GLOBAL_MESSAGE,
+ new ActionMessage("No results found!", false));
+ }
+
+ // check to see if this section has been reviewed
+ try {
+ aureview = AuditManager.getReviewInfo(machine, start, end);
+ // the below may return null, indicating "not reviewed"
+ request.setAttribute("reviewedBy", aureview.getReviewedBy());
+ request.setAttribute("reviewedOn", aureview.getReviewedOn());
+ }
+ catch (IOException ioex) {
+ // do nothing
+ }
+
+ request.setAttribute("autypes", autypes);
+ request.setAttribute("machine", machine);
+ request.setAttribute("result", result);
+ }
+
+ // add any accumulated messages to be displayed
+ addMessages(request, amsgs);
+
+ // set up parameters to forward
+ paramNames = request.getParameterNames();
+
+ while (paramNames.hasMoreElements()) {
+ str = (String) paramNames.nextElement();
+ forwardParams.put(str, request.getParameter(str));
+ }
+
+ // either the search had no results, so we go back to the search form,
+ // or this is what they asked for
+ if (result == null) {
+ typemap = AuditManager.getAuditTypeMap();
+ request.setAttribute("auJsonTypes", jsonwr.write(typemap));
+ request.setAttribute("machines", AuditManager.getMachines());
+ request.setAttribute("types", prepareAuditTypes());
+
+ // if we processed the DatePickers, reset the "display" times
+ // so that the DatePickers are displayed again
+ if (parseDates) {
+ request.setAttribute("startDisp", "<<");
+ request.setAttribute("endDisp", ">>");
+ }
+
+ return getStrutsDelegate().forwardParams(
+ mapping.findForward("default"),
+ forwardParams);
+ }
+
+ return getStrutsDelegate().forwardParams(
+ mapping.findForward("view"),
+ forwardParams);
+ }
+}
+
+// vim: ts=4:expandtab
diff --git a/java/code/src/com/redhat/rhn/frontend/dto/AuditDto.java b/java/code/src/com/redhat/rhn/frontend/dto/AuditDto.java
new file mode 100644
index 0000000..d0316a1
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/dto/AuditDto.java
@@ -0,0 +1,93 @@
+
+package com.redhat.rhn.frontend.dto;
+
+import java.util.Date;
+import java.util.LinkedHashMap;
+
+/**
+ * AuditDto
+ * @version $Rev$
+ */
+public class AuditDto extends BaseDto {
+ private Long id;
+ private int serial;
+ private Date time;
+ private int milli;
+ private String node;
+
+ private LinkedHashMap<String, String> kvmap;
+
+ private String type;
+
+ /**
+ * Constructor
+ * @param serialIn Audit serial number
+ * @param timeIn Audit time-of-event
+ * @param milliIn Audit millisecond part of timeIn
+ * @param nodeIn Audit generating node
+ * @param kvmapIn HashMap of audit data
+ */
+ public AuditDto(int serialIn, Date timeIn, int milliIn, String nodeIn,
+ LinkedHashMap<String, String> kvmapIn) {
+ this.id = new Long((long)serialIn);
+ this.serial = serialIn;
+ this.time = timeIn;
+ this.milli = milliIn;
+ this.node = nodeIn;
+
+ this.kvmap = new LinkedHashMap<String, String>(kvmapIn);
+
+ this.type = kvmap.remove("type");
+ }
+
+ /**
+ * @return Returns the id.
+ */
+ public Long getId() {
+ return id;
+ }
+
+ /**
+ * @return Returns the serial.
+ */
+ public int getSerial() {
+ return serial;
+ }
+
+ /**
+ * @return Returns the time-of-event.
+ */
+ public Date getTime() {
+ return time;
+ }
+
+ /**
+ * @return Returns the millisecond part of the event time.
+ */
+ public int getMilli() {
+ return milli;
+ }
+
+ /**
+ * @return Returns the node.
+ */
+ public String getNode() {
+ return node;
+ }
+
+ /**
+ * @return Returns the key-value audit data.
+ */
+ public LinkedHashMap<String, String> getKvmap() {
+ return kvmap;
+ }
+
+ /**
+ * @return Returns the audit type.
+ */
+ public String getType() {
+ return type;
+ }
+}
+
+// vim: ts=4:expandtab
diff --git a/java/code/src/com/redhat/rhn/frontend/dto/AuditMachineDto.java b/java/code/src/com/redhat/rhn/frontend/dto/AuditMachineDto.java
new file mode 100644
index 0000000..01a7ed0
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/dto/AuditMachineDto.java
@@ -0,0 +1,82 @@
+
+package com.redhat.rhn.frontend.dto;
+
+import java.util.Date;
+
+/**
+ * AuditMachineDto
+ * @version $Rev$
+ */
+public class AuditMachineDto extends BaseDto implements Comparable<AuditMachineDto> {
+ private Long id;
+ private String machineName;
+ private Date lastReview, firstUnreviewed;
+
+ /**
+ * Constructor
+ * @param nameIn The machine name
+ * @param lastReviewIn The date of the last review
+ * @param firstUnreviewedIn The date of the first unreviewed log section
+ */
+ public AuditMachineDto(String nameIn, Date lastReviewIn,
+ Date firstUnreviewedIn) {
+ this.id = 0L;
+ this.machineName = nameIn;
+ this.lastReview = lastReviewIn;
+ this.firstUnreviewed = firstUnreviewedIn;
+ }
+
+ /**
+ * @return Returns whether or not this machine is in need of review.
+ */
+ public boolean getNeedsReview() {
+ long seconds, days;
+ Date now;
+
+ if (firstUnreviewed == null) {
+ // no unreviewed logs
+ return false;
+ }
+
+ now = new Date();
+ seconds = (now.getTime() - firstUnreviewed.getTime()) / 1000;
+ days = seconds / (60 * 60 * 24);
+
+ return days > 7;
+ }
+
+ /**
+ * @return Returns the id.
+ */
+ public Long getId() {
+ return id;
+ }
+
+ /**
+ * @return Returns the machine name.
+ */
+ public String getName() {
+ return machineName;
+ }
+
+ /**
+ * @return Returns the date of the last review.
+ */
+ public Date getLastReview() {
+ return lastReview;
+ }
+
+ /**
+ * @return Returns the date of the first unreviewed section.
+ */
+ public Date getFirstUnreviewed() {
+ return firstUnreviewed;
+ }
+
+ /** {@inheritDoc} */
+ public int compareTo(AuditMachineDto other) {
+ return getName().compareTo(other.getName());
+ }
+}
+
+// vim: ts=4:expandtab
diff --git a/java/code/src/com/redhat/rhn/frontend/dto/AuditReviewDto.java b/java/code/src/com/redhat/rhn/frontend/dto/AuditReviewDto.java
new file mode 100644
index 0000000..5a174ce
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/dto/AuditReviewDto.java
@@ -0,0 +1,85 @@
+
+package com.redhat.rhn.frontend.dto;
+
+import java.util.Date;
+
+/**
+ * AuditReviewDto
+ * @version $Rev$
+ */
+public class AuditReviewDto extends BaseDto implements Comparable<AuditReviewDto> {
+ private Long id;
+ private String name;
+ private Date start;
+ private Date end;
+ private String reviewedBy;
+ private Date reviewedOn;
+
+ /**
+ * Constructor
+ * @param nameIn Machine name
+ * @param startIn Start time
+ * @param endIn End time
+ * @param reviewer Reviewed by
+ * @param reviewed Reviewed on
+ */
+ public AuditReviewDto(String nameIn, Date startIn, Date endIn,
+ String reviewer, Date reviewed) {
+ this.id = 0L;
+ this.name = nameIn;
+ this.start = startIn;
+ this.end = endIn;
+ this.reviewedBy = reviewer;
+ this.reviewedOn = reviewed;
+ }
+
+ /**
+ * @return Returns the id.
+ */
+ public Long getId() {
+ return id;
+ }
+
+ /**
+ * @return Returns the name.
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * @return Returns the start time.
+ */
+ public Date getStart() {
+ return start;
+ }
+
+ /**
+ * @return Returns the end time.
+ */
+ public Date getEnd() {
+ return end;
+ }
+
+ /**
+ * @return Returns the reviewer.
+ */
+ public String getReviewedBy() {
+ return reviewedBy;
+ }
+
+ /**
+ * @return Returns the review date.
+ */
+ public Date getReviewedOn() {
+ return reviewedOn;
+ }
+
+ /** {@inheritDoc} */
+ public int compareTo(AuditReviewDto other) {
+ return (int)(this.getStart().getTime() / 1000) -
+ (int)(other.getStart().getTime() / 1000);
+ }
+}
+
+// vim: ts=4:expandtab
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml b/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
index 74ec95e..86ef72c 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
@@ -363,6 +363,12 @@ http://www.oasis-open.org/committees/xliff/documents/xliff-core-1.1.xsd"
<context context-type="sourcefile">Navigation Menu</context>
</context-group>
</trans-unit>
+ <trans-unit id="Audit">
+<source>Audit</source>
+ <context-group name="ctx">
+ <context context-type="sourcefile">Navigation Menu</context>
+ </context-group>
+ </trans-unit>
<trans-unit id="Channel Management">
<source>Channel Management</source>
<context-group name="ctx">
@@ -779,6 +785,12 @@ http://www.oasis-open.org/committees/xliff/documents/xliff-core-1.1.xsd"
<context context-type="sourcefile">Navigation Menu</context>
</context-group>
</trans-unit>
+ <trans-unit id="Reviews">
+<source>Reviews</source>
+ <context-group name="ctx">
+ <context context-type="sourcefile">Navigation Menu</context>
+ </context-group>
+ </trans-unit>
<trans-unit id="request">
<source>Request</source>
<context-group name="ctx">
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
index f0b3c7b..9fe252a 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
@@ -3464,6 +3464,26 @@ button below, and <b>will be unable to log back in</b>.</source>
</context-group>
</trans-unit>
+<!-- == AUDIT == -->
+ <trans-unit id="audit.overview.jsp.header">
+<source>Audit Information</source>
+ <context-group name="ctx">
+ <context context-type="sourcefile">/rhn/audit/Overview.do</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="audit.jsp.alt">
+<source>Audit Icon</source>
+ <context-group name="ctx">
+ <context context-type="sourcefile">/rhn/audit/Overview.do</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="auditsearch.jsp.header">
+<source>Audit Search</source>
+ <context-group name="ctx">
+ <context context-type="sourcefile">/rhn/audit/Search.do</context>
+ </context-group>
+ </trans-unit>
+
<!-- == ERRATA == -->
<trans-unit id="erratalist.jsp.noerrata">
<source>No Errata</source>
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/nav/StringResource_en_US.xml b/java/code/src/com/redhat/rhn/frontend/strings/nav/StringResource_en_US.xml
index eaef6fb..78e7dc8 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/nav/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/nav/StringResource_en_US.xml
@@ -266,6 +266,13 @@ http://www.oasis-open.org/committees/xliff/documents/xliff-core-1.1.xsd"
</context-group>
</trans-unit>
+ <trans-unit id="audit.nav.audit">
+<source>Audit</source>
+ <context-group name="ctx">
+ <context context-type="sourcefile">Audit Navigation Menu</context>
+ </context-group>
+ </trans-unit>
+
<trans-unit id="config.nav.managed">
<source>Managed Systems</source>
<context-group name="ctx">
diff --git a/java/code/src/com/redhat/rhn/manager/audit/AuditManager.java b/java/code/src/com/redhat/rhn/manager/audit/AuditManager.java
new file mode 100644
index 0000000..eafa1be
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/manager/audit/AuditManager.java
@@ -0,0 +1,440 @@
+
+package com.redhat.rhn.manager.audit;
+
+import com.redhat.rhn.common.db.datasource.DataResult;
+import com.redhat.rhn.frontend.dto.AuditDto;
+import com.redhat.rhn.frontend.dto.AuditMachineDto;
+import com.redhat.rhn.frontend.dto.AuditReviewDto;
+//import com.redhat.rhn.manager.BaseManager;
+
+import org.apache.log4j.Logger;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * AuditManager
+ * @version $Rev$
+ */
+public class AuditManager /* extends BaseManager */ {
+
+ private static Logger log = Logger.getLogger(AuditManager.class);
+
+ private AuditManager() {
+ }
+
+ private static String logDirStr = "/var/satellite/systemlogs";
+ private static File logDir = new File(logDirStr);
+ private static File reviewFile = new File(logDirStr + "/audit-review.log");
+
+ /**
+ * Mark a machine/start/end as reviewed.
+ * @param machine Machine name
+ * @param start Start time in ms from epoch
+ * @param end End time in ms from epoch
+ * @param username User marking the review
+ * @throws IOException Thrown when the audit review log isn't writeable
+ */
+ public static void markReviewed(String machine, Long start, Long end,
+ String username) throws IOException {
+ FileWriter fwr = new FileWriter(reviewFile, true); // append!
+
+ fwr.write(machine + "," + (start / 1000) + "," + (end / 1000) + "," +
+ username + "," + (new Date().getTime() / 1000) + "\n");
+ fwr.close();
+ }
+
+ /**
+ * Retrieve the audits for a machine, possibly filtering by types and time
+ * @param types The types to look for (e.g. "DAEMON_START"); can be null
+ * @param machine The machine name
+ * @param start The start time; can be null
+ * @param end The end time; can be null
+ * @return The set of matching audit logs
+ */
+ public static DataResult getAuditLogs(String[] types, String machine,
+ Long start, Long end) {
+ DataResult dr = null;
+ List l;
+ Long fileStart, fileEnd;
+
+ if (types == null) {
+ types = new String[0];
+ }
+
+ if (start == null) {
+ start = 0L;
+ }
+
+ if (end == null) {
+ end = Long.MAX_VALUE;
+ }
+
+ try {
+ for (AuditReviewDto aureview : getMachineReviewSections(machine)) {
+ fileStart = aureview.getStart().getTime();
+ fileEnd = aureview.getEnd().getTime();
+
+ if (fileEnd < start || fileStart > end) {
+ continue;
+ }
+
+ File auditLog = new File(
+ logDirStr + "/" + aureview.getName() + "/audit/audit-" +
+ (fileStart / 1000) + "-" +
+ (fileEnd / 1000) + ".parsed");
+
+ l = readAuditFile(auditLog, types, start, end);
+
+ if (dr == null) {
+ dr = new DataResult(l);
+ }
+ else {
+ dr.addAll(l);
+ }
+ }
+ }
+ catch (IOException ioex) {
+ log.warn("AAAAHHHH IOException", ioex);
+ }
+
+ if (dr == null || dr.size() == 0) {
+ return null;
+ }
+
+ return dr;
+ }
+
+ /**
+ * Return the various audit type-mappings we have defined
+ * @return A mapping between the set name and the audit types
+ */
+ public static Map<String, String[]> getAuditTypeMap() {
+ Map<String, String[]> types = new HashMap<String, String[]>();
+
+ types.put("default", new String[]{
+ "USER",
+ "LOGIN",
+ "USER_AUTH",
+ "USER_ACCT",
+ "USER_MGMT",
+ "USER_START",
+ "USER_END",
+ "USER_LOGIN",
+ "USER_LOGOUT",
+ "ADD_USER",
+ "DEL_USER",
+ "ADD_GROUP",
+ "DEL_GROUP",
+ "DAEMON_START",
+ "DAEMON_END",
+ "DAEMON_ABORT",
+ "DAEMON_CONFIG",
+ "DAEMON_ROTATE",
+ "DAEMON_RESUME",
+ "CONFIG_CHANGE",
+ "MAC_POLICY_LOAD",
+ "MAC_STATUS",
+ "MAC_CONFIG_CHANGE",
+ "ANOM_PROMISCUOUS",
+ "ANOM_ABEND",
+ "ANOM_LOGIN_FAILURES",
+ "ANOM_LOGIN_TIME",
+ "ANOM_LOGIN_SESSIONS",
+ "ANOM_LOGIN_ACCT",
+ "ANOM_LOGIN_LOCATION",
+ "ANOM_MAX_DAC",
+ "ANOM_MAX_MAC",
+ "ANOM_AMTU_FAIL",
+ "ANOM_RBAC_FAIL",
+ "ANOM_RBAC_INTEGRITY_FAIL",
+ "ANOM_CRYPTO_FAIL",
+ "ANOM_ACCESS_FS",
+ "ANOM_EXEC",
+ "ANOM_MK_EXEC",
+ "ANOM_ADD_ACCT",
+ "ANOM_DEL_ACCT",
+ "ANOM_MOD_ACCT",
+ "USER_ROLE_CHANGE",
+ "ROLE_ASSIGN",
+ "ROLE_REMOVE",
+ "LABEL_OVERRIDE",
+ "LABEL_LEVEL_CHANGE",
+ "USER_LABELED_EXPORT",
+ "USER_UNLABELED_EXPORT",
+ "DEV_ALLOC",
+ "DEV_DEALLOC",
+ "FS_RELABEL"
+ });
+
+ types.put("login", new String[]{
+ "ANOM_LOGIN_ACCT",
+ "ANOM_LOGIN_FAILURES",
+ "ANOM_LOGIN_LOCATION",
+ "ANOM_LOGIN_SESSIONS",
+ "ANOM_LOGIN_TIME",
+ "ANOM_ROOT_TRANS",
+ "USER_AUTH",
+ "USER_ERR",
+ "USER_LOGIN",
+ "USER_ROLE_CHANGE"
+ });
+
+ return types;
+ }
+
+ /**
+ * Get the time for the first unreviewed log for the specified machine
+ * @param machineName The machine to find review times for
+ * @return An AuditReviewDto for the machine's first unreviewed section
+ */
+ public static AuditReviewDto getFirstUnreviewed(String machineName) {
+ AuditReviewDto firstUnreviewed = null;
+ DataResult<AuditReviewDto> dr = getMachineReviewSections(machineName);
+
+ for (AuditReviewDto aurev : dr) {
+ if (aurev.getReviewedBy() == null) { // an unreviewed log!
+ if (firstUnreviewed == null ||
+ aurev.getStart().getTime() <
+ firstUnreviewed.getStart().getTime()) {
+ firstUnreviewed = aurev;
+ }
+ }
+ }
+
+ return firstUnreviewed;
+ }
+
+ /**
+ * Get the last time-of-review for the specified machine
+ * @param machineName The machine to find review times for
+ * @return An AuditReviewDto for the machine's last review time
+ */
+ public static AuditReviewDto getLastReview(String machineName) {
+ AuditReviewDto lastReviewed = null;
+ DataResult<AuditReviewDto> dr = getMachineReviewSections(machineName);
+
+ for (AuditReviewDto aurev : dr) {
+ if (aurev.getReviewedOn() != null) {
+ if (lastReviewed == null ||
+ aurev.getReviewedOn().getTime() >
+ lastReviewed.getReviewedOn().getTime()) {
+ lastReviewed = aurev;
+ }
+ }
+ }
+
+ return lastReviewed;
+ }
+
+ /**
+ * Retrieve the set of all machines we know about
+ * @return The set of machines
+ */
+ public static DataResult<AuditMachineDto> getMachines() {
+ AuditReviewDto aurev;
+ DataResult<AuditMachineDto> dr;
+ Date lastReview, firstUnreviewed;
+ LinkedList<AuditMachineDto> hosts = new LinkedList<AuditMachineDto>();
+
+ if (logDir == null) {
+ return new DataResult<AuditMachineDto>(null);
+ }
+
+ for (File host : logDir.listFiles()) {
+ if (host.isDirectory()) {
+ aurev = getLastReview(host.getName());
+
+ if (aurev != null) {
+ lastReview = aurev.getReviewedOn();
+ }
+ else {
+ lastReview = null;
+ }
+
+ aurev = getFirstUnreviewed(host.getName());
+
+ if (aurev != null) {
+ firstUnreviewed = aurev.getStart();
+ }
+ else {
+ firstUnreviewed = null;
+ }
+
+ hosts.add(new AuditMachineDto(
+ host.getName(), lastReview, firstUnreviewed));
+ }
+ }
+
+ Collections.sort(hosts);
+ dr = new DataResult<AuditMachineDto>(hosts);
+
+ return dr;
+ }
+
+ /**
+ * Retrieve the set of audit sections, possibly for a specified machine
+ * @param machineName The machine to get review sections for; can be null
+ * @return The set of review sections
+ */
+ public static DataResult<AuditReviewDto> getMachineReviewSections(
+ String machineName) {
+ long start, end;
+ DataResult<AuditReviewDto> dr, rec;
+ File hostDir;
+ LinkedList<AuditReviewDto> aurevs = new LinkedList<AuditReviewDto>();
+ Matcher fnmatch;
+ Pattern fnregex = Pattern.compile("audit-(\\d+)-(\\d+).parsed");
+
+ // if machineName is null, look up all review sections by recursion
+ if (machineName == null) {
+ dr = null;
+
+ for (AuditMachineDto aumachine : getMachines()) {
+ if (aumachine.getName() != null) {
+ rec = getMachineReviewSections(aumachine.getName());
+
+ if (dr == null) {
+ dr = rec;
+ }
+ else {
+ dr.addAll(rec);
+ }
+ }
+ }
+
+ return dr;
+ }
+
+ // otherwise, just look up this one machine
+ hostDir = new File(logDirStr + "/" + machineName + "/audit");
+
+ if (hostDir == null) {
+ return null;
+ }
+
+ for (String auditLog : hostDir.list()) {
+ fnmatch = fnregex.matcher(auditLog);
+
+ if (fnmatch.matches()) { // found a matching audit file
+ start = Long.parseLong(fnmatch.group(1)) * 1000;
+ end = Long.parseLong(fnmatch.group(2)) * 1000;
+
+ try { // but is it reviewed yet?
+ aurevs.add(getReviewInfo(machineName, start, end));
+ }
+ catch (IOException ioex) { // on error, assume unreviewed
+ aurevs.add(new AuditReviewDto(machineName, new Date(start),
+ new Date(end), null, null));
+ }
+ }
+ }
+
+ Collections.sort(aurevs);
+ dr = new DataResult<AuditReviewDto>(aurevs);
+
+ return dr;
+ }
+
+ /**
+ * Retrieve the review info for a specified machine/time
+ * @param machine The machine name
+ * @param start The start time in ms from the epoch
+ * @param end The end time in ms from the epoch
+ * @throws IOException Throws when the audit review file is unreadable
+ * @return An AuditReviewDto, possibly with review info set
+ */
+ public static AuditReviewDto getReviewInfo(String machine, long start,
+ long end) throws IOException {
+ BufferedReader brdr;
+ Date reviewedOn = null;
+ String str, part1, reviewedBy = null;
+ String[] revInfo;
+
+ part1 = machine + "," + (start / 1000) + "," + (end / 1000) + ",";
+
+ brdr = new BufferedReader(new FileReader(reviewFile));
+
+ while ((str = brdr.readLine()) != null) {
+ if (str.startsWith(part1)) {
+ revInfo = str.split(",");
+ reviewedBy = revInfo[3];
+ reviewedOn = new Date(Long.parseLong(revInfo[4]) * 1000);
+ break;
+ }
+ }
+
+ return new AuditReviewDto(machine, new Date(start), new Date(end),
+ reviewedBy, reviewedOn);
+ }
+
+ private static List readAuditFile(File aufile, String[] types, Long start,
+ Long end) throws IOException {
+ int milli = 0, serial = -1;
+ BufferedReader brdr;
+ LinkedHashMap<String, String> hmap;
+ LinkedList<AuditDto> events;
+ Long time = -1L;
+ String node = null, str, strtime = null;
+
+ brdr = new BufferedReader(new FileReader(aufile));
+ events = new LinkedList<AuditDto>();
+ hmap = new LinkedHashMap<String, String>();
+
+ for (str = brdr.readLine(); str != null; str = brdr.readLine()) {
+ if (str.equals("")) {
+ strtime = hmap.remove("seconds");
+
+ try {
+ serial = Integer.parseInt(hmap.remove("serial"));
+ }
+ catch (NumberFormatException nfex) {
+ serial = -1;
+ }
+
+ try {
+ time = Long.parseLong(strtime) * 1000;
+ }
+ catch (NumberFormatException nfex) {
+ time = 0L;
+ }
+
+ if (time >= start && time <= end) {
+ for (String type : types) {
+ if (type.equals(hmap.get("type"))) {
+ events.add(new AuditDto(
+ serial, new Date(time), milli, node, hmap));
+ break;
+ }
+ }
+ }
+
+ hmap.clear();
+ }
+ else if (str.indexOf('=') >= 0) {
+ hmap.put(
+ str.substring(0, str.indexOf('=')).trim(),
+ str.substring(str.indexOf('=') + 1).trim());
+ }
+ else {
+ log.debug("unknown string: " + str);
+ }
+ }
+
+ return events;
+ }
+}
+
+// vim: ts=4:expandtab
diff --git a/java/code/webapp/WEB-INF/nav/sitenav-authenticated.xml b/java/code/webapp/WEB-INF/nav/sitenav-authenticated.xml
index 0c9ed77..c40e4a6 100644
--- a/java/code/webapp/WEB-INF/nav/sitenav-authenticated.xml
+++ b/java/code/webapp/WEB-INF/nav/sitenav-authenticated.xml
@@ -135,6 +135,13 @@
</rhn-tab>
</rhn-tab>
</rhn-tab>
+ <rhn-tab name="Audit" url="/rhn/audit/Overview.do">
+ <rhn-tab-directory>/rhn/audit</rhn-tab-directory>
+ <rhn-tab name="Overview" url="/rhn/audit/Overview.do">
+ <rhn-tab name="Reviews" url="/rhn/audit/Machine.do" />
+ </rhn-tab>
+ <rhn-tab name="Search" url="/rhn/audit/Search.do" />
+ </rhn-tab>
<rhn-tab name="config.nav.config" url="/rhn/configuration/Overview.do" acl="org_entitlement(rhn_provisioning);user_role(config_admin)">
<rhn-tab-directory>/rhn/configuration</rhn-tab-directory>
<rhn-tab name="common.nav.overview" url="/rhn/configuration/Overview.do" acl="org_entitlement(rhn_provisioning);user_role(config_admin)" />
diff --git a/java/code/webapp/WEB-INF/pages/audit/auditsearch.jsp b/java/code/webapp/WEB-INF/pages/audit/auditsearch.jsp
new file mode 100644
index 0000000..49b54bd
--- /dev/null
+++ b/java/code/webapp/WEB-INF/pages/audit/auditsearch.jsp
@@ -0,0 +1,184 @@
+<%@ taglib uri="http://rhn.redhat.com/rhn" prefix="rhn" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
+<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
+<%@ taglib uri="http://rhn.redhat.com/tags/list" prefix="rl" %>
+
+<html:xhtml/>
+<html>
+<head>
+ <meta name="page-decorator" content="none" />
+
+ <style type="text/css">
+ .fixedwidth { font-family: Courier, Monospace; }
+ </style>
+</head>
+<body>
+
+<rhn:toolbar base="h1" img="/img/rhn-icon-system.gif" imgAlt="audit.jsp.alt"
+ helpUrl="/rhn/help/reference/en-US/s2-sm-system-overview.jsp">
+ <bean:message key="auditsearch.jsp.header"/>
+</rhn:toolbar>
+
+<script type="text/javascript">
+<c:out escapeXml="false" value="//<![CDATA[" />
+ var typeSets = new Hash(
+ <c:out escapeXml="false" value="${auJsonTypes}" />
+ );
+
+ function check_defaults() {
+ check_set("default");
+ }
+
+ function check_all() {
+ set_checkboxes("checked");
+ }
+
+ function uncheck_all() {
+ set_checkboxes("");
+ }
+
+ // check a specified set of checkboxes
+ function check_set(setName) {
+ uncheck_all();
+
+ typeSets.get(setName).each(function(typeName) {
+ var cbox = $("type_" + typeName);
+
+ if (cbox) {
+ cbox.checked = "checked";
+ }
+ });
+ }
+
+ function check_set_from_option(ev) {
+ check_set(this.innerHTML);
+ ev.stop();
+ }
+
+ // set all checkboxes to val
+ function set_checkboxes(val) {
+ $$("input[type=checkbox]").each(function(cbox) {
+ cbox.checked = val;
+ });
+ }
+
+ function init() {
+ check_defaults();
+
+ Event.observe('check_all_button', 'click', check_all);
+ Event.observe('uncheck_all_button', 'click', uncheck_all);
+
+ // create the 'set selector' dropdown
+ var setChooser = new Element('select');
+ setChooser.insert(new Element('option').update('Check [set]'));
+
+ typeSets.keys().each(function(key) {
+ setChooser.insert(
+ new Element('option')
+ .observe('click', check_set_from_option)
+ .update(key)
+ );
+ });
+
+ $('checkboxControls').insert(setChooser);
+ }
+
+ document.observe("dom:loaded", init);
+<c:out escapeXml="false" value="//]]>" />
+</script>
+
+<html:form action="/audit/Search.do">
+
+<div class="search-choices">
+ <div class="search-choices-group">
+ <table class="details">
+ <tr>
+ <th colspan="3">Machine / Time range</th>
+ </tr>
+ <tr style="text-align: center;">
+ <td style="text-align: center; vertical-align: middle;">
+ <html:select property="machine">
+ <html:options collection="machines" property="name" />
+ </html:select>
+ </td>
+ <td colspan="2">
+ <c:choose>
+ <c:when test="${startDisp == '<<' || endDisp == '>>'}">
+ <jsp:include page="/WEB-INF/pages/common/fragments/date-picker.jsp">
+ <jsp:param name="widget" value="start" />
+ </jsp:include>
+ <br />
+ <jsp:include page="/WEB-INF/pages/common/fragments/date-picker.jsp">
+ <jsp:param name="widget" value="end" />
+ </jsp:include>
+
+ <input type="hidden" name="parseDates" value="true" />
+ </c:when>
+
+ <c:otherwise>
+ <span style="padding: 0 10px"><c:out value="${startDisp}" /></span>
+ <br />
+ <span style="padding: 0 10px"><c:out value="${endDisp}" /></span>
+ </c:otherwise>
+ </c:choose>
+
+ <html:hidden property="startMilli" />
+ <html:hidden property="endMilli" />
+ </td>
+ </tr>
+ <tr>
+ <th colspan="3">Audit Types</th>
+ </tr>
+ <tr>
+ <td id="checkboxControls" colspan="3">
+ <button type="button" id="check_all_button">Check all</button>
+ <button type="button" id="uncheck_all_button">Uncheck all</button>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <ul style="list-style-type: none; padding-left: 0; margin-top: 0;">
+ <c:forEach var="autype" items="${types}" begin="0" step="3">
+ <li>
+ <html:multibox property="autypes" value="${autype}" styleId="type_${autype}" />
+ <label for="type_${autype}"><c:out value="${autype}" /></label>
+ </li>
+ </c:forEach>
+ </ul>
+ </td>
+ <td>
+ <ul style="list-style-type: none; padding-left: 0; margin-top: 0;">
+ <c:forEach var="autype" items="${types}" begin="1" step="3">
+ <li>
+ <html:multibox property="autypes" value="${autype}" styleId="type_${autype}" />
+ <label for="type_${autype}"><c:out value="${autype}" /></label>
+ </li>
+ </c:forEach>
+ </ul>
+ </td>
+ <td>
+ <ul style="list-style-type: none; padding-left: 0; margin-top: 0;">
+ <c:forEach var="autype" items="${types}" begin="2" step="3">
+ <li>
+ <html:multibox property="autypes" value="${autype}" styleId="type_${autype}" />
+ <label for="type_${autype}"><c:out value="${autype}" /></label>
+ </li>
+ </c:forEach>
+ </ul>
+ <input type="hidden" name="seqno" value="${seqno}" />
+ </td>
+ </tr>
+ <tr>
+ <td> </td><td> </td>
+ <td style="text-align: right;"><html:submit><bean:message key="button.search" /></html:submit></td>
+ </tr>
+ </table>
+ </div>
+</div>
+
+</html:form>
+
+</body>
+</html>
+
diff --git a/java/code/webapp/WEB-INF/pages/audit/auditview.jsp b/java/code/webapp/WEB-INF/pages/audit/auditview.jsp
new file mode 100644
index 0000000..b23d902
--- /dev/null
+++ b/java/code/webapp/WEB-INF/pages/audit/auditview.jsp
@@ -0,0 +1,285 @@
+<%@ taglib uri="http://rhn.redhat.com/rhn" prefix="rhn" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
+<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
+<%@ taglib uri="http://rhn.redhat.com/tags/list" prefix="rl" %>
+
+<html:xhtml/>
+<html>
+<head>
+ <meta name="page-decorator" content="none" />
+
+ <style type="text/css">
+ .fixedwidth { font-family: Courier, Monospace; }
+ </style>
+</head>
+<body>
+
+<rhn:toolbar base="h1" img="/img/rhn-icon-system.gif" imgAlt="audit.jsp.alt"
+ helpUrl="/rhn/help/reference/en-US/s2-sm-system-overview.jsp">
+ <bean:message key="auditsearch.jsp.header"/>
+</rhn:toolbar>
+
+<script type="text/javascript">
+//<![CDATA[
+ var resultFilter = {
+ "ANOM_ABEND": [
+ { "gid": 0 },
+ { "pid": 0 },
+ { "ses": 0 }
+ ],
+ "ANOM_PROMISCUOUS": [
+ { "gid": 0 },
+ { "old_prom": 0 },
+ { "ses": 0 }
+ ],
+ "AVC": [
+ { "pid": 0 }
+ ],
+ "CONFIG_CHANGE": [
+ { "auid": 0 },
+ { "subj": 0 }
+ ],
+ "CRED_ACQ": [
+ { "auid": 0 },
+ { "pid": 0 },
+ { "ses": 0 },
+ { "subj": 0 }
+ ],
+ "CRED_DISP": [
+ { "pid": 0 },
+ { "ses": 0 },
+ { "subj": 0 }
+ ],
+ "CRED_REFR": [
+ { "pid": 0 },
+ { "ses": 0 },
+ { "subj": 0 }
+ ],
+ "DAEMON_END": [
+ { "auid": 0 },
+ { "pid": 0 },
+ { "subj": 0 }
+ ],
+ "DAEMON_START": [
+ { "auid": 0 },
+ { "pid": 0 },
+ { "subj": 0 }
+ ],
+ "LOGIN": [
+ { "pid": 0 },
+ { "ses": 0 }
+ ],
+ "MAC_CONFIG_CHANGE": [
+ { "ses": 0 }
+ ],
+ "MAC_POLICY_LOAD": [
+ { "ses": 0 }
+ ],
+ "MAC_STATUS": [
+ { "ses": 0 }
+ ],
+ "SYSCALL": [
+ { "arch": 0 },
+ { "egid": 0, "euid": 0 },
+ { "fsgid": 0, "fsuid": 0 },
+ { "items": 0 },
+ { "key": 0 },
+ { "pid": 0, "ppid": 0 },
+ { "ses": 0 },
+ { "sgid": 0, "suid": 0 }
+ ],
+ "USER_ACCT": [
+ { "auid": 0 },
+ { "pid": 0 },
+ { "ses": 0 },
+ { "subj": 0 }
+ ],
+ "USER_AUTH": [
+ { "auid": 0 },
+ { "pid": 0 },
+ { "ses": 0 },
+ { "subj": 0 }
+ ],
+ "USER_AVC": [
+ { "auid": 0 },
+ { "pid": 0 },
+ { "seqno": 0 },
+ { "ses": 0 },
+ { "subj": 0 }
+ ],
+ "USER_CHAUTHTOK": [
+ { "pid": 0 },
+ { "ses": 0 },
+ { "subj": 0 }
+ ],
+ "USER_CMD": [
+ { "pid": 0 },
+ { "ses": 0 }
+ ],
+ "USER_END": [
+ { "pid": 0 },
+ { "ses": 0 },
+ { "subj": 0 }
+ ],
+ "USER_ERR": [
+ { "auid": 0 },
+ { "pid": 0 },
+ { "ses": 0 },
+ { "subj": 0 }
+ ],
+ "USER_LOGIN": [
+ { "pid": 0 },
+ { "ses": 0 },
+ { "subj": 0 }
+ ],
+ "USER_ROLE_CHANGE": [
+ { "default-context": 0 },
+ { "new-range": 0, "old-range": 0 },
+ { "new-role": 0, "old-role": 0 },
+ { "new-seuser": 0, "old-seuser": 0 },
+ { "pid": 0 },
+ { "selected-context": 0 },
+ { "ses": 0 },
+ { "subj": 0 }
+ ],
+ "USER_START": [
+ { "pid": 0 },
+ { "ses": 0 },
+ { "subj": 0 }
+ ]
+ };
+
+ document.observe("dom:loaded", function() {
+ for(var autype in resultFilter) {
+ // the '<' below is okay because of the ![CDATA[ above
+ for(var idx = 0; idx < resultFilter[autype].length; idx++) {
+ for(var key in resultFilter[autype][idx]) {
+ if (!resultFilter[autype][idx][key]) {
+ $$("div[name=kv_" + autype + "_" + key + "]").each(function(node) {
+ node.style.borderBottom = "thin dashed black";
+ node.style.borderRight = "thin dashed black";
+ //node.style.textDecoration = "underline";
+ //node.style.fontStyle = "italic";
+ node.writeAttribute("hideme", "true");
+ node.hide();
+ });
+ }
+ }
+ }
+ }
+
+ var hideStr = "[-] Hide";
+ var showStr = "[+] Show all";
+
+ function toggleKV(event) {
+ if (this.innerHTML == showStr) { // show all elements!
+ this.update(hideStr);
+ this.siblings().invoke("show");
+ }
+ else { // hide the previously hidden ones
+ this.update(showStr);
+ this.siblings().findAll(function(s) {
+ return s.readAttribute("hideme") == "true";
+ }).invoke("hide");
+ }
+ event.stop();
+ }
+
+ $$("span[name=audit_kv]").each(function(node) {
+ var aElem = new Element("a", { href: "#" }).update(showStr);
+ Event.observe(aElem, "click", toggleKV);
+ Element.insert(node, aElem);
+ });
+ });
+//]]>
+</script>
+
+<div style="font-weight: bold; text-align: center;">
+ <c:out value="${machine}" />
+ (<c:out value="${startDisp}" />
+ - <c:out value="${endDisp}" />)
+</div>
+
+<c:set var="resultList" value="${requestScope.result}" />
+<rl:listset name="auditList" legend="audit list">
+ <rl:list dataset="resultList">
+ <rl:column sortable="false"
+ bound="false"
+ headertext="Serial#"
+ styleclass="first-column fixedwidth">
+ <c:out value="${current.serial}" escapeXml="true" />
+ </rl:column>
+
+ <rl:column sortable="false"
+ bound="false"
+ headertext="Date/Time"
+ styleclass="fixedwidth">
+ <c:out value="${current.time}" escapeXml="true" />
+ </rl:column>
+
+ <rl:column sortable="false"
+ bound="false"
+ headertext="Type"
+ styleclass="fixedwidth">
+ <c:out value="${current.type}" escapeXml="true" />
+ </rl:column>
+
+ <rl:column sortable="false"
+ bound="false"
+ headertext="Misc."
+ styleclass="last-column fixedwidth">
+ <span name="audit_kv">
+ <c:forEach var="item" items="${current.kvmap}">
+ <div name="kv_${current.type}_${item.key}">
+ <c:out value="${item.key}" escapeXml="true" />:
+ <c:out value="${item.value}" escapeXml="true" />
+ </div>
+ </c:forEach>
+ </span>
+ </rl:column>
+ </rl:list>
+
+ <c:if test="${unreviewable == 'true'}">
+ <input type="hidden" name="unreviewable" value="${unreviewable}" />
+ </c:if>
+
+ <input type="hidden" name="machine" value="${machine}" />
+ <input type="hidden" name="startMilli" value="${startMilli}" />
+ <input type="hidden" name="endMilli" value="${endMilli}" />
+
+ <c:forEach var="saved_type" items="${autypes}">
+ <input type="hidden" name="autypes" value="${saved_type}" />
+ </c:forEach>
+</rl:listset>
+
+<c:choose>
+ <c:when test="${reviewedBy != null}">
+ <div style="text-align: center;">
+ Reviewed by <c:out value="${reviewedBy}" /> on <c:out value="${reviewedOn}" />
+ </div>
+ </c:when>
+
+ <c:when test="${startDisp == '<<' || endDisp == '>>' || unreviewable == 'true'}">
+ <%-- do nothing --%>
+ </c:when>
+
+ <c:otherwise>
+ <form action="/rhn/audit/Machine.do" method="post">
+ <input type="hidden" name="machine" value="${machine}" />
+ <input type="hidden" name="startMilli" value="${startMilli}" />
+ <input type="hidden" name="endMilli" value="${endMilli}" />
+
+ <div style="text-align: center;">
+ <input type="checkbox" name="reviewed" />
+ <span>I, <c:out value="${user.firstNames}" />, certify I have reviewed these audit logs.</span>
+ <br />
+ <input type="submit" value="Mark reviewed" />
+ </div>
+ </form>
+ </c:otherwise>
+</c:choose>
+
+</body>
+</html>
+
diff --git a/java/code/webapp/WEB-INF/pages/audit/machine.jsp b/java/code/webapp/WEB-INF/pages/audit/machine.jsp
new file mode 100644
index 0000000..847ec0c
--- /dev/null
+++ b/java/code/webapp/WEB-INF/pages/audit/machine.jsp
@@ -0,0 +1,70 @@
+<%@ taglib uri="http://rhn.redhat.com/rhn" prefix="rhn" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
+<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
+<%@ taglib uri="http://rhn.redhat.com/tags/list" prefix="rl" %>
+
+<html:xhtml/>
+<html>
+<head>
+ <meta name="page-decorator" content="none" />
+</head>
+<body>
+
+<rhn:toolbar base="h1" img="/img/rhn-icon-system.gif" imgAlt="audit.jsp.alt"
+ helpUrl="/rhn/help/reference/en-US/s2-sm-system-overview.jsp">
+ <bean:message key="audit.overview.jsp.header"/>
+</rhn:toolbar>
+<%--
+<div style="font-weight: bold; text-align: center;">Machine: <c:out value="${machine}" /></div>
+--%>
+<rl:listset name="auditList" legend="audit list">
+ <rl:list>
+ <rl:column sortable="true"
+ sortattr="name"
+ bound="false"
+ headertext="Machine"
+ styleclass="first-column">
+ <span style='font-family: Courier, Monospace;'>
+ <a href="Search.do?machine=${current.name}&startMilli=${current.start.time}&endMilli=${current.end.time}"><c:out value="${current.name}" /></a>
+ </span>
+ </rl:column>
+ <rl:column sortable="true"
+ sortattr="start"
+ defaultsort="desc"
+ bound="false"
+ headertext="Start">
+ <span style='font-family: Courier, Monospace;'>
+ <c:out value="${current.start}" escapeXml="true" />
+ </span>
+ </rl:column>
+ <rl:column sortable="false"
+ bound="false"
+ headertext="End">
+ <span style='font-family: Courier, Monospace;'>
+ <c:out value="${current.end}" escapeXml="true" />
+ </span>
+ </rl:column>
+ <rl:column sortable="true"
+ sortattr="reviewedOn"
+ bound="false"
+ headertext="Reviewed on">
+ <span style='font-family: Courier, Monospace;'>
+ <c:out value="${current.reviewedOn}" escapeXml="true" />
+ </span>
+ </rl:column>
+ <rl:column sortable="true"
+ sortattr="reviewedBy"
+ bound="false"
+ headertext="Reviewed by"
+ styleclass="last-column">
+ <span style='font-family: Courier, Monospace;'>
+ <c:out value="${current.reviewedBy}" escapeXml="true" />
+ </span>
+ </rl:column>
+ </rl:list>
+</rl:listset>
+
+</body>
+</html>
+
diff --git a/java/code/webapp/WEB-INF/pages/audit/overview.jsp b/java/code/webapp/WEB-INF/pages/audit/overview.jsp
new file mode 100644
index 0000000..ec12c64
--- /dev/null
+++ b/java/code/webapp/WEB-INF/pages/audit/overview.jsp
@@ -0,0 +1,48 @@
+<%@ taglib uri="http://rhn.redhat.com/rhn" prefix="rhn" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
+<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
+<%@ taglib uri="http://rhn.redhat.com/tags/list" prefix="rl" %>
+
+<html:xhtml/>
+<html>
+<head>
+ <meta name="page-decorator" content="none" />
+</head>
+<body>
+
+<rhn:toolbar base="h1" img="/img/rhn-icon-system.gif" imgAlt="audit.jsp.alt"
+ helpUrl="/rhn/help/reference/en-US/s2-sm-system-overview.jsp">
+ <bean:message key="audit.overview.jsp.header"/>
+</rhn:toolbar>
+
+<rl:listset name="auditList" legend="audit list">
+ <rl:list>
+ <rl:column sortable="true"
+ sortattr="name"
+ bound="false"
+ headertext="Machine"
+ styleclass="first-column">
+ <span style='font-family: Courier, Monospace;'>
+ <a href="Machine.do?machine=${current.name}"><c:out value="${current.name}" escapeXml="true" /></a>
+
+ <c:if test="${current.needsReview}">
+ <c:out value=" <b>(!!)</b>" escapeXml="false" />
+ </c:if>
+ </span>
+ </rl:column>
+ <rl:column sortable="true"
+ sortattr="lastReview"
+ bound="false"
+ headertext="Last checked on"
+ styleclass="last-column">
+ <span style='font-family: Courier, Monospace;'>
+ <c:out value="${current.lastReview}" escapeXml="true" />
+ </span>
+ </rl:column>
+ </rl:list>
+</rl:listset>
+
+</body>
+</html>
+
diff --git a/java/code/webapp/WEB-INF/struts-config.xml b/java/code/webapp/WEB-INF/struts-config.xml
index 4ce1bec..47d0372 100644
--- a/java/code/webapp/WEB-INF/struts-config.xml
+++ b/java/code/webapp/WEB-INF/struts-config.xml
@@ -195,6 +195,28 @@
<form-property name="filter_value" type="java.lang.String"/>
<form-property name="prev_filter_value" type="java.lang.String"/>
</form-bean>
+ <form-bean name="auditSearchForm"
+ type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
+ <form-property name="machine" type="java.lang.String" />
+ <form-property name="startMilli" type="java.lang.Long" />
+ <form-property name="endMilli" type="java.lang.Long" />
+ <form-property name="autypes" type="java.lang.String[]" />
+ <form-property name="seqno" type="java.lang.Long" />
+ <form-property name="unreviewable" type="java.lang.Boolean" />
+ <form-property name="parseDates" type="java.lang.Boolean" />
+ <form-property name="start_year" type="java.lang.Integer" />
+ <form-property name="start_month" type="java.lang.Integer" />
+ <form-property name="start_day" type="java.lang.Integer" />
+ <form-property name="start_hour" type="java.lang.Integer" />
+ <form-property name="start_minute" type="java.lang.Integer" />
+ <form-property name="start_am_pm" type="java.lang.Integer" />
+ <form-property name="end_year" type="java.lang.Integer" />
+ <form-property name="end_month" type="java.lang.Integer" />
+ <form-property name="end_day" type="java.lang.Integer" />
+ <form-property name="end_hour" type="java.lang.Integer" />
+ <form-property name="end_minute" type="java.lang.Integer" />
+ <form-property name="end_am_pm" type="java.lang.Integer" />
+ </form-bean>
<form-bean name="errataSearchForm"
type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
<form-property name="search_string" type="java.lang.String"/>
@@ -1020,6 +1042,7 @@
<forward name="logout" path="/Logout.do" redirect="true" />
<forward name="relogin" path="/ReLogin.do" />
<forward name="user" path="/users/ActiveList.do" redirect="true" />
+ <forward name="audit" path="/audit/Overview.do" redirect="true" />
<forward name="errata" path="/errata/Overview.do" redirect="true" />
<forward name="systems" path="/systems/Overview.do" redirect="true" />
<forward name="schedule" path="/schedule/PendingActions.do" redirect="true" />
@@ -1693,6 +1716,31 @@
path="/schedule/PendingActions.do" redirect="true" />
</action>
+ <!-- ===== AUDIT ===== -->
+ <action path="/audit/Search"
+ name="auditSearchForm"
+ scope="request"
+ input="/WEB-INF/pages/audit/auditsearch.jsp"
+ type="com.redhat.rhn.frontend.action.audit.AuditSearchAction">
+ <forward name="default" path="/WEB-INF/pages/audit/auditsearch.jsp"/>
+ <forward name="view" path="/WEB-INF/pages/audit/auditview.jsp"/>
+ </action>
+
+ <action path="/audit/Overview"
+ scope="request"
+ input="/WEB-INF/pages/audit/overview.jsp"
+ type="com.redhat.rhn.frontend.action.audit.AuditAction">
+ <forward name="default" path="/WEB-INF/pages/audit/overview.jsp"/>
+ </action>
+
+ <action path="/audit/Machine"
+ scope="request"
+ input="/WEB-INF/pages/audit/machine.jsp"
+ type="com.redhat.rhn.frontend.action.audit.AuditMachineAction">
+ <forward name="default" path="/WEB-INF/pages/audit/machine.jsp"/>
+ <forward name="success" path="/audit/Machine.do" redirect="true"/>
+ </action>
+
<!-- ===== ERRATA ===== -->
<action path="/errata/Search"
name="errataSearchForm"
diff --git a/spacewalk/setup/bin/spacewalk-setup b/spacewalk/setup/bin/spacewalk-setup
index ff5ae52..f920e6f 100755
--- a/spacewalk/setup/bin/spacewalk-setup
+++ b/spacewalk/setup/bin/spacewalk-setup
@@ -108,9 +108,15 @@ print Spacewalk::Setup::loc("* Performing initial configuration.\n");
my $config_opts = populate_initial_configs(\%opts, \%answers);
mkdir_mount_points($config_opts->{'mount_point'},
$config_opts->{'mount_point'} . '/redhat',
+ $config_opts->{'mount_point'} . '/systemlogs',
$config_opts->{'kickstart_mount_point'});
setup_sudoers(\%opts, \%answers);
+my $aurev_fn = $config_opts->{'mount_point'} . '/systemlogs/audit-review.log';
+qx(touch $aurev_fn);
+qx(chown tomcat $aurev_fn);
+qx(chattr +a $aurev_fn);
+
print Spacewalk::Setup::loc("* Activating $product_name.\n");
load_satellite_certificate(\%opts, \%answers);
14 years, 8 months
Changes to 'refs/tags/spacewalk-web-0.6.18-1'
by John Matthews
Tag 'spacewalk-web-0.6.18-1' created by John Matthews <jmatthew(a)redhat.com> at 2009-08-05 23:37 +0000
Tagging package [spacewalk-web] version [0.6.18-1] in directory [web/].
Changes since spacewalk-schema-0.6.20-1:
John Matthews (1):
Automatic commit of package [spacewalk-web] release [0.6.18-1].
---
rel-eng/packages/spacewalk-web | 2 +-
web/spacewalk-web.spec | 5 ++++-
2 files changed, 5 insertions(+), 2 deletions(-)
---
14 years, 8 months
rel-eng/packages web/spacewalk-web.spec
by John Matthews
rel-eng/packages/spacewalk-web | 2 +-
web/spacewalk-web.spec | 5 ++++-
2 files changed, 5 insertions(+), 2 deletions(-)
New commits:
commit 72af581525ad0f2990e4b25fe5bd8d95f0ca9965
Author: John Matthews <jmatthew(a)redhat.com>
Date: Wed Aug 5 19:37:57 2009 -0400
Automatic commit of package [spacewalk-web] release [0.6.18-1].
diff --git a/rel-eng/packages/spacewalk-web b/rel-eng/packages/spacewalk-web
index 2922b28..410e9fc 100644
--- a/rel-eng/packages/spacewalk-web
+++ b/rel-eng/packages/spacewalk-web
@@ -1 +1 @@
-0.6.17-1 web/
+0.6.18-1 web/
diff --git a/web/spacewalk-web.spec b/web/spacewalk-web.spec
index 1fe84a1..2787ab0 100644
--- a/web/spacewalk-web.spec
+++ b/web/spacewalk-web.spec
@@ -2,7 +2,7 @@ Name: spacewalk-web
Summary: Spacewalk Web site packages
Group: Applications/Internet
License: GPLv2
-Version: 0.6.17
+Version: 0.6.18
Release: 1%{?dist}
URL: https://fedorahosted.org/spacewalk
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
@@ -317,6 +317,9 @@ rm -rf $RPM_BUILD_ROOT
# $Id$
%changelog
+* Wed Aug 05 2009 John Matthews <jmatthew(a)redhat.com> 0.6.18-1
+- 515580 - remove hard links to scooby.rdu (shughes(a)redhat.com)
+
* Tue Aug 04 2009 Jan Pazdziora 0.6.17-1
- Bump up the version to 0.6, in preparation for Spacewalk 0.6
14 years, 8 months
Changes to 'refs/tags/spacewalk-schema-0.6.20-1'
by John Matthews
Tag 'spacewalk-schema-0.6.20-1' created by John Matthews <jmatthew(a)redhat.com> at 2009-08-05 23:31 +0000
Tagging package [spacewalk-schema] version [0.6.20-1] in directory [schema/spacewalk/].
Changes since rhn-client-tools-0.6.2-1:
John Matthews (1):
Automatic commit of package [spacewalk-schema] release [0.6.20-1].
---
rel-eng/packages/spacewalk-schema | 2 +-
schema/spacewalk/spacewalk-schema.spec | 7 ++++++-
2 files changed, 7 insertions(+), 2 deletions(-)
---
14 years, 8 months
rel-eng/packages schema/spacewalk
by John Matthews
rel-eng/packages/spacewalk-schema | 2 +-
schema/spacewalk/spacewalk-schema.spec | 7 ++++++-
2 files changed, 7 insertions(+), 2 deletions(-)
New commits:
commit b20516e14b94efff5da30f3645793920e258eb76
Author: John Matthews <jmatthew(a)redhat.com>
Date: Wed Aug 5 19:31:38 2009 -0400
Automatic commit of package [spacewalk-schema] release [0.6.20-1].
diff --git a/rel-eng/packages/spacewalk-schema b/rel-eng/packages/spacewalk-schema
index b89aabb..190f8ec 100644
--- a/rel-eng/packages/spacewalk-schema
+++ b/rel-eng/packages/spacewalk-schema
@@ -1 +1 @@
-0.6.19-1 schema/spacewalk/
+0.6.20-1 schema/spacewalk/
diff --git a/schema/spacewalk/spacewalk-schema.spec b/schema/spacewalk/spacewalk-schema.spec
index 30e1a74..b0bacf6 100644
--- a/schema/spacewalk/spacewalk-schema.spec
+++ b/schema/spacewalk/spacewalk-schema.spec
@@ -2,7 +2,7 @@ Name: spacewalk-schema
Group: Applications/Internet
Summary: Oracle SQL schema for Spacewalk server
-Version: 0.6.19
+Version: 0.6.20
Release: 1%{?dist}
Source0: %{name}-%{version}.tar.gz
@@ -58,6 +58,11 @@ rm -rf $RPM_BUILD_ROOT
%{_mandir}/man1/spacewalk-schema-upgrade*
%changelog
+* Wed Aug 05 2009 John Matthews <jmatthew(a)redhat.com> 0.6.20-1
+- bugfix patch on selinux config file deploy (joshua.roys(a)gtri.gatech.edu)
+- use new path to merged schema file (mzazrivec(a)redhat.com)
+- fixing schema errors for build (jsherril(a)redhat.com)
+
* Wed Aug 05 2009 Jan Pazdziora 0.6.19-1
- updating repo-sync schema to better conform with new schema standards, also
adding deps (jsherril(a)redhat.com)
14 years, 8 months
Changes to 'refs/tags/rhn-client-tools-0.6.2-1'
by John Matthews
Tag 'rhn-client-tools-0.6.2-1' created by John Matthews <jmatthew(a)redhat.com> at 2009-08-05 23:18 +0000
Tagging package [rhn-client-tools] version [0.6.2-1] in directory [client/rhel/rhn-client-tools/].
Changes since spacewalk-backend-0.6.30-1:
John Matthews (1):
Automatic commit of package [rhn-client-tools] release [0.6.2-1].
Pradeep Kilambi (2):
new build
fixing date
---
client/rhel/rhn-client-tools/rhn-client-tools.spec | 7 ++++++-
client/rhel/yum-rhn-plugin/yum-rhn-plugin.spec | 5 ++++-
rel-eng/packages/rhn-client-tools | 2 +-
3 files changed, 11 insertions(+), 3 deletions(-)
---
14 years, 8 months
client/rhel rel-eng/packages
by John Matthews
client/rhel/rhn-client-tools/rhn-client-tools.spec | 7 ++++++-
rel-eng/packages/rhn-client-tools | 2 +-
2 files changed, 7 insertions(+), 2 deletions(-)
New commits:
commit 6ae7da3ef3a8c0db2ac8280b04b08ae9abd58f3c
Author: John Matthews <jmatthew(a)redhat.com>
Date: Wed Aug 5 19:18:43 2009 -0400
Automatic commit of package [rhn-client-tools] release [0.6.2-1].
diff --git a/client/rhel/rhn-client-tools/rhn-client-tools.spec b/client/rhel/rhn-client-tools/rhn-client-tools.spec
index 0486907..ad972bd 100644
--- a/client/rhel/rhn-client-tools/rhn-client-tools.spec
+++ b/client/rhel/rhn-client-tools/rhn-client-tools.spec
@@ -4,7 +4,7 @@ Group: System Environment/Base
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
URL: https://fedorahosted.org/spacewalk
Name: rhn-client-tools
-Version: 0.6.1
+Version: 0.6.2
Release: 1%{?dist}
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildArch: noarch
@@ -204,6 +204,11 @@ rm -rf $RPM_BUILD_ROOT
%{_datadir}/applications/rhn_register.desktop
%changelog
+* Wed Aug 05 2009 John Matthews <jmatthew(a)redhat.com> 0.6.2-1
+- 494019 - Fixing the registration on python 2.6 to not include dbus.String
+ objects in hardware profile as new xmlrpclib _dump method validates based on
+ __dict__ on value. (pkilambi(a)redhat.com)
+
* Wed Jul 29 2009 Pradeep Kilambi <pkilambi(a)redhat.com> 0.4.20-9
- Resolves: #445881
diff --git a/rel-eng/packages/rhn-client-tools b/rel-eng/packages/rhn-client-tools
index 645d98f..624e94b 100644
--- a/rel-eng/packages/rhn-client-tools
+++ b/rel-eng/packages/rhn-client-tools
@@ -1 +1 @@
-0.6.1-1 client/rhel/rhn-client-tools/
+0.6.2-1 client/rhel/rhn-client-tools/
14 years, 8 months
client/rhel
by Pradeep Kilambi
client/rhel/yum-rhn-plugin/yum-rhn-plugin.spec | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
New commits:
commit 1063dc45195af8e9e15a109a2b2b9487a741712b
Author: Pradeep Kilambi <pkilambi(a)redhat.com>
Date: Wed Aug 5 17:53:39 2009 -0400
fixing date
diff --git a/client/rhel/yum-rhn-plugin/yum-rhn-plugin.spec b/client/rhel/yum-rhn-plugin/yum-rhn-plugin.spec
index 294235a..59e5e20 100644
--- a/client/rhel/yum-rhn-plugin/yum-rhn-plugin.spec
+++ b/client/rhel/yum-rhn-plugin/yum-rhn-plugin.spec
@@ -60,7 +60,7 @@ make -f Makefile.yum-rhn-plugin install VERSION=%{version}-%{release} PREFIX=$RP
%changelog
-* Wed Aug 5 2009 Pradeep Kilambi <pkilambi(a)redhat.com>
+* Wed Aug 05 2009 Pradeep Kilambi <pkilambi(a)redhat.com>
- new build
* Mon Aug 3 2009 Pradeep Kilambi <pkilambi(a)redhat.com> 0.5.4-13%{?dist}
14 years, 8 months