From: rmccabe@sourceware.org <rmccabe@sourceware.org>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] conga/luci cluster/resource_form_handlers.js h ...
Date: 29 Sep 2006 21:41:44 -0000 [thread overview]
Message-ID: <20060929214144.29289.qmail@sourceware.org> (raw)
CVSROOT: /cvs/cluster
Module name: conga
Changes by: rmccabe at sourceware.org 2006-09-29 21:41:43
Modified files:
luci/cluster : resource_form_handlers.js
luci/homebase : index_html
luci/site/luci/Extensions: ricci_bridge.py ricci_communicator.py
Log message:
improve the robustness of the ssl socket code
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource_form_handlers.js.diff?cvsroot=cluster&r1=1.15&r2=1.16
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/index_html.diff?cvsroot=cluster&r1=1.16&r2=1.17
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ricci_bridge.py.diff?cvsroot=cluster&r1=1.19&r2=1.20
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ricci_communicator.py.diff?cvsroot=cluster&r1=1.5&r2=1.6
--- conga/luci/cluster/resource_form_handlers.js 2006/09/27 22:24:11 1.15
+++ conga/luci/cluster/resource_form_handlers.js 2006/09/29 21:41:43 1.16
@@ -106,7 +106,7 @@
} else
clr_form_error(form.mountpoint);
- if (!form.host || str_is_blank(form.host.value))
+ if (!form.host || str_is_blank(form.host.value)) {
errors.push('No NFS server host was given.');
set_form_error(form.host);
} else
--- conga/luci/homebase/index_html 2006/09/27 22:49:09 1.16
+++ conga/luci/homebase/index_html 2006/09/29 21:41:43 1.17
@@ -15,7 +15,7 @@
xml:lang language">
<tal:comment replace="nothing">
- $Id: index_html,v 1.16 2006/09/27 22:49:09 rmccabe Exp $
+ $Id: index_html,v 1.17 2006/09/29 21:41:43 rmccabe Exp $
</tal:comment>
<head metal:use-macro="here/header/macros/html_header">
@@ -66,6 +66,7 @@
<body tal:attributes="class here/getSectionFromURL;
dir python:test(isRTL, 'rtl', 'ltr')">
+
<div id="visual-portal-wrapper">
<div id="portal-top" i18n:domain="plone">
--- conga/luci/site/luci/Extensions/ricci_bridge.py 2006/09/25 22:59:15 1.19
+++ conga/luci/site/luci/Extensions/ricci_bridge.py 2006/09/29 21:41:43 1.20
@@ -19,10 +19,14 @@
def process(self, xml_out):
CLUSTER_STR='<?xml version="1.0" ?><ricci async="false" function="process_batch" version="1.0"><batch><module name="cluster"><request API_version="1.0"><function_call name="get_cluster.conf"/></request></module></batch></ricci>'
- doc = self.makeConnection(CLUSTER_STR)
-
- if doc == None:
- print "Sorry, doc is None"
+ docc = None
+ try:
+ doc = self.makeConnection(CLUSTER_STR)
+ except RicciReceiveError, r:
+ return None
+
+ #if doc == None:
+ # print "Sorry, doc is None"
if doc != None:
bt_node = None
for node in doc.firstChild.childNodes:
@@ -30,7 +34,7 @@
if node.nodeName == 'batch':
bt_node = node
if bt_node == None:
- print "bt_node == None"
+ #print "bt_node == None"
doc = None
else:
#print doc.toxml()
@@ -40,7 +44,7 @@
if node.nodeName == 'module':
mod_node = node
if mod_node == None:
- print "mod_node == None"
+ #print "mod_node == None"
doc = None
else:
resp_node = None
@@ -48,7 +52,7 @@
if node.nodeType == xml.dom.Node.ELEMENT_NODE:
resp_node = node
if resp_node == None:
- print "resp_node == None"
+ #print "resp_node == None"
doc = None
else:
fr_node = None
@@ -56,7 +60,7 @@
if node.nodeType == xml.dom.Node.ELEMENT_NODE:
fr_node = node
if fr_node == None:
- print "fr_node == None"
+ #print "fr_node == None"
doc = None
else:
varnode = None
@@ -65,7 +69,7 @@
varnode = node
break
if varnode == None:
- print "varnode == None"
+ #print "varnode == None"
doc = None
else:
cl_node = None
@@ -74,7 +78,7 @@
cl_node = node
break
if cl_node == None:
- print "cl_node == None"
+ #print "cl_node == None"
doc = None
else:
docc = minidom.Document()
@@ -83,7 +87,7 @@
return docc
def __sendall(self, str, ssl_sock):
- print str
+ #print str
s = str
while len(s) != 0:
pos = ssl_sock.write(s)
@@ -119,29 +123,41 @@
CLUSTER_STR='<?xml version="1.0" ?><ricci async="false" function="process_batch" version="1.0"><batch><module name="cluster"><request API_version="1.0"><function_call name="status"/></request></module></batch></ricci>'
# socket
sock = socket(AF_INET, SOCK_STREAM)
- sock.connect((self.__hostname, self.__port))
- ss = ssl(sock, PATH_TO_PRIVKEY, PATH_TO_CACERT)
+ try:
+ sock.connect((self.__hostname, self.__port))
+ except:
+ sock.close()
+ return ''
+
+ ss = 0
+ try:
+ ss = ssl(sock, PATH_TO_PRIVKEY, PATH_TO_CACERT)
+ except sslerror, e:
+ if ss:
+ del ss
+ sock.close()
+ return ''
# receive ricci header
hello = self.__receive(ss)
if hello != None:
pass
#print hello.toxml()
+
try:
self.__sendall(CLUSTER_STR, ss)
+ doc = self.__receive(ss)
except sslerror, e:
- sock.close()
- return ''
+ doc = None
- # receive response
- doc = self.__receive(ss)
- if doc == None:
- print "Sorry, doc is None"
- else:
- payload = self.extractPayload(doc)
- sock.shutdown(2)
+ del ss
sock.close()
+ if doc == None:
+ return ''
+ #print "Sorry, doc is None"
+
+ payload = self.extractPayload(doc)
return payload
def startService(self,servicename, preferrednode = None):
@@ -204,25 +220,29 @@
def makeConnection(self,query_str):
# socket
sock = socket(AF_INET, SOCK_STREAM)
- sock.connect((self.__hostname, self.__port))
- ss = ssl(sock, PATH_TO_PRIVKEY, PATH_TO_CACERT)
+ try:
+ sock.connect((self.__hostname, self.__port))
+ except:
+ sock.close()
+ return None
- # receive ricci header
- hello = self.__receive(ss)
- print >> sys.stderr, hello.toxml()
- if hello != None:
- pass
- #print hello.toxml()
- self.__sendall(query_str, ss)
-
-
- # receive response
- payload = self.__receive(ss)
- if payload == None:
- raise RicciReceiveError('FATAL',"Unable to receive ricci data for %s" % self.__hostname)
- sock.shutdown(2)
+ ss = 0
+ try:
+ ss = ssl(sock, PATH_TO_PRIVKEY, PATH_TO_CACERT)
+ hello = self.__receive(ss)
+ #print >> sys.stderr, hello.toxml()
+ self.__sendall(query_str, ss)
+ # receive response
+ payload = self.__receive(ss)
+ except sslerror, e:
+ payload = None
+
+ if ss:
+ del ss
sock.close()
+ if payload == None:
+ raise RicciReceiveError('FATAL',"Unable to receive ricci data for %s" % self.__hostname)
return payload
@@ -341,7 +361,7 @@
if node.nodeName == 'batch':
bt_node = node
if bt_node == None:
- print "bt_node == None"
+ #print "bt_node == None"
doc = None
else:
#print doc.toxml()
@@ -351,7 +371,7 @@
if node.nodeName == 'module':
mod_node = node
if mod_node == None:
- print "mod_node == None"
+ #print "mod_node == None"
doc = None
else:
resp_node = None
@@ -359,7 +379,7 @@
if node.nodeType == xml.dom.Node.ELEMENT_NODE:
resp_node = node
if resp_node == None:
- print "resp_node == None"
+ #print "resp_node == None"
doc = None
else:
fr_node = None
@@ -367,7 +387,7 @@
if node.nodeType == xml.dom.Node.ELEMENT_NODE:
fr_node = node
if fr_node == None:
- print "fr_node == None"
+ #print "fr_node == None"
doc = None
else:
varnode = None
@@ -376,7 +396,7 @@
varnode = node
break
if varnode == None:
- print "varnode == None"
+ #print "varnode == None"
doc = None
else:
cl_node = None
@@ -385,7 +405,7 @@
cl_node = node
break
if cl_node == None:
- print "cl_node == None"
+ #print "cl_node == None"
doc = None
else:
docc = minidom.Document()
@@ -402,7 +422,7 @@
if node.nodeName == 'batch':
bt_node = node
if bt_node == None:
- print "bt_node == None"
+ #print "bt_node == None"
doc = None
else:
#print doc.toxml()
@@ -412,7 +432,7 @@
if node.nodeName == 'module':
mod_node = node
if mod_node == None:
- print "mod_node == None"
+ #print "mod_node == None"
doc = None
else:
resp_node = None
@@ -420,7 +440,7 @@
if node.nodeType == xml.dom.Node.ELEMENT_NODE:
resp_node = node
if resp_node == None:
- print "resp_node == None"
+ #print "resp_node == None"
doc = None
else:
fr_node = None
@@ -428,7 +448,7 @@
if node.nodeType == xml.dom.Node.ELEMENT_NODE:
fr_node = node
if fr_node == None:
- print "fr_node == None"
+ #print "fr_node == None"
doc = None
else:
varnode = None
@@ -437,7 +457,7 @@
varnode = node
break
if varnode == None:
- print "varnode == None"
+ #print "varnode == None"
doc = None
else:
svc_node = None
@@ -462,20 +482,41 @@
result = node.getAttribute('status')
return (batch_number, result)
else:
- print "RETURNING NONE!!!"
+ #print "RETURNING NONE!!!"
return (None, None )
def getRicciResponse(self):
sock = socket(AF_INET, SOCK_STREAM)
+ sock.settimeout(2.0)
try:
sock.connect((self.__hostname, self.__port))
except:
+ sock.close()
return False
- ss = ssl(sock, PATH_TO_PRIVKEY, PATH_TO_CACERT)
+
+ ss = 0
+ try:
+ ss = ssl(sock, PATH_TO_PRIVKEY, PATH_TO_CACERT)
+ except sslerror, e:
+ if ss:
+ del ss
+ sock.close()
+ return False
+ sock.settimeout(600.0) # 10 minutes
+ # TODO: data transfer timeout should be much less,
+ # leave until all calls are async ricci calls
+
# receive ricci header
- hello = self.__receive(ss)
+ try:
+ hello = self.__receive(ss)
+ except sslerror, e:
+ hello = None
+
+ del ss
+ sock.close()
+
if hello != None:
return True
else:
--- conga/luci/site/luci/Extensions/ricci_communicator.py 2006/09/26 21:04:47 1.5
+++ conga/luci/site/luci/Extensions/ricci_communicator.py 2006/09/29 21:41:43 1.6
@@ -164,7 +164,7 @@
def __send(self, xml_doc):
buff = xml_doc.toxml() + '\n'
- print buff
+ #print buff
while len(buff) != 0:
pos = self.ss.write(buff)
buff = buff[pos:]
next reply other threads:[~2006-09-29 21:41 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-09-29 21:41 rmccabe [this message]
-- strict thread matches above, loose matches on Subject: below --
2006-10-30 21:21 [Cluster-devel] conga/luci cluster/resource_form_handlers.js h rmccabe
2006-09-25 17:36 rmccabe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20060929214144.29289.qmail@sourceware.org \
--to=rmccabe@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.