The branch, master has been updated via d149ad7c51dcedacf68fea315ef281b0a543ffa4 (commit) from 70cd5e294a5c10f36c68496ed534ffbecafbb087 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit d149ad7c51dcedacf68fea315ef281b0a543ffa4 Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Date: Wed Oct 2 11:03:25 2013 +0200 Let an ICMP ping request precede the SSH ping command. This notably reduces timeout duration if the host running the queried broker agent is down). ----------------------------------------------------------------------- Summary of changes: debian/changelog | 3 +++ x2gobroker/agent.py | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) The diff of changes is: diff --git a/debian/changelog b/debian/changelog index 6d392a6..2772c85 100644 --- a/debian/changelog +++ b/debian/changelog @@ -28,6 +28,9 @@ x2gobroker (0.0.3.0-0~x2go1) UNRELEASED; urgency=low - Provide a test function that checks if the basic broker agent setup (SSH private/public key pair) is available. If not, no SSH broker usage will be attempted. + - Let an ICMP ping request precede the SSH ping command. This notably + reduces timeout duration if the host running the queried broker agent + is down). * /debian/control: + Replace LDAP support with session brokerage support in LONG_DESCRIPTION. * /debian/x2gobroker-agent.dirs: diff --git a/x2gobroker/agent.py b/x2gobroker/agent.py index e46c99e..be7b0e5 100644 --- a/x2gobroker/agent.py +++ b/x2gobroker/agent.py @@ -54,6 +54,7 @@ class delayed_execution(threading.Thread): self.agent_func(**self.kwargs) + def has_remote_broker_agent_setup(): """\ Peform some integrity checks that may indicate that a remote @@ -162,6 +163,35 @@ def call_remote_broker_agent(username, mode, cmdline_args=[], remote_agent=None) raise x2gobroker.x2gobroker_exceptions.X2GoBrokerAgentException('Query to remote X2Go Broker Agent (user: {user}, hostname: {hostname}, port: {port}) failed'.format(user=remote_username, hostname=remote_hostname, port=remote_port)) +def icmp_ping(hostname): + """\ + Perform an ICMP ping to the requested hostname. + + param hostname: name of the host that shall be pinged + type hostname: C{unicode} + + @raise X2GoBrokerAgentException: raised if host is down or unresolvable via DNS. + + """ + # Detect the IP protocol version... + try: + dns_query = socket.getaddrinfo(hostname, None, socket.AF_INET6) + ping_cmd = "ping6" + except socket.gaierror: + try: + dns_query = socket.getaddrinfo(hostname, None, socket.AF_INET) + ping_cmd = "ping" + except socket.gaierror: + # we can't find a valid address for this host, so returning a failure... + return False + + # do the actual ping... + if os.system(ping_cmd + " -c 1 -w2 " + hostname + " > /dev/null 2>&1") != 0: + return False + + return True + + def ping(query_mode='LOCAL', remote_agent=None): """\ Ping X2Go Broker Agent. @@ -176,7 +206,9 @@ def ping(query_mode='LOCAL', remote_agent=None): if unicode(query_mode).upper() == u'LOCAL': return call_local_broker_agent(username, mode='ping') else: - return call_remote_broker_agent(username, mode='ping', remote_agent=remote_agent) + return remote_agent is not None and \ + icmp_ping(remote_agent['hostname']) and \ + call_remote_broker_agent(username, mode='ping', remote_agent=remote_agent) def list_sessions(username, query_mode='LOCAL', remote_agent=None): hooks/post-receive -- x2gobroker.git (HTTP(S) Session broker for X2Go) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "x2gobroker.git" (HTTP(S) Session broker for X2Go).