Branch 'VADER' - java/code
by Brad Buckingham
java/code/src/com/redhat/rhn/manager/org/MigrationManager.java | 2 -
java/code/src/com/redhat/rhn/manager/system/ServerGroupManager.java | 15 ++++++++--
2 files changed, 13 insertions(+), 4 deletions(-)
New commits:
commit cd542846056d042a773a13cb5204d0e65267acc8
Author: Brad Buckingham <bbuckingham(a)redhat.com>
Date: Tue Jun 2 15:51:14 2009 -0400
503545 - api - system.migrateSystems - update to handle systems that are in a system group
Currently, if a sat admin attempts to migrate a system from an org that the
sat admin is not a member of, the request is denied. The reason being
the sat admin does not normally have 'permission' (e.g. ui) to do this.
diff --git a/java/code/src/com/redhat/rhn/manager/org/MigrationManager.java b/java/code/src/com/redhat/rhn/manager/org/MigrationManager.java
index a498c04..4d8eafa 100644
--- a/java/code/src/com/redhat/rhn/manager/org/MigrationManager.java
+++ b/java/code/src/com/redhat/rhn/manager/org/MigrationManager.java
@@ -122,7 +122,7 @@ public class MigrationManager extends BaseManager {
for (ManagedServerGroup group : server.getManagedGroups()) {
List<Server> tempList = new LinkedList<Server>();
tempList.add(server);
- manager.removeServers(group, tempList, user);
+ manager.removeServers(group, tempList);
}
// Remove custom data values (aka System->CustomInfo)
diff --git a/java/code/src/com/redhat/rhn/manager/system/ServerGroupManager.java b/java/code/src/com/redhat/rhn/manager/system/ServerGroupManager.java
index 463147c..2c3c9d6 100644
--- a/java/code/src/com/redhat/rhn/manager/system/ServerGroupManager.java
+++ b/java/code/src/com/redhat/rhn/manager/system/ServerGroupManager.java
@@ -357,20 +357,29 @@ public class ServerGroupManager {
/**
* Dissociates a bunch of servers from a server group
* @param sg the server group to process
- * @param servers a collection of servers to deassociate
+ * @param servers a collection of servers to dissociate
* @param loggedInUser the loggedInUser needed for credentials
*/
public void removeServers(ServerGroup sg, Collection servers,
User loggedInUser) {
validateAccessCredentials(loggedInUser, sg, sg.getName());
validateAdminCredentials(loggedInUser);
+ removeServers(sg, servers);
+ }
+
+ /**
+ * Dissociates a bunch of servers from a server group.
+ * **WARNING** This method does not validate the user's access or
+ * admin credentials; therefore, it should be used with caution.
+ * @param sg the server group to process
+ * @param servers a collection of servers to dissociate
+ */
+ public void removeServers(ServerGroup sg, Collection servers) {
for (Iterator itr = servers.iterator(); itr.hasNext();) {
Server s = (Server) itr.next();
SystemManager.removeServerFromServerGroup(s, sg);
}
-
}
-
/**
* Returns the admins of a given servergroup. This list includes
14 years, 11 months
Branch 'VADER' - proxy/installer
by Miroslav Suchý
proxy/installer/configure-proxy.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
New commits:
commit b3382fec2140ad0683b55a84fa58c25a9d721ce5
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Wed Jun 3 14:10:25 2009 +0200
500151 - do not insist on presence of sslbuildir if we force own CA
(cherry picked from commit ebaf09fdf4ec7a6ce56bce38d3cbe3329ce48264)
diff --git a/proxy/installer/configure-proxy.sh b/proxy/installer/configure-proxy.sh
index 90b0d8a..bf56977 100755
--- a/proxy/installer/configure-proxy.sh
+++ b/proxy/installer/configure-proxy.sh
@@ -194,8 +194,8 @@ DIR=/usr/share/doc/proxy/conf-template
HOSTNAME=$(hostname)
SSL_BUILD_DIR=${SSL_BUILD_DIR:-/root/ssl-build}
-if ! [ -d $SSL_BUILD_DIR ]; then
- echo "Error: ssl build directory $SSL_BUILD_DIR do not exist."
+if ! [ -d $SSL_BUILD_DIR ] && [ 0$FORCE_OWN_CA -eq 0 ]; then
+ echo "Error: ssl build directory $SSL_BUILD_DIR do not exist. Please create this directory."
exit 1
fi
14 years, 11 months
proxy/installer
by Miroslav Suchý
proxy/installer/configure-proxy.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
New commits:
commit ebaf09fdf4ec7a6ce56bce38d3cbe3329ce48264
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Wed Jun 3 14:10:25 2009 +0200
500151 - do not insist on presence of sslbuildir if we force own CA
diff --git a/proxy/installer/configure-proxy.sh b/proxy/installer/configure-proxy.sh
index 995a8de..043bd79 100755
--- a/proxy/installer/configure-proxy.sh
+++ b/proxy/installer/configure-proxy.sh
@@ -194,8 +194,8 @@ DIR=/usr/share/doc/proxy/conf-template
HOSTNAME=$(hostname)
SSL_BUILD_DIR=${SSL_BUILD_DIR:-/root/ssl-build}
-if ! [ -d $SSL_BUILD_DIR ]; then
- echo "Error: ssl build directory $SSL_BUILD_DIR do not exist."
+if ! [ -d $SSL_BUILD_DIR ] && [ 0$FORCE_OWN_CA -eq 0 ]; then
+ echo "Error: ssl build directory $SSL_BUILD_DIR do not exist. Please create this directory."
exit 1
fi
14 years, 11 months
rel-eng/build-missing-builds-in-koji.sh
by Miroslav Suchý
rel-eng/build-missing-builds-in-koji.sh | 1 +
1 file changed, 1 insertion(+)
New commits:
commit d4349e89fd21b672ae9ef7f36b274f67e8f143e9
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Wed Jun 3 13:48:00 2009 +0200
ignore solaris packages, do not try to build them
diff --git a/rel-eng/build-missing-builds-in-koji.sh b/rel-eng/build-missing-builds-in-koji.sh
index 8abf0e9..215d59e 100755
--- a/rel-eng/build-missing-builds-in-koji.sh
+++ b/rel-eng/build-missing-builds-in-koji.sh
@@ -16,6 +16,7 @@ for tag in 0 1; do
}
/Builds missing in koji/ { x=1 }' | \
xargs -I replacestring awk '{print $2}' rel-eng/packages/replacestring | \
+ grep -v solaris | \
while read package ; do
(
echo Building package in path $package
14 years, 11 months
Branch 'VADER' - java/code
by Justin Sherrill
java/code/src/com/redhat/rhn/common/db/datasource/xml/Package_queries.xml | 1 -
1 file changed, 1 deletion(-)
New commits:
commit 5b77160c0c6fb07aa7768a35bbce75c0f20cd858
Author: Justin Sherrill <jsherril(a)redhat.com>
Date: Tue Jun 2 18:41:25 2009 -0400
502259 - fixing query error that prevented solaris patch clusters from being installed
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Package_queries.xml b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Package_queries.xml
index 12f302c..cbf3315 100644
--- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Package_queries.xml
+++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Package_queries.xml
@@ -1036,7 +1036,6 @@ SELECT pn.name AS NAME,
AND SPP.patch_id = full_list.id
AND PNEVRA.id = SPP.package_nevra_id
AND PNEVRA.name_id = SP.name_id
- AND PNEVRA.evr_id = SP.evr_id
AND ((PNEVRA.package_arch_id IS NULL AND SP.package_arch_id IS NULL) OR PNEVRA.package_arch_id = SP.package_arch_id)
AND NOT EXISTS (SELECT 1
FROM rhnSolarisPatchedPackage SPdP
14 years, 11 months
java/code
by Justin Sherrill
java/code/src/com/redhat/rhn/common/db/datasource/xml/Package_queries.xml | 1 -
1 file changed, 1 deletion(-)
New commits:
commit 07c05bdc8cbccac46aa0a4024d2740d4fd80c2d9
Author: Justin Sherrill <jsherril(a)redhat.com>
Date: Tue Jun 2 18:41:25 2009 -0400
502259 - fixing query error that prevented solaris patch clusters from being installed
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Package_queries.xml b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Package_queries.xml
index 12f302c..cbf3315 100644
--- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Package_queries.xml
+++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Package_queries.xml
@@ -1036,7 +1036,6 @@ SELECT pn.name AS NAME,
AND SPP.patch_id = full_list.id
AND PNEVRA.id = SPP.package_nevra_id
AND PNEVRA.name_id = SP.name_id
- AND PNEVRA.evr_id = SP.evr_id
AND ((PNEVRA.package_arch_id IS NULL AND SP.package_arch_id IS NULL) OR PNEVRA.package_arch_id = SP.package_arch_id)
AND NOT EXISTS (SELECT 1
FROM rhnSolarisPatchedPackage SPdP
14 years, 11 months
java/code
by Brad Buckingham
java/code/src/com/redhat/rhn/manager/org/MigrationManager.java | 2 -
java/code/src/com/redhat/rhn/manager/system/ServerGroupManager.java | 15 ++++++++--
2 files changed, 13 insertions(+), 4 deletions(-)
New commits:
commit 4c197d83bfd697f7782d2765df507c359944653b
Author: Brad Buckingham <bbuckingham(a)redhat.com>
Date: Tue Jun 2 15:51:14 2009 -0400
503545 - api - system.migrateSystems - update to handle systems that are in a system group
Currently, if a sat admin attempts to migrate a system from an org that the
sat admin is not a member of, the request is denied. The reason being
the sat admin does not normally have 'permission' (e.g. ui) to do this.
diff --git a/java/code/src/com/redhat/rhn/manager/org/MigrationManager.java b/java/code/src/com/redhat/rhn/manager/org/MigrationManager.java
index a498c04..4d8eafa 100644
--- a/java/code/src/com/redhat/rhn/manager/org/MigrationManager.java
+++ b/java/code/src/com/redhat/rhn/manager/org/MigrationManager.java
@@ -122,7 +122,7 @@ public class MigrationManager extends BaseManager {
for (ManagedServerGroup group : server.getManagedGroups()) {
List<Server> tempList = new LinkedList<Server>();
tempList.add(server);
- manager.removeServers(group, tempList, user);
+ manager.removeServers(group, tempList);
}
// Remove custom data values (aka System->CustomInfo)
diff --git a/java/code/src/com/redhat/rhn/manager/system/ServerGroupManager.java b/java/code/src/com/redhat/rhn/manager/system/ServerGroupManager.java
index 463147c..2c3c9d6 100644
--- a/java/code/src/com/redhat/rhn/manager/system/ServerGroupManager.java
+++ b/java/code/src/com/redhat/rhn/manager/system/ServerGroupManager.java
@@ -357,20 +357,29 @@ public class ServerGroupManager {
/**
* Dissociates a bunch of servers from a server group
* @param sg the server group to process
- * @param servers a collection of servers to deassociate
+ * @param servers a collection of servers to dissociate
* @param loggedInUser the loggedInUser needed for credentials
*/
public void removeServers(ServerGroup sg, Collection servers,
User loggedInUser) {
validateAccessCredentials(loggedInUser, sg, sg.getName());
validateAdminCredentials(loggedInUser);
+ removeServers(sg, servers);
+ }
+
+ /**
+ * Dissociates a bunch of servers from a server group.
+ * **WARNING** This method does not validate the user's access or
+ * admin credentials; therefore, it should be used with caution.
+ * @param sg the server group to process
+ * @param servers a collection of servers to dissociate
+ */
+ public void removeServers(ServerGroup sg, Collection servers) {
for (Iterator itr = servers.iterator(); itr.hasNext();) {
Server s = (Server) itr.next();
SystemManager.removeServerFromServerGroup(s, sg);
}
-
}
-
/**
* Returns the admins of a given servergroup. This list includes
14 years, 11 months
Branch 'VADER' - spacewalk/config web/html
by Shannon Hughes
spacewalk/config/etc/httpd/conf.d/zz-spacewalk-www.conf | 9 +
web/html/errors/403.html | 140 ++++++++++++++++
web/html/errors/404.html | 123 ++++++++++++++
web/html/errors/413.html | 131 ++++++++++++++
web/html/errors/500.html | 135 +++++++++++++++
web/html/errors/error.html | 134 ---------------
6 files changed, 538 insertions(+), 134 deletions(-)
New commits:
commit 7d726b8f00efc4a7c19e344fddf9d758532da1e1
Author: Shannon Hughes <shughes(a)redhat.com>
Date: Tue Jun 2 15:38:28 2009 -0400
500709 - html error code page support for sessionless bots
diff --git a/spacewalk/config/etc/httpd/conf.d/zz-spacewalk-www.conf b/spacewalk/config/etc/httpd/conf.d/zz-spacewalk-www.conf
index 3e49b75..930ec30 100644
--- a/spacewalk/config/etc/httpd/conf.d/zz-spacewalk-www.conf
+++ b/spacewalk/config/etc/httpd/conf.d/zz-spacewalk-www.conf
@@ -17,10 +17,19 @@ PerlPassEnv NLS_LANG
PerlOptions +GlobalRequest
+# generic html; no session for vulnerability bots
+ErrorDocument 403 /errors/403.html
+ErrorDocument 404 /errors/404.html
+ErrorDocument 413 /errors/413.html
+ErrorDocument 500 /errors/500.html
+
+
+<Directory /var/www/html/network>
ErrorDocument 403 /errors/permission.pxt
ErrorDocument 404 /errors/404.pxt
ErrorDocument 413 /errors/413.pxt
ErrorDocument 500 /errors/500.pxt
+</Directory>
AddType text/pxt .pxt
<Files *.pxt>
diff --git a/web/html/errors/403.html b/web/html/errors/403.html
new file mode 100644
index 0000000..530c7f9
--- /dev/null
+++ b/web/html/errors/403.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en"><head>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+ <title>Error</title>
+ <link rel="shortcut icon" href="/img/favicon.ico">
+ <link rel="stylesheet" href="/css/rhn-base.css" type="text/css">
+ <!--[if IE]>
+ <link rel="stylesheet" type="text/css" href="/css/rhn-iecompat.css" />
+ <![endif]-->
+ <script src="/javascript/prototype-1.js"></script>
+
+
+
+ </head><body><div class="wrap" id="top-wrap">
+
+
+
+
+
+
+<div id="utility">
+ <div id="utilityLinks">
+<p id="linx"><span class="hide"><strong>Shortcuts:</strong> </span><a href="http://kbase.redhat.com/">Knowledgebase</a> <span class="navPipe">|</span> <a href="https://scooby.rdu.redhat.com/help">Documentation</a></p>
+ </div>
+ <div id="utilityAccount">
+
+ </div>
+
+</div>
+
+<div id="header">
+ <a href="/"><img src="/img/logo.png" id="rhnLogo" height="52" width="228"></a>
+ <div id="searchbar">
+ <div id="searchbarinner">
+ <form name="form1" action="/rhn/Search.do" method="get">
+ <select name="search_type">
+
+ <option value="systems">Systems</option>
+
+ <option value="packages">Packages</option>
+ <option value="errata">Errata</option>
+ <option value="docs">Documentation</option>
+ </select><input name="search_string" maxlength="40" size="20" type="text">
+
+ <input name="submitted" value="true" type="hidden">
+ <input class="button" name="image-1" value="Search" type="submit" align="top"></form>
+ </div>
+ </div>
+</div>
+
+<div id="navWrap">
+<div id="mainNavWrap">
+
+
+<ul>
+<li id="mainFirst-active"><a href="/">Sign In</a></li>
+
+<li id="mainLast"><a href="/help/about.pxt" class="mainLastLink">About</a></li>
+</ul>
+</div><!-- end mainNavWrap -->
+</div><!-- end navWrap -->
+
+
+
+
+
+
+
+
+<div id="bar">
+
+<div id="systembar">
+<div id="systembarinner">
+
+
+
+
+
+
+<div>
+
+</div>
+
+
+</div>
+</div>
+
+</div>
+<!-- close bar -->
+
+
+
+
+ </div>
+ <div class="wrap" id="bottom-wrap">
+ <div id="content">
+ <table width="100%" cellspacing="0">
+ <tbody><tr>
+ <td class="sidebar">
+
+
+<div id="sidenavp"><ul></ul>
+</div>
+
+ </td>
+ <td class="page-content" width="100%">
+
+
+ <h1>Permission Error</h1>
+<p>You do not have the appropriate permission set to access the requested page. You may have reached this error page in one of several ways:</p>
+ <ol>
+ <li>You are using Konqueror 3.0, which does not handle form
+ variables properly in all cases. Continuing to use Konqueror 3.0
+ will have unexpected results. If you are using Konqueror 3.0,
+ please use another browser.</li>
+ <li>Your login session has expired. For security reasons, Red Hat
+ Network terminates your login session after 15 minutes of
+ inactivity. To sign in again, click <a href="/">here</a>.
+ </li>
+ <li>You've found an error in our site. Please contact your Support representative with details of how you received this message.</li>
+ <li>Your browser does not have cookies enabled. The Red
+ Hat Network requires cookies in order to function; if you
+ have disabled them, please re-enable them to use the site.
+ </li>
+ <li>You've done something naughty. Stop it.</li>
+ </ol>
+
+
+ </td>
+ </tr>
+ </tbody></table>
+
+ <div id="footer">
+ Copyright © 2002-08 Red Hat, Inc. All rights reserved. <a href="https://www.redhat.com/legal/privacy_statement.html">Privacy statement</a> : <a href="http://www.redhat.com/legal/legal_statement.html">Legal statement</a> : <a href="http://www.redhat.com/">redhat.com</a>
+ </div>
+
+ </div> <!-- close content -->
+ </div> <!-- close wrap -->
+
+ </body></html>
diff --git a/web/html/errors/404.html b/web/html/errors/404.html
new file mode 100644
index 0000000..b7b489a
--- /dev/null
+++ b/web/html/errors/404.html
@@ -0,0 +1,123 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en"><head>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+ <title>Error</title>
+ <link rel="shortcut icon" href="/img/favicon.ico">
+ <link rel="stylesheet" href="/css/rhn-base.css" type="text/css">
+ <!--[if IE]>
+ <link rel="stylesheet" type="text/css" href="/css/rhn-iecompat.css" />
+ <![endif]-->
+ <script src="/javascript/prototype-1.js"></script>
+
+
+
+ </head><body><div class="wrap" id="top-wrap">
+
+
+
+
+
+
+<div id="utility">
+ <div id="utilityLinks">
+<p id="linx"><span class="hide"><strong>Shortcuts:</strong> </span><a href="http://kbase.redhat.com/">Knowledgebase</a> <span class="navPipe">|</span> <a href="https://scooby.rdu.redhat.com/help">Documentation</a></p>
+ </div>
+ <div id="utilityAccount">
+
+ </div>
+
+</div>
+
+<div id="header">
+ <a href="/"><img src="/img/logo.png" id="rhnLogo" height="52" width="228"></a>
+ <div id="searchbar">
+ <div id="searchbarinner">
+ <form name="form1" action="/rhn/Search.do" method="get">
+ <select name="search_type">
+
+ <option value="systems">Systems</option>
+
+ <option value="packages">Packages</option>
+ <option value="errata">Errata</option>
+ <option value="docs">Documentation</option>
+ </select><input name="search_string" maxlength="40" size="20" type="text">
+
+ <input name="submitted" value="true" type="hidden">
+ <input class="button" name="image-1" value="Search" type="submit" align="top"></form>
+ </div>
+ </div>
+</div>
+
+<div id="navWrap">
+<div id="mainNavWrap">
+
+
+<ul>
+<li id="mainFirst-active"><a href="/">Sign In</a></li>
+
+<li id="mainLast"><a href="/help/about.pxt" class="mainLastLink">About</a></li>
+</ul>
+</div><!-- end mainNavWrap -->
+</div><!-- end navWrap -->
+
+
+
+
+
+
+
+
+<div id="bar">
+
+<div id="systembar">
+<div id="systembarinner">
+
+
+
+
+
+
+<div>
+
+</div>
+
+
+</div>
+</div>
+
+</div>
+<!-- close bar -->
+
+
+
+
+ </div>
+ <div class="wrap" id="bottom-wrap">
+ <div id="content">
+ <table width="100%" cellspacing="0">
+ <tbody><tr>
+ <td class="sidebar">
+
+
+<div id="sidenavp"><ul></ul>
+</div>
+
+ </td>
+ <td class="page-content" width="100%">
+
+
+ <h1>404 Error - File Not Found</h1>
+ <p>Please report this error to your local administrator.</p>
+
+ </td>
+ </tr>
+ </tbody></table>
+
+ <div id="footer">
+ Copyright © 2002-08 Red Hat, Inc. All rights reserved. <a href="https://www.redhat.com/legal/privacy_statement.html">Privacy statement</a> : <a href="http://www.redhat.com/legal/legal_statement.html">Legal statement</a> : <a href="http://www.redhat.com/">redhat.com</a>
+ </div>
+
+ </div> <!-- close content -->
+ </div> <!-- close wrap -->
+
+ </body></html>
diff --git a/web/html/errors/413.html b/web/html/errors/413.html
new file mode 100644
index 0000000..5670692
--- /dev/null
+++ b/web/html/errors/413.html
@@ -0,0 +1,131 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en"><head>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+ <title>Error</title>
+ <link rel="shortcut icon" href="/img/favicon.ico">
+ <link rel="stylesheet" href="/css/rhn-base.css" type="text/css">
+ <!--[if IE]>
+ <link rel="stylesheet" type="text/css" href="/css/rhn-iecompat.css" />
+ <![endif]-->
+ <script src="/javascript/prototype-1.js"></script>
+
+
+
+ </head><body><div class="wrap" id="top-wrap">
+
+
+
+
+
+
+<div id="utility">
+ <div id="utilityLinks">
+<p id="linx"><span class="hide"><strong>Shortcuts:</strong> </span><a href="http://kbase.redhat.com/">Knowledgebase</a> <span class="navPipe">|</span> <a href="https://scooby.rdu.redhat.com/help">Documentation</a></p>
+ </div>
+ <div id="utilityAccount">
+
+ </div>
+
+</div>
+
+<div id="header">
+ <a href="/"><img src="/img/logo.png" id="rhnLogo" height="52" width="228"></a>
+ <div id="searchbar">
+ <div id="searchbarinner">
+ <form name="form1" action="/rhn/Search.do" method="get">
+ <select name="search_type">
+
+ <option value="systems">Systems</option>
+
+ <option value="packages">Packages</option>
+ <option value="errata">Errata</option>
+ <option value="docs">Documentation</option>
+ </select><input name="search_string" maxlength="40" size="20" type="text">
+
+ <input name="submitted" value="true" type="hidden">
+ <input class="button" name="image-1" value="Search" type="submit" align="top"></form>
+ </div>
+ </div>
+</div>
+
+<div id="navWrap">
+<div id="mainNavWrap">
+
+
+<ul>
+<li id="mainFirst-active"><a href="/">Sign In</a></li>
+
+<li id="mainLast"><a href="/help/about.pxt" class="mainLastLink">About</a></li>
+</ul>
+</div><!-- end mainNavWrap -->
+</div><!-- end navWrap -->
+
+
+
+
+
+
+
+
+<div id="bar">
+
+<div id="systembar">
+<div id="systembarinner">
+
+
+
+
+
+
+<div>
+
+</div>
+
+
+</div>
+</div>
+
+</div>
+<!-- close bar -->
+
+
+
+
+ </div>
+ <div class="wrap" id="bottom-wrap">
+ <div id="content">
+ <table width="100%" cellspacing="0">
+ <tbody><tr>
+ <td class="sidebar">
+
+
+<div id="sidenavp"><ul></ul>
+</div>
+
+ </td>
+ <td class="page-content" width="100%">
+
+ <h1>413 Error - Request Entity Too Large</h1>
+ <p>The amount of data provided in the request exceeds the capacity limit.</p>
+<p>
+ You have probably received this error because you have attempted to
+ upload a file that is larger than the maximum allowed size.
+</p>
+
+ <p>
+ Please report this error to your local administrator.
+ </p>
+
+
+ </td>
+ </tr>
+ </tbody></table>
+
+ <div id="footer">
+ Copyright © 2002-08 Red Hat, Inc. All rights reserved. <a href="https://www.redhat.com/legal/privacy_statement.html">Privacy statement</a> : <a href="http://www.redhat.com/legal/legal_statement.html">Legal statement</a> : <a href="http://www.redhat.com/">redhat.com</a>
+ </div>
+
+ </div> <!-- close content -->
+ </div> <!-- close wrap -->
+
+ </body></html>
diff --git a/web/html/errors/500.html b/web/html/errors/500.html
new file mode 100644
index 0000000..a5237a8
--- /dev/null
+++ b/web/html/errors/500.html
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en"><head>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+ <title>Error</title>
+ <link rel="shortcut icon" href="/img/favicon.ico">
+ <link rel="stylesheet" href="/css/rhn-base.css" type="text/css">
+ <!--[if IE]>
+ <link rel="stylesheet" type="text/css" href="/css/rhn-iecompat.css" />
+ <![endif]-->
+ <script src="/javascript/prototype-1.js"></script>
+
+
+
+ </head><body><div class="wrap" id="top-wrap">
+
+
+
+
+
+
+<div id="utility">
+ <div id="utilityLinks">
+<p id="linx"><span class="hide"><strong>Shortcuts:</strong> </span><a href="http://kbase.redhat.com/">Knowledgebase</a> <span class="navPipe">|</span> <a href="https://scooby.rdu.redhat.com/help">Documentation</a></p>
+ </div>
+ <div id="utilityAccount">
+
+ </div>
+
+</div>
+
+<div id="header">
+ <a href="/"><img src="/img/logo.png" id="rhnLogo" height="52" width="228"></a>
+ <div id="searchbar">
+ <div id="searchbarinner">
+ <form name="form1" action="/rhn/Search.do" method="get">
+ <select name="search_type">
+
+ <option value="systems">Systems</option>
+
+ <option value="packages">Packages</option>
+ <option value="errata">Errata</option>
+ <option value="docs">Documentation</option>
+ </select><input name="search_string" maxlength="40" size="20" type="text">
+
+ <input name="submitted" value="true" type="hidden">
+ <input class="button" name="image-1" value="Search" type="submit" align="top"></form>
+ </div>
+ </div>
+</div>
+
+<div id="navWrap">
+<div id="mainNavWrap">
+
+
+<ul>
+<li id="mainFirst-active"><a href="/">Sign In</a></li>
+
+<li id="mainLast"><a href="/help/about.pxt" class="mainLastLink">About</a></li>
+</ul>
+</div><!-- end mainNavWrap -->
+</div><!-- end navWrap -->
+
+
+
+
+
+
+
+
+<div id="bar">
+
+<div id="systembar">
+<div id="systembarinner">
+
+
+
+
+
+
+<div>
+
+</div>
+
+
+</div>
+</div>
+
+</div>
+<!-- close bar -->
+
+
+
+
+ </div>
+ <div class="wrap" id="bottom-wrap">
+ <div id="content">
+ <table width="100%" cellspacing="0">
+ <tbody><tr>
+ <td class="sidebar">
+
+
+<div id="sidenavp"><ul></ul>
+</div>
+
+ </td>
+ <td class="page-content" width="100%">
+
+
+ <h1>500 Error - Internal Server Error</h1>
+<p>You may have reached this page in one of the following ways:</p>
+ <ol>
+ <li>You are using an outdated version of Konqueror 3.0, which
+ may not handle form variables properly in all cases. Continuing to
+ use this outdated version of Konqueror may have unexpected results.
+ Please up2date to the latest version of Konqueror (3.03 or
+ greater), or if this is not possible, please use another
+ browser.</li>
+ <li>You've found an error in the site. Please report this error
+ to your local administrator with details of how you received this
+ message.</li>
+ </ol>
+
+
+ </td>
+ </tr>
+ </tbody></table>
+
+ <div id="footer">
+ Copyright © 2002-08 Red Hat, Inc. All rights reserved. <a href="https://www.redhat.com/legal/privacy_statement.html">Privacy statement</a> : <a href="http://www.redhat.com/legal/legal_statement.html">Legal statement</a> : <a href="http://www.redhat.com/">redhat.com</a>
+ </div>
+
+ </div> <!-- close content -->
+ </div> <!-- close wrap -->
+
+ </body></html>
diff --git a/web/html/errors/error.html b/web/html/errors/error.html
deleted file mode 100644
index 265323c..0000000
--- a/web/html/errors/error.html
+++ /dev/null
@@ -1,134 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en"><head>
-<meta http-equiv="content-type" content="text/html; charset=UTF-8">
- <title>Error</title>
- <link rel="shortcut icon" href="/img/favicon.ico">
- <link rel="stylesheet" href="/css/rhn-base.css" type="text/css">
- <!--[if IE]>
- <link rel="stylesheet" type="text/css" href="/css/rhn-iecompat.css" />
- <![endif]-->
- <script src="/javascript/prototype-1.js"></script>
-
-
-
- </head><body><div class="wrap" id="top-wrap">
-
-
-
-
-
-
-<div id="utility">
- <div id="utilityLinks">
-<p id="linx"><span class="hide"><strong>Shortcuts:</strong> </span><a href="http://kbase.redhat.com/">Knowledgebase</a> <span class="navPipe">|</span> <a href="https://scooby.rdu.redhat.com/help">Documentation</a></p>
- </div>
- <div id="utilityAccount">
-
- </div>
-
-</div>
-
-<div id="header">
- <a href="/"><img src="/img/logo.png" id="rhnLogo" height="52" width="228"></a>
- <div id="searchbar">
- <div id="searchbarinner">
- <form name="form1" action="/rhn/Search.do" method="get">
- <select name="search_type">
-
- <option value="systems">Systems</option>
-
- <option value="packages">Packages</option>
- <option value="errata">Errata</option>
- <option value="docs">Documentation</option>
- </select><input name="search_string" maxlength="40" size="20" type="text">
-
- <input name="submitted" value="true" type="hidden">
- <input class="button" name="image-1" value="Search" type="submit" align="top"></form>
- </div>
- </div>
-</div>
-
-<div id="navWrap">
-<div id="mainNavWrap">
-
-
-<ul>
-<li id="mainFirst-active"><a href="/">Sign In</a></li>
-
-<li id="mainLast"><a href="/help/about.pxt" class="mainLastLink">About</a></li>
-</ul>
-</div><!-- end mainNavWrap -->
-</div><!-- end navWrap -->
-
-
-
-
-
-
-
-
-<div id="bar">
-
-<div id="systembar">
-<div id="systembarinner">
-
-
-
-
-
-
-<div>
-
-</div>
-
-
-</div>
-</div>
-
-</div>
-<!-- close bar -->
-
-
-
-
- </div>
- <div class="wrap" id="bottom-wrap">
- <div id="content">
- <table width="100%" cellspacing="0">
- <tbody><tr>
- <td class="sidebar">
-
-
-<div id="sidenavp"><ul></ul>
-</div>
-
- </td>
- <td class="page-content" width="100%">
-
-
- <h1>Page Error</h1>
- <p>Error requesting page. Some possible causes of this problem:</p>
-
- <ol>
- <li>Page no longer exists</li>
- <li>Page permission issue</li>
- <li>You are doing something naughty</li>
- </ol>
-
- <p>Cookie support required. Note: cookies are <strong>not</strong> used
- for marketing purposes; we use them strictly to keep track
- of your login state and other state data absolutely
- necessary for the proper functioning of your account.</p>
-
- </td>
- </tr>
- </tbody></table>
-
- <div id="footer">
- Copyright © 2002-08 Red Hat, Inc. All rights reserved. <a href="https://www.redhat.com/legal/privacy_statement.html">Privacy statement</a> : <a href="http://www.redhat.com/legal/legal_statement.html">Legal statement</a> : <a href="http://www.redhat.com/">redhat.com</a>
- </div>
-
- </div> <!-- close content -->
- </div> <!-- close wrap -->
-
- </body></html>
14 years, 11 months
spacewalk/config web/html
by Shannon Hughes
spacewalk/config/etc/httpd/conf.d/zz-spacewalk-www.conf | 9 +
web/html/errors/403.html | 140 ++++++++++++++++
web/html/errors/404.html | 123 ++++++++++++++
web/html/errors/413.html | 131 ++++++++++++++
web/html/errors/500.html | 135 +++++++++++++++
web/html/errors/error.html | 134 ---------------
6 files changed, 538 insertions(+), 134 deletions(-)
New commits:
commit 8c5ce1571887e2098646555e6775b0be49ab015d
Author: Shannon Hughes <shughes(a)redhat.com>
Date: Tue Jun 2 15:38:28 2009 -0400
500709 - html error code page support for sessionless bots
diff --git a/spacewalk/config/etc/httpd/conf.d/zz-spacewalk-www.conf b/spacewalk/config/etc/httpd/conf.d/zz-spacewalk-www.conf
index 3e49b75..930ec30 100644
--- a/spacewalk/config/etc/httpd/conf.d/zz-spacewalk-www.conf
+++ b/spacewalk/config/etc/httpd/conf.d/zz-spacewalk-www.conf
@@ -17,10 +17,19 @@ PerlPassEnv NLS_LANG
PerlOptions +GlobalRequest
+# generic html; no session for vulnerability bots
+ErrorDocument 403 /errors/403.html
+ErrorDocument 404 /errors/404.html
+ErrorDocument 413 /errors/413.html
+ErrorDocument 500 /errors/500.html
+
+
+<Directory /var/www/html/network>
ErrorDocument 403 /errors/permission.pxt
ErrorDocument 404 /errors/404.pxt
ErrorDocument 413 /errors/413.pxt
ErrorDocument 500 /errors/500.pxt
+</Directory>
AddType text/pxt .pxt
<Files *.pxt>
diff --git a/web/html/errors/403.html b/web/html/errors/403.html
new file mode 100644
index 0000000..530c7f9
--- /dev/null
+++ b/web/html/errors/403.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en"><head>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+ <title>Error</title>
+ <link rel="shortcut icon" href="/img/favicon.ico">
+ <link rel="stylesheet" href="/css/rhn-base.css" type="text/css">
+ <!--[if IE]>
+ <link rel="stylesheet" type="text/css" href="/css/rhn-iecompat.css" />
+ <![endif]-->
+ <script src="/javascript/prototype-1.js"></script>
+
+
+
+ </head><body><div class="wrap" id="top-wrap">
+
+
+
+
+
+
+<div id="utility">
+ <div id="utilityLinks">
+<p id="linx"><span class="hide"><strong>Shortcuts:</strong> </span><a href="http://kbase.redhat.com/">Knowledgebase</a> <span class="navPipe">|</span> <a href="https://scooby.rdu.redhat.com/help">Documentation</a></p>
+ </div>
+ <div id="utilityAccount">
+
+ </div>
+
+</div>
+
+<div id="header">
+ <a href="/"><img src="/img/logo.png" id="rhnLogo" height="52" width="228"></a>
+ <div id="searchbar">
+ <div id="searchbarinner">
+ <form name="form1" action="/rhn/Search.do" method="get">
+ <select name="search_type">
+
+ <option value="systems">Systems</option>
+
+ <option value="packages">Packages</option>
+ <option value="errata">Errata</option>
+ <option value="docs">Documentation</option>
+ </select><input name="search_string" maxlength="40" size="20" type="text">
+
+ <input name="submitted" value="true" type="hidden">
+ <input class="button" name="image-1" value="Search" type="submit" align="top"></form>
+ </div>
+ </div>
+</div>
+
+<div id="navWrap">
+<div id="mainNavWrap">
+
+
+<ul>
+<li id="mainFirst-active"><a href="/">Sign In</a></li>
+
+<li id="mainLast"><a href="/help/about.pxt" class="mainLastLink">About</a></li>
+</ul>
+</div><!-- end mainNavWrap -->
+</div><!-- end navWrap -->
+
+
+
+
+
+
+
+
+<div id="bar">
+
+<div id="systembar">
+<div id="systembarinner">
+
+
+
+
+
+
+<div>
+
+</div>
+
+
+</div>
+</div>
+
+</div>
+<!-- close bar -->
+
+
+
+
+ </div>
+ <div class="wrap" id="bottom-wrap">
+ <div id="content">
+ <table width="100%" cellspacing="0">
+ <tbody><tr>
+ <td class="sidebar">
+
+
+<div id="sidenavp"><ul></ul>
+</div>
+
+ </td>
+ <td class="page-content" width="100%">
+
+
+ <h1>Permission Error</h1>
+<p>You do not have the appropriate permission set to access the requested page. You may have reached this error page in one of several ways:</p>
+ <ol>
+ <li>You are using Konqueror 3.0, which does not handle form
+ variables properly in all cases. Continuing to use Konqueror 3.0
+ will have unexpected results. If you are using Konqueror 3.0,
+ please use another browser.</li>
+ <li>Your login session has expired. For security reasons, Red Hat
+ Network terminates your login session after 15 minutes of
+ inactivity. To sign in again, click <a href="/">here</a>.
+ </li>
+ <li>You've found an error in our site. Please contact your Support representative with details of how you received this message.</li>
+ <li>Your browser does not have cookies enabled. The Red
+ Hat Network requires cookies in order to function; if you
+ have disabled them, please re-enable them to use the site.
+ </li>
+ <li>You've done something naughty. Stop it.</li>
+ </ol>
+
+
+ </td>
+ </tr>
+ </tbody></table>
+
+ <div id="footer">
+ Copyright © 2002-08 Red Hat, Inc. All rights reserved. <a href="https://www.redhat.com/legal/privacy_statement.html">Privacy statement</a> : <a href="http://www.redhat.com/legal/legal_statement.html">Legal statement</a> : <a href="http://www.redhat.com/">redhat.com</a>
+ </div>
+
+ </div> <!-- close content -->
+ </div> <!-- close wrap -->
+
+ </body></html>
diff --git a/web/html/errors/404.html b/web/html/errors/404.html
new file mode 100644
index 0000000..b7b489a
--- /dev/null
+++ b/web/html/errors/404.html
@@ -0,0 +1,123 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en"><head>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+ <title>Error</title>
+ <link rel="shortcut icon" href="/img/favicon.ico">
+ <link rel="stylesheet" href="/css/rhn-base.css" type="text/css">
+ <!--[if IE]>
+ <link rel="stylesheet" type="text/css" href="/css/rhn-iecompat.css" />
+ <![endif]-->
+ <script src="/javascript/prototype-1.js"></script>
+
+
+
+ </head><body><div class="wrap" id="top-wrap">
+
+
+
+
+
+
+<div id="utility">
+ <div id="utilityLinks">
+<p id="linx"><span class="hide"><strong>Shortcuts:</strong> </span><a href="http://kbase.redhat.com/">Knowledgebase</a> <span class="navPipe">|</span> <a href="https://scooby.rdu.redhat.com/help">Documentation</a></p>
+ </div>
+ <div id="utilityAccount">
+
+ </div>
+
+</div>
+
+<div id="header">
+ <a href="/"><img src="/img/logo.png" id="rhnLogo" height="52" width="228"></a>
+ <div id="searchbar">
+ <div id="searchbarinner">
+ <form name="form1" action="/rhn/Search.do" method="get">
+ <select name="search_type">
+
+ <option value="systems">Systems</option>
+
+ <option value="packages">Packages</option>
+ <option value="errata">Errata</option>
+ <option value="docs">Documentation</option>
+ </select><input name="search_string" maxlength="40" size="20" type="text">
+
+ <input name="submitted" value="true" type="hidden">
+ <input class="button" name="image-1" value="Search" type="submit" align="top"></form>
+ </div>
+ </div>
+</div>
+
+<div id="navWrap">
+<div id="mainNavWrap">
+
+
+<ul>
+<li id="mainFirst-active"><a href="/">Sign In</a></li>
+
+<li id="mainLast"><a href="/help/about.pxt" class="mainLastLink">About</a></li>
+</ul>
+</div><!-- end mainNavWrap -->
+</div><!-- end navWrap -->
+
+
+
+
+
+
+
+
+<div id="bar">
+
+<div id="systembar">
+<div id="systembarinner">
+
+
+
+
+
+
+<div>
+
+</div>
+
+
+</div>
+</div>
+
+</div>
+<!-- close bar -->
+
+
+
+
+ </div>
+ <div class="wrap" id="bottom-wrap">
+ <div id="content">
+ <table width="100%" cellspacing="0">
+ <tbody><tr>
+ <td class="sidebar">
+
+
+<div id="sidenavp"><ul></ul>
+</div>
+
+ </td>
+ <td class="page-content" width="100%">
+
+
+ <h1>404 Error - File Not Found</h1>
+ <p>Please report this error to your local administrator.</p>
+
+ </td>
+ </tr>
+ </tbody></table>
+
+ <div id="footer">
+ Copyright © 2002-08 Red Hat, Inc. All rights reserved. <a href="https://www.redhat.com/legal/privacy_statement.html">Privacy statement</a> : <a href="http://www.redhat.com/legal/legal_statement.html">Legal statement</a> : <a href="http://www.redhat.com/">redhat.com</a>
+ </div>
+
+ </div> <!-- close content -->
+ </div> <!-- close wrap -->
+
+ </body></html>
diff --git a/web/html/errors/413.html b/web/html/errors/413.html
new file mode 100644
index 0000000..5670692
--- /dev/null
+++ b/web/html/errors/413.html
@@ -0,0 +1,131 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en"><head>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+ <title>Error</title>
+ <link rel="shortcut icon" href="/img/favicon.ico">
+ <link rel="stylesheet" href="/css/rhn-base.css" type="text/css">
+ <!--[if IE]>
+ <link rel="stylesheet" type="text/css" href="/css/rhn-iecompat.css" />
+ <![endif]-->
+ <script src="/javascript/prototype-1.js"></script>
+
+
+
+ </head><body><div class="wrap" id="top-wrap">
+
+
+
+
+
+
+<div id="utility">
+ <div id="utilityLinks">
+<p id="linx"><span class="hide"><strong>Shortcuts:</strong> </span><a href="http://kbase.redhat.com/">Knowledgebase</a> <span class="navPipe">|</span> <a href="https://scooby.rdu.redhat.com/help">Documentation</a></p>
+ </div>
+ <div id="utilityAccount">
+
+ </div>
+
+</div>
+
+<div id="header">
+ <a href="/"><img src="/img/logo.png" id="rhnLogo" height="52" width="228"></a>
+ <div id="searchbar">
+ <div id="searchbarinner">
+ <form name="form1" action="/rhn/Search.do" method="get">
+ <select name="search_type">
+
+ <option value="systems">Systems</option>
+
+ <option value="packages">Packages</option>
+ <option value="errata">Errata</option>
+ <option value="docs">Documentation</option>
+ </select><input name="search_string" maxlength="40" size="20" type="text">
+
+ <input name="submitted" value="true" type="hidden">
+ <input class="button" name="image-1" value="Search" type="submit" align="top"></form>
+ </div>
+ </div>
+</div>
+
+<div id="navWrap">
+<div id="mainNavWrap">
+
+
+<ul>
+<li id="mainFirst-active"><a href="/">Sign In</a></li>
+
+<li id="mainLast"><a href="/help/about.pxt" class="mainLastLink">About</a></li>
+</ul>
+</div><!-- end mainNavWrap -->
+</div><!-- end navWrap -->
+
+
+
+
+
+
+
+
+<div id="bar">
+
+<div id="systembar">
+<div id="systembarinner">
+
+
+
+
+
+
+<div>
+
+</div>
+
+
+</div>
+</div>
+
+</div>
+<!-- close bar -->
+
+
+
+
+ </div>
+ <div class="wrap" id="bottom-wrap">
+ <div id="content">
+ <table width="100%" cellspacing="0">
+ <tbody><tr>
+ <td class="sidebar">
+
+
+<div id="sidenavp"><ul></ul>
+</div>
+
+ </td>
+ <td class="page-content" width="100%">
+
+ <h1>413 Error - Request Entity Too Large</h1>
+ <p>The amount of data provided in the request exceeds the capacity limit.</p>
+<p>
+ You have probably received this error because you have attempted to
+ upload a file that is larger than the maximum allowed size.
+</p>
+
+ <p>
+ Please report this error to your local administrator.
+ </p>
+
+
+ </td>
+ </tr>
+ </tbody></table>
+
+ <div id="footer">
+ Copyright © 2002-08 Red Hat, Inc. All rights reserved. <a href="https://www.redhat.com/legal/privacy_statement.html">Privacy statement</a> : <a href="http://www.redhat.com/legal/legal_statement.html">Legal statement</a> : <a href="http://www.redhat.com/">redhat.com</a>
+ </div>
+
+ </div> <!-- close content -->
+ </div> <!-- close wrap -->
+
+ </body></html>
diff --git a/web/html/errors/500.html b/web/html/errors/500.html
new file mode 100644
index 0000000..a5237a8
--- /dev/null
+++ b/web/html/errors/500.html
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en"><head>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+ <title>Error</title>
+ <link rel="shortcut icon" href="/img/favicon.ico">
+ <link rel="stylesheet" href="/css/rhn-base.css" type="text/css">
+ <!--[if IE]>
+ <link rel="stylesheet" type="text/css" href="/css/rhn-iecompat.css" />
+ <![endif]-->
+ <script src="/javascript/prototype-1.js"></script>
+
+
+
+ </head><body><div class="wrap" id="top-wrap">
+
+
+
+
+
+
+<div id="utility">
+ <div id="utilityLinks">
+<p id="linx"><span class="hide"><strong>Shortcuts:</strong> </span><a href="http://kbase.redhat.com/">Knowledgebase</a> <span class="navPipe">|</span> <a href="https://scooby.rdu.redhat.com/help">Documentation</a></p>
+ </div>
+ <div id="utilityAccount">
+
+ </div>
+
+</div>
+
+<div id="header">
+ <a href="/"><img src="/img/logo.png" id="rhnLogo" height="52" width="228"></a>
+ <div id="searchbar">
+ <div id="searchbarinner">
+ <form name="form1" action="/rhn/Search.do" method="get">
+ <select name="search_type">
+
+ <option value="systems">Systems</option>
+
+ <option value="packages">Packages</option>
+ <option value="errata">Errata</option>
+ <option value="docs">Documentation</option>
+ </select><input name="search_string" maxlength="40" size="20" type="text">
+
+ <input name="submitted" value="true" type="hidden">
+ <input class="button" name="image-1" value="Search" type="submit" align="top"></form>
+ </div>
+ </div>
+</div>
+
+<div id="navWrap">
+<div id="mainNavWrap">
+
+
+<ul>
+<li id="mainFirst-active"><a href="/">Sign In</a></li>
+
+<li id="mainLast"><a href="/help/about.pxt" class="mainLastLink">About</a></li>
+</ul>
+</div><!-- end mainNavWrap -->
+</div><!-- end navWrap -->
+
+
+
+
+
+
+
+
+<div id="bar">
+
+<div id="systembar">
+<div id="systembarinner">
+
+
+
+
+
+
+<div>
+
+</div>
+
+
+</div>
+</div>
+
+</div>
+<!-- close bar -->
+
+
+
+
+ </div>
+ <div class="wrap" id="bottom-wrap">
+ <div id="content">
+ <table width="100%" cellspacing="0">
+ <tbody><tr>
+ <td class="sidebar">
+
+
+<div id="sidenavp"><ul></ul>
+</div>
+
+ </td>
+ <td class="page-content" width="100%">
+
+
+ <h1>500 Error - Internal Server Error</h1>
+<p>You may have reached this page in one of the following ways:</p>
+ <ol>
+ <li>You are using an outdated version of Konqueror 3.0, which
+ may not handle form variables properly in all cases. Continuing to
+ use this outdated version of Konqueror may have unexpected results.
+ Please up2date to the latest version of Konqueror (3.03 or
+ greater), or if this is not possible, please use another
+ browser.</li>
+ <li>You've found an error in the site. Please report this error
+ to your local administrator with details of how you received this
+ message.</li>
+ </ol>
+
+
+ </td>
+ </tr>
+ </tbody></table>
+
+ <div id="footer">
+ Copyright © 2002-08 Red Hat, Inc. All rights reserved. <a href="https://www.redhat.com/legal/privacy_statement.html">Privacy statement</a> : <a href="http://www.redhat.com/legal/legal_statement.html">Legal statement</a> : <a href="http://www.redhat.com/">redhat.com</a>
+ </div>
+
+ </div> <!-- close content -->
+ </div> <!-- close wrap -->
+
+ </body></html>
diff --git a/web/html/errors/error.html b/web/html/errors/error.html
deleted file mode 100644
index 265323c..0000000
--- a/web/html/errors/error.html
+++ /dev/null
@@ -1,134 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en"><head>
-<meta http-equiv="content-type" content="text/html; charset=UTF-8">
- <title>Error</title>
- <link rel="shortcut icon" href="/img/favicon.ico">
- <link rel="stylesheet" href="/css/rhn-base.css" type="text/css">
- <!--[if IE]>
- <link rel="stylesheet" type="text/css" href="/css/rhn-iecompat.css" />
- <![endif]-->
- <script src="/javascript/prototype-1.js"></script>
-
-
-
- </head><body><div class="wrap" id="top-wrap">
-
-
-
-
-
-
-<div id="utility">
- <div id="utilityLinks">
-<p id="linx"><span class="hide"><strong>Shortcuts:</strong> </span><a href="http://kbase.redhat.com/">Knowledgebase</a> <span class="navPipe">|</span> <a href="https://scooby.rdu.redhat.com/help">Documentation</a></p>
- </div>
- <div id="utilityAccount">
-
- </div>
-
-</div>
-
-<div id="header">
- <a href="/"><img src="/img/logo.png" id="rhnLogo" height="52" width="228"></a>
- <div id="searchbar">
- <div id="searchbarinner">
- <form name="form1" action="/rhn/Search.do" method="get">
- <select name="search_type">
-
- <option value="systems">Systems</option>
-
- <option value="packages">Packages</option>
- <option value="errata">Errata</option>
- <option value="docs">Documentation</option>
- </select><input name="search_string" maxlength="40" size="20" type="text">
-
- <input name="submitted" value="true" type="hidden">
- <input class="button" name="image-1" value="Search" type="submit" align="top"></form>
- </div>
- </div>
-</div>
-
-<div id="navWrap">
-<div id="mainNavWrap">
-
-
-<ul>
-<li id="mainFirst-active"><a href="/">Sign In</a></li>
-
-<li id="mainLast"><a href="/help/about.pxt" class="mainLastLink">About</a></li>
-</ul>
-</div><!-- end mainNavWrap -->
-</div><!-- end navWrap -->
-
-
-
-
-
-
-
-
-<div id="bar">
-
-<div id="systembar">
-<div id="systembarinner">
-
-
-
-
-
-
-<div>
-
-</div>
-
-
-</div>
-</div>
-
-</div>
-<!-- close bar -->
-
-
-
-
- </div>
- <div class="wrap" id="bottom-wrap">
- <div id="content">
- <table width="100%" cellspacing="0">
- <tbody><tr>
- <td class="sidebar">
-
-
-<div id="sidenavp"><ul></ul>
-</div>
-
- </td>
- <td class="page-content" width="100%">
-
-
- <h1>Page Error</h1>
- <p>Error requesting page. Some possible causes of this problem:</p>
-
- <ol>
- <li>Page no longer exists</li>
- <li>Page permission issue</li>
- <li>You are doing something naughty</li>
- </ol>
-
- <p>Cookie support required. Note: cookies are <strong>not</strong> used
- for marketing purposes; we use them strictly to keep track
- of your login state and other state data absolutely
- necessary for the proper functioning of your account.</p>
-
- </td>
- </tr>
- </tbody></table>
-
- <div id="footer">
- Copyright © 2002-08 Red Hat, Inc. All rights reserved. <a href="https://www.redhat.com/legal/privacy_statement.html">Privacy statement</a> : <a href="http://www.redhat.com/legal/legal_statement.html">Legal statement</a> : <a href="http://www.redhat.com/">redhat.com</a>
- </div>
-
- </div> <!-- close content -->
- </div> <!-- close wrap -->
-
- </body></html>
14 years, 11 months
Branch 'VADER' - java/code web/html
by Justin Sherrill
java/code/src/com/redhat/rhn/common/db/datasource/xml/Errata_queries.xml | 53 +++
java/code/src/com/redhat/rhn/domain/channel/Channel.java | 17 +
java/code/src/com/redhat/rhn/domain/errata/ErrataFactory.java | 58 +--
java/code/src/com/redhat/rhn/domain/errata/test/ErrataFactoryTest.java | 10
java/code/src/com/redhat/rhn/frontend/action/channel/manage/SyncErrataAction.java | 97 ++++++
java/code/src/com/redhat/rhn/frontend/action/channel/manage/SyncErrataPackagesAction.java | 148 ++++++++++
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml | 25 +
java/code/src/com/redhat/rhn/frontend/strings/nav/StringResource_en_US.xml | 8
java/code/src/com/redhat/rhn/frontend/taglibs/list/helper/ListSetHelper.java | 33 ++
java/code/src/com/redhat/rhn/manager/channel/ChannelEditor.java | 37 --
java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java | 91 ++++++
java/code/src/com/redhat/rhn/manager/channel/test/ChannelManagerTest.java | 62 ++++
java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java | 16 +
java/code/src/com/redhat/rhn/manager/rhnset/RhnSetDecl.java | 7
java/code/webapp/WEB-INF/nav/manage_channel.xml | 4
java/code/webapp/WEB-INF/pages/channel/manage/erratapackagesync.jsp | 80 +++++
java/code/webapp/WEB-INF/pages/channel/manage/erratasync.jsp | 110 +++++++
java/code/webapp/WEB-INF/struts-config.xml | 21 +
web/html/nav/manage_channel.xml | 4
19 files changed, 816 insertions(+), 65 deletions(-)
New commits:
commit f7d6ead5ffe7ea99e446122c9337c6f14b4eb55e
Author: Justin Sherrill <jsherril(a)redhat.com>
Date: Tue Jun 2 14:35:58 2009 -0400
435043 - adding errata sync page for syncing out of date errata (that have been updated by red hat)
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Errata_queries.xml b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Errata_queries.xml
index 78a3e84..6ad0a82 100644
--- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Errata_queries.xml
+++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Errata_queries.xml
@@ -1185,4 +1185,57 @@ SELECT E.id, E.advisory, E.synopsis
</query>
</mode>
+
+
+<mode name="list_errata_needing_sync" class="com.redhat.rhn.frontend.dto.ErrataOverview">
+ <query params="cid, ocid">
+ select distinct E.id, E.advisory_name, E.advisory, E.advisory_type, E.synopsis as advisory_synopsis, E.update_date
+ from rhnChannelErrata CE inner join
+ rhnErrataPackage EP on CE.errata_id = EP.errata_id inner join
+ rhnErrataCloned EC on EC.original_id = CE.errata_id inner join
+ rhnChannelErrata CE2 on CE2.errata_id = EC.id inner join
+ rhnErrata E on E.id = EC.id
+ where CE.channel_id = :ocid --original
+ and CE2.channel_id = :cid --clone
+ and Ep.package_id in (select CP.package_id
+ from rhnChannelPackage CP
+ where
+ CP.channel_id = :ocid --original
+ and CP.package_id not in (select CP2.package_id
+ from rhnChannelPackage CP2
+ where CP2.channel_id = :cid)) --clone
+ </query>
+</mode>
+
+<mode name="list_packages_needing_sync_from_set" class="com.redhat.rhn.frontend.dto.PackageOverview">
+ <query params="set_label, ocid, cid">
+ select P.id id, PN.name || '-' || PE.version
+ || '-' || PE.release || (CASE WHEN PE.epoch IS NULL THEN '' ELSE ':' || PE.epoch END)
+ || '-' || PA.label nvrea,
+ P.summary
+ from rhnPackage P inner join
+ rhnPackageArch PA on P.package_arch_id = PA.id inner join
+ rhnPackageEVR PE on P.evr_id = PE.id inner join
+ rhnPackageName PN on PN.id = P.name_id inner join
+ rhnErrataPackage EP on EP.package_id = P.id inner join
+ rhnErrataCloned EC on EC.original_id = EP.errata_id inner join
+ rhnChannelPackage CP on CP.package_id = P.id
+ where CP.channel_id = :ocid
+ and EC.id in ( select element
+ from rhnSet S
+ where S.label = :set_label)
+ and P.id not in ( select CP2.package_id
+ from rhnChannelPackage CP2
+ where CP2.channel_id = :cid)
+ </query>
+</mode>
+
+<mode name="list_channel_errata_ids">
+ <query params="cid">
+ select CE.errata_id as id
+ from rhnChannelErrata CE
+ where CE.channel_id = :cid
+ </query>
+</mode>
+
</datasource_modes>
diff --git a/java/code/src/com/redhat/rhn/domain/channel/Channel.java b/java/code/src/com/redhat/rhn/domain/channel/Channel.java
index 07ab885..cef2312 100644
--- a/java/code/src/com/redhat/rhn/domain/channel/Channel.java
+++ b/java/code/src/com/redhat/rhn/domain/channel/Channel.java
@@ -387,6 +387,7 @@ public class Channel extends BaseDomainHelper implements Comparable {
/**
* Adds a single package to the channel
* @param packageIn The package to add
+ * @deprecated
*/
public void addPackage(Package packageIn) {
if (!getChannelArch().isCompatible(packageIn.getPackageArch())) {
@@ -397,6 +398,22 @@ public class Channel extends BaseDomainHelper implements Comparable {
}
/**
+ * Adds a single package to the channel
+ * @param packageIn The package to add
+ * @param user the user doign the add
+ */
+ public void addPackage(Package packageIn, User user) {
+ if (!getChannelArch().isCompatible(packageIn.getPackageArch())) {
+ throw new IncompatibleArchException(packageIn.getPackageArch(),
+ getChannelArch());
+ }
+ List<Long> list = new ArrayList<Long>();
+ list.add(packageIn.getId());
+ ChannelManager.addPackages(this, list, user);
+ }
+
+
+ /**
* Removes a single package from the channel
* @param user the user doing the remove
* @param packageIn The package to remove
diff --git a/java/code/src/com/redhat/rhn/domain/errata/ErrataFactory.java b/java/code/src/com/redhat/rhn/domain/errata/ErrataFactory.java
index 0d6733a..d87966a 100644
--- a/java/code/src/com/redhat/rhn/domain/errata/ErrataFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/errata/ErrataFactory.java
@@ -204,7 +204,7 @@ public class ErrataFactory extends HibernateFactory {
published = ErrataFactory.createPublishedErrata();
}
- copyDetails(published, unpublished);
+ copyDetails(published, unpublished, false);
//Save the published Errata
save(published);
@@ -353,7 +353,7 @@ public class ErrataFactory extends HibernateFactory {
UnpublishedClonedErrata clone = new UnpublishedClonedErrata();
- copyDetails(clone, e);
+ copyDetails(clone, e, true);
clone.setAdvisoryName(clonedAdvisoryName);
clone.setAdvisory(clonedAdvisory);
@@ -368,11 +368,19 @@ public class ErrataFactory extends HibernateFactory {
* Helper method to copy the details for.
* @param copy The object to copy into.
* @param original The object to copy from.
+ * @param clone set to true if this is a cloned errata, and thus
+ * things like org or advisory name shouldn't be set
*/
- private static void copyDetails(Errata copy, Errata original) {
+ private static void copyDetails(Errata copy, Errata original, boolean clone) {
//Set the easy things first ;)
- copy.setAdvisory(original.getAdvisory());
+
+ if (!clone) {
+ copy.setAdvisory(original.getAdvisory());
+ copy.setAdvisoryName(original.getAdvisoryName());
+ copy.setOrg(original.getOrg());
+ }
+
copy.setAdvisoryType(original.getAdvisoryType());
copy.setProduct(original.getProduct());
copy.setDescription(original.getDescription());
@@ -383,11 +391,10 @@ public class ErrataFactory extends HibernateFactory {
copy.setUpdateDate(original.getUpdateDate());
copy.setNotes(original.getNotes());
copy.setRefersTo(original.getRefersTo());
- copy.setAdvisoryName(original.getAdvisoryName());
copy.setAdvisoryRel(original.getAdvisoryRel());
copy.setLocallyModified(original.getLocallyModified());
copy.setLastModified(original.getLastModified());
- copy.setOrg(original.getOrg());
+
/*
* Copy the packages
@@ -415,39 +422,16 @@ public class ErrataFactory extends HibernateFactory {
Iterator bugsItr = IteratorUtils.getIterator(original.getBugs());
while (bugsItr.hasNext()) {
Bug bugIn = (Bug) bugsItr.next();
- Bug clone;
+ Bug cloneB;
if (copy.isPublished()) { //we want published bugs
- clone = ErrataManager.createNewPublishedBug(bugIn.getId(),
+ cloneB = ErrataManager.createNewPublishedBug(bugIn.getId(),
bugIn.getSummary());
}
else { //we want unpublished bugs
- clone = ErrataManager.createNewUnpublishedBug(bugIn.getId(),
+ cloneB = ErrataManager.createNewUnpublishedBug(bugIn.getId(),
bugIn.getSummary());
}
- copy.addBug(clone);
- }
-
- /*
- * Copy the files using the same idea as the above bug copying
- */
- Iterator filesItr = IteratorUtils.getIterator(original.getFiles());
- while (filesItr.hasNext()) {
- ErrataFile fileIn = (ErrataFile) filesItr.next();
- ErrataFile clone;
- Set packages = new HashSet(fileIn.getPackages());
- if (copy.isPublished()) {
- clone = ErrataManager.createNewPublishedErrataFile(fileIn.getFileType(),
- fileIn.getChecksum(),
- fileIn.getFileName(),
- packages);
- }
- else {
- clone = ErrataManager.createNewUnpublishedErrataFile(fileIn.getFileType(),
- fileIn.getChecksum(),
- fileIn.getFileName(),
- packages);
- }
- copy.addFile(clone);
+ copy.addBug(cloneB);
}
}
@@ -1048,7 +1032,13 @@ public class ErrataFactory extends HibernateFactory {
}
-
+ /**
+ * Sync all the errata details from one errata to another
+ * @param cloned the cloned errata that needs syncing
+ */
+ public static void syncErrataDetails(PublishedClonedErrata cloned) {
+ copyDetails(cloned, cloned.getOriginal(), true);
+ }
}
diff --git a/java/code/src/com/redhat/rhn/domain/errata/test/ErrataFactoryTest.java b/java/code/src/com/redhat/rhn/domain/errata/test/ErrataFactoryTest.java
index 13e2fda..42988a6 100644
--- a/java/code/src/com/redhat/rhn/domain/errata/test/ErrataFactoryTest.java
+++ b/java/code/src/com/redhat/rhn/domain/errata/test/ErrataFactoryTest.java
@@ -270,7 +270,9 @@ public class ErrataFactoryTest extends BaseTestCaseWithUser {
private static void fillOutErrata(Errata e, Long orgId) throws Exception {
String name = "JAVA Test " + TestUtils.randomString();
- e.setOrg(OrgFactory.lookupById(orgId));
+ if (orgId != null) {
+ e.setOrg(OrgFactory.lookupById(orgId));
+ }
e.setAdvisory(name);
e.setAdvisoryType(ErrataFactory.ERRATA_TYPE_BUG);
e.setProduct("Red Hat Linux");
@@ -334,11 +336,7 @@ public class ErrataFactoryTest extends BaseTestCaseWithUser {
assertEquals(published.getLocallyModified(), clone.getLocallyModified());
assertEquals(clonedAdvisoryName, clone.getAdvisoryName());
assertEquals(clonedAdvisory, clone.getAdvisory());
-
- assertEquals(1, clone.getFiles().size());
- ErrataFile ef = (ErrataFile)clone.getFiles().iterator().next();
- assertEquals(1, ef.getPackages().size());
-
+
/* Create a 2nd clone and make sure that the cloning function
* does not create a clone whose name collides with the already
* existing clone
diff --git a/java/code/src/com/redhat/rhn/frontend/action/channel/manage/SyncErrataAction.java b/java/code/src/com/redhat/rhn/frontend/action/channel/manage/SyncErrataAction.java
new file mode 100644
index 0000000..88410bd
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/channel/manage/SyncErrataAction.java
@@ -0,0 +1,97 @@
+/**
+ * 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.channel.manage;
+
+import com.redhat.rhn.domain.channel.Channel;
+import com.redhat.rhn.domain.channel.InvalidChannelRoleException;
+import com.redhat.rhn.domain.user.User;
+import com.redhat.rhn.frontend.struts.RequestContext;
+import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.frontend.taglibs.list.helper.ListRhnSetHelper;
+import com.redhat.rhn.frontend.taglibs.list.helper.Listable;
+import com.redhat.rhn.manager.channel.ChannelManager;
+import com.redhat.rhn.manager.rhnset.RhnSetDecl;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * SyncErrataAction
+ * @version $Rev$
+ */
+public class SyncErrataAction extends RhnAction implements Listable {
+
+ /**
+ *
+ * {@inheritDoc}
+ */
+ public ActionForward execute(ActionMapping mapping,
+ ActionForm formIn,
+ HttpServletRequest request,
+ HttpServletResponse response) {
+
+ RequestContext rc = new RequestContext(request);
+ User user = rc.getLoggedInUser();
+
+ Channel chan = ChannelManager.lookupByIdAndUser(
+ rc.getRequiredParam(RequestContext.CID), user);
+
+ try {
+ ChannelManager.verifyChannelAdmin(user, chan.getId());
+ }
+ catch (InvalidChannelRoleException e) {
+ addMessage(request, e.getMessage());
+ return mapping.findForward("default");
+ }
+
+ ListRhnSetHelper helper = new ListRhnSetHelper(this, request,
+ RhnSetDecl.ERRATA_TO_SYNC.createCustom(chan.getId()));
+
+ helper.execute();
+ if (helper.isDispatched()) {
+ Map params = new HashMap();
+ params.put(RequestContext.CID, chan.getId());
+ return getStrutsDelegate().forwardParams(mapping.findForward("submit"),
+ params);
+ }
+
+ request.setAttribute("channel_name", chan.getName());
+ request.setAttribute(RequestContext.CID, chan.getId());
+ return mapping.findForward("default");
+ }
+
+
+ /**
+ *
+ * {@inheritDoc}
+ */
+ public List getResult(RequestContext context) {
+ User user = context.getLoggedInUser();
+ Channel chan = ChannelManager.lookupByIdAndUser(
+ context.getRequiredParam(RequestContext.CID), user);
+
+ return ChannelManager.listErrataNeedingResync(chan, user);
+ }
+
+
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/channel/manage/SyncErrataPackagesAction.java b/java/code/src/com/redhat/rhn/frontend/action/channel/manage/SyncErrataPackagesAction.java
new file mode 100644
index 0000000..88b4234
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/channel/manage/SyncErrataPackagesAction.java
@@ -0,0 +1,148 @@
+/**
+ * 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.channel.manage;
+
+import com.redhat.rhn.domain.channel.Channel;
+import com.redhat.rhn.domain.channel.InvalidChannelRoleException;
+import com.redhat.rhn.domain.errata.Errata;
+import com.redhat.rhn.domain.errata.ErrataFactory;
+import com.redhat.rhn.domain.errata.impl.PublishedClonedErrata;
+import com.redhat.rhn.domain.user.User;
+import com.redhat.rhn.frontend.struts.RequestContext;
+import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.frontend.taglibs.list.helper.ListRhnSetHelper;
+import com.redhat.rhn.frontend.taglibs.list.helper.Listable;
+import com.redhat.rhn.manager.channel.ChannelEditor;
+import com.redhat.rhn.manager.channel.ChannelManager;
+import com.redhat.rhn.manager.errata.ErrataManager;
+import com.redhat.rhn.manager.rhnset.RhnSetDecl;
+
+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.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * SyncErrataAction
+ * @version $Rev$
+ */
+public class SyncErrataPackagesAction extends RhnAction implements Listable {
+
+
+ private Logger log = Logger.getLogger(SyncErrataPackagesAction.class);
+
+ /**
+ *
+ * {@inheritDoc}
+ */
+ public ActionForward execute(ActionMapping mapping,
+ ActionForm formIn,
+ HttpServletRequest request,
+ HttpServletResponse response) {
+
+ RequestContext rc = new RequestContext(request);
+ User user = rc.getLoggedInUser();
+
+ Channel chan = ChannelManager.lookupByIdAndUser(
+ rc.getRequiredParam(RequestContext.CID), user);
+
+ try {
+ ChannelManager.verifyChannelAdmin(user, chan.getId());
+ }
+ catch (InvalidChannelRoleException e) {
+ addMessage(request, e.getMessage());
+ return mapping.findForward("default");
+ }
+
+ RhnSetDecl pkgDecl = RhnSetDecl.ERRATA_PACKAGES_TO_SYNC.createCustom(chan.getId());
+
+ ListRhnSetHelper helper = new ListRhnSetHelper(this, request,
+ pkgDecl);
+
+ helper.setPreSelectAll(true);
+ helper.execute();
+
+ if (helper.isDispatched()) {
+
+ Set eSet = RhnSetDecl.ERRATA_TO_SYNC.createCustom(
+ chan.getId()).get(user).getElementValues();
+ Set pSet = pkgDecl.get(user).getElementValues();
+ syncErrata(eSet, pSet, chan, user);
+
+
+ ActionMessages msg = new ActionMessages();
+ String[] msgParams = {eSet.size() + "", pSet.size() + "", chan.getName()};
+ msg.add(ActionMessages.GLOBAL_MESSAGE,
+ new ActionMessage("channel.jsp.errata.sync.complete",
+ msgParams));
+ getStrutsDelegate().saveMessages(rc.getRequest(), msg);
+
+
+ Map params = new HashMap();
+ params.put(RequestContext.CID, chan.getId());
+ return getStrutsDelegate().forwardParams(mapping.findForward("submit"),
+ params);
+ }
+
+ request.setAttribute("channel_name", chan.getName());
+ request.setAttribute(RequestContext.CID, chan.getId());
+ return mapping.findForward("default");
+ }
+
+
+ /**
+ *
+ * {@inheritDoc}
+ */
+ public List getResult(RequestContext context) {
+ User user = context.getLoggedInUser();
+ Channel chan = ChannelManager.lookupByIdAndUser(
+ context.getRequiredParam(RequestContext.CID), user);
+ String label = RhnSetDecl.ERRATA_TO_SYNC.createCustom(
+ chan.getId()).getLabel();
+
+ return ChannelManager.listErrataPackagesForResync(chan, user, label);
+ }
+
+
+ private void syncErrata(Collection<Long> eids, Collection<Long> pids,
+ Channel chan, User user) {
+
+ ChannelEditor.getInstance().addPackages(user, chan, pids);
+ for (Long eid : eids) {
+ Errata e = ErrataManager.lookupErrata(eid, user);
+ if (e.isPublished() && e.isCloned()) {
+ ErrataFactory.syncErrataDetails((PublishedClonedErrata) e);
+ }
+ else {
+ log.fatal("Tried to sync errata with id " + eid +
+ " But it was not published or was not cloned");
+ }
+ }
+
+ }
+
+}
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 2470475..a5a3751 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
@@ -21302,6 +21302,31 @@ given channel.</source>
<trans-unit id="actions.jsp.pickedup">
<source>Picked Up</source>
</trans-unit>
+ <trans-unit id="header.jsp.errata.sync">
+ <source>Sync Errata</source>
+ </trans-unit>
+ <trans-unit id="channel.jsp.errata.sync.message">
+ <source>The following errata were cloned from errata that have since been updated.
+ This page will allow you to syncronize your cloned errata to that of its original.</source>
+ </trans-unit>
+ <trans-unit id="channel.jsp.errata.sync.note">
+ <source>Packages that were omitted as part of the origianl cloning process will be included here.</source>
+ </trans-unit>
+ <trans-unit id="channel.jsp.errata.sync.listempty">
+ <source>No out of date errata were found.</source>
+ </trans-unit>
+ <trans-unit id="header.jsp.errata.sync.packagepush">
+ <source>Packages to Push</source>
+ </trans-unit>
+ <trans-unit id="channel.jsp.errata.sync.packages.message">
+ <source>The following packages will be pushed to this channel as part of the errata sync process. Please review this list and unselect any unwanted packages.</source>
+ </trans-unit>
+ <trans-unit id="channel.jsp.errata.sync.complete">
+ <source>Sucessfully syncronized {0} errata and pushed {1} packages to channel {2}.</source>
+ </trans-unit>
+
+
+
</body>
</file>
</xliff>
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 93f3b37..0722a3c 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
@@ -1006,6 +1006,13 @@ http://www.oasis-open.org/committees/xliff/documents/xliff-core-1.1.xsd"
</context-group>
</trans-unit>
+ <trans-unit id="Sync">
+ <source>Sync</source>
+ <context-group name="ctx">
+ <context context-type="sourcefile">/rhn/channels/manage/errata/SyncErrata.do</context>
+ </context-group>
+ </trans-unit>
+
<trans-unit id="Organizations">
<source>Organizations</source>
<context-group name="ctx">
@@ -1013,6 +1020,7 @@ http://www.oasis-open.org/committees/xliff/documents/xliff-core-1.1.xsd"
</context-group>
</trans-unit>
+
<trans-unit id="Trusts">
<source>Trusts</source>
<context-group name="ctx">
diff --git a/java/code/src/com/redhat/rhn/frontend/taglibs/list/helper/ListSetHelper.java b/java/code/src/com/redhat/rhn/frontend/taglibs/list/helper/ListSetHelper.java
index d6a8e8f..ed7d337 100644
--- a/java/code/src/com/redhat/rhn/frontend/taglibs/list/helper/ListSetHelper.java
+++ b/java/code/src/com/redhat/rhn/frontend/taglibs/list/helper/ListSetHelper.java
@@ -15,6 +15,7 @@
package com.redhat.rhn.frontend.taglibs.list.helper;
+import com.redhat.rhn.frontend.dto.BaseDto;
import com.redhat.rhn.frontend.struts.RequestContext;
import com.redhat.rhn.frontend.struts.RhnHelper;
import com.redhat.rhn.frontend.struts.Selectable;
@@ -24,6 +25,7 @@ import com.redhat.rhn.frontend.taglibs.list.TagHelper;
import java.util.Collection;
import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -86,6 +88,7 @@ abstract class ListSetHelper extends ListHelper {
private boolean dispatched = false;
private boolean ignoreEmptySelection = false;
private boolean willClearSet = true;
+ private boolean preSelectAll = false;
private Set initSet = Collections.EMPTY_SET;
/**
@@ -138,8 +141,8 @@ abstract class ListSetHelper extends ListHelper {
if (!context.isSubmitted() && alphaBarPressed == null && willClearSet) {
clear();
add(getPreSelected());
- }
-
+ }
+
if (request.getParameter(RequestContext.DISPATCH) != null) {
// if its one of the Dispatch actions handle it..
update();
@@ -161,6 +164,16 @@ abstract class ListSetHelper extends ListHelper {
List dataSet = getDataSet();
+
+ if (!context.isSubmitted() && alphaBarPressed == null && preSelectAll) {
+ Set selSet = new HashSet();
+ for (BaseDto bdto : (List<BaseDto>) dataSet) {
+ selSet.add(bdto.getId());
+ }
+ add(selSet);
+ }
+
+
// if its a list action update the set and the selections
if (ListTagHelper.getListAction(getListName(), request) != null) {
execute(dataSet);
@@ -290,4 +303,20 @@ abstract class ListSetHelper extends ListHelper {
this.willClearSet = willClearSetIn;
}
+
+ /**
+ * @return Returns the preSelectAll.
+ */
+ public boolean isPreSelectAll() {
+ return preSelectAll;
+ }
+
+
+ /**
+ * @param preSelectAllIn The preSelectAll to set.
+ */
+ public void setPreSelectAll(boolean preSelectAllIn) {
+ this.preSelectAll = preSelectAllIn;
+ }
+
}
diff --git a/java/code/src/com/redhat/rhn/manager/channel/ChannelEditor.java b/java/code/src/com/redhat/rhn/manager/channel/ChannelEditor.java
index 5b00f26..651ee8a 100644
--- a/java/code/src/com/redhat/rhn/manager/channel/ChannelEditor.java
+++ b/java/code/src/com/redhat/rhn/manager/channel/ChannelEditor.java
@@ -16,16 +16,15 @@ package com.redhat.rhn.manager.channel;
import com.redhat.rhn.common.db.datasource.CallableMode;
import com.redhat.rhn.common.db.datasource.ModeFactory;
-import com.redhat.rhn.common.hibernate.LookupException;
import com.redhat.rhn.common.localization.LocalizationService;
import com.redhat.rhn.common.security.PermissionException;
import com.redhat.rhn.domain.channel.Channel;
import com.redhat.rhn.domain.channel.ChannelFactory;
-import com.redhat.rhn.domain.rhnpackage.Package;
import com.redhat.rhn.domain.user.User;
-import com.redhat.rhn.manager.rhnpackage.PackageManager;
import com.redhat.rhn.manager.user.UserManager;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -57,7 +56,7 @@ public class ChannelEditor {
* @param channel The channel to add the packages to
* @param packageIds A list containing the ids of packages to add.
*/
- public void addPackages(User user, Channel channel, List packageIds) {
+ public void addPackages(User user, Channel channel, Collection packageIds) {
changePackages(user, channel, packageIds, true);
}
@@ -67,7 +66,7 @@ public class ChannelEditor {
* @param channel The channel to remove the packages from
* @param packageIds A list containing the ids of packages to remove.
*/
- public void removePackages(User user, Channel channel, List packageIds) {
+ public void removePackages(User user, Channel channel, Collection packageIds) {
changePackages(user, channel, packageIds, false);
}
@@ -76,7 +75,8 @@ public class ChannelEditor {
* @param add If true, we are adding the list of packages to the channel. Otherwise,
* remove the list of packages from the channel.
*/
- private void changePackages(User user, Channel channel, List packageIds, boolean add) {
+ private void changePackages(User user, Channel channel,
+ Collection packageIds, boolean add) {
//Make sure the person adding packages is a channel admin
if (!UserManager.verifyChannelAdmin(user, channel)) {
StringBuffer msg = new StringBuffer("User: ");
@@ -112,27 +112,18 @@ public class ChannelEditor {
}
}
+ List<Long> existingPids = ChannelFactory.getPackageIds(channel.getId());
+
//Loop through packages and add to channel.
for (Iterator itr = packageIds.iterator(); itr.hasNext();) {
Long pid = convertObjectToLong(itr.next());
- Package pkg = PackageManager.lookupByIdAndUser(pid, user);
- if (pkg != null) {
- if (add) {
- channel.addPackage(pkg);
- }
- else {
- channel.removePackage(pkg, user);
- }
+ List list = new ArrayList();
+ list.add(pid);
+ if (add && !existingPids.contains(pid)) {
+ ChannelManager.addPackages(channel, list, user);
}
- else {
- //throw a lookup exception
- LocalizationService ls = LocalizationService.getInstance();
- String msg = "The package: " + pid + " could not be found.";
- LookupException e = new LookupException(msg);
- e.setLocalizedTitle(ls.getMessage("lookup.jsp.title.package"));
- e.setLocalizedReason1(ls.getMessage("lookup.jsp.reason1.package"));
- e.setLocalizedReason2(ls.getMessage("lookup.jsp.reason2.package"));
- throw e;
+ else if (!add) {
+ ChannelManager.removePackages(channel, list, user);
}
}
diff --git a/java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java b/java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java
index f84a434..41433a2 100644
--- a/java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java
+++ b/java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java
@@ -32,6 +32,7 @@ import com.redhat.rhn.domain.channel.ChannelFactory;
import com.redhat.rhn.domain.channel.ChannelFamily;
import com.redhat.rhn.domain.channel.ChannelFamilyFactory;
import com.redhat.rhn.domain.channel.ChannelVersion;
+import com.redhat.rhn.domain.channel.ClonedChannel;
import com.redhat.rhn.domain.channel.DistChannelMap;
import com.redhat.rhn.domain.channel.InvalidChannelRoleException;
import com.redhat.rhn.domain.channel.ProductName;
@@ -2506,6 +2507,42 @@ public class ChannelManager extends BaseManager {
}
/**
+ * Remove packages from a channel very quickly
+ * @param chan the channel
+ * @param packageIds list of package ids
+ * @param user the user doing the removing
+ */
+ public static void addPackages(Channel chan, List<Long> packageIds, User user) {
+
+ if (!UserManager.verifyChannelAdmin(user, chan)) {
+ StringBuffer msg = new StringBuffer("User: ");
+ msg.append(user.getLogin());
+ msg.append(" does not have channel admin access to channel: ");
+ msg.append(chan.getLabel());
+
+ LocalizationService ls = LocalizationService.getInstance();
+ PermissionException pex = new PermissionException(msg.toString());
+ pex.setLocalizedTitle(ls.getMessage("permission.jsp.title.channel"));
+ pex.setLocalizedSummary(ls.getMessage("permission.jsp.summary.channel"));
+ throw pex;
+ }
+
+ Map params = new HashMap();
+ params.put("cid", chan.getId());
+
+ WriteMode m = ModeFactory.getWriteMode("Channel_queries", "add_channel_package");
+ for (Long pid : packageIds) {
+ params.put("pid", pid);
+ m.executeUpdate(params);
+ }
+
+
+ HibernateFactory.getSession().refresh(chan);
+
+ }
+
+
+ /**
* Remove a set of erratas from a channel
* and remove associated packages
* @param chan The channel to remove from
@@ -2553,4 +2590,58 @@ public class ChannelManager extends BaseManager {
return (List<PackageDto>) mode.execute(params);
}
+ /**
+ * List errata that is within a channel that needs to be resynced
+ * This is determined by the packages in the channel
+ *
+ * @param c the channel
+ * @param user the user
+ * @return list of errataOverview objects that need to be resynced
+ */
+ public static List listErrataNeedingResync(Channel c, User user) {
+ if (!user.hasRole(RoleFactory.CHANNEL_ADMIN)) {
+ throw new PermissionException(RoleFactory.CHANNEL_ADMIN);
+ }
+
+ if (c.isCloned()) {
+ Map params = new HashMap();
+ params.put("cid", c.getId());
+ ClonedChannel cc = (ClonedChannel) c;
+ params.put("ocid", cc.getOriginal().getId());
+ SelectMode m = ModeFactory.getMode("Errata_queries",
+ "list_errata_needing_sync");
+ return m.execute(params);
+ }
+ else {
+ return Collections.EMPTY_LIST;
+ }
+ }
+
+ /**
+ * List errata packages that need to be resynced
+ * @param c the channel to look for packages in
+ * @param user the user doing it
+ * @param setLabel the set of errata to base the package off of
+ * @return the list of PackageOverview objects
+ */
+ public static List listErrataPackagesForResync(Channel c, User user, String setLabel) {
+ if (!user.hasRole(RoleFactory.CHANNEL_ADMIN)) {
+ throw new PermissionException(RoleFactory.CHANNEL_ADMIN);
+ }
+
+ if (c.isCloned()) {
+ Map params = new HashMap();
+ params.put("cid", c.getId());
+ params.put("set_label", setLabel);
+ ClonedChannel cc = (ClonedChannel) c;
+ params.put("ocid", cc.getOriginal().getId());
+ SelectMode m = ModeFactory.getMode("Errata_queries",
+ "list_packages_needing_sync_from_set");
+ return m.execute(params);
+ }
+ else {
+ return Collections.EMPTY_LIST;
+ }
+ }
+
}
diff --git a/java/code/src/com/redhat/rhn/manager/channel/test/ChannelManagerTest.java b/java/code/src/com/redhat/rhn/manager/channel/test/ChannelManagerTest.java
index 4f52632..7818c97 100644
--- a/java/code/src/com/redhat/rhn/manager/channel/test/ChannelManagerTest.java
+++ b/java/code/src/com/redhat/rhn/manager/channel/test/ChannelManagerTest.java
@@ -39,6 +39,7 @@ import com.redhat.rhn.domain.server.ServerFactory;
import com.redhat.rhn.domain.server.VirtualInstance;
import com.redhat.rhn.domain.server.test.ServerFactoryTest;
import com.redhat.rhn.domain.user.User;
+import com.redhat.rhn.frontend.action.user.AdminUserEditAction;
import com.redhat.rhn.frontend.dto.ChannelOverview;
import com.redhat.rhn.frontend.dto.ErrataOverview;
import com.redhat.rhn.frontend.dto.EssentialChannelDto;
@@ -49,6 +50,7 @@ import com.redhat.rhn.frontend.xmlrpc.NoSuchChannelException;
import com.redhat.rhn.manager.channel.ChannelEntitlementCounter;
import com.redhat.rhn.manager.channel.ChannelManager;
import com.redhat.rhn.manager.entitlement.EntitlementManager;
+import com.redhat.rhn.manager.errata.ErrataManager;
import com.redhat.rhn.manager.rhnpackage.test.PackageManagerTest;
import com.redhat.rhn.manager.rhnset.RhnSetDecl;
import com.redhat.rhn.manager.rhnset.RhnSetManager;
@@ -747,4 +749,64 @@ public class ChannelManagerTest extends BaseTestCaseWithUser {
}
+
+ public void testListErrataNeedingResync() throws Exception {
+
+ user.addRole(RoleFactory.CHANNEL_ADMIN);
+
+ Channel ochan = ChannelFactoryTest.createTestChannel();
+ Channel cchan = ChannelFactoryTest.createTestClonedChannel(ochan, user);
+
+ Errata oe = ErrataFactoryTest.createTestErrata(null);
+ ochan.addErrata(oe);
+
+ List list = new ArrayList();
+ list.add(cchan.getId());
+
+ Errata ce = ErrataManager.createClone(user, oe);
+ ce = ErrataManager.publish(ce, list, user);
+
+ Package testPackage = PackageTest.createTestPackage();
+ oe.addPackage(testPackage);
+ ochan.addPackage(testPackage);
+
+ List<ErrataOverview> result = ChannelManager.listErrataNeedingResync(cchan, user);
+ assertTrue(result.size() == 1);
+ assertEquals(result.get(0).getId(), ce.getId());
+
+ }
+
+ public void testListErrataPackagesForResync() throws Exception {
+
+ user.addRole(RoleFactory.CHANNEL_ADMIN);
+
+ Channel ochan = ChannelFactoryTest.createTestChannel();
+ Channel cchan = ChannelFactoryTest.createTestClonedChannel(ochan, user);
+
+ Errata oe = ErrataFactoryTest.createTestErrata(null);
+ ochan.addErrata(oe);
+
+ List list = new ArrayList();
+ list.add(cchan.getId());
+
+ Errata ce = ErrataManager.createClone(user, oe);
+ ce = ErrataManager.publish(ce, list, user);
+
+ Package testPackage = PackageTest.createTestPackage();
+ oe.addPackage(testPackage);
+ ochan.addPackage(testPackage);
+
+ RhnSet set = RhnSetDecl.ERRATA_TO_SYNC.get(user);
+ set.clear();
+ set.add(ce.getId());
+ RhnSetManager.store(set);
+
+ List<PackageOverview> result = ChannelManager.listErrataPackagesForResync(cchan, user, set.getLabel());
+ assertTrue(result.size() == 1);
+
+ assertEquals(result.get(0).getId(), testPackage.getId());
+
+ }
+
+
}
diff --git a/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java b/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java
index 2535b63..2f757e0 100644
--- a/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java
+++ b/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java
@@ -31,6 +31,7 @@ import com.redhat.rhn.domain.errata.Errata;
import com.redhat.rhn.domain.errata.ErrataFactory;
import com.redhat.rhn.domain.errata.ErrataFile;
import com.redhat.rhn.domain.errata.ErrataFileType;
+import com.redhat.rhn.domain.errata.impl.PublishedClonedErrata;
import com.redhat.rhn.domain.org.Org;
import com.redhat.rhn.domain.rhnset.RhnSet;
import com.redhat.rhn.domain.role.RoleFactory;
@@ -1237,4 +1238,19 @@ public class ErrataManager extends BaseManager {
return flag;
}
+
+ /**
+ * resync an errata, including all it's details
+ * doesn't actually push any packages to a channel
+ * @param cloned the cloned errata needing resyncing
+ * @param user the user doign the syncing
+ */
+ public static void reSyncErrata(PublishedClonedErrata cloned, User user) {
+ if (!user.hasRole(RoleFactory.CHANNEL_ADMIN)) {
+ throw new PermissionException(RoleFactory.CHANNEL_ADMIN);
+ }
+ ErrataFactory.syncErrataDetails(cloned);
+ }
+
+
}
diff --git a/java/code/src/com/redhat/rhn/manager/rhnset/RhnSetDecl.java b/java/code/src/com/redhat/rhn/manager/rhnset/RhnSetDecl.java
index d1cd5fb..a151135 100644
--- a/java/code/src/com/redhat/rhn/manager/rhnset/RhnSetDecl.java
+++ b/java/code/src/com/redhat/rhn/manager/rhnset/RhnSetDecl.java
@@ -81,6 +81,13 @@ public class RhnSetDecl {
public static final RhnSetDecl ERRATA_TO_DELETE_BULK = make("errata_to_delete_bulk",
SetCleanup.UNOWNED_ERRATA);
+ // set of errata by errata_id; needs new cleanup
+ public static final RhnSetDecl ERRATA_TO_SYNC = make("errata_to_sync",
+ SetCleanup.UNOWNED_ERRATA);
+
+ public static final RhnSetDecl ERRATA_PACKAGES_TO_SYNC = make("errata_packages_to_sync",
+ SetCleanup.UNOWNED_PACKAGES);
+
// set of file list: needs new cleanup
public static final RhnSetDecl FILE_LISTS = make("file_lists",
SetCleanup.UNOWNED_FILE_LIST);
diff --git a/java/code/webapp/WEB-INF/nav/manage_channel.xml b/java/code/webapp/WEB-INF/nav/manage_channel.xml
index ae6cc40..acdb4cd 100644
--- a/java/code/webapp/WEB-INF/nav/manage_channel.xml
+++ b/java/code/webapp/WEB-INF/nav/manage_channel.xml
@@ -29,6 +29,10 @@
<rhn-tab-url>/network/software/channels/manage/errata/clone.pxt?pxt:trap=rhn:empty_set&set_label=errata_clone_actions</rhn-tab-url>
<rhn-tab-url>/network/software/channels/manage/errata/clone_confirm.pxt</rhn-tab-url>
</rhn-tab>
+ <rhn-tab name="Sync" acl="channel_is_clone();user_role(channel_admin);">
+ <rhn-tab-url>/rhn/channels/manage/errata/SyncErrata.do</rhn-tab-url>
+ <rhn-tab-url>/rhn/channels/manage/errata/ConfirmSyncPackages.do</rhn-tab-url>
+ </rhn-tab>
</rhn-tab>
<rhn-tab name="Packages" acl="channel_exists()" node-id="remove_channel_packages">
<rhn-tab-url>/rhn/channels/manage/ChannelPackageMenu.do</rhn-tab-url>
diff --git a/java/code/webapp/WEB-INF/pages/channel/manage/erratapackagesync.jsp b/java/code/webapp/WEB-INF/pages/channel/manage/erratapackagesync.jsp
new file mode 100644
index 0000000..6a82188
--- /dev/null
+++ b/java/code/webapp/WEB-INF/pages/channel/manage/erratapackagesync.jsp
@@ -0,0 +1,80 @@
+<%@ 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>
+
+<html:messages id="message" message="true">
+ <rhn:messages><c:out escapeXml="false" value="${message}" /></rhn:messages>
+</html:messages>
+
+<html:messages id="message" message="true">
+ <rhn:messages><c:out escapeXml="false" value="${message}" /></rhn:messages>
+</html:messages>
+
+ <%@ include file="/WEB-INF/pages/common/fragments/channel/manage/manage_channel_header.jspf" %>
+<BR>
+
+<h2><img src="/img/rhn-icon-packages.gif"> <bean:message key="header.jsp.errata.sync.packagepush"/></h2>
+
+ <bean:message key="channel.jsp.errata.sync.packages.message"/>
+
+<rl:listset name="packageSet" legend="system-group">
+
+<input type="hidden" name="cid" value="${cid}" />
+
+ <rl:list
+ decorator="SelectableDecorator"
+ emptykey="package.jsp.emptylist"
+ alphabarcolumn="nvrea"
+ filter="com.redhat.rhn.frontend.taglibs.list.filters.PackageFilter" >
+
+
+ <rl:decorator name="PageSizeDecorator"/>
+
+ <rl:selectablecolumn value="${current.id}"
+ selected="${current.selected}"
+ disabled="${not current.selectable}"
+ styleclass="first-column"/>
+
+
+
+ <rl:column sortable="true"
+ bound="false"
+ headerkey="download.jsp.package"
+ sortattr="nvrea"
+ defaultsort="asc"
+ >
+
+ <a href="/rhn/software/packages/Details.do?pid=${current.id}">${current.nvrea}</a>
+ </rl:column>
+
+
+ <rl:column sortable="false"
+ bound="false"
+ headerkey="packagesearch.jsp.summary"
+ styleclass="last-column"
+ >
+ ${current.summary}
+ </rl:column>
+ </rl:list>
+
+ <div align="right">
+ <hr />
+ <input type="submit" name="dispatch"
+ value="<bean:message key="confirm"/>" />
+ </div>
+ <rhn:submitted/>
+
+
+</rl:listset>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/java/code/webapp/WEB-INF/pages/channel/manage/erratasync.jsp b/java/code/webapp/WEB-INF/pages/channel/manage/erratasync.jsp
new file mode 100644
index 0000000..089d675
--- /dev/null
+++ b/java/code/webapp/WEB-INF/pages/channel/manage/erratasync.jsp
@@ -0,0 +1,110 @@
+<%@ 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>
+
+<html:messages id="message" message="true">
+ <rhn:messages><c:out escapeXml="false" value="${message}" /></rhn:messages>
+</html:messages>
+
+
+
+ <%@ include file="/WEB-INF/pages/common/fragments/channel/manage/manage_channel_header.jspf" %>
+ <h2>
+ <img src="/img/rhn-icon-errata.gif" alt="erratum" /> <bean:message key="header.jsp.errata.sync"/>
+ </h2>
+
+ <bean:message key="channel.jsp.errata.sync.message"/>
+
+ <rl:listset name="errata_list_set">
+ <input type="hidden" name="cid" value="${cid}">
+
+ <rl:list
+ decorator="SelectableDecorator"
+ emptykey="channel.jsp.errata.sync.listempty"
+ alphabarcolumn="advisorySynopsis" >
+
+ <rl:decorator name="ElaborationDecorator"/>
+ <rl:decorator name="PageSizeDecorator"/>
+
+ <rl:selectablecolumn value="${current.selectionKey}"
+ selected="${current.selected}"
+ styleclass="first-column"/>
+
+
+
+
+
+ <rl:column sortable="true"
+ bound="false"
+ headerkey="erratalist.jsp.type"
+ headerclass="thin-column"
+ sortattr="advisoryType">
+ <c:if test="${current.advisoryType == 'Product Enhancement Advisory'}">
+ <img src="/img/wrh-product.gif" alt="Product Enhancement Advisory" title="Product Enhancement Advisory" />
+ </c:if>
+ <c:if test="${current.advisoryType == 'Security Advisory'}">
+ <img src="/img/wrh-product.gif" alt="Product Enhancement Advisory" title="Product Enhancement Advisory" />
+ </c:if>
+ <c:if test="${current.advisoryType == 'Bug Fix Advisory'}">
+ <img src="/img/wrh-bug.gif" alt="Bug Fix Advisory" title="Bug Fix Advisory" />
+ </c:if>
+
+ </rl:column>
+
+
+ <rl:column sortable="true"
+ bound="false"
+ headerkey="erratalist.jsp.advisory"
+ sortattr="advisory"
+ >
+
+ <a href="/rhn/errata/manage/Edit.do?eid=${current.id}">${current.advisoryName}</a>
+ </rl:column>
+
+
+ <rl:column sortable="false"
+ bound="false"
+ filterattr="advisorySynopsis"
+ headerkey="erratalist.jsp.synopsis"
+ >
+ ${current.advisorySynopsis}
+ </rl:column>
+
+
+ <rl:column sortable="true"
+ bound="false"
+ headerkey="erratalist.jsp.updated"
+ styleclass="last-column"
+ sortattr="updateDateObj"
+ defaultsort="desc"
+ >
+ ${current.updateDate}
+ </rl:column>
+
+
+ </rl:list>
+
+
+ <rhn:tooltip key="channel.jsp.errata.sync.note"/>
+
+ <p align="right">
+ <input type="submit" name="dispatch" value="<bean:message key="header.jsp.errata.sync"/>">
+ </p>
+ <rhn:submitted/>
+
+
+</rl:listset>
+
+
+</body>
+</html>
+
\ No newline at end of file
diff --git a/java/code/webapp/WEB-INF/struts-config.xml b/java/code/webapp/WEB-INF/struts-config.xml
index 31c416e..1b8023b 100644
--- a/java/code/webapp/WEB-INF/struts-config.xml
+++ b/java/code/webapp/WEB-INF/struts-config.xml
@@ -6169,6 +6169,27 @@
<forward name="default" path="/channels/manage/errata/Add.do" />
</action>
+
+ <action path="/channels/manage/errata/SyncErrata"
+ scope="request"
+ input="/WEB-INF/pages/channel/manage/erratasync.jsp"
+ type="com.redhat.rhn.frontend.action.channel.manage.SyncErrataAction"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping">
+ <forward name="default" path="/WEB-INF/pages/channel/manage/erratasync.jsp" />
+ <forward name="submit" path="/channels/manage/errata/ConfirmSyncPackages.do" redirect="true"/>
+ </action>
+
+ <action path="/channels/manage/errata/ConfirmSyncPackages"
+ scope="request"
+ input="/WEB-INF/pages/channel/manage/erratapackagesync.jsp"
+ type="com.redhat.rhn.frontend.action.channel.manage.SyncErrataPackagesAction"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping">
+ <forward name="default" path="/WEB-INF/pages/channel/manage/erratapackagesync.jsp" />
+ <forward name="submit" path="/channels/manage/errata/SyncErrata.do" redirect="true"/>
+ </action>
+
+
+
<action path="/channels/manage/errata/Errata"
scope="request"
type="com.redhat.rhn.frontend.action.channel.manage.ErrataIndexAction"
diff --git a/web/html/nav/manage_channel.xml b/web/html/nav/manage_channel.xml
index 97d2a8f..cb764a4 100644
--- a/web/html/nav/manage_channel.xml
+++ b/web/html/nav/manage_channel.xml
@@ -26,6 +26,10 @@
<rhn-tab-url>/network/software/channels/manage/errata/clone.pxt</rhn-tab-url>
<rhn-tab-url>/network/software/channels/manage/errata/clone_confirm.pxt</rhn-tab-url>
</rhn-tab>
+ <rhn-tab name="Sync" acl="channel_is_clone();user_role(channel_admin);" node-id="sync_errata">
+ <rhn-tab-url>/rhn/channels/manage/errata/SyncErrata.do</rhn-tab-url>
+ <rhn-tab-url>/rhn/channels/manage/errata/ConfirmSyncPackages.do</rhn-tab-url>
+ </rhn-tab>
</rhn-tab>
<rhn-tab name="Packages" acl="channel_exists()">
<rhn-tab-url>/rhn/channels/manage/ChannelPackageMenu.do</rhn-tab-url>
14 years, 11 months