[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[Cluster-devel] conga/luci ChangeLog configure load_site.py cl ...



CVSROOT:	/cvs/cluster
Module name:	conga
Changes by:	rmccabe sourceware org	2007-09-11 16:04:36

Modified files:
	luci           : ChangeLog configure load_site.py 
	luci/cluster   : fence_device.js form-macros 
	                 validate_config_multicast.js 
	luci/conga_ssl : SSLClient.cpp SSLClient.h conga_ssl_lib.cpp 
	                 setup.py 
	luci/docs      : config_rhel5 user_manual.html 
	luci/homebase  : form-macros 
	luci/logs      : index_html 
	luci/plone-custom: README footer global_personalbar 
	                   login_form_validate.vpy login_success 
	                   main_template portlet_login 
	luci/site/luci/Extensions: LuciClusterActions.py 
	                           LuciClusterInfo.py 
	                           cluster_adapters.py 
	luci/site/luci/Extensions/ClusterModel: ClusterNode.py Cman.py 
	                                        Fence.py FenceDaemon.py 
	                                        Gulm.py Heuristic.py 
	                                        Lockserver.py 
	                                        ModelBuilder.py 
	                                        Multicast.py Rm.py 
	                                        Totem.py 
	luci/site/luci/Products/ManagedSystem: ManagedSystem.py 
	                                       __init__.py 
	luci/site/luci/Products/ManagedSystem/skins: 
	                                             managedsystem_edit_form.cpt 
	                                             managedsystem_view.pt 
	luci/site/luci/bin: runzope.in 
	luci/site/luci/etc: zope.conf.in 
	luci/storage   : cache_report check-batch clu_portlet_fetcher 
	                 form-chooser form-macros index_html 
	                 mappings_macros mappings_provider 
	                 portlet_cluconfig portlet_cluconfig_macro 
	                 validate_html 
	luci/sysconfig : luci 

Log message:
	luci whitespace cleanup

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/ChangeLog.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/configure.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/load_site.py.diff?cvsroot=cluster&r1=1.16&r2=1.17
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/fence_device.js.diff?cvsroot=cluster&r1=1.14&r2=1.15
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-macros.diff?cvsroot=cluster&r1=1.210&r2=1.211
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_config_multicast.js.diff?cvsroot=cluster&r1=1.6&r2=1.7
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/conga_ssl/SSLClient.cpp.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/conga_ssl/SSLClient.h.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/conga_ssl/conga_ssl_lib.cpp.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/conga_ssl/setup.py.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/docs/config_rhel5.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/docs/user_manual.html.diff?cvsroot=cluster&r1=1.17&r2=1.18
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/form-macros.diff?cvsroot=cluster&r1=1.59&r2=1.60
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/logs/index_html.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/README.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/footer.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/global_personalbar.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/login_form_validate.vpy.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/login_success.diff?cvsroot=cluster&r1=1.6&r2=1.7
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/main_template.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/portlet_login.diff?cvsroot=cluster&r1=1.9&r2=1.10
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterActions.py.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterInfo.py.diff?cvsroot=cluster&r1=1.12&r2=1.13
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&r1=1.269&r2=1.270
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/ClusterNode.py.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Cman.py.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Fence.py.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FenceDaemon.py.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Gulm.py.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Heuristic.py.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Lockserver.py.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py.diff?cvsroot=cluster&r1=1.7&r2=1.8
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Multicast.py.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Rm.py.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Totem.py.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Products/ManagedSystem/ManagedSystem.py.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Products/ManagedSystem/__init__.py.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Products/ManagedSystem/skins/managedsystem_edit_form.cpt.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Products/ManagedSystem/skins/managedsystem_view.pt.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/bin/runzope.in.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/etc/zope.conf.in.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/cache_report.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/check-batch.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/clu_portlet_fetcher.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/form-chooser.diff?cvsroot=cluster&r1=1.6&r2=1.7
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/form-macros.diff?cvsroot=cluster&r1=1.24&r2=1.25
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/index_html.diff?cvsroot=cluster&r1=1.9&r2=1.10
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/mappings_macros.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/mappings_provider.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/portlet_cluconfig.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/portlet_cluconfig_macro.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/validate_html.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/sysconfig/luci.diff?cvsroot=cluster&r1=1.1&r2=1.2

--- conga/luci/ChangeLog	2006/07/24 20:17:01	1.5
+++ conga/luci/ChangeLog	2007/09/11 16:04:31	1.6
@@ -1,15 +1,14 @@
 
-2006-07-24  Stanko Kupcevic <kupcevic redhat com> 
-   * include zope and plone into rpm if 
-	../autogen.sh --include_zope_and_plone=yes 
+2006-07-24  Stanko Kupcevic <kupcevic redhat com>
+   * include zope and plone into rpm if
+	../autogen.sh --include_zope_and_plone=yes
 	and configure system accordingly
 
-2006-07-18  Stanko Kupcevic <kupcevic redhat com> 
+2006-07-18  Stanko Kupcevic <kupcevic redhat com>
    * storage: add icons to property dialogs
 
-2006-07-17  Stanko Kupcevic <kupcevic redhat com> 
+2006-07-17  Stanko Kupcevic <kupcevic redhat com>
    * storage: styling of property dialogs
 
-2006-07-12  Stanko Kupcevic <kupcevic redhat com> 
+2006-07-12  Stanko Kupcevic <kupcevic redhat com>
    * storage: use pretty properties' names
-
--- conga/luci/configure	2006/07/24 20:17:01	1.3
+++ conga/luci/configure	2007/09/11 16:04:32	1.4
@@ -19,7 +19,7 @@
 done
 if [ "$INCLUDE_ZOPE_PLONE" = "" ] ; then
     echo 'please define "include_zope_and_plone" as yes or no'
-    echo "    eg: $0 --include_zope_and_plone=yes" 
+    echo "    eg: $0 --include_zope_and_plone=yes"
     rm -f $MAKE_DEFINES
     exit 1
 fi
@@ -47,7 +47,7 @@
 
 LIBDIR_SED=\\/lib
 X86_64_TMP=`uname -a | grep x86_64`
-if [ "$X86_64_TMP" ]; then 
+if [ "$X86_64_TMP" ]; then
 	LIBDIR_SED=\\/lib64
 fi
 
--- conga/luci/load_site.py	2007/02/05 20:08:28	1.16
+++ conga/luci/load_site.py	2007/09/11 16:04:32	1.17
@@ -185,7 +185,7 @@
 				if verbose: print 'Uploaded', dbid
 			except: print 'Unable to upload', dbid
 		except: print 'Unable to delete', dbid
-	
+
 def upload_cpt(object, f):
 	dir, name = os.path.split(f)
 
@@ -208,7 +208,7 @@
 				if verbose: print 'Uploaded', dbid
 			except: print 'Unable to upload', dbid
 		except: print 'Unable to delete', dbid
-	
+
 def upload_pt(object, f):
 	dir, name = os.path.split(f)
 
--- conga/luci/cluster/fence_device.js	2007/08/08 21:00:06	1.14
+++ conga/luci/cluster/fence_device.js	2007/09/11 16:04:32	1.15
@@ -104,7 +104,7 @@
 					fence_type = input_tags[i].value;
 				}
 			}
-		}	
+		}
 	}
 
 	var target_form = document.createElement('form');
--- conga/luci/cluster/form-macros	2007/08/24 22:01:41	1.210
+++ conga/luci/cluster/form-macros	2007/09/11 16:04:32	1.211
@@ -287,7 +287,7 @@
 								onClick="allPasswdsSame(this.form)"
 								tal:attributes="checked python: (add_cluster and add_cluster['identical_passwds']) and 'checked'"
 							/>
-							
+
 							Check if node passwords are identical.
 						</li>
 					</ul>
@@ -423,7 +423,7 @@
 						</tal:block>
 					</td>
 					<td tal:condition="add_cluster" class="systemsTable">
-						<img 
+						<img
 							tal:attributes="
 								src python: 'trusted' in sys and '/luci/lock-ok.png' or ('fp' in sys and '/luci/lock-closed.png' or '/luci/lock-open.png');
 								title sys/fp | string:no key fingerprint available" />
@@ -2387,7 +2387,7 @@
 							value cur_fencedev/name | nothing" />
 				</td>
 			</tr>
-		</table>	
+		</table>
 
 		<tal:block tal:condition="exists: cur_fencedev">
 			<input type="hidden" name="existing_device" value="1" />
@@ -3881,7 +3881,7 @@
 						</tal:block>
 					</td>
 					<td tal:condition="add_cluster" class="systemsTable">
-						<img 
+						<img
 							tal:attributes="
 								src python: 'trusted' in sys and '/luci/lock-ok.png' or ('fp' in sys and '/luci/lock-closed.png' or '/luci/lock-open.png');
 								title sys/fp | string:no key fingerprint available" />
@@ -4904,7 +4904,7 @@
 	<input type="hidden" name="oldname"
 		tal:condition="exists: fdom/name"
 		tal:attributes="value fdom/name | nothing" />
-	
+
 	<table class="systemsTable" width="100%">
 		<thead class="systemsTable">
 			<tr class="systemsTable">
@@ -5257,7 +5257,7 @@
 					global cur_fence_type cur_fencedev/agent | nothing" />
 		</tal:block>
 
-		<form name="fencedeveditform" action="" method="post">	
+		<form name="fencedeveditform" action="" method="post">
 			<tal:block
 				metal:use-macro="here/form-macros/macros/fencedev-cond-ladder" />
 
--- conga/luci/cluster/validate_config_multicast.js	2007/08/24 22:01:41	1.6
+++ conga/luci/cluster/validate_config_multicast.js	2007/09/11 16:04:32	1.7
@@ -36,7 +36,7 @@
 	var ifObj = document.getElementById(ifId);
 	if (ifObj) {
 		ifObj.disabled = false;
-		ifObj.value = prev_mcast_if; 
+		ifObj.value = prev_mcast_if;
 	}
 }
 
--- conga/luci/conga_ssl/SSLClient.cpp	2007/06/25 16:03:38	1.4
+++ conga/luci/conga_ssl/SSLClient.cpp	2007/09/11 16:04:32	1.5
@@ -13,7 +13,7 @@
 
   You should have received a copy of the GNU General Public License
   along with this program; see the file COPYING.  If not, write to the
-  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge, 
+  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge,
   MA 02139, USA.
 */
 /*
@@ -59,7 +59,7 @@
   file_cert(const String& file, const String& cert) :
     file(file),
     cert(cert) {}
-  
+
   String file;
   String cert;
 };
@@ -67,31 +67,31 @@
 
 
 
-static int 
+static int
 verify_cert_callback(int preverify_ok, X509_STORE_CTX *ctx)
 {
   return 1;
 }
-static void 
+static void
 load_peer_certs()
 {
   MutexLocker l(global_lock);
-  
+
   // load trusted CAs
-  if (!SSL_CTX_load_verify_locations(ctx, 
-				     _trust_CAs, 
+  if (!SSL_CTX_load_verify_locations(ctx,
+				     _trust_CAs,
 				     NULL))
     ;//cout << "failed to load trusted CAs" << endl;
-  
-  STACK_OF(X509_NAME) *cert_names = 
+
+  STACK_OF(X509_NAME) *cert_names =
     SSL_load_client_CA_file(_trust_CAs);
   if (cert_names)
     SSL_CTX_set_client_CA_list(ctx, cert_names);
 //  else
 //    cout << "failed to load trusted CAs" << endl;
-  
+
   // load saved certs
-  
+
   set<String> files;
   String dir_path(_certs_store_dir);
   DIR* d = opendir(dir_path.c_str());
@@ -118,9 +118,9 @@
     closedir(d);
     throw;
   }
-  
+
   trusted_certs.clear();
-  
+
   for (set<String>::const_iterator iter = files.begin();
        iter != files.end();
        iter++) {
@@ -131,10 +131,10 @@
     } catch ( ... ) {}
   }
 }
-static void 
-ssl_mutex_callback(int mode, 
-		   int n, 
-		   const char *file, 
+static void
+ssl_mutex_callback(int mode,
+		   int n,
+		   const char *file,
 		   int line)
 {
   if (mode & CRYPTO_LOCK)
@@ -155,60 +155,60 @@
 
 
 SSLClient::SSLClient(ClientSocket sock) :
-  _sock(sock), 
+  _sock(sock),
   _connected(false)
 {
   {
     MutexLocker l(global_lock);
     if (!ssl_inited) {
       // init library
-      
+
       SSL_library_init();
       // TODO: random number generator,
       // not on systems with /dev/urandom (eg. Linux)
-      
+
       // thread support
       ssl_locks.clear();
       for (int i=0; i<CRYPTO_num_locks()+1; i++)
 	ssl_locks.push_back(counting_auto_ptr<Mutex>(new Mutex()));
       CRYPTO_set_locking_callback(ssl_mutex_callback);
       CRYPTO_set_id_callback(ssl_id_callback);
-      
+
       // create context
       if (!ctx)
 	ctx = SSL_CTX_new(SSLv23_client_method());
       if (!ctx)
 	throw String("SSL context creation failed");
       // set verify_callback() function
-      SSL_CTX_set_verify(ctx, 
-			 SSL_VERIFY_PEER, 
+      SSL_CTX_set_verify(ctx,
+			 SSL_VERIFY_PEER,
 			 verify_cert_callback);
       // set mode
       SSL_CTX_set_mode(ctx, SSL_MODE_ENABLE_PARTIAL_WRITE);
       SSL_CTX_set_mode(ctx, SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER);
-      
+
       // load key
-      if (!SSL_CTX_use_PrivateKey_file(ctx, 
-				       _privkey, 
+      if (!SSL_CTX_use_PrivateKey_file(ctx,
+				       _privkey,
 				       SSL_FILETYPE_PEM))
 	throw String("error importing cert key file");
       // load cert
-      if (!SSL_CTX_use_certificate_file(ctx, 
-					_pubkey, 
+      if (!SSL_CTX_use_certificate_file(ctx,
+					_pubkey,
 					SSL_FILETYPE_PEM))
 	throw String("error importing cert file");
       // load peers' certs
       load_peer_certs();
-      
+
       ssl_inited = true;
     }
-    
+
     // create SSL object, giving it context
     _ssl = SSL_new(ctx);
     if (!_ssl)
       throw String("creation of ssl object failed");
   }
-  
+
   // make socket non-blocking
   try {
     _sock.nonblocking(true);
@@ -216,7 +216,7 @@
     SSL_free(_ssl);
     throw;
   }
-  
+
   // assign fd to _ssl
   if (!SSL_set_fd(_ssl, _sock.get_sock())) {
     SSL_free(_ssl);
@@ -231,12 +231,12 @@
 }
 
 
-bool 
+bool
 SSLClient::connect(unsigned int timeout)
 {
   if (_connected)
     return _connected;
-  
+
   unsigned int beg = time_mil();
   while (time_mil() < beg + timeout) {
     int ret = SSL_connect(_ssl);
@@ -249,20 +249,20 @@
       socket().ready(want_read, want_write, 250);
     }
   }
-  
+
   return _connected;
 }
 
-String 
+String
 SSLClient::send(const String& msg,
 		unsigned int timeout)
 {
   if (!_connected)
     throw String("cannot send, yet: SSL connection not connected");
-  
+
   if (msg.empty())
     return msg;
-  
+
   unsigned int beg = time_mil();
   while (time_mil() < beg + timeout) {
     int ret = SSL_write(_ssl, msg.c_str(), msg.size());
@@ -274,18 +274,18 @@
       socket().ready(want_read, want_write, 250);
     }
   }
-  
+
   return msg;
 }
 
-String 
+String
 SSLClient::recv(unsigned int timeout)
 {
   if (!_connected)
     throw String("cannot receive, yet: SSL connection not connected");
-  
+
   char buff[4096];
-  
+
   unsigned int beg = time_mil();
   while (time_mil() < beg + timeout) {
     int ret = SSL_read(_ssl, buff, sizeof(buff));
@@ -299,23 +299,23 @@
       socket().ready(want_read, want_write, 250);
     }
   }
-  
+
   return "";
 }
 
-bool 
+bool
 SSLClient::peer_has_cert()
 {
   if (!_connected)
     throw String("cannot determine if peer has certificate: SSL connection not connected");
-  
+
   if (_cert_pem.size())
     return true;
-  
+
   X509* cert = SSL_get_peer_certificate(_ssl);
-  if (!cert) 
+  if (!cert)
     return false;
-  
+
   // load cert into _cert_pem
   FILE* f = NULL;
   try {
@@ -324,7 +324,7 @@
     if (!PEM_write_X509(f, cert))
       throw String("unable to write cert to tmp file");
     X509_free(cert); cert = NULL;
-    
+
     // read cert
     rewind(f);
     while (true) {
@@ -339,7 +339,7 @@
       }
     }
     fclose(f); f = NULL;
-  } catch ( ... ) {  
+  } catch ( ... ) {
     if (cert)
       X509_free(cert);
     if (f)
@@ -347,16 +347,16 @@
     _cert_pem.clear();
     throw;
   }
-  
+
   return true;
 }
 
-String 
+String
 SSLClient::peer_cert_fingerprint(String& digest)
 {
   if (!peer_has_cert())
     throw String("peer did not present cert");
-  
+
   String f_name("/tmp/luci_tmp_XXXXXX");
   int fd = -1;
   char* buff = new char[f_name.size() + 1];
@@ -368,10 +368,10 @@
     f_name = buff;
     delete[] buff; buff = 0;
     while (close(fd) && errno == EINTR) ; fd = -1;
-    
+
     File f = File::open(f_name, true);
     f.replace(_cert_pem);
-    
+
     String out, err;
     int status;
     vector<String> args;
@@ -381,7 +381,7 @@
     args.push_back(f_name);
     args.push_back("-noout");
     args.push_back("-fingerprint");
-    if (utils::execute("/usr/bin/openssl", 
+    if (utils::execute("/usr/bin/openssl",
 		       args,
 		       out,
 		       err,
@@ -391,17 +391,17 @@
     if (status)
       throw String("openssl command failed");
     unlink(f_name.c_str());
-    
+
     vector<String> words(utils::split(utils::strip(out)));
     if (words.size() != 2)
       throw String("error parsing fingerprint");
-    
+
     String finger(words[1]);
     String::size_type idx = finger.find('=');
     if (idx == finger.npos ||
 	idx+1 == finger.size())
       throw String("error parsing fingerprint");
-    
+
     digest = words[0];
     return finger.substr(idx+1);
   } catch ( ... ) {
@@ -414,17 +414,17 @@
   }
 }
 
-bool 
+bool
 SSLClient::peer_cert_trusted()
 {
   // signed by trusted CAs?
   X509* cert = SSL_get_peer_certificate(_ssl);
-  if (!cert) 
+  if (!cert)
     return false;
   X509_free(cert);
   if (SSL_get_verify_result(_ssl) == X509_V_OK)
     return true;
-  
+
   // cert present among saved certs?
   peer_has_cert();  // make sure cert is saved in _cert_pem
   MutexLocker l(global_lock);
@@ -436,17 +436,17 @@
   return false;
 }
 
-bool 
+bool
 SSLClient::trust_peer_cert(const String& hostname)
 {
   MutexLocker l(global_lock);
-  
+
   if (peer_cert_trusted())
     return true;
-  
+
   if (!peer_has_cert())
     throw String("peer did not present cert");
-  
+
   String filename(_certs_store_dir);
   filename += "/" + hostname + "_cert_pub";
   try {
@@ -455,26 +455,26 @@
     unlink(filename.c_str());
     return false;
   }
-  
+
   load_peer_certs();
-  
+
   return true;
 }
 
-bool 
+bool
 SSLClient::untrust_peer_cert()
 {
   MutexLocker l(global_lock);
-  
+
   if (!peer_has_cert())
     throw String("peer did not present cert");
-  
+
   for (list<file_cert>::const_iterator iter = trusted_certs.begin();
        iter != trusted_certs.end();
        iter++)
     if (iter->cert == _cert_pem)
       unlink(iter->file.c_str());
-  
+
   load_peer_certs();
   return true;
 }
@@ -489,7 +489,7 @@
 SSLClient::check_error(int value, bool& want_read, bool& want_write)
 {
   want_read = want_write = false;
-  
+
   String e;
   switch (SSL_get_error(_ssl, value)) {
   case SSL_ERROR_NONE:
@@ -520,10 +520,10 @@
     e = "SSL_ERROR_SSL";
     break;
   }
-  
+
   //FILE* f = fopen("/tmp/ssl_error_que", "a");
   //ERR_print_errors_fp(f);
   //fclose(f);
-  
+
   throw String("SSL error: ") + e;
 }
--- conga/luci/conga_ssl/SSLClient.h	2006/12/21 21:32:00	1.2
+++ conga/luci/conga_ssl/SSLClient.h	2007/09/11 16:04:32	1.3
@@ -13,7 +13,7 @@
 
   You should have received a copy of the GNU General Public License
   along with this program; see the file COPYING.  If not, write to the
-  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge, 
+  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge,
   MA 02139, USA.
 */
 /*
@@ -44,36 +44,36 @@
  public:
   SSLClient(ClientSocket sock);
   virtual ~SSLClient();
-  
+
   bool connect(unsigned int timeout);
-  
+
   String send(const String& msg, unsigned int timeout);
   String recv(unsigned int timeout);
-  
-  
+
+
   bool peer_has_cert();
   bool peer_cert_trusted();  // return true if peer's cert is trusted (either thru CA chain, or saved in cert_store)
-  
+
   String peer_cert_fingerprint(String& digest);
-  
+
   bool trust_peer_cert(const String&);
   bool untrust_peer_cert();  // remove peer's cert from cert_store
-  
+
   ClientSocket& socket();
-  
+
  private:
   SSLClient(const SSLClient&);
   SSLClient operator=(const SSLClient&);
-  
+
   ClientSocket _sock;
   SSL*         _ssl;
   String  _cert_pem;
-  
+
   bool _connected;
-  
+
   void check_error(int value, bool& want_read, bool& want_write);
-  
-  
+
+
 };  // class SSLClient
 
 
--- conga/luci/conga_ssl/conga_ssl_lib.cpp	2007/06/25 16:03:38	1.4
+++ conga/luci/conga_ssl/conga_ssl_lib.cpp	2007/09/11 16:04:32	1.5
@@ -13,7 +13,7 @@
 
   You should have received a copy of the GNU General Public License
   along with this program; see the file COPYING.  If not, write to the
-  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge, 
+  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge,
   MA 02139, USA.
 */
 /*
@@ -41,10 +41,10 @@
 public:
   PythonThreadsAllower()
   { _save = PyEval_SaveThread(); }
-  
+
   ~PythonThreadsAllower()
   { PyEval_RestoreThread(_save); }
-  
+
 private:
   PyThreadState *_save;
 };
@@ -114,8 +114,8 @@
   const char* hostname;
   int port;
   int timeout;
-  if (!PyArg_ParseTuple(args, 
-			"sii", 
+  if (!PyArg_ParseTuple(args,
+			"sii",
 			&hostname,
 			&port,
 			&timeout))
@@ -128,7 +128,7 @@
     PyErr_SetString(PyExc_ValueError, "negative timeout");
     return NULL;
   }
-  
+
   try {
     counting_auto_ptr<SSLClient> ss;
     {
@@ -154,9 +154,9 @@
   int id;
   if (!PyArg_ParseTuple(args, "i", &id))
     return NULL;
-  
+
   try {
-    map<int, counting_auto_ptr<SSLClient> >::iterator iter = 
+    map<int, counting_auto_ptr<SSLClient> >::iterator iter =
       ssls.find(id);
     if (iter != ssls.end())
       ssls.erase(iter);
@@ -182,13 +182,13 @@
     PyErr_SetString(PyExc_ValueError, "negative timeout");
     return NULL;
   }
-  
+
   try {
-    map<int, counting_auto_ptr<SSLClient> >::const_iterator iter = 
+    map<int, counting_auto_ptr<SSLClient> >::const_iterator iter =
       ssls.find(id);
     if (iter == ssls.end())
       throw String("SSL connection closed");
-    
+
     {
       PythonThreadsAllower all;
       int beg = int(time_sec());
@@ -201,7 +201,7 @@
 	    break;
       }
     }
-    
+
     Py_INCREF(Py_None);
     return Py_None;
   } catch (String e) {
@@ -224,14 +224,14 @@
 		PyErr_SetString(PyExc_ValueError, "negative timeout");
 		return NULL;
 	}
-  
+
 	try {
 		map<int, counting_auto_ptr<SSLClient> >::const_iterator iter =
 			ssls.find(id);
 
 		if (iter == ssls.end())
 			throw String("SSL connection closed");
-    
+
 		String resp;
 		{
 			PythonThreadsAllower all;
@@ -261,7 +261,7 @@
 				}
 			}
 		}
-    
+
 		PyObject* resp_p = Py_BuildValue("s", resp.c_str());
 		return resp_p;
 	} catch (String e) {
@@ -280,19 +280,19 @@
   const char* msg;
   if (!PyArg_ParseTuple(args, "is", &id, &msg))
     return NULL;
-  
+
   try {
-    map<int, counting_auto_ptr<SSLClient> >::const_iterator iter = 
+    map<int, counting_auto_ptr<SSLClient> >::const_iterator iter =
       ssls.find(id);
     if (iter == ssls.end())
       throw String("SSL connection closed");
-    
+
     bool resp;
     {
       PythonThreadsAllower all;
       resp = iter->second->trust_peer_cert(msg);
     }
-    
+
     PyObject* resp_p = Py_BuildValue("i", (resp)?1:0);
     return resp_p;
   } catch (String e) {
@@ -309,19 +309,19 @@
   int id;
   if (!PyArg_ParseTuple(args, "i", &id))
     return NULL;
-  
+
   try {
-    map<int, counting_auto_ptr<SSLClient> >::const_iterator iter = 
+    map<int, counting_auto_ptr<SSLClient> >::const_iterator iter =
       ssls.find(id);
     if (iter == ssls.end())
       throw String("SSL connection closed");
-    
+
     bool resp;
     {
       PythonThreadsAllower all;
       resp = iter->second->peer_cert_trusted();
     }
-    
+
     PyObject* resp_p = Py_BuildValue("i", (resp)?1:0);
     return resp_p;
   } catch (String e) {
@@ -338,19 +338,19 @@
   int id;
   if (!PyArg_ParseTuple(args, "i", &id))
     return NULL;
-  
+
   try {
-    map<int, counting_auto_ptr<SSLClient> >::const_iterator iter = 
+    map<int, counting_auto_ptr<SSLClient> >::const_iterator iter =
       ssls.find(id);
     if (iter == ssls.end())
       throw String("SSL connection closed");
-    
+
     bool resp;
     {
       PythonThreadsAllower all;
       resp = iter->second->untrust_peer_cert();
     }
-    
+
     PyObject* resp_p = Py_BuildValue("i", (resp)?1:0);
     return resp_p;
   } catch (String e) {
@@ -367,19 +367,19 @@
   int id;
   if (!PyArg_ParseTuple(args, "i", &id))
     return NULL;
-  
+
   try {
-    map<int, counting_auto_ptr<SSLClient> >::const_iterator iter = 
+    map<int, counting_auto_ptr<SSLClient> >::const_iterator iter =
       ssls.find(id);
     if (iter == ssls.end())
       throw String("SSL connection closed");
-    
+
     String finger, digest;
     {
       PythonThreadsAllower all;
       finger = iter->second->peer_cert_fingerprint(digest);
     }
-    
+
     PyObject* resp_p = Py_BuildValue("(ss)", digest.c_str(), finger.c_str());
     return resp_p;
   } catch (String e) {
--- conga/luci/conga_ssl/setup.py	2007/03/23 17:25:12	1.2
+++ conga/luci/conga_ssl/setup.py	2007/09/11 16:04:32	1.3
@@ -9,27 +9,27 @@
                                     '/usr/include/libxml2'],
                     libraries = ['ssl', 'xml2'],
                     #library_dirs = ['/usr/local/lib'],
-                    sources = ['conga_ssl_lib.cpp', 
-                               'SSLClient.cpp', 
-                               '../../ricci/common/ClientSocket.cpp', 
-                               '../../ricci/common/Socket.cpp', 
-                               '../../ricci/common/Network.cpp', 
-                               '../../ricci/common/Logger.cpp', 
-                               '../../ricci/common/Time.cpp', 
-                               '../../ricci/common/File.cpp', 
-                               '../../ricci/common/XML.cpp', 
-                               '../../ricci/common/utils.cpp', 
+                    sources = ['conga_ssl_lib.cpp',
+                               'SSLClient.cpp',
+                               '../../ricci/common/ClientSocket.cpp',
+                               '../../ricci/common/Socket.cpp',
+                               '../../ricci/common/Network.cpp',
+                               '../../ricci/common/Logger.cpp',
+                               '../../ricci/common/Time.cpp',
+                               '../../ricci/common/File.cpp',
+                               '../../ricci/common/XML.cpp',
+                               '../../ricci/common/utils.cpp',
                                '../../ricci/common/executils.cpp'])
 
 
 
 setup (name = 'conga_ssl_lib',
        version = '0.8',
-       description = 'SSL Python bindings for Conga', 
-       author = 'Stanko Kupcevic', 
+       description = 'SSL Python bindings for Conga',
+       author = 'Stanko Kupcevic',
        author_email = 'kupcevic redhat com',
        copyright = 'Red Hat, Inc.',
-       license = 'GPL', 
+       license = 'GPL',
        url = 'http://www.sourceware.org/cluster/conga',
        long_description = '''
        conga_ssl_lib
--- conga/luci/docs/config_rhel5	2006/11/03 21:47:27	1.2
+++ conga/luci/docs/config_rhel5	2007/09/11 16:04:33	1.3
@@ -50,13 +50,13 @@
 9000 MTU as the maximum frame size including the IP header.  Setting the netmtu
 and host MTUs to 9000 will cause totem to use the full 9000 bytes of the frame.
 Then Linux will add a 18 byte header moving the full frame size to 9018.  As a
-result some hardware will not operate properly with this size of data.  A netmtu 
+result some hardware will not operate properly with this size of data.  A netmtu
 of 8982 seems to work for the few large frame devices that have been tested.
 Some manufacturers claim large frame support when in fact they support frame
 sizes of 4500 bytes.
 <p>
 Increasing the MTU from 1500 to 8982 doubles throughput performance from 30MB/sec
-to 60MB/sec as measured with evsbench with 175000 byte messages with the secauth 
+to 60MB/sec as measured with evsbench with 175000 byte messages with the secauth
 directive set to off.
 <p>
 When sending multicast traffic, if the network frequently reconfigures, chances are
@@ -73,7 +73,7 @@
 multiple threads to encrypt and send multicast messages.
 <p>
 A thread directive of 0 indicates that no threaded send should be used.  This
-mode offers best performance for non-SMP systems. 
+mode offers best performance for non-SMP systems.
 <p>
 The default is 0.
 <p>
@@ -81,14 +81,14 @@
 This directive controls the virtual synchrony filter type used to identify
 a primary component.  The preferred choice is YKD dynamic linear voting,
 however, for clusters larger then 32 nodes YKD consumes alot of memory.  For
-large scale clusters that are created by changing the MAX_PROCESSORS_COUNT 
+large scale clusters that are created by changing the MAX_PROCESSORS_COUNT
 #define in the C code totem.h file, the virtual synchrony filter &quot;none&quot; is
 recommended but then AMF and DLCK services (which are currently experimental)
 are not safe for use.
 <p>
 The default is ykd.  The vsftype can also be set to none.
 <p>
-Within the 
+Within the
 <B>totem </B>
 
 directive, there are several configuration options which are used to control
@@ -129,7 +129,7 @@
 The default is 4 retransmissions.
 <p>
 <dt><a name="join"><strong>join</strong></a><dd>
-This timeout specifies in milliseconds how long to wait for join messages in 
+This timeout specifies in milliseconds how long to wait for join messages in
 the membership protocol.
 <p>
 The default is 100 milliseconds.
@@ -181,10 +181,10 @@
 <dt><a name="heartbeat_failures_allowed"><strong>heartbeat_failures_allowed</strong></a><dd>
 [HeartBeating mechanism]
 Configures the optional HeartBeating mechanism for faster failure detection. Keep in
-mind that engaging this mechanism in lossy networks could cause faulty loss declaration 
-as the mechanism relies on the network for heartbeating. 
+mind that engaging this mechanism in lossy networks could cause faulty loss declaration
+as the mechanism relies on the network for heartbeating.
 <p>
-So as a rule of thumb use this mechanism if you require improved failure in low to 
+So as a rule of thumb use this mechanism if you require improved failure in low to
 medium utilized networks.
 <p>
 This constant specifies the number of heartbeat failures the system should tolerate
--- conga/luci/docs/user_manual.html	2007/06/27 08:14:12	1.17
+++ conga/luci/docs/user_manual.html	2007/09/11 16:04:33	1.18
@@ -67,28 +67,28 @@
   <p/>
   <p/>
   Enter admin as the user name, and then enter the admin password that has been
-  set up in the appropriate field, then click "log in". 
+  set up in the appropriate field, then click "log in".
     <h4>UI Organization</h4>
     luci is set up with three tabs:
     <ul><li>Homebase: This is where admin tools for adding and deleting systems
-  or users are located. Only admin is allowed access to this tab.</li> 
+  or users are located. Only admin is allowed access to this tab.</li>
         <li>Cluster: If any clusters are set up with the luci server, they will
   show up in a list in this tab. If a user other than admin navigates to the
   cluster tab, only those clusters that the user has permission to manage show
   up in the cluster list. The cluster tab provides a means for creating and
-  configuring clusters.</li> 
+  configuring clusters.</li>
        <li>Storage: Remote administration of storage is available through this
-  page in the luci site.</li> 
+  page in the luci site.</li>
     </ul>
   <h2>Homebase Tab</h2>
   The following figure shows the entry look of the Homebase tab.<br/>
-  <img src="./ss_homebase1.png"/> 
+  <img src="./ss_homebase1.png"/>
   <br/>
   <b>Figure #2: Homebase Tab</b>
   <p/>
   <p/>
   With no systems registered with a luci server, the Homebase page provides three
-  initial utilities to the admin: 
+  initial utilities to the admin:
   <ul><li>Add a System</li>
       <li>Add an Existing Cluster</li>
       <li>Add a User</li>
@@ -96,7 +96,7 @@
 
   After systems have been added to a luci server, the Manage Systems link become
   available in the navigation table.<p/>
-  
+
   After users have been added to a luci server, the following links become available in the navigation table:
   <ul>
       <li>User Permissions</li>
@@ -104,12 +104,12 @@
   </ul>
 
   <h4>Add a System:</h4> Adding a single system to luci makes the system
-  available for remote storage administration. In addition to 
+  available for remote storage administration. In addition to
   storage administration, Conga provides remote package retrieval and
   installation, the chkconfig function, full remote cluster administration, and
-  module support to filter and retrieve log entries. <p/> 
+  module support to filter and retrieve log entries. <p/>
   To add a system, click on the Add a System link in the left hand navigation
-  table. This will load the following page: 
+  table. This will load the following page:
   <img src="./addsys_11.png"/><br/>
   <b>Figure #3: Add a System</b>
   <p/>
@@ -120,24 +120,24 @@
   Another Entry button is provided. When this button is clicked and at least
   one additional entry row has been provided, a checkbox is also made available
   that can be selected if all systems specified for addition to the luci server
-  share the same password. 
+  share the same password.
   <img src="./addsys_22.png"/><br/>
   <b>Figure #4: Multiple System Entries</b>
   <p/>
   <p/>
   If the System Hostname is left blank for any row, it is disregarded when the
-  list of systems is submitted for addition. If the user wishes to delete a 
-  row for any reason, the icon at the far right of the row (that resembles 
+  list of systems is submitted for addition. If the user wishes to delete a
+  row for any reason, the icon at the far right of the row (that resembles
   rows in a table with an 'x') can be clicked. If systems in the list of rows do
   NOT share the same password (and the checkbox is, of course, left unchecked)
   and one or more passwords are incorrect, an error message is generated for
   each system that has an incorrect password. The systems listed with correct
   passwords are added to the luci server. In addition to incorrect password
   problems, an error message is also displayed if luci is unable to connect to
-  the ricci agent on a system. 
+  the ricci agent on a system.
   <p/>
   For most typical datacenter deployments of conga, the luci server will
-  reside on a system within the confines of the datacenter network, and 
+  reside on a system within the confines of the datacenter network, and
   the datacenter systems can pretty safely be assumed to be trustworthy.
   If a luci server is used to connect to systems across the open Internet,
   the user <i>could</i> be vulnerable to a form of security attack known
@@ -145,15 +145,15 @@
   the client and server intercepts data exchanged, while masquerading
   to its peers as a legitimate party, and issues potentially malicious commands.
   <p/>
-  If the user would like to verify the certificate of a ricci agent before 
-  authenticating to it (avoiding a 'Man in the Middle' attack), the 
-  checkbox marked <b>Verify system certificates before sending any 
-  passwords</b> should be checked. With this box checked, clicking submit 
-  retrieves the certificate information for all systems listed, and provides 
-  a 'Trust' checkbox for each system. The password for a system will not 
+  If the user would like to verify the certificate of a ricci agent before
+  authenticating to it (avoiding a 'Man in the Middle' attack), the
+  checkbox marked <b>Verify system certificates before sending any
+  passwords</b> should be checked. With this box checked, clicking submit
+  retrieves the certificate information for all systems listed, and provides
+  a 'Trust' checkbox for each system. The password for a system will not
   be sent without the trust box checked. To add the system or systems,
   click the 'Trust' checkboxes for each row desired and click submit again.
-   Mousing over the lock icon for 
+   Mousing over the lock icon for
   a row entry will display the certificate information for just that system. It is important to note that in order to defend against this type of attack, the user must know the certificate fingerprints of client systems prior to the initial key exchange. When the client systems are added, the user can then compare the known certificate fingerprints with the fingerprints displayed by the luci server to verify they match. A mismatch indicates the possibility of an attack.
   <p/>
   <img src="./addsys_33.png"/><br/>
@@ -182,58 +182,58 @@
   <p/>When a cluster is added to a luci server, all nodes are also added as general systems so that storage may be managed on them. If this is not desired, the individual systems may be removed from luci, while remote cluster management capability is maintained.<p/>
   NOTE: If an administrator desires to create a new cluster, this capability is
   available on the Cluster tab. This task link is only for adding and managing
-  clusters that already exist.<p/> 
+  clusters that already exist.<p/>
   <h4>Add a User: </h4>Here the admin may add additional user accounts. The user
-  name is entered along with an initial password. 
+  name is entered along with an initial password.
   <img src="./ss_homebase4.png"/><br/>
   <b>Figure #5: Add a User</b>
   <p/>
   <p/>
   As stated above, after systems have been added to a luci server, an additional
   Manage Systems link appears in the navigation table. The Manage Systems page
-  provides a way to delete systems if desired. 
+  provides a way to delete systems if desired.
   <p/>
   When an administrator adds a new user to a luci server, two additional links appear in
   the Navigation Table: A Delete User link, and a User Permissions link. The
   Delete User link is self explanatory, and this page lists all users other than
   the admin, in a dropdown menu. Selecting a user name and then clicking the
-  Delete This User button removes that user account from the luci server.<br/> 
+  Delete This User button removes that user account from the luci server.<br/>
   The User Permissions page is where an administrator grants privileges to user
   accounts. A dropdown menu lists all current users, followed by a list of all
   systems registered with the luci server. By selecting a user from the
   dropdown, the context is set for the page, and then those systems that the
   admin wishes to allow the user to administer are checked. Finally, the Update
   Permissions button is clicked to persist the privileges. By default, a user
-  has no user permissions upon creation. 
+  has no user permissions upon creation.
   <img src="./ss_homebase5.png"/><br/>
   <b>Figure #6: User Permissions Page</b>
   <p/>
   <p/>
-  
+
   <h2>Cluster Tab</h2>
-  When the cluster tab is selected, luci first checks the identity of the user and 
+  When the cluster tab is selected, luci first checks the identity of the user and
 compiles a list of clusters that the current user is permitted to administer.
 If the current user is not permitted to access any of the clusters registered
   on the luci server, they are informed accordingly. If the current user is the
-  admin, then all clusters are accessible. 
+  admin, then all clusters are accessible.
   <p/>
   Selecting the Cluster tab causes a page to be displayed that lists all
-  registered clusters on the luci server that are accessible by the 
+  registered clusters on the luci server that are accessible by the
   current user. Each cluster is identified by name and presents a link to
   the properties page for that cluster. In addition, the health of the
   cluster can be quickly assessed - green indicates good health, and red
-  indicates a problem. 
+  indicates a problem.
  <p/>
  The nodes of the cluster are also listed, with health indicated by font
-  color. Green means healthy and part of the cluster; 
+  color. Green means healthy and part of the cluster;
   red means not part of the cluster, and gray means that the node is not
-  responding and in an unknown state. 
+  responding and in an unknown state.
   <br/>
   The Cluster List page offers some additional summary information about each
   cluster. It displays quorum status and the total cluster votes.  A dropdown
   menu allows a cluster to be started, stopped, or
   restarted. Finally, services for the cluster are listed as links, with their
-  health indicated by font color. 
+  health indicated by font color.
   <p/>
   On the left side of every cluster tab page is a navigation table with
   three links: Cluster List, Create, and Configure. The default page is the
@@ -241,7 +241,7 @@
   the Configure link displays a short list of clusters in the navigation
   table. Choosing a cluster name takes the user to the properties page for that
   cluster (the cluster name link on the Cluster List page performs the same
-  action). 
+  action).
   <img src="./clus1.png"/><br/>
   <b>Figure #7: Cluster List Page</b>
   <p/>
@@ -253,7 +253,7 @@
   navigation table to be displayed below the clusters table (on the left side of
   the page). The cluster specific table identifies the cluster name at the top
   of the table and presents links to the five configuration
-  categories for clusters.</br>  
+  categories for clusters.</br>
  NOTE: Until a specific cluster is selected, the cluster pages have no specific
   cluster context associated with them. Once a cluster has been selected,
   however, the links and options available on the lower cluster navigation table
@@ -265,9 +265,9 @@
   (You can easily return to the cluster list page in one of three ways: by
   clicking on the Cluster tab, selecting the Cluster List link in the main
   navigation table, or selecting the Configure link from the main navigation
-  table.) 
+  table.)
 The configuration categories available in the lower cluster-specific navigation
-  table are as follows: 
+  table are as follows:
 <ul><li>Nodes</li>
 <li>Services</li>
 <li>Resources</li>
@@ -275,14 +275,14 @@
 <li>Shared Fence Devices</li>
 </ul>
 Selecting any of these primary configuration links offers a similar set of
-  options for each configuration category, by doing the following: 
+  options for each configuration category, by doing the following:
 <ul><li>A list is presented of the corresponding configurable cluster
   elements. For example, if Nodes is selected, a list of all nodes in the
   cluster is displayed with general node tasks and quick links to node-related
   configuration pages. The following figure shows a typical node list. Note that
   this is a high-level view of each node, and is useful for quickly assessing
   the health of the node and checking which cluster services are currently
-  deployed on a node.</li> 
+  deployed on a node.</li>
 <li>A sub-menu is offered for each configuration category. Options in this
   submenu are:<ul><li>Create or Add</li><li>Configure; which also displays a
   list of the individual configuration elements which are direct links to the
@@ -293,10 +293,10 @@
   of those elements with a high level diagnostic view and links to more detailed
   aspects of the elements, a link to create a new element, and a sub-menu list
   of direct links to the detailed configuration properties page for each element
-  currently configured. 
+  currently configured.
   This "drill-down" pattern, wherein a top level list of elements is displayed
   with links to properties pages for each element, paired with a way to create a
-  new element, is repeated throughout the luci Cluster UI. 
+  new element, is repeated throughout the luci Cluster UI.
   <img src="./clus2.png"/><br/>
   <b>Figure #8:  Cluster Properties Page - Note name of cluster at the top of the page, and in the Title section of the lower navigation table</b>
   <p/>
@@ -308,80 +308,80 @@
   for the node in a new browser window. A dropdown menu allows administrators of
   the cluster a way to have the node join or leave the cluster. The node can
   also be fenced, rebooted, or deleted through the options in the dropdown
-  menu. 
+  menu.
   <img src="./clus3.png"/>
   <b>Figure #9:  Node List Page</b><br/>
-  <p/> 
-  <p/> 
+  <p/>
+  <p/>
 The name of the node is a link to the detailed configuration page for that node,
   and the color of the font (green or red) reflects a course status check on the
-  health of the node. 
-<p/> 
+  health of the node.
+<p/>
 When the Nodes link is chosen in the lower navigation table, the Add a Node
   and Configure options become visible. The Configure option link has a list of
   the nodes beneath it, and selecting one of these links is a direct path to the
   detailed properties page for the node, in the same way that the node name link
-  is on the node list page. 
+  is on the node list page.
 <h4>Add a Node</h4>
 Below is a screenshot of the Add a Node page:<br/>
   <img src="./addnode_11.png"/>
   <b>Figure #10:  Add a Node Page</b>
-  <p/> 
-  <p/> 
+  <p/>
+  <p/>
   The Add a Node page is similar in look and function to the Add a System
   page available in the Homebase tab. The system hostname of IP address is
   entered in the appropriate field along with the password for the
   system. Multiple nodes may be added at once. The user is offered the
   chance to verify the certificate for the new node to be added, just as
-  they were when adding a system on the home base tab. 
+  they were when adding a system on the home base tab.
   <p/>
   Two other options are available to the user when adding a node: They are
   presented with a pair of radio buttons that allow for a choice of either
-  pulling the necessary packages from the configured Yum repository for 
+  pulling the necessary packages from the configured Yum repository for
   the system (The very latest packages are always selected with this option),
-  or packages already installed on the system are used. If any packages 
+  or packages already installed on the system are used. If any packages
   are missing, an error message is returned and the node is not added.
   <p/>
   The other option available to the user is a checkbox for Shared Storage
   support. Checking this box will install and initially configure the
-  CLVM (Clustered Logical Volume Management) packages and the GFS clustered file system packages. In a cluster environment, this box will almost always need to 
+  CLVM (Clustered Logical Volume Management) packages and the GFS clustered file system packages. In a cluster environment, this box will almost always need to
   be checked.
   When the submit button is
-  clicked, the following takes place: 
+  clicked, the following takes place:
 <ul>
  <li>Contact is made with each future nodes ricci agent. If this contact fails
   on any listed hostname, the operation is suspended and the user is offered the
-  chance to re-enter the password.</li> 
+  chance to re-enter the password.</li>
 <li>After authentication is made on all listed nodes, the proper cluster suite
-  RPMs for that node's architecture are pulled down and installed.</li> 
+  RPMs for that node's architecture are pulled down and installed.</li>
 <li>After installation, an initial cluster.conf file is propagated to each node.</li>
 <li>Finally, each future node is rebooted. When the node comes back up, it
-  should join the cluster without error.</li> 
+  should join the cluster without error.</li>
 </ul><br/>
 NOTE: Until the node to be added has completed he installation and cluster join
   operation, any attempts to navigate to the configuration page for that node
   will result in a "busy signal" graphic that informs the user of what
   modification is occurring and to try back later when the operation is
-  complete. 
+  complete.
 <p/>
 <h4>Node Configuration Page</h4>
 Selecting the name link in the node list page, or selecting a nodename in the
   list below the node Configure link in the lower navigation table takes the
   user directly to the Node Configuration page. Here is an image of a typical
-  node configuration page: 
+  node configuration page:
   <img src="./clus4.png"/>
   <b>Figure #11:  Node Configuration Page</b><br/>
-  <p/> 
-  <p/> 
+  <p/>
+  <p/>
 This page is divided into 5 sections.
 <ul>
   <li>General Node Tasks - The first section on the node configuration page
   shows general node health and offers a link to view recent log activity on the
   node in a pop-up browser window, and also offers a dropdown menu of some common
-  tasks to perform on a node. These tasks are: 
+  tasks to perform on a node. These tasks are:
   <ul>
     <li>Have node join/leave cluster - depending on he node status, one of these
-  options is offered.</li> 
+  options is offered.</li>
     <li>Fence Node - The node is fenced by the configured means.</li>
     <li>Reboot Node</li>
     <li>Delete Node - when a node is deleted, it is made to leave the cluster,
@@ -389,16 +389,16 @@
   deleted, and a new cluster.conf file is propagated to the remaining nodes in
   the cluster with the deleted node removed from the configuration. Note
   that deleting a node does not remove the installed cluster packages from the
-  node.</li> 
+  node.</li>
   </ul>
  </li><br/>
  <li>The next section of the node configuration page is a table showing the
   status of cluster daemons. In the screenshot above, four cluster daemons are
   listed. This is for a RHEL 4 cluster. In the RHEL 5 cluster suite, only two
-  daemons are listed. 
+  daemons are listed.
  <p/>
  Each daemon can be separately started or stopped, and its chkconfig status
-  amended to allow the daemon to be enabled at system startup or not.</li> 
+  amended to allow the daemon to be enabled at system startup or not.</li>
   <li>All services running on the node are listed along with their status in the
   "Services on this Node" section. Links are offered to each services
   configuration page.</li> <br/>
@@ -409,16 +409,16 @@
   configuration. Two levels of fencing may be configured: A Main fencing method,
   and a Backup method. The cluster suite attempts to fence the node, if
   necessary, with the main fencing method first. If this fails, the backup
-  method is employed. 
+  method is employed.
   <p/>
   Each of the two fence levels or methods may employ multiple fence types within
   them; for example, when power switch fencing is used to fence a node with dual
-  redundant power supplies.</li> 
+  redundant power supplies.</li>
   </ul>
   <p/>
   <p/>
 
-  <h2>Storage Tab</h2> 
+  <h2>Storage Tab</h2>
 This tab allows the user to monitor and configure storage
 on remote systems. It provides a means for configuring disk partitions, logical
 volumes (clustered as well as single system use), and file system parameters and
@@ -434,28 +434,28 @@
 changed on specific configuration forms throughout the storage UI. This general
 choice allows an administrator to avoid difficult decimal representations of storage
 size (for example, if they know that most of their storage is measured in
-gigabytes, terabytes, or other more familiar representations). <p/> 
+gigabytes, terabytes, or other more familiar representations). <p/>
 
 A dropdown menu also allows the user to choose if they would rather have devices
-displayed by path or SCSI ID.<p/> 
+displayed by path or SCSI ID.<p/>
  Finally, this main storage page lists systems that the user is authorized to
  access, but currently unable to administer due to a problem such as a system
  is unreachable via the network, or the system has been re-imaged and the luci
  server admin must re-authenticate with the ricci agent on the system. A reason
- for the trouble is displayed if it can be determined.<p/>  
+ for the trouble is displayed if it can be determined.<p/>
 Only those systems that the user is privileged to administer is shown in the
 tabs main navigation table. If the user has no permissions on any systems, an
-appropriate message is displayed. 
+appropriate message is displayed.
  <h4>General System Page</h4>
  After a system is selected to administer, a general properties page is
- displayed for the system. This page view is divided into three sections: 
+ displayed for the system. This page view is divided into three sections:
   <ul>
    <li>Hard Drives</li>
    <li>Partitions</li>
    <li>Volume Groups</li>
   </ul>
   Each of these sections is set up as an expandable tree, with direct links
-  provided to property sheets for specific devices, partitions, etc. 
+  provided to property sheets for specific devices, partitions, etc.
  </body>
 </html>
 
--- conga/luci/homebase/form-macros	2007/08/09 21:05:28	1.59
+++ conga/luci/homebase/form-macros	2007/09/11 16:04:33	1.60
@@ -187,7 +187,7 @@
 
 		<tal:block tal:condition="python:perms">
 		<span tal:content="string:Select a User" /><br/>
-		
+
 		<select class="homebase" name="userList"
 			onchange="document.location = '/luci/homebase/?pagetype=3&user=' + this.form.userList.options[this.form.userList.selectedIndex].text">
 			<tal:block tal:define="userlist python: perms">
@@ -307,7 +307,7 @@
 						<th class="systemsTable"></th>
 					</tr>
 				</thead>
-			
+
 				<tbody class="systemsTable" id="sys_tbody">
 					<tr class="systemsTable" id="__SYSTEM_ROW_0">
 						<td class="systemsTable">
@@ -370,7 +370,7 @@
 									value nothing" />
 						</td>
 						<td class="systemsTable">
-							<img 
+							<img
 								tal:attributes="
 									src python: 'trusted' in sys and '/luci/lock-ok.png' or ('fp' in sys and '/luci/lock-closed.png' or '/luci/lock-open.png');
 									title sys/fp | string:no key fingerprint available"
@@ -604,7 +604,7 @@
 						<th class="systemsTable"></th>
 					</tr>
 				</thead>
-			
+
 				<tbody class="systemsTable" id="sys_tbody">
 					<tr class="systemsTable" id="__SYSTEM_ROW_0">
 						<td class="systemsTable">
@@ -665,10 +665,10 @@
 									id python: '__SYSTEM%d:Passwd' % cur_sysnum;
 									name python: '__SYSTEM%d:Passwd' % cur_sysnum;
 									value nothing" />
-									
+
 						</td>
 						<td class="systemsTable">
-							<img 
+							<img
 								tal:attributes="
 									src python: 'trusted' in sys and '/luci/lock-ok.png' or ('fp' in sys and '/luci/lock-closed.png' or '/luci/lock-open.png');
 									title sys/fp | string:no key fingerprint available"
@@ -812,7 +812,7 @@
 								id="allSameCheckBox" onclick="allPasswdsSame(this.form)"
 								tal:attributes="checked python: add_cluster['identical_passwds'] and 'checked'"
 							/>
-							
+
 							Check if node passwords are identical.
 						</li>
 						<li class="vanilla" tal:condition="python: add_cluster['pass'] > 0 and 'incomplete' in add_cluster">
@@ -864,7 +864,7 @@
 						</tal:block>
 					</td>
 					<td class="systemsTable">
-						<img 
+						<img
 							tal:attributes="
 								src python: 'trusted' in sys and '/luci/lock-ok.png' or ('fp' in sys and '/luci/lock-closed.png' or '/luci/lock-open.png');
 								title sys/fp | string:no key fingerprint available" />
--- conga/luci/logs/index_html	2007/06/25 16:03:38	1.4
+++ conga/luci/logs/index_html	2007/09/11 16:04:33	1.5
@@ -27,7 +27,7 @@
       <metal:headslot define-slot="head_slot" />
       <tal:comment replace="nothing"> A slot where you can insert elements in the header from a template </tal:comment>
     </metal:headslot>
-    
+
     <metal:styleslot fill-slot="style_slot">
       <tal:comment replace="nothing"> A slot where you can insert CSS in the header from a template </tal:comment>
       <metal:styleslot define-slot="style_slot" />
@@ -115,8 +115,8 @@
       <div id="log_data">
 		<h2>Recent log information for <span tal:replace="request/nodename | string: host"/></h2>
 
-		
-  <div id="log_entries">   
+
+  <div id="log_entries">
    <table style="width: 100%">
     <tr><td><div style="padding-bottom: 2cm;">&nbsp;</div></td></tr>
     <tr>
--- conga/luci/plone-custom/README	2006/07/26 16:55:37	1.1
+++ conga/luci/plone-custom/README	2007/09/11 16:04:33	1.2
@@ -1,4 +1,4 @@
-custom.xml is a backup of whole portal_skins/custom directory, including methods, types and permisions. 
+custom.xml is a backup of whole portal_skins/custom directory, including methods, types and permisions.
 Other files are a content of the same dir.
 
 So, custom.xml is to be restored first, thru ZMI, the rest of files can be pushed using Makefile.
--- conga/luci/plone-custom/footer	2007/03/12 17:20:01	1.4
+++ conga/luci/plone-custom/footer	2007/09/11 16:04:33	1.5
@@ -4,7 +4,7 @@
 
 <p>
 	<span i18n:translate="description_copyright" tal:omit-tag="">
-		The 
+		The
 		<span>
 			<a href="http://www.sourceware.org/cluster/conga";>
 				Conga Cluster and Storage Management System</a>
@@ -14,8 +14,8 @@
 			&copy;
 		</acronym>
 		2000&#8212;<span
-			i18n:name="current_year" 
-			tal:define="now modules/DateTime/DateTime" 
+			i18n:name="current_year"
+			tal:define="now modules/DateTime/DateTime"
 			tal:content="now/year" />
 		<a href="http://www.redhat.com/";>Red Hat, Inc.</a>
 	</span>
@@ -23,7 +23,7 @@
 
 <p>
 	<span i18n:translate="description_license">
-		Distributed under the 
+		Distributed under the
 		<span i18n:name="license">
 			<a href="http://creativecommons.org/licenses/GPL/2.0/"; i18n:translate="label_gnu_gpl_licence">GNU GPL license</a>
 		</span>.
--- conga/luci/plone-custom/global_personalbar	2006/10/10 19:19:13	1.5
+++ conga/luci/plone-custom/global_personalbar	2007/09/11 16:04:33	1.6
@@ -15,7 +15,7 @@
 
 <tal:comment tal:replace="nothing">
 	<tal:block condition="not: isAnon">
-		<li class="portalUser" 
+		<li class="portalUser"
 			 tal:define="author python:mtool.getMemberInfo(user.getId())">
 			<a id="user-name"
 				tal:attributes="href string:${portal_url}/author/${user/getId}">
--- conga/luci/plone-custom/login_form_validate.vpy	2006/09/19 15:01:21	1.1
+++ conga/luci/plone-custom/login_form_validate.vpy	2007/09/11 16:04:33	1.2
@@ -35,7 +35,7 @@
 			password_empty = request.get('pwd_empty', None)=='1'
 			ac_name = auth.name_cookie
 			ac_password = auth.pw_cookie
-	
+
 			if not user_name:
 				# no user name
 				state.setError(ac_name, _(u'Please enter your login name.'), 'login_name_required')
--- conga/luci/plone-custom/login_success	2006/09/19 14:59:27	1.6
+++ conga/luci/plone-custom/login_success	2007/09/11 16:04:33	1.7
@@ -32,7 +32,7 @@
 		<div tal:condition="not:js_enabled">
 			 <p i18n:translate="description_javascript_advantage">
 				You can take fuller advantage of the features of this site
-				if you enable javascript in your browser. 
+				if you enable javascript in your browser.
 			</p>
 
 			<p i18n:translate="description_enable_cookies_for_login">
--- conga/luci/plone-custom/main_template	2006/09/18 19:56:35	1.5
+++ conga/luci/plone-custom/main_template	2007/09/11 16:04:33	1.6
@@ -27,7 +27,7 @@
       <metal:headslot define-slot="head_slot" />
       <tal:comment replace="nothing"> A slot where you can insert elements in the header from a template </tal:comment>
     </metal:headslot>
-    
+
     <metal:styleslot fill-slot="style_slot">
       <tal:comment replace="nothing"> A slot where you can insert CSS in the header from a template </tal:comment>
       <metal:styleslot define-slot="style_slot" />
@@ -142,7 +142,7 @@
 
             <tal:comment replace="nothing"> Start of right column </tal:comment>
             <td id="portal-column-two"
-                metal:define-slot="column_two_slot" 
+                metal:define-slot="column_two_slot"
                 tal:condition="python: False">
               <div class="visualPadding">
                 <metal:portlets define-slot="portlets_two_slot">
--- conga/luci/plone-custom/portlet_login	2006/09/21 21:45:36	1.9
+++ conga/luci/plone-custom/portlet_login	2007/09/11 16:04:33	1.10
@@ -59,7 +59,7 @@
 									tabindex tabindex/next"
 					i18n:attributes="alt label_login_name;"/>
 			</div>
-			
+
 			<div class="field">
 				<label for=""
 					tal:attributes="for ac_password"
@@ -77,7 +77,7 @@
 				Cookies are not enabled. You must <span i18n:name="enable_cookies">
 				<a href="enabling_cookies" i18n:translate="label_enable_cookies">enable cookies</a></span> before you can log in.
 			</div>
-			
+
 			<div class="formControls">
 				<input type="submit" name="submit" value="Log in" alt="Log in"
 					tal:attributes="tabindex tabindex/next;
@@ -100,7 +100,7 @@
 	<dd class="portletItem"
 		tal:condition="python: not auth"
 		i18n:translate="login_portlet_disabled">
-		Cookie authentication is disabled. 
+		Cookie authentication is disabled.
 		Login portlet not available.
 	</dd>
 
--- conga/luci/site/luci/Extensions/LuciClusterActions.py	2007/08/20 16:31:13	1.5
+++ conga/luci/site/luci/Extensions/LuciClusterActions.py	2007/09/11 16:04:33	1.6
@@ -603,7 +603,7 @@
 			luci_log.debug_verbose('FNF0: no ricci to fence %s for cluster %s' \
 				% (nodename_resolved, clustername))
 		return None
-			
+
 	batch_number, result = rq.nodeFence(rc, nodename_resolved)
 	if batch_number is None or result is None:
 		if LUCI_DEBUG_MODE is True:
--- conga/luci/site/luci/Extensions/LuciClusterInfo.py	2007/08/24 22:01:42	1.12
+++ conga/luci/site/luci/Extensions/LuciClusterInfo.py	2007/09/11 16:04:33	1.13
@@ -372,7 +372,7 @@
 					for node in nodenames:
 						if node != nodename:
 							starturl = {}
-							starturl['nodename'] = node 
+							starturl['nodename'] = node
 							starturl['url'] = '%s?clustername=%s&servicename=%s&pagetype=%s&nodename=%s' % (baseurl, cluname, servicename, SERVICE_START, node)
 							starturls.append(starturl)
 
--- conga/luci/site/luci/Extensions/cluster_adapters.py	2007/08/24 22:01:42	1.269
+++ conga/luci/site/luci/Extensions/cluster_adapters.py	2007/09/11 16:04:33	1.270
@@ -2511,7 +2511,7 @@
 		return busy_map
 
 	clusterfolder = getClusterDBObj(self, cluname)
-	
+
 	if LUCI_DEBUG_MODE is True:
 		luci_log.debug_verbose('ICB2: %s is busy: %d flags' \
 			% (cluname, len(items)))
--- conga/luci/site/luci/Extensions/ClusterModel/ClusterNode.py	2007/06/25 16:03:39	1.2
+++ conga/luci/site/luci/Extensions/ClusterModel/ClusterNode.py	2007/09/11 16:04:34	1.3
@@ -43,7 +43,7 @@
   def setInterface(self, ifc):
     nd = self.getMulticastNode()
     if nd is None:
-      return 
+      return
     else:
       nd.addAttribute("interface", ifc)
 
--- conga/luci/site/luci/Extensions/ClusterModel/Cman.py	2007/06/25 16:03:39	1.2
+++ conga/luci/site/luci/Extensions/ClusterModel/Cman.py	2007/09/11 16:04:34	1.3
@@ -12,4 +12,4 @@
 class Cman(TagObject):
   def __init__(self):
     TagObject.__init__(self)
-    self.TAG_NAME = TAG_NAME 
+    self.TAG_NAME = TAG_NAME
--- conga/luci/site/luci/Extensions/ClusterModel/Fence.py	2007/06/25 16:03:39	1.2
+++ conga/luci/site/luci/Extensions/ClusterModel/Fence.py	2007/09/11 16:04:34	1.3
@@ -12,4 +12,4 @@
 class Fence(TagObject):
   def __init__(self):
     TagObject.__init__(self)
-    self.TAG_NAME = TAG_NAME 
+    self.TAG_NAME = TAG_NAME
--- conga/luci/site/luci/Extensions/ClusterModel/FenceDaemon.py	2007/06/25 16:03:39	1.2
+++ conga/luci/site/luci/Extensions/ClusterModel/FenceDaemon.py	2007/09/11 16:04:34	1.3
@@ -16,7 +16,7 @@
 class FenceDaemon(TagObject):
   def __init__(self):
     TagObject.__init__(self)
-    self.TAG_NAME = TAG_NAME 
+    self.TAG_NAME = TAG_NAME
     self.addAttribute('post_join_delay', POST_JOIN_DEFAULT)
     self.addAttribute('post_fail_delay', POST_FAIL_DEFAULT)
     self.addAttribute('clean_start', CLEAN_START_DEFAULT)
--- conga/luci/site/luci/Extensions/ClusterModel/Gulm.py	2007/06/25 16:03:39	1.2
+++ conga/luci/site/luci/Extensions/ClusterModel/Gulm.py	2007/09/11 16:04:34	1.3
@@ -12,4 +12,4 @@
 class Gulm(TagObject):
   def __init__(self):
     TagObject.__init__(self)
-    self.TAG_NAME = TAG_NAME 
+    self.TAG_NAME = TAG_NAME
--- conga/luci/site/luci/Extensions/ClusterModel/Heuristic.py	2007/06/25 16:03:39	1.2
+++ conga/luci/site/luci/Extensions/ClusterModel/Heuristic.py	2007/09/11 16:04:34	1.3
@@ -12,4 +12,4 @@
 class Heuristic(TagObject):
   def __init__(self):
     TagObject.__init__(self)
-    self.TAG_NAME = TAG_NAME 
+    self.TAG_NAME = TAG_NAME
--- conga/luci/site/luci/Extensions/ClusterModel/Lockserver.py	2007/06/25 16:03:39	1.2
+++ conga/luci/site/luci/Extensions/ClusterModel/Lockserver.py	2007/09/11 16:04:34	1.3
@@ -12,4 +12,4 @@
 class Lockserver(TagObject):
   def __init__(self):
     TagObject.__init__(self)
-    self.TAG_NAME = TAG_NAME 
+    self.TAG_NAME = TAG_NAME
--- conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py	2007/08/24 22:01:42	1.7
+++ conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py	2007/09/11 16:04:34	1.8
@@ -973,7 +973,7 @@
         mcast.removeAttribute('interface')
       except:
         pass
-    self.mcast_address = mcast_addr 
+    self.mcast_address = mcast_addr
     self.mcast_interface = mcast_if
     self.usesMulticast = True
     self.set_nodes_multicast(mcast_addr, mcast_if=mcast_if)
--- conga/luci/site/luci/Extensions/ClusterModel/Multicast.py	2007/06/25 16:03:39	1.2
+++ conga/luci/site/luci/Extensions/ClusterModel/Multicast.py	2007/09/11 16:04:35	1.3
@@ -12,4 +12,4 @@
 class Multicast(TagObject):
   def __init__(self):
     TagObject.__init__(self)
-    self.TAG_NAME = TAG_NAME 
+    self.TAG_NAME = TAG_NAME
--- conga/luci/site/luci/Extensions/ClusterModel/Rm.py	2007/06/25 16:03:39	1.2
+++ conga/luci/site/luci/Extensions/ClusterModel/Rm.py	2007/09/11 16:04:35	1.3
@@ -12,4 +12,4 @@
 class Rm(TagObject):
   def __init__(self):
     TagObject.__init__(self)
-    self.TAG_NAME = TAG_NAME 
+    self.TAG_NAME = TAG_NAME
--- conga/luci/site/luci/Extensions/ClusterModel/Totem.py	2007/06/25 16:03:39	1.2
+++ conga/luci/site/luci/Extensions/ClusterModel/Totem.py	2007/09/11 16:04:35	1.3
@@ -12,4 +12,4 @@
 class Totem(TagObject):
   def __init__(self):
     TagObject.__init__(self)
-    self.TAG_NAME = TAG_NAME 
+    self.TAG_NAME = TAG_NAME
--- conga/luci/site/luci/Products/ManagedSystem/ManagedSystem.py	2006/05/30 20:17:21	1.1
+++ conga/luci/site/luci/Products/ManagedSystem/ManagedSystem.py	2007/09/11 16:04:35	1.2
@@ -29,7 +29,7 @@
 
 class ManagedSystem(PortalContent, DefaultDublinCoreImpl):
   meta_type = product_name
-  __implements__ = ( 
+  __implements__ = (
     PortalContent.__implements__,
     DefaultDublinCoreImpl.__implements__
     )
--- conga/luci/site/luci/Products/ManagedSystem/__init__.py	2006/05/30 20:17:21	1.1
+++ conga/luci/site/luci/Products/ManagedSystem/__init__.py	2007/09/11 16:04:35	1.2
@@ -12,12 +12,9 @@
 registerDirectory('skins', globals())
 
 def initialize(context):
-    product = utils.ContentInit(product_name, 
+    product = utils.ContentInit(product_name,
         content_types = contentClasses,
         permission = add_permission,
         extra_constructors = contentConstructors,
         fti = contentFTI)
     product.initialize(context)
-
-
-
--- conga/luci/site/luci/Products/ManagedSystem/skins/managedsystem_edit_form.cpt	2006/05/30 20:17:21	1.1
+++ conga/luci/site/luci/Products/ManagedSystem/skins/managedsystem_edit_form.cpt	2007/09/11 16:04:35	1.2
@@ -5,48 +5,48 @@
 
 <body>
 
-<div metal:fill-slot="main" 
+<div metal:fill-slot="main"
     tal:define="errors options/state/getErrors">
 
     <h1 i18n:translate="heading_edit_item">
     Edit
         <span i18n:name="itemtype">
-              <span i18n:translate=""         
-                    tal:content="python:here.getTypeInfo().Title()" 
+              <span i18n:translate=""
+                    tal:content="python:here.getTypeInfo().Title()"
                     tal:omit-tag="">Item type</span>
-        </span> 
+        </span>
     </h1>
-    
+
     <p i18n:translate="description_edit_document">
     Fill in the details of this document.
-    </p>  
+    </p>
 
     <form name="edit_form"
-          action="." 
-          method="post" 
+          action="."
+          method="post"
           enctype="multipart/form-data"
           tal:attributes="action string:${here/getId}/${template/getId}" >
-        
+
         <fieldset>
-    
+
             <legend i18n:translate="legend_document_details">Document Details</legend>
-          
-            <div class="field" 
+
+            <div class="field"
                  tal:condition="python:member.getProperty('visible_ids', None)"
                  tal:define="error errors/id | nothing;
                              id python:request.get('id', test(here.show_id(),here.getId(),''));"
                  tal:attributes="class python:test(error, 'field error', 'field')">
-                
+
                 <label for="id" i18n:translate="label_short_name">Short Name</label>
 
                 <div class="formHelp" i18n:translate="help_shortname">
-                Should not contain spaces, underscores or mixed case. 
+                Should not contain spaces, underscores or mixed case.
                 This will be part of the web address to this item.
                 </div>
-    
+
                 <div tal:content="error">Validation error output</div>
-    
-                <input type="text" 
+
+                <input type="text"
                        id="id"
                        name="id"
                        value=""
@@ -55,47 +55,47 @@
                        tal:attributes="value id;
                                        tabindex tabindex/next;"
                        />
-                
+
             </div>
 
-            <input type="hidden" 
-                   name="id" 
+            <input type="hidden"
+                   name="id"
                    tal:condition="python:not member.getProperty('visible_ids', '')"
-                   tal:attributes="value python:request.get('id', here.getId())" 
+                   tal:attributes="value python:request.get('id', here.getId())"
                    />
-          
+
             <div class="field"
                  tal:define="error errors/title|nothing;
                              Title request/title | here/Title;"
                  tal:attributes="class python:test(error, 'field error', 'field')">
-              
+
                 <label for="title" i18n:translate="label_title">Title</label>
-                
+
                 <span class="fieldRequired" title="Required"
                       i18n:attributes="title"
                       i18n:translate="label_required">(Required)</span>
-                    
+
                 <div tal:content="error">Validation error output</div>
-    
+
                 <input type="text"
                        id="title"
-                       name="title" 
-                       value="" 
-                       size="40" 
+                       name="title"
+                       value=""
+                       size="40"
                        tabindex=""
                        tal:attributes="value Title;
-                                       tabindex tabindex/next;" 
+                                       tabindex tabindex/next;"
                        />
-    
+
             </div>
-    
+
             <div class="field"
                  tal:define="description request/description | here/Description ">
 
                 <label for="description" i18n:translate="label_description">Description</label>
-                    
+
                 <div class="formHelp" i18n:translate="help_description">
-                A brief description of the item. 
+                A brief description of the item.
                 </div>
 
                 <textarea tabindex=""
@@ -104,10 +104,10 @@
                           tal:content="description"
                           tal:attributes="tabindex tabindex/next;"
                           >
-                Description 
+                Description
                 </textarea>
             </div>
-          
+
             <div class="field"
                    tal:define="tabindex tabindex/next;">
 
@@ -116,7 +116,7 @@
             <div class="formHelp" i18n:translate="help_format">
             Enter the address:
             </div>
-            
+
            <textarea cols="80"
             rows="25"
             tabindex=""
@@ -128,7 +128,7 @@
 
             </div>
 
-            <div class="field">            
+            <div class="field">
             <label for="language" i18n:translate="label_format">Language</label>
 
             <div class="formHelp" i18n:translate="help_format">
@@ -136,54 +136,54 @@
             </div>
                 <select name="text_format" tal:define="current here/getLanguage">
                 <option tal:repeat="item here/getLanguages"
-                    tal:content="item/name" 
+                    tal:content="item/name"
                     tal:attributes="value item/value; selected python:test(item['value'] == current, 1, 0)" />
                 </select>
             </div>
-    
+
             <div class="field"
                  tal:define="error errors/file|nothing;"
-                 tal:attributes="class python:test(error, 'field error', 'field')"> 
-                
+                 tal:attributes="class python:test(error, 'field error', 'field')">
+
                 <label for="file" i18n:translate="label_upload_contents_optional">Upload contents (optional)</label>
-            
+
                 <div class="formHelp" i18n:translate="help_uploads">
                 Uploaded files will replace the body text entered above.
                 </div>
 
                 <div tal:content="error">Validation error output</div>
-                
+
                 <input type="file"
                        id="file"
-                       name="file" 
-                       size="30" 
-                       tabindex="" 
+                       name="file"
+                       size="30"
+                       tabindex=""
                        value=""
-                       tal:attributes="tabindex tabindex/next" 
+                       tal:attributes="tabindex tabindex/next"
                        />
             </div>
-        
-        
+
+
             <div class="formControls"
-                 tal:define="process_creation request/process_creation|nothing;"> 
-                    <input class="context" 
+                 tal:define="process_creation request/process_creation|nothing;">
+                    <input class="context"
                            tabindex=""
-                           type="submit" 
-                           name="form.button.Save" 
-                           value="Save" 
+                           type="submit"
+                           name="form.button.Save"
+                           value="Save"
                            i18n:attributes="value"
-                           tal:attributes="tabindex tabindex/next;" /> 
-                           
-                    <input class="context" 
+                           tal:attributes="tabindex tabindex/next;" />
+
+                    <input class="context"
                            tabindex=""
-                           type="submit" 
-                           name="form.button.Cancel" 
-                           value="Cancel" 
+                           type="submit"
+                           name="form.button.Cancel"
+                           value="Cancel"
                            i18n:attributes="value"
-                           tal:attributes="tabindex tabindex/next;" /> 
+                           tal:attributes="tabindex tabindex/next;" />
             </div>
         </fieldset>
-        
+
         <input type="hidden" name="form.submitted" value="1" />
 
     </form>
--- conga/luci/site/luci/Products/ManagedSystem/skins/managedsystem_view.pt	2006/05/30 20:17:21	1.1
+++ conga/luci/site/luci/Products/ManagedSystem/skins/managedsystem_view.pt	2007/09/11 16:04:35	1.2
@@ -15,19 +15,19 @@
         <h1 tal:content="object_title" class="documentFirstHeading">
           Title or id
         </h1>
-    
+
         <p class="documentDescription"
            tal:content="here/Description"
            tal:condition="here/Description">
             Description
         </p>
-    
+
         <p tal:condition="python: not text and is_editable"
            i18n:translate="no_body_text"
            class="discreet">
             This item does not have any body text, click the edit tab to change it.
         </p>
-    
+
         <div class="stx"
              tal:condition="text"
              tal:attributes="class python:test(here.Format() in ('text/structured',
@@ -35,7 +35,7 @@
             <div tal:replace="structure text" />
         </div>
 
-    
+
     </tal:main-macro>
 </metal:main>
 
--- conga/luci/site/luci/bin/runzope.in	2006/08/23 19:58:42	1.4
+++ conga/luci/site/luci/bin/runzope.in	2007/09/11 16:04:35	1.5
@@ -22,11 +22,11 @@
 
 if /bin/grep True /var/lib/luci/.default_password_has_been_reset >/dev/null 2>&1; then
     exec "$PYTHON" "$ZOPE_RUN" -C "$CONFIG_FILE" "$@"
-else 
+else
     echo ""
     echo ""
     echo "luci's 'admin' password has to be changed before server is allowed to start"
-    echo "To do so, execute (as root): " 
+    echo "To do so, execute (as root): "
     echo -e "\tluci_admin password"
     echo ""
     echo ""
--- conga/luci/site/luci/etc/zope.conf.in	2007/03/15 16:50:33	1.2
+++ conga/luci/site/luci/etc/zope.conf.in	2007/09/11 16:04:35	1.3
@@ -431,7 +431,7 @@
 # Directive: cgi-maxlen
 #
 # Description:
-#     Set this value to limit the amount of form data being processed 
+#     Set this value to limit the amount of form data being processed
 #     by Zope to prevent DoS attacks.
 #
 # Default: 0 (= no restrictions)
@@ -887,7 +887,7 @@
 #
 #     Port numbers are offset by the setting of port-base.
 #
-#     To run the monitor-server an emergency user must be defined 
+#     To run the monitor-server an emergency user must be defined
 #     (through an 'access' file).
 #
 # Default:
--- conga/luci/storage/cache_report	2007/06/25 16:03:41	1.3
+++ conga/luci/storage/cache_report	2007/09/11 16:04:35	1.4
@@ -7,7 +7,7 @@
 <span tal:define="global ricci python:here.get_ricci_communicator(storagename, allowed_systems);
                   global cache_result python:here.cache_storage_report(ricci, request.SESSION)"
       tal:replace="string:"/>
-<span tal:condition="python: cache_result == True" 
+<span tal:condition="python: cache_result == True"
       tal:replace="string:OK"/>
 <span tal:condition="python: cache_result != True and access_to_host_allowed"
       tal:replace="structure cache_result"/>
--- conga/luci/storage/check-batch	2007/06/25 16:03:41	1.2
+++ conga/luci/storage/check-batch	2007/09/11 16:04:35	1.3
@@ -1,11 +1,11 @@
-<span tal:omit-tag="" 
-      tal:define="global storagename request/storagename; 
+<span tal:omit-tag=""
+      tal:define="global storagename request/storagename;
                   global batch_id    request/batch_id"/>
-<span tal:omit-tag="" 
-      tal:define="stosystemss                   context/systems/storage/objectItems; 
-                  global allowed_systems        python:here.allowed_systems(stosystemss); 
+<span tal:omit-tag=""
+      tal:define="stosystemss                   context/systems/storage/objectItems;
+                  global allowed_systems        python:here.allowed_systems(stosystemss);
                   global access_to_host_allowed python:here.access_to_host_allowed(storagename, allowed_systems)"/>
-<span tal:omit-tag="" 
+<span tal:omit-tag=""
       tal:define="global ricci  python:here.get_ricci_communicator(storagename, allowed_systems)"/>
 
 
@@ -23,11 +23,11 @@
  <span tal:omit-tag=""
        tal:define="index_html_URL   context/storage/index_html/absolute_url;
                    dummy            python:here.get_storage_batch_result(storagename, ricci, index_html_URL, batch_id);
-                   error            dummy/error; 
-                   completed        dummy/completed; 
-                   redirect_url     dummy/redirect_url; 
+                   error            dummy/error;
+                   completed        dummy/completed;
+                   redirect_url     dummy/redirect_url;
                    msg              dummy/msg">
-  
+
   <span tal:omit-tag=""
         tal:condition="not: error">
    <span tal:omit-tag=""
--- conga/luci/storage/clu_portlet_fetcher	2006/06/30 17:00:02	1.1
+++ conga/luci/storage/clu_portlet_fetcher	2007/09/11 16:04:35	1.2
@@ -5,7 +5,7 @@
 
 <metal:leftcolumn define-macro="left_column">
 <span tal:define="global stosystems allowed_systems"/>
-<div tal:omit-tag="" metal:use-macro="here/portlet_cluconfig/macros/stochooseportlet" /> 
+<div tal:omit-tag="" metal:use-macro="here/portlet_cluconfig/macros/stochooseportlet" />
 <!--
 <span tal:omit-tag="" tal:define="global hasstoragename request/storagename |nothing"/>
 <span tal:omit-tag="" tal:condition="hasstoragename">
--- conga/luci/storage/form-chooser	2007/06/25 16:03:41	1.6
+++ conga/luci/storage/form-chooser	2007/09/11 16:04:35	1.7
@@ -3,14 +3,14 @@
     <title id="pagetitle" tal:content="template/title">The title</title>
   </head>
   <body>
- 
+
   <metal:choose-form metal:define-macro="main-form">
-    
+
     <span tal:omit-tag=""
           tal:define="global preferred_size_units python:here.set_persistent_var('preferred_size_units', 'GB')"/>
     <span tal:omit-tag=""
           tal:define="global preferred_path_display python:here.set_persistent_var('preferred_path_display', 'path')"/>
-    
+
 <!--
     <span tal:omit-tag="" tal:condition="python: storage_report == None and storagename != None">
       <div metal:use-macro="here/form-macros/macros/error-form"/>
@@ -25,7 +25,7 @@
     </span>
 
     <span tal:omit-tag="" tal:condition="python: storage_report == None and storagename != None and access_to_host_allowed">
-      <div metal:use-macro="here/form-macros/macros/wait-probing-storage"/> 
+      <div metal:use-macro="here/form-macros/macros/wait-probing-storage"/>
     </span>
 
     <span tal:omit-tag="" tal:condition="python: (pagetype == '0' or pagetype == None) and storagename == None">
@@ -33,7 +33,7 @@
     </span>
 
     <span tal:omit-tag="" tal:condition="python: pagetype=='commit_changes' and storage_report != None">
-      <div metal:use-macro="here/form-macros/macros/commit-changes"/> 
+      <div metal:use-macro="here/form-macros/macros/commit-changes"/>
     </span>
 
     <span tal:omit-tag="" tal:condition="python: pagetype == '44' and storage_report != None">
--- conga/luci/storage/form-macros	2007/08/20 16:31:14	1.24
+++ conga/luci/storage/form-macros	2007/09/11 16:04:35	1.25
@@ -99,9 +99,9 @@
 
 
 <div metal:define-macro="commit-changes">
-   <span tal:omit-tag="" 
-        tal:define="batch_id     python:here.apply_storage_changes(ricci, storage_report, request); 
-                    check_URL    context/storage/check-batch/absolute_url; 
+   <span tal:omit-tag=""
+        tal:define="batch_id     python:here.apply_storage_changes(ricci, storage_report, request);
+                    check_URL    context/storage/check-batch/absolute_url;
                     check_url    python:check_URL + '?storagename=' + storagename + '&batch_id=' + batch_id">
    <div metal:use-macro="here/form-macros/macros/display-committing-changes"/>
    <form id="urls_form">
@@ -233,7 +233,7 @@
 }
 setTimeout("cache_report()", 10)
    </script>
-   
+
    <table style="width: 100%;">
     <tr>
      <td align="center">
@@ -265,11 +265,11 @@
        </td>
        <td>
         <select name="preferred_size_units" onchange="this.form.submit()">
-         <option value="MB" 
+         <option value="MB"
                  tal:attributes="selected python:preferred_size_units == 'MB'">MB - Megabytes</option>
-         <option value="GB" 
+         <option value="GB"
                  tal:attributes="selected python:preferred_size_units == 'GB'">GB - Gigabytes</option>
-         <option value="TB" 
+         <option value="TB"
                  tal:attributes="selected python:preferred_size_units == 'TB'">TB - Terabytes</option>
         </select>
        </td>
@@ -282,29 +282,29 @@
         <select name="preferred_path_display"
                 onchange="this.form.submit()"
                 style="width: 100%;">
-         <option value="path" 
+         <option value="path"
                  tal:attributes="selected python:preferred_path_display == 'path'">Device Path</option>
-         <option value="scsi" 
+         <option value="scsi"
                  tal:attributes="selected python:preferred_path_display == 'scsi'">SCSI ID</option>
         </select>
        </td>
       </tr>
      </table>
     </form>
-   </fieldset> 
-   
+   </fieldset>
+
    <dl tal:define="tmp_triple   python:here.group_systems_by_cluster(allowed_systems, from_cache=True);
                    nonclu_list  python:tmp_triple[0];
                    clu_list     python:tmp_triple[1];
                    bad_list     python:tmp_triple[2]">
-    
+
     <dt>
      You are authorized to administer Storage Systems on the list to the left
     </dt>
     <dd>
      Please, select one to administer
     </dd>
-    
+
     <dt>
      <span tal:condition="not: bad_list">
       All systems are up and running
@@ -328,7 +328,7 @@
        <tr>
         <td>
          <span style="color: red;"
-               tal:content="b/hostname"></span> 
+               tal:content="b/hostname"></span>
         </td>
         <td>
          <span tal:omit-tag=""
@@ -345,8 +345,8 @@
      </table>
     </dd>
    </dl>
-  </div> 
- 
+  </div>
+
 
   <div metal:define-macro="error-form">
    <h2>Error Form</h2>
@@ -431,7 +431,7 @@
      var href;
    if (typeof(mylink) == 'string')
      href=mylink;
-   else 
+   else
      href=mylink.href;
    window.open(href, windowname, 'width=500,height=500,scrollbars=yes');
    return false;
@@ -541,7 +541,7 @@
                <li tal:define="bd_data            source;
                                prefix             python:mapper['mapper_id'] + '_source_' + bd_data['path'] + '_';
                                properties_span_id python:prefix + 'properties_span_id'">
-                <span tal:define="displaying_source python:True" 
+                <span tal:define="displaying_source python:True"
                       tal:attributes="id properties_span_id">
                  <div metal:use-macro="here/form-macros/macros/display-BD"/>
                 </span>
@@ -596,7 +596,7 @@
    <div metal:use-macro="here/form-macros/macros/content-scripts"/>
    <div metal:use-macro="here/form-macros/macros/form-scripts"/>
    <div metal:use-macro="here/form-macros/macros/single-visible-span"/>
-   <span tal:omit-tag="" 
+   <span tal:omit-tag=""
          tal:define="mapper             python:here.get_mapper_data(storage_report, request['mapper_id']);
                      properties_span_id python:mapper['mapper_id'] + '_properties_span_id'">
     <div align="center">
@@ -609,18 +609,18 @@
       </span>
      </h3>
     </div>
-    
-    
-    <input type="checkbox" 
+
+
+    <input type="checkbox"
            id="graphics_checkbox_id"
            tal:attributes="checked mapper/graphical_view"
            onchange="var s = (this.checked)?'graphical_view':'textual_view'; singleVisibleSpan('mappings_view', s);"/>
      Graphical View <small>(Uncheck if volumes are too small to select)</small>
     <span id="mappings_view"
           tal:define="mappings_view_classnames mapper/mappings-view_css_classnames">
-    
-    <div id="graphical_view" 
-         tal:attributes="class mappings_view_classnames/graphical_view" 
+
+    <div id="graphical_view"
+         tal:attributes="class mappings_view_classnames/graphical_view"
          tal:define="global bd_path request/bd_path|nothing">
      <span tal:omit-tag=""
            tal:condition="not: bd_path">
@@ -632,21 +632,21 @@
                              width   string:700px;
                              height  string:195"></iframe>
     </div>
-    
-    <div id="textual_view" 
+
+    <div id="textual_view"
          tal:attributes="class mappings_view_classnames/textual_view">
     <br/>
     <div>
      <h3 style="font-size: small;">
-      <span tal:omit-tag="" 
+      <span tal:omit-tag=""
             tal:define="targets mapper/targets_all">
-       <span tal:omit-tag="" 
+       <span tal:omit-tag=""
              tal:condition="python:len(targets) > 1"
              tal:content="python:mapper['pretty_targets_name'] + ': '"/>
-       <span tal:omit-tag="" 
+       <span tal:omit-tag=""
              tal:condition="python:len(targets) == 1"
              tal:content="python:mapper['pretty_target_name'] + ': '"/>
-       <span tal:omit-tag="" 
+       <span tal:omit-tag=""
              tal:repeat="t targets">
         <span style="cursor: pointer; text-decoration: underline"
               tal:attributes="onclick python:'singleVisibleSpan(\'' + properties_span_id + '\', \'' + t['path'] + '\')'"
@@ -660,15 +660,15 @@
     <br/>
     <div>
      <h3 style="font-size: small;">
-      <span tal:omit-tag="" 
+      <span tal:omit-tag=""
             tal:define="sources mapper/sources">
-       <span tal:omit-tag="" 
+       <span tal:omit-tag=""
              tal:condition="python: len(sources) > 1"
              tal:content="python:mapper['pretty_sources_name'] + ': '"/>
-       <span tal:omit-tag="" 
+       <span tal:omit-tag=""
              tal:condition="python: len(sources) == 1"
              tal:content="python:mapper['pretty_source_name'] + ': '"/>
-       <span tal:omit-tag="" 
+       <span tal:omit-tag=""
              tal:repeat="s sources">
         <span style="cursor: pointer; text-decoration: underline"
               tal:attributes="onclick python:'singleVisibleSpan(\'' + properties_span_id + '\', \'' + s['path'] + '\')'"
@@ -681,13 +681,13 @@
     </div>
     <br/>
     </div>
-    
+
     </span>  <!-- display -->
-    
-    
-    
-    
-    
+
+
+
+
+
     <div tal:attributes="id properties_span_id"
          style="width: 700px; min-height: 360px; ">
      <span id="warning_box"
@@ -701,22 +701,22 @@
      <span tal:omit-tag=""
            tal:repeat="bd_data mapper/targets">
       <div tal:attributes="id    bd_data/path;
-                           class string:invisible"> 
+                           class string:invisible">
        <div metal:use-macro="here/form-macros/macros/display-BD"/>
       </div>
      </span>
      <span tal:omit-tag=""
            tal:repeat="bd_data mapper/new_targets">
       <div tal:attributes="id    bd_data/path;
-                           class string:invisible"> 
+                           class string:invisible">
        <div metal:use-macro="here/form-macros/macros/display-BD"/>
       </div>
      </span>
      <span tal:omit-tag=""
            tal:repeat="bd_data mapper/sources">
-      <div tal:define="displaying_source python:True" 
+      <div tal:define="displaying_source python:True"
            tal:attributes="id    bd_data/path;
-                           class string:invisible"> 
+                           class string:invisible">
        <div metal:use-macro="here/form-macros/macros/display-BD"/>
       </div>
      </span>
@@ -736,8 +736,8 @@
    <div metal:use-macro="here/form-macros/macros/content-scripts"/>
    <div metal:use-macro="here/form-macros/macros/form-scripts"/>
    <div metal:use-macro="here/form-macros/macros/single-visible-span"/>
-   <span tal:omit-tag="" 
-         tal:define="bd_data python:here.get_bd_data(storage_report, request['mapper_id'], request['bd_path']); 
+   <span tal:omit-tag=""
+         tal:define="bd_data python:here.get_bd_data(storage_report, request['mapper_id'], request['bd_path']);
                      mapper python:here.get_mapper_data(storage_report, request['mapper_id'])">
     <span tal:define="properties_span_id string:if seen in javascript error log -> FIXME">
      <div metal:use-macro="here/form-macros/macros/display-BD"/>
@@ -747,31 +747,31 @@
 
 
 
-  <div metal:define-macro="create-mapper-form" 
-       tal:define="mapper                  python:here.get_mapper_template_data(storage_report, request['mapper_type']); 
-                   prefix                  python:'create_mapper_template_' + mapper['mapper_type'] + '_'; 
-                   properties_span_id      string:; 
-                   mapper_template_form_id python:prefix + 'mapper_template_form_id'; 
+  <div metal:define-macro="create-mapper-form"
+       tal:define="mapper                  python:here.get_mapper_template_data(storage_report, request['mapper_type']);
+                   prefix                  python:'create_mapper_template_' + mapper['mapper_type'] + '_';
+                   properties_span_id      string:;
+                   mapper_template_form_id python:prefix + 'mapper_template_form_id';
                    create_mapper_button_id python:prefix + 'mapper_template_apply_button_id';
                    form_submit_button_id   create_mapper_button_id">
    <div metal:use-macro="here/form-macros/macros/forms-css"/>
    <div metal:use-macro="here/form-macros/macros/form-scripts"/>
-   <form tal:attributes="id      mapper_template_form_id; 
+   <form tal:attributes="id      mapper_template_form_id;
                          method  string:get">
-    <input tal:attributes="type  string:hidden; 
-                           name  string:pagetype; 
+    <input tal:attributes="type  string:hidden;
+                           name  string:pagetype;
                            value string:commit_changes"/>
-    <input tal:attributes="type  string:hidden; 
-                           name  string:object_type; 
+    <input tal:attributes="type  string:hidden;
+                           name  string:object_type;
                            value string:mapper_template"/>
-    <input tal:attributes="type  string:hidden; 
-                           name  string:mapper_type; 
+    <input tal:attributes="type  string:hidden;
+                           name  string:mapper_type;
                            value mapper/mapper_type"/>
-    <input tal:attributes="type  string:hidden; 
-                           name  string:mapper_id; 
+    <input tal:attributes="type  string:hidden;
+                           name  string:mapper_id;
                            value python:''"/>
-    <input tal:attributes="type  string:hidden; 
-                           name  string:storagename; 
+    <input tal:attributes="type  string:hidden;
+                           name  string:storagename;
                            value storagename"/>
     <table class="props-form-table">
      <tr class="props-form-header">
@@ -823,7 +823,7 @@
                  tal:repeat="bd bds">
             <tr>
              <td>
-              <input tal:attributes="type string:checkbox; 
+              <input tal:attributes="type string:checkbox;
                                      name python:'source_bd_' + bd['path']"/>
              </td>
              <td tal:define="bytes  bd/props/size/value;
@@ -859,17 +859,17 @@
           &nbsp;
          </td>
          <td align="right">
-          <input type="button" 
-                 name="action_type" 
-                 value="Reset" 
+          <input type="button"
+                 name="action_type"
+                 value="Reset"
                  onclick="return reset_form(this.form)"
                  class="form_button"/>
           <input tal:define="prompt_msg    python:'Do you really want to create new ' + mapper['pretty_type'] + '?';
-                             validate_url  context/validate_html/absolute_url" 
-                 tal:attributes="id      create_mapper_button_id; 
-                                 type    string:button; 
-                                 name    string:action_type; 
-                                 value   string:Create; 
+                             validate_url  context/validate_html/absolute_url"
+                 tal:attributes="id      create_mapper_button_id;
+                                 type    string:button;
+                                 name    string:action_type;
+                                 value   string:Create;
                                  onclick python:'return validate_and_submit_form(\'' + validate_url + '\', \'' + mapper_template_form_id + '\', \'' + create_mapper_button_id + '\', \'' + prompt_msg + '\')'"
                  class="form_button"/>
          </td>
@@ -885,42 +885,42 @@
 
 
 
-  <div metal:define-macro="add-sources-form" 
-       tal:define="mapper                  python:here.get_mapper_data(storage_report, request['mapper_id']); 
-                   prefix                  python:'add_sources_to_' + mapper['mapper_id'] + '_'; 
-                   properties_span_id      string:; 
-                   add_sources_form_id     python:prefix + 'form_id'; 
-                   add_sources_button_id   python:prefix + 'button_id'; 
+  <div metal:define-macro="add-sources-form"
+       tal:define="mapper                  python:here.get_mapper_data(storage_report, request['mapper_id']);
+                   prefix                  python:'add_sources_to_' + mapper['mapper_id'] + '_';
+                   properties_span_id      string:;
+                   add_sources_form_id     python:prefix + 'form_id';
+                   add_sources_button_id   python:prefix + 'button_id';
                    form_submit_button_id   add_sources_button_id">
    <div metal:use-macro="here/form-macros/macros/forms-css"/>
    <div metal:use-macro="here/form-macros/macros/form-scripts"/>
-   <span tal:omit-tag="" 
+   <span tal:omit-tag=""
          tal:condition="not: mapper/new_sources">
-    There are no available <span tal:replace="mapper/pretty_sources_name"/> to be added to <span tal:replace="mapper/pretty_type"/> '<span tal:replace="mapper/pretty_name"/>'. 
+    There are no available <span tal:replace="mapper/pretty_sources_name"/> to be added to <span tal:replace="mapper/pretty_type"/> '<span tal:replace="mapper/pretty_name"/>'.
      <br/>
      <br/>
-    <a tal:define="go_to_mapper_url  python:'./?pagetype=52&mapper_type=' + mapper['mapper_type'] + '&mapper_id=' + mapper['mapper_id'] + '&storagename=' + storagename" 
+    <a tal:define="go_to_mapper_url  python:'./?pagetype=52&mapper_type=' + mapper['mapper_type'] + '&mapper_id=' + mapper['mapper_id'] + '&storagename=' + storagename"
            tal:attributes="href go_to_mapper_url">
      Go Back to <span tal:replace="mapper/pretty_type"/>
     </a>
    </span>
-   <form tal:condition="mapper/new_sources" 
-         tal:attributes="id      add_sources_form_id; 
+   <form tal:condition="mapper/new_sources"
+         tal:attributes="id      add_sources_form_id;
                          method  string:get">
-    <input tal:attributes="type  string:hidden; 
-                           name  string:pagetype; 
+    <input tal:attributes="type  string:hidden;
+                           name  string:pagetype;
                            value string:commit_changes"/>
-    <input tal:attributes="type  string:hidden; 
-                           name  string:object_type; 
+    <input tal:attributes="type  string:hidden;
+                           name  string:object_type;
                            value string:add_sources"/>
-    <input tal:attributes="type  string:hidden; 
-                           name  string:mapper_type; 
+    <input tal:attributes="type  string:hidden;
+                           name  string:mapper_type;
                            value mapper/mapper_type"/>
-    <input tal:attributes="type  string:hidden; 
-                           name  string:mapper_id; 
+    <input tal:attributes="type  string:hidden;
+                           name  string:mapper_id;
                            value mapper/mapper_id"/>
-    <input tal:attributes="type  string:hidden; 
-                           name  string:storagename; 
+    <input tal:attributes="type  string:hidden;
+                           name  string:storagename;
                            value storagename"/>
     <table class="props-form-table">
      <tr class="props-form-header">
@@ -960,7 +960,7 @@
               tal:repeat="bd bds">
          <tr>
           <td>
-           <input tal:attributes="type string:checkbox; 
+           <input tal:attributes="type string:checkbox;
                                   name python:'source_bd_' + bd['path']"/>
           </td>
           <td tal:define="bytes  bd/props/size/value;
@@ -991,18 +991,18 @@
           &nbsp;
          </td>
          <td align="right">
-          <input tal:define="go_to_mapper_url  python:'./?pagetype=52&mapper_type=' + mapper['mapper_type'] + '&mapper_id=' + mapper['mapper_id'] + '&storagename=' + storagename" 
-                 tal:attributes="type    string:button; 
-                                 name    string:cancel_button; 
-                                 value   string:Cancel; 
+          <input tal:define="go_to_mapper_url  python:'./?pagetype=52&mapper_type=' + mapper['mapper_type'] + '&mapper_id=' + mapper['mapper_id'] + '&storagename=' + storagename"
+                 tal:attributes="type    string:button;
+                                 name    string:cancel_button;
+                                 value   string:Cancel;
                                  onclick python:'window.location.assign(\'' + go_to_mapper_url + '\')'"
                  class="form_button"/>
           <input tal:define="prompt_msg    python:'Do you really want to add selected ' + mapper['pretty_sources_name'] + ' to \\\'' + mapper['pretty_name'] + '\\\'?';
-                             validate_url  context/validate_html/absolute_url" 
-                 tal:attributes="id      add_sources_button_id; 
-                                 type    string:button; 
-                                 name    string:action_type; 
-                                 value   string:Add; 
+                             validate_url  context/validate_html/absolute_url"
+                 tal:attributes="id      add_sources_button_id;
+                                 type    string:button;
+                                 name    string:action_type;
+                                 value   string:Add;
                                  onclick python:'return validate_and_submit_form(\'' + validate_url + '\', \'' + add_sources_form_id + '\', \'' + add_sources_button_id + '\', \'' + prompt_msg + '\')'"
                  class="form_button"/>
          </td>
@@ -1021,9 +1021,9 @@
   <div tal:omit-tag="" metal:define-macro="display-props-tableless">
    <span tal:omit-tag=""
          tal:define="predefines_test python:'display-props: ' + str(props) + prefix + properties_span_id"/>
-   <span tal:omit-tag="" 
+   <span tal:omit-tag=""
          tal:repeat="prop props">
-     <tr tal:define="p            prop/name; 
+     <tr tal:define="p            prop/name;
                      prop_pr_name prop/pretty_name"
          tal:condition="not: prop/hidden">
       <td tal:content="prop_pr_name"/>
@@ -1043,7 +1043,7 @@
                     tal:attributes="id       select_id;
                                     onfocus  python:'replace_properties_block__old_select_value = this.value';
                                     onchange python:'replace_properties_block(\'' + properties_span_id + '\', \'' + select_id + '\')'">
-             <span tal:omit-tag="" 
+             <span tal:omit-tag=""
                    tal:repeat="repl_name repls/repl_names">
               <option tal:attributes="value python:repls[repl_name]['path']"/><span tal:replace="repl_name"/>
              </span>
@@ -1064,19 +1064,19 @@
 
 
           <input tal:condition="python:prop_type == 'text'"
-                 tal:attributes="name        p; 
-                                 type        string:text; 
+                 tal:attributes="name        p;
+                                 type        string:text;
                                  value       prop/value;
                                  onkeypress  python:'return validate_text_keypress(this, event, 2, \'' + prop['validation']['illegal_chars'] + '\', ' + str(prop['validation']['max_length']) + ')';
                                  onchange      python:'validate_text(this, 2, \'' + prop['validation']['illegal_chars'] + '\', \'' + prop['validation']['reserved_words'] + '\', ' + str(prop['validation']['min_length']) + ', ' + str(prop['validation']['max_length']) + ', \'' + form_submit_button_id + '\')'"/>
-          
-          
-          
+
+
+
           <span tal:omit-tag=""
                 tal:condition="python:prop_type == 'int' and prop_units != 'bytes'">
-           <input tal:attributes="name   p; 
-                                  type   string:text; 
-                                  size   string:15; 
+           <input tal:attributes="name   p;
+                                  type   string:text;
+                                  size   string:15;
                                   value  prop/value;
                                   onchange python:'validate_int(this, 2, ' + str(prop['validation']['min']) + ', ' + str(prop['validation']['max']) + ', ' + str(prop['validation']['step']) + ', \'' + prop_units + '\', \'' + form_submit_button_id + '\')'"
                   onkeypress="return validate_int_keypress(this, event, 2)"/>
@@ -1094,7 +1094,7 @@
                              step   python:here.convert_bytes(prop['validation']['step'], units)">
             <input tal:attributes="name   p;
                                    type   string:text;
-                                   size   string:15; 
+                                   size   string:15;
                                    value  value;
                                    onchange python:'validate_float(this, 2, ' + str(minim) + ', ' + str(maxim) + ', ' + str(step) + ', \'' + units + '\', \'' + form_submit_button_id + '\')'"
                    onkeypress="return validate_float_keypress(this, event, 2)"/>
@@ -1102,18 +1102,18 @@
             <span tal:replace="units"/>
            </span>
           </span>
-          
-          
-          
+
+
+
           <span tal:condition="python:prop_type == 'select'">
            <select tal:define="prop_options prop/value"
                    tal:attributes="name p">
-            <span tal:omit-tag="" 
+            <span tal:omit-tag=""
                   tal:condition="python: prop_units != 'bytes'"
                   tal:repeat="prop_opt prop_options">
              <option tal:attributes="value prop_opt"/><span tal:replace="prop_opt"/>
             </span>
-            <span tal:omit-tag="" 
+            <span tal:omit-tag=""
                   tal:condition="python: prop_units == 'bytes'"
                   tal:repeat="prop_opt prop_options">
              <option tal:attributes="value prop_opt"/><span tal:define="dummy python: here.bytes_to_value_units(prop_opt);
@@ -1154,7 +1154,7 @@
   <div tal:omit-tag="" metal:define-macro="display-content">
    <span tal:omit-tag=""
          tal:define="predefines_test python:'display-content: ' + str(cont) + properties_span_id"/>
-   <span tal:omit-tag="" 
+   <span tal:omit-tag=""
          tal:define="props cont/props_ordered">
     <table class="props-inner-table">
      <div metal:use-macro="here/form-macros/macros/display-props-tableless"/>
@@ -1166,7 +1166,7 @@
 
   <div tal:omit-tag="" metal:define-macro="content-scripts">
    <script language="javascript" type="text/javascript">
-    
+
     var replace_properties_block__old_select_value = ''
     function replace_properties_block(parent_id, select_id) {
        selem = document.getElementById(select_id);
@@ -1174,12 +1174,12 @@
        selem.value = replace_properties_block__old_select_value;
        singleVisibleSpan(parent_id, child_id);
     }
-    
+
     function change_content(select_content_id, content_span_id) {
        content_id = document.getElementById(select_content_id).value;
        singleVisibleSpan(content_span_id, content_id);
     }
-    
+
     function reset_bd_form(form, select_content_id, content_span_id) {
        if (reset_form(form)) {
           change_content(select_content_id, content_span_id);
@@ -1187,7 +1187,7 @@
        }
        return false;
     }
-    
+
    </script>
   </div>
 
@@ -1198,13 +1198,13 @@
    input                  { background-image: none; }
    input.validation_error { border: medium double red; background-color: orange; }
    input.selected         { border: thin solid orange; }
-   input.form_button      { background-color: #fff; 
+   input.form_button      { background-color: #fff;
                             -moz-border-radius-topleft: 7px;
                             -moz-border-radius-topright: 7px;
                             -moz-border-radius-bottomleft: 7px;
                             -moz-border-radius-bottomright: 7px; }
  </style>
- 
+
  <script language="javascript" type="text/javascript">
 
 
@@ -1213,9 +1213,9 @@
 function validate_text(elem, timeout, illegal_chars, reserved_words, min_length, max_length, button_id)
 {
    document.getElementById(button_id).disabled = true;
-   
+
    var value = elem.value;
-   
+
    for (var i=0; i<value.length; i++) {
       if (illegal_chars.indexOf(value[i]) != -1) {
          //return;
@@ -1224,7 +1224,7 @@
          return;
       }
    }
-   
+
    var res_list = reserved_words.split(';');
    for (var i=0; i<res_list.length; i++) {
       if (value == res_list[i] && value != '') {
@@ -1234,21 +1234,21 @@
          return;
       }
    }
-   
+
    if (value.length < min_length) {
       //return;
       elem.className = 'validation_error';
       display_warning(elem, timeout, 'Minimum length is ' + min_length);
       return;
    }
-   
+
    if (value.length > max_length) {
       //return;
       elem.className = 'validation_error';
       display_warning(elem, timeout, 'Maximum length is ' + max_length);
       return;
    }
-   
+
    elem.className = '';
    document.getElementById(button_id).disabled = false;
 }
@@ -1257,7 +1257,7 @@
 function validate_int(elem, timeout, min, max, step, units, button_id)
 {
    document.getElementById(button_id).disabled = true;
-   
+
    var value = elem.value;
    for (var i=0; i<value.length; i++) {
       if ('0123456789'.indexOf(value[i]) == -1) {
@@ -1267,7 +1267,7 @@
          return;
       }
    }
-   
+
    min  = parseInt(min);
    max  = parseInt(max);
    step = parseInt(step);
@@ -1275,21 +1275,21 @@
       step = 1;
    value = parseInt(value);
    value = (value / step) * step;
-   
+
    if (value < min) {
       //return;
       elem.className = 'validation_error';
       display_warning(elem, timeout, 'Minimum allowed value is ' + min + ' ' + units);
       return;
    }
-   
+
    if (value > max) {
       //return;
       elem.className = 'validation_error';
       display_warning(elem, timeout, 'Maximum allowed value is ' + max + ' ' + units);
       return;
    }
-   
+
    elem.className = '';
    document.getElementById(button_id).disabled = false;
 }
@@ -1297,7 +1297,7 @@
 function validate_float(elem, timeout, min, max, step, units, button_id)
 {
    document.getElementById(button_id).disabled = true;
-   
+
    var value = elem.value;
    for (var i=0; i<value.length; i++) {
       if ('0123456789.'.indexOf(value[i]) == -1) {
@@ -1307,7 +1307,7 @@
          return;
       }
    }
-   
+
    min  = parseFloat(min);
    max  = parseFloat(max);
    step = parseFloat(step);
@@ -1315,21 +1315,21 @@
       step = 0.00001;
    value = parseFloat(value);
    value = (value / step) * step;
-   
+
    if (value < min) {
       //return;
       elem.className = 'validation_error';
       display_warning(elem, timeout, 'Minimum allowed value is ' + min + ' ' + units);
       return;
    }
-   
+
    if (value > max) {
       //return;
       elem.className = 'validation_error';
       display_warning(elem, timeout, 'Maximum allowed value is ' + max + ' ' + units);
       return;
    }
-   
+
    elem.className = '';
    document.getElementById(button_id).disabled = false;
 }
@@ -1340,24 +1340,24 @@
    var ev = event;
    if (!ev) ev = window.event;
    var key = get_keycode(ev);
-   
+
    if (key == 8 || key == 9) return true;
    else if (ev.which) ;
    else if (document.selection) ;
    else return true;
-   
+
    var ch = String.fromCharCode(key);
-   
+
    if (illegal_chars.indexOf(ch) != -1) {
 //      display_warning(elem, timeout, 'Illegal characters are: \'' + illegal_chars + '\'');
       return false;
    }
-   
+
    if (elem.value.length + 1 > max_length) {
 //      display_warning(elem, timeout, 'Maximum allowed length is ' + max_length);
       return false;
    }
-   
+
    return true;
 }
 
@@ -1366,19 +1366,19 @@
    var ev = event;
    if (!ev) ev = window.event;
    var key = get_keycode(ev);
-   
+
    if (key == 8 || key == 9) return true;
    else if (ev.which) ;
    else if (document.selection) ;
    else return true;
-   
+
    var ch = String.fromCharCode(key);
-   
+
    if ('0123456789'.indexOf(ch) == -1) {
 //      display_warning(elem, timeout, 'Only whole numbers are allowed');
       return false;
    }
-   
+
    return true;
 }
 
@@ -1387,19 +1387,19 @@
    var ev = event;
    if (!ev) ev = window.event;
    var key = get_keycode(ev);
-   
+
    if (key == 8 || key == 9) return true;
    else if (ev.which) ;
    else if (document.selection) ;
    else return true;
-   
+
    var ch = String.fromCharCode(key);
-   
+
    if ('0123456789.'.indexOf(ch) == -1) {
 //      display_warning(elem, timeout, 'Only digits and dot are allowed');
       return false;
    }
-   
+
    if (ch == '.') {
       txt = elem.value;
       c = 0;
@@ -1410,7 +1410,7 @@
       if (c != 0)
          return false;
    }
-   
+
    return true;
 }
 
@@ -1432,15 +1432,15 @@
 		pending_warning = false;
 	}
     return;
-    
+
     var geom_obj = getGeom(el);
-    
+
     var warning_box = document.getElementById('warning_box');
     if (!warning_box) {
        alert(text);
        return;
     }
-    
+
     warning_box.innerHTML = text;
     /*
     warning_box.style.position = 'absolute'
@@ -1462,7 +1462,7 @@
 function getGeom(el)
 {
    var object   = new Object();
-   
+
    object.x     = el.offsetLeft;
    object.y     = el.offsetTop;
    var parent    = el.offsetParent;
@@ -1487,7 +1487,7 @@
    }
    return false;
 }
-    
+
 
 
 
@@ -1523,12 +1523,12 @@
               return;
            }
         } else {
-           
+
            // get elem_name & msg
            var ind = res.indexOf(' ');
            var elem_name = res.substr(0, ind);
            var err_msg = strip_left(res.substr(ind));
-           
+
            form = document.getElementById(tmp_form_id);
            for (i=0; i<form.length; i++) {
               elem = form.elements[i];
@@ -1536,7 +1536,7 @@
               if (name == elem_name)
                  elem.className = 'validation_error';
            }
-           
+
            alert(err_msg);
         }
     } else {
@@ -1575,7 +1575,7 @@
       document.getElementById(tmp_button_id).disabled = true;
 }
 
-    
+
  </script>
 </div>
 
@@ -1617,7 +1617,7 @@
    <div metal:use-macro="here/form-macros/macros/forms-css"/>
    <span tal:omit-tag=""
          tal:define="predefines_test python:'display-BD: ' + str(bd_data) + storagename + properties_span_id"/>
-   <span tal:omit-tag="" 
+   <span tal:omit-tag=""
          tal:define="mapper                     string:;
                      conts                      python:bd_data['contents'];
                      prefix                     prefix|bd_data/path;
@@ -1629,28 +1629,28 @@
                      content_span_id            python:prefix + 'content_span_id'">
     <form tal:attributes="id      bd_form_id;
                           method  string:get">
-     <input tal:attributes="type  string:hidden; 
-                            name  string:pagetype; 
+     <input tal:attributes="type  string:hidden;
+                            name  string:pagetype;
                             value string:commit_changes"/>
-     <input tal:condition="not: bd_data/new" 
-            tal:attributes="type  string:hidden; 
+     <input tal:condition="not: bd_data/new"
+            tal:attributes="type  string:hidden;
                             name  string:object_type;
                             value string:bd"/>
-     <input tal:condition="bd_data/new" 
-            tal:attributes="type  string:hidden; 
+     <input tal:condition="bd_data/new"
+            tal:attributes="type  string:hidden;
                             name  string:object_type;
                             value string:bd_template"/>
      <input tal:attributes="type  string:hidden;
                             name  string:mapper_id;
                             value bd_data/mapper_id"/>
-     <input tal:attributes="type  string:hidden; 
-                            name  string:mapper_type; 
+     <input tal:attributes="type  string:hidden;
+                            name  string:mapper_type;
                             value bd_data/mapper_type"/>
-     <input tal:attributes="type  string:hidden; 
-                            name  string:bd_path; 
+     <input tal:attributes="type  string:hidden;
+                            name  string:bd_path;
                             value bd_data/path"/>
-     <input tal:attributes="type  string:hidden; 
-                            name  string:storagename; 
+     <input tal:attributes="type  string:hidden;
+                            name  string:storagename;
                             value storagename"/>
      <table class="props-form-table">
       <tr class="props-form-header">
@@ -1697,7 +1697,7 @@
       </tr>
       <tr class="props-form-body">
        <td>
-        <span tal:omit-tag="" 
+        <span tal:omit-tag=""
               tal:define="props bd_data/props_ordered">
          <table class="props-inner-table">
           <div metal:use-macro="here/form-macros/macros/display-props-tableless"/>
@@ -1726,25 +1726,25 @@
               Content<span tal:condition="python:len(conts) == 1"
                            tal:replace="string::"/>
               <select tal:define="funct python:'change_content(\'' + select_content_id + '\', \'' + content_span_id + '\')'"
-                      tal:condition="python:len(conts) > 1" 
-                      tal:attributes="id       select_content_id; 
-                                      name     string:content_id; 
+                      tal:condition="python:len(conts) > 1"
+                      tal:attributes="id       select_content_id;
+                                      name     string:content_id;
                                       onchange funct">
-               <span tal:omit-tag="" 
+               <span tal:omit-tag=""
                      tal:repeat="cont conts">
                 <option tal:attributes="value cont/id"/><span tal:replace="cont/name"/>
                </span>
               </select>
               <span tal:define="cont python:conts[0]"
                     tal:condition="python:len(conts) == 1">
-               <input tal:attributes="id    select_content_id; 
-                                      type  string:hidden; 
-                                      name  string:content_id; 
+               <input tal:attributes="id    select_content_id;
+                                      type  string:hidden;
+                                      name  string:content_id;
                                       value cont/id"/>
                <span tal:replace="cont/name"/>
               </span>
-              <span tal:omit-tag="" 
-                    tal:define="cont python:conts[0]" 
+              <span tal:omit-tag=""
+                    tal:define="cont python:conts[0]"
                     tal:condition="not: displaying_source|nothing">
                <span tal:condition="cont/is_source">
                 <br/>
@@ -1795,31 +1795,31 @@
         <tr>
         <td align="left"
              tal:define="actions bd_data/actions">
-         <span tal:omit-tag="" 
+         <span tal:omit-tag=""
                tal:repeat="action actions">
           <span tal:omit-tag=""
-                tal:define="act_name  action/name; 
-                            act_msg   action/msg; 
+                tal:define="act_name  action/name;
+                            act_msg   action/msg;
                             act_link  action/link">
            <span tal:condition="act_link">
-            <input tal:define="act_link    python:act_link + '&storagename=' + storagename; 
+            <input tal:define="act_link    python:act_link + '&storagename=' + storagename;
                                funct       python:'window.location.assign(\'' + act_link + '\')'"
-                   tal:attributes="type    string:button; 
-                                   name    string:action_type; 
-                                   value   act_name; 
+                   tal:attributes="type    string:button;
+                                   name    string:action_type;
+                                   value   act_name;
                                    onclick funct"
                    class="form_button"/>
            </span>
            <span tal:condition="not: act_link">
-            <input tal:condition="act_msg" 
-                   tal:attributes="type    string:submit; 
-                                   name    string:action_type; 
+            <input tal:condition="act_msg"
+                   tal:attributes="type    string:submit;
+                                   name    string:action_type;
                                    value   act_name;
                                    onclick python:'return confirm(\'' + act_msg + '\')'"
                    class="form_button"/>
-            <input tal:condition="not: act_msg" 
-                   tal:attributes="type   string:submit; 
-                                   name   string:action_type; 
+            <input tal:condition="not: act_msg"
+                   tal:attributes="type   string:submit;
+                                   name   string:action_type;
                                    value  act_name"
                    class="form_button"/>
            </span>
@@ -1832,27 +1832,27 @@
                tal:condition="not: bd_data/need_apply_button">
           &nbsp;
          </span>
-         <span tal:omit-tag="" 
+         <span tal:omit-tag=""
                tal:condition="bd_data/need_apply_button">
-          <input tal:attributes="type    string:button; 
-                                 name    string:action_type; 
-                                 value   string:Reset; 
+          <input tal:attributes="type    string:button;
+                                 name    string:action_type;
+                                 value   string:Reset;
                                  onclick python:'return reset_bd_form(this.form, \'' + select_content_id + '\', \'' + content_span_id + '\')'"
                  class="form_button"/>
-          <input tal:condition="bd_data/new" 
-                 tal:define="prompt_msg  python:'Do you really want to create ' + bd_data['pretty_type'] + '?'" 
+          <input tal:condition="bd_data/new"
+                 tal:define="prompt_msg  python:'Do you really want to create ' + bd_data['pretty_type'] + '?'"
                  tal:attributes="id      apply_button_id;
-                                 type    string:button; 
-                                 name    string:action_type; 
-                                 value   string:Create; 
+                                 type    string:button;
+                                 name    string:action_type;
+                                 value   string:Create;
                                  onclick python:'return validate_and_submit_form(\'' + validate_url + '\', \'' + bd_form_id + '\', \'' + apply_button_id + '\', \'' + prompt_msg + '\')'"
                  class="form_button"/>
-          <input tal:condition="not: bd_data/new" 
-                 tal:define="prompt_msg  python:'Do you really want to apply changes to ' + bd_data['pretty_type'] + ' \\\'' + bd_data['pretty_name'] + '\\\'?'" 
-                 tal:attributes="id      apply_button_id; 
-                                 type    string:button; 
-                                 name    string:action_type; 
-                                 value   string:Apply; 
+          <input tal:condition="not: bd_data/new"
+                 tal:define="prompt_msg  python:'Do you really want to apply changes to ' + bd_data['pretty_type'] + ' \\\'' + bd_data['pretty_name'] + '\\\'?'"
+                 tal:attributes="id      apply_button_id;
+                                 type    string:button;
+                                 name    string:action_type;
+                                 value   string:Apply;
                                  onclick python:'return validate_and_submit_form(\'' + validate_url + '\', \'' + bd_form_id + '\', \'' + apply_button_id + '\', \'' + prompt_msg + '\')'"
                  class="form_button"/>
          </span>
@@ -1881,20 +1881,20 @@
                      form_submit_button_id      apply_button_id"
          tal:attributes="id     mapper_form_id;
                          method string:get">
-    <input tal:attributes="type  string:hidden; 
-                           name  string:pagetype; 
+    <input tal:attributes="type  string:hidden;
+                           name  string:pagetype;
                            value string:commit_changes"/>
-    <input tal:attributes="type  string:hidden; 
-                           name  string:object_type; 
+    <input tal:attributes="type  string:hidden;
+                           name  string:object_type;
                            value string:mapper"/>
-    <input tal:attributes="type  string:hidden; 
-                           name  string:mapper_id; 
+    <input tal:attributes="type  string:hidden;
+                           name  string:mapper_id;
                            value mapper/mapper_id"/>
-    <input tal:attributes="type  string:hidden; 
-                           name  string:mapper_type; 
+    <input tal:attributes="type  string:hidden;
+                           name  string:mapper_type;
                            value mapper/mapper_type"/>
-    <input tal:attributes="type  string:hidden; 
-                           name  string:storagename; 
+    <input tal:attributes="type  string:hidden;
+                           name  string:storagename;
                            value storagename"/>
     <table class="props-form-table">
      <tr class="props-form-header">
@@ -1934,32 +1934,32 @@
        <table style="width: 100%;">
         <tr>
          <td align="left">
-          <span tal:omit-tag="" 
-                tal:define="actions mapper/actions" 
+          <span tal:omit-tag=""
+                tal:define="actions mapper/actions"
                 tal:repeat="action actions">
-           <span tal:define="act_name  action/name; 
-                             act_msg   action/msg; 
+           <span tal:define="act_name  action/name;
+                             act_msg   action/msg;
                              act_link  action/link"
                  align="center">
             <span tal:condition="act_link">
-             <input tal:define="act_link    python:act_link + '&storagename=' + storagename; 
+             <input tal:define="act_link    python:act_link + '&storagename=' + storagename;
                                 funct       python:'window.location.assign(\'' + act_link + '\')'"
-                    tal:attributes="type    string:button; 
-                                    name    string:action_type; 
-                                    value   act_name; 
+                    tal:attributes="type    string:button;
+                                    name    string:action_type;
+                                    value   act_name;
                                     onclick funct"
                     class="form_button"/>
             </span>
             <span tal:condition="not: act_link">
-             <input tal:condition="act_msg" 
-                    tal:attributes="type    string:submit; 
-                                    name    string:action_type; 
-                                    value   act_name; 
+             <input tal:condition="act_msg"
+                    tal:attributes="type    string:submit;
+                                    name    string:action_type;
+                                    value   act_name;
                                     onclick python:'return confirm(\'' + act_msg + '\')'"
                     class="form_button"/>
-             <input tal:condition="not: act_msg" 
-                    tal:attributes="type   string:submit; 
-                                    name   string:action_type; 
+             <input tal:condition="not: act_msg"
+                    tal:attributes="type   string:submit;
+                                    name   string:action_type;
                                     value  act_name"
                     class="form_button"/>
             </span>
@@ -1979,11 +1979,11 @@
                   onclick="return reset_form(this.form)"
                   class="form_button"/>
            <input tal:define="prompt_msg    python:'Do you really want to apply changes to ' + mapper['pretty_type'] + ' \\\'' + mapper['pretty_name'] + '\\\'?';
-                              validate_url  context/validate_html/absolute_url" 
-                  tal:attributes="id      apply_button_id; 
-                                  type    string:button; 
-                                  name    string:action_type; 
-                                  value   string:Apply; 
+                              validate_url  context/validate_html/absolute_url"
+                  tal:attributes="id      apply_button_id;
+                                  type    string:button;
+                                  name    string:action_type;
+                                  value   string:Apply;
                                   onclick python:'return validate_and_submit_form(\'' + validate_url + '\', \'' + mapper_form_id + '\', \'' + apply_button_id + '\', \'' + prompt_msg + '\')'"
                   class="form_button"/>
           </span>
--- conga/luci/storage/index_html	2007/06/27 08:14:22	1.9
+++ conga/luci/storage/index_html	2007/09/11 16:04:35	1.10
@@ -30,7 +30,7 @@
 
     <metal:cssslot fill-slot="css_slot">
       <tal:comment replace="nothing"> A slot where you can insert CSS in the header from a template </tal:comment>
-    
+
   <style type="text/css"><!-- @import url(/luci/cluster/clusterportlet.css); --></style>
       <metal:cssslot define-slot="css_slot" />
     </metal:cssslot>
@@ -38,7 +38,7 @@
     <metal:javascriptslot fill-slot="javascript_head_slot">
       <tal:comment replace="nothing"> A slot where you can insert javascript in the header from a template </tal:comment>
       <metal:javascriptslot define-slot="javascript_head_slot">
-        
+
 
 
 
@@ -156,20 +156,20 @@
       The wrapper table. It contains the three columns. There's a table-less
       alternative in the plone_tableless skin layer that you can use if you
       prefer layouts that don't use tables.
-      </tal:comment> 
-      <span tal:omit-tag="" 
-            tal:define="global pagetype request/pagetype|nothing; 
+      </tal:comment>
+      <span tal:omit-tag=""
+            tal:define="global pagetype request/pagetype|nothing;
                         global storagename request/storagename|nothing"/>
       <span tal:omit-tag=""
             tal:condition="not: pagetype">
        <span tal:omit-tag=""
              tal:define="global pagetype python:'0'"/>
       </span>
-      <span tal:omit-tag="" 
+      <span tal:omit-tag=""
             tal:define="stosystemss context/systems/storage/objectItems;
                         global allowed_systems python:here.allowed_systems(stosystemss);
                         global access_to_host_allowed python:here.access_to_host_allowed(storagename, allowed_systems)"/>
-      <span tal:omit-tag="" 
+      <span tal:omit-tag=""
             tal:define="global ricci          python:here.get_ricci_communicator(storagename, allowed_systems);
                         global storage_report nothing"/>
       <span tal:omit-tag=""
@@ -181,7 +181,7 @@
               tal:define="global storage_report python:here.get_storage_report(ricci, request.SESSION)"/>
        </span>
       </span>
-      
+
       <table id="portal-columns">
         <tbody>
           <tr>
--- conga/luci/storage/mappings_macros	2006/06/30 17:00:02	1.1
+++ conga/luci/storage/mappings_macros	2007/09/11 16:04:35	1.2
@@ -3,24 +3,24 @@
     <title tal:content="template/title">The title</title>
   </head>
   <body>
-    
+
     <h2><span tal:replace="here/title_or_id">content title or id</span>
         <span tal:condition="template/title"
               tal:replace="template/title">optional template title</span></h2>
 
     This is Page Template <em tal:content="template/id">template id</em>.
   </body>
- 
 
- 
- 
+
+
+
 
 
 
 
   <div metal:define-macro="draw-base-cyl"
        tal:define="cap   python:cyl['color'] + '_cap_40.png'">
-          
+
     <div tal:omit-tag=""
          tal:define="cyls       cyl/cyls;
                      tmp        python:cyls.reverse()"
@@ -44,19 +44,19 @@
                            style   python:here.add_commas('position:absolute', here.add_commas('left: ' + str(0), 'top: 0'))"/>
      </div>
     </div>
-    
+
     <img tal:define="one_tmp_assignment  python:here.add_commas('position:absolute', here.add_commas('left: -' + str(curve_width), 'top: 0'))"
          tal:attributes="src     cap;
                          height  string:40;
                          width   string:20;
                          style   one_tmp_assignment"/>
-    
+
   </div>
 
 
 
   <div metal:define-macro="draw-highlights">
-    
+
     <div tal:omit-tag=""
          tal:repeat="high highs">
      <div tal:define="beg  high/beg;
@@ -80,7 +80,7 @@
       </span>
      </div>
     </div>
-    
+
   </div>
 
 
--- conga/luci/storage/mappings_provider	2007/06/25 16:03:41	1.5
+++ conga/luci/storage/mappings_provider	2007/09/11 16:04:35	1.6
@@ -1,18 +1,18 @@
 <html>
 
-<span tal:omit-tag="" 
-      tal:define="global pagetype request/pagetype|nothing; 
+<span tal:omit-tag=""
+      tal:define="global pagetype request/pagetype|nothing;
                   global storagename request/storagename|nothing"/>
 <span tal:omit-tag=""
       tal:condition="not: pagetype">
  <span tal:omit-tag=""
        tal:define="global pagetype python:'0'"/>
 </span>
-<span tal:omit-tag="" 
+<span tal:omit-tag=""
       tal:define="stosystemss context/systems/storage/objectItems;
                   global allowed_systems python:here.allowed_systems(stosystemss);
                   global access_to_host_allowed python:here.access_to_host_allowed(storagename, allowed_systems)"/>
-<span tal:omit-tag="" 
+<span tal:omit-tag=""
       tal:define="global ricci python:here.get_ricci_communicator(storagename, allowed_systems);
                   global storage_report python:here.get_storage_report(ricci, request.SESSION)"/>
 
@@ -26,62 +26,62 @@
 
 <head>
    <title tal:content="mapper/pretty_name">The title</title>
-   
+
    <script>
-      
+
       function ellipse(y) {
          if (y == 0)
             return 2;
-         
+
          if (y == 1)
             return 3;
-         
+
          if (y == 2)
             return 4;
-         
+
          if (y == 3)
             return 5;
-         
+
          if (y == 4)
             return 5;
-         
+
          if (y == 5)
             return 6;
-         
+
          if (y == 6)
             return 6;
-         
+
          if (y == 7)
             return 7;
-         
+
          if (y == 8)
             return 7;
-         
+
          if (y == 9)
             return 7;
-         
+
          if (y == 10)
             return 8;
-         
+
          if (y == 11)
             return 8;
-         
+
          if (y == 12)
             return 8;
-         
+
          if (y == 13)
             return 8;
-         
+
          if (y > 26)
             return ellipse(40 - y);
-         
+
          else
             return 9;
       }
-      
+
       var properties_span_id = '';
       var current_selection  = '';
-      
+
       function select_subcyl(id, h_data) {
          var old_selection = current_selection;
          unselect_cyl(old_selection, h_data);
@@ -126,9 +126,9 @@
             }
          }
       }
-      
-      
-      
+
+
+
       function cyl_click(X, Y, c_data, h_data) {
          if (Y < 0 || Y > 40)
             return;
@@ -143,11 +143,11 @@
                select_subcyl(id, h_data);
          }
       }
-      
-      
-      
-      
-      
+
+
+
+
+
       function cyl_over(msg_board, X, Y, c_data, h_data) {
          if (Y < 0 || Y > 40) {
             msg_board.style.visibility = 'invisible';
@@ -171,18 +171,18 @@
          }
          msg_board.style.visibility = 'invisible';
       }
-      
-      
-      
+
+
+
 
 
    </script>
 
    <style>
-      
+
       div.visible    { visibility: visible; }
       div.invisible  { visibility: hidden; }
-      
+
    </style>
 
 
@@ -201,25 +201,25 @@
                   onload_c   python:here.add_commas(onload_c, 'display_props(' + mapp_info['js'] + ')');
                   onload_c   python:here.add_commas(onload_c, default_selection_c)"
       tal:attributes="onload onload_c">
-    
-    
+
+
 
 
 
 <div>
-   
-   
-   
-
-   
-   
-   
+
+
+
+
+
+
+
    <!-- upper cylinder -->
    <div tal:define="cyl       mapp_info/upper_cyl;
                     X_offset  python:X_offset + cyl['offset']"
         tal:condition="cyl/cyls"
         tal:attributes="style  python:here.add_commas('position:absolute', here.add_commas('left: ' + str(X_offset), 'top: ' + str(Y_offset)))">
-    
+
     <!-- description -->
     <div tal:define="style_1         python:here.add_commas('left: -1em', 'top: -1.5ex');
                      style_2         python:here.add_commas(style_1, 'position: absolute');
@@ -232,38 +232,38 @@
       <span tal:replace="cyl/description"/>:
      </div>
     </div>
-    
+
     <div tal:define="one_temp_assignment  python:here.add_commas('position:absolute', here.add_commas('left: ' + str(curve_width), 'top: 0'))"
          tal:attributes="onmousedown  python:'cyl_click(event.clientX-' + str(curve_width) + '-' + str(X_offset) + ', event.clientY-' + str(Y_offset) + ', ' + cyl['js'] + ', ' + mapp_info['js'] + ')';
                          onmousemove  python:'cyl_over(document.getElementById(\'upper_msg_board\'), event.clientX-' + str(curve_width) + '-' + str(X_offset) + ', event.clientY-' + str(Y_offset) + ', ' + cyl['js'] + ', ' + mapp_info['js'] + ')';
                          onmouseout   python:'document.getElementById(\'upper_msg_board\').style.visibility = \'hidden\'';
                          style        python:here.add_commas('cursor: pointer', one_temp_assignment);
                          id           string:upper_cylinder">
-     
+
      <!-- base -->
      <div metal:use-macro="here/mappings_macros/macros/draw-base-cyl"/>
-     
+
      <!-- highlights -->
      <span tal:omit-tag=""
            tal:define="highs cyl/highs">
       <div metal:use-macro="here/mappings_macros/macros/draw-highlights"/>
      </span>
-     
+
      <div id="upper_msg_board"
           style="position: absolute; border: 2px solid black; padding: 2px; background-color: lightyellow; visibility: hidden; z-index: 100; white-space: nowrap; font-size: small;">
      </div>
-     
+
     </div>
    </div>
- 
-   
+
+
    <!-- lower cylinder -->
    <div tal:define="cyl             mapp_info/lower_cyl;
                     lower_Y_offset  python:Y_offset + 80;
                     X_offset        python:X_offset + cyl['offset']"
         tal:condition="cyl/cyls"
         tal:attributes="style  python:here.add_commas('position:absolute', here.add_commas('left: ' + str(X_offset), 'top: ' + str(lower_Y_offset)))">
-    
+
     <!-- description -->
     <div tal:define="style_1         python:here.add_commas('left: -1em', 'top: -1.5ex');
                      style_2         python:here.add_commas(style_1, 'position: absolute');
@@ -276,31 +276,31 @@
       <span tal:replace="cyl/description"/>:
      </div>
     </div>
-     
+
     <div tal:define="one_temp_assignment  python:here.add_commas('position:absolute', here.add_commas('left: ' + str(curve_width), 'top: 0'))"
-         tal:attributes="onmousedown  python:'cyl_click(event.clientX-' + str(curve_width) + '-' + str(X_offset) + ', event.clientY-' + str(lower_Y_offset) + ', ' + cyl['js'] + ', ' + mapp_info['js'] + ')'; 
+         tal:attributes="onmousedown  python:'cyl_click(event.clientX-' + str(curve_width) + '-' + str(X_offset) + ', event.clientY-' + str(lower_Y_offset) + ', ' + cyl['js'] + ', ' + mapp_info['js'] + ')';
                          onmousemove  python:'cyl_over(document.getElementById(\'lower_msg_board\'), event.clientX-' + str(curve_width) + '-' + str(X_offset) + ', event.clientY-' + str(lower_Y_offset) + ', ' + cyl['js'] + ', ' + mapp_info['js'] + ')';
                          onmouseout   python:'document.getElementById(\'lower_msg_board\').style.visibility = \'hidden\'';
                          style        python:here.add_commas('cursor: pointer', one_temp_assignment);
                          id           string:lower_cylinder">
-     
+
      <!-- base -->
      <div metal:use-macro="here/mappings_macros/macros/draw-base-cyl"/>
-     
+
      <!-- highlights -->
      <span tal:omit-tag=""
            tal:define="highs cyl/highs">
       <div metal:use-macro="here/mappings_macros/macros/draw-highlights"/>
      </span>
-     
+
      <div id="lower_msg_board"
           style="position: absolute; border: 2px solid black; padding: 2px; background-color: lightyellow; visibility: hidden; z-index: 100; white-space: nowrap; font-size: small;">
      </div>
-     
+
     </div>
    </div>
-   
-   
+
+
    <!-- select me message -->
    <div tal:define="cyl             mapp_info/lower_cyl;
                     Y_offset        python:Y_offset + 80 + 40 + 10;
@@ -313,8 +313,8 @@
      Click cylinders to view properties, unselect all to view <span tal:replace="mapper/pretty_type"/>'s properties
     </div>
    </div>
-   
-   
+
+
 </div>
 
 
--- conga/luci/storage/portlet_cluconfig	2006/06/30 17:00:02	1.1
+++ conga/luci/storage/portlet_cluconfig	2007/09/11 16:04:35	1.2
@@ -4,7 +4,7 @@
 <body>
 
 
-<div metal:define-macro="stochooseportlet"   
+<div metal:define-macro="stochooseportlet"
        tal:omit-tag=""
        tal:define="global data python:here.createStorageChooser(request, stosystems)">
  <dl class="portlet" id="portlet-cluconfig-tree">
@@ -34,11 +34,11 @@
     <dt class="portletHeader">
 <!--
         <a href="#" tal:attributes="href python:here.getClusterURL(request, modelb)">
-          <div tal:omit-tag="" tal:content="python: here.getClusterName(modelb)" /> 
+          <div tal:omit-tag="" tal:content="python: here.getClusterName(modelb)" />
         </a>
 -->
         <a href="#" tal:attributes="href python:here.getStorageURL(request, storagename)">
-          <div tal:omit-tag="" tal:content="storagename" /> 
+          <div tal:omit-tag="" tal:content="storagename" />
         </a>
     </dt>
     <dd class="portletItemSingle">
--- conga/luci/storage/portlet_cluconfig_macro	2006/06/30 17:00:02	1.1
+++ conga/luci/storage/portlet_cluconfig_macro	2007/09/11 16:04:35	1.2
@@ -8,7 +8,7 @@
                 cur_item item/currentItem;"
     tal:condition="python: (cur_item or parent_shows_children or children)">
 
-   <tal:level define="item_type_class python: 'type-' + item['cfg_type'];"> 
+   <tal:level define="item_type_class python: 'type-' + item['cfg_type'];">
     <div tal:attributes="class item_type_class">
         <a tal:condition="cur_item"
            tal:attributes="href item/absolute_url;
--- conga/luci/storage/validate_html	2007/06/25 16:03:41	1.3
+++ conga/luci/storage/validate_html	2007/09/11 16:04:35	1.4
@@ -1,15 +1,15 @@
-<span tal:omit-tag="" 
-      tal:define="global pagetype request/pagetype|nothing; 
+<span tal:omit-tag=""
+      tal:define="global pagetype request/pagetype|nothing;
                   global storagename request/storagename|nothing"/>
-<span tal:omit-tag="" 
-      tal:define="stosystemss context/systems/storage/objectItems; 
-                  global allowed_systems python:here.allowed_systems(stosystemss); 
+<span tal:omit-tag=""
+      tal:define="stosystemss context/systems/storage/objectItems;
+                  global allowed_systems python:here.allowed_systems(stosystemss);
                   global access_to_host_allowed python:here.access_to_host_allowed(storagename, allowed_systems)"/>
-<span tal:omit-tag="" 
-      tal:define="global ricci python:here.get_ricci_communicator(storagename, allowed_systems); 
+<span tal:omit-tag=""
+      tal:define="global ricci python:here.get_ricci_communicator(storagename, allowed_systems);
                   global storage_report python:here.get_storage_report(ricci, request.SESSION)"/>
 
-<span tal:omit-tag="" 
+<span tal:omit-tag=""
       tal:define="global action_type request/action_type|nothing"/>
 
 <span tal:omit-tag=""
@@ -30,8 +30,8 @@
    OK if validated
    message if not validated
  </span>
- 
- <span tal:omit-tag="" 
+
+ <span tal:omit-tag=""
        tal:condition="python:action_type != 'Validate'">
   This form is to be used for validation only
  </span>
--- conga/luci/sysconfig/luci	2006/06/16 23:14:34	1.1
+++ conga/luci/sysconfig/luci	2007/09/11 16:04:35	1.2
@@ -1,4 +1,4 @@
-# defaults for luci, 
-# web UI fronted for remote management
+# defaults for luci,
+# web UI fronted for remote cluster and storage management
 
 LUCI_HTTPS_PORT=8084


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]