From 6a466b010043387f2fd2339d5827000bdff05b16 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Tue, 9 Oct 2018 13:21:02 -0400 Subject: [PATCH] Avoid proxy consoles generating proxy consoles When the client is a proxy term, disable ability to produce proxy terminals. This was wreaking havoc with client count with ghosts and triggering output multiplication. --- confluent_server/confluent/consoleserver.py | 11 ++++++----- confluent_server/confluent/sockapi.py | 3 ++- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/confluent_server/confluent/consoleserver.py b/confluent_server/confluent/consoleserver.py index 7e0ac7bb..8ab71308 100644 --- a/confluent_server/confluent/consoleserver.py +++ b/confluent_server/confluent/consoleserver.py @@ -625,12 +625,12 @@ def start_console_sessions(): configmodule.hook_new_configmanagers(_start_tenant_sessions) -def connect_node(node, configmanager, username=None): +def connect_node(node, configmanager, username=None, direct=True): attrval = configmanager.get_node_attributes(node, 'collective.manager') myc = attrval.get(node, {}).get('collective.manager', {}).get( 'value', None) myname = collective.get_myname() - if myc and myc != collective.get_myname(): + if myc and myc != collective.get_myname() and direct: minfo = configmodule.get_collective_member(myc) return ProxyConsole(node, minfo, myname, configmanager, username) consk = (node, configmanager.tenant) @@ -758,10 +758,9 @@ class ConsoleSession(object): 'get_next_output' non-functional :param skipreplay: If true, will skip the attempt to redraw the screen """ - connector = connect_node def __init__(self, node, configmanager, username, datacallback=None, - skipreplay=False): + skipreplay=False, direct=True): self.registered = False self.tenant = configmanager.tenant if not configmanager.is_node(node): @@ -769,6 +768,8 @@ class ConsoleSession(object): self.username = username self.node = node self.configmanager = configmanager + self.direct = direct # true if client is directly connected versus + # relay self.connect_session() self.registered = True self._evt = None @@ -797,7 +798,7 @@ class ConsoleSession(object): between console and shell. """ self.conshdl = connect_node(self.node, self.configmanager, - self.username) + self.username, self.direct) def send_break(self): """Send break to remote system """ diff --git a/confluent_server/confluent/sockapi.py b/confluent_server/confluent/sockapi.py index f5f16b99..75da4101 100644 --- a/confluent_server/confluent/sockapi.py +++ b/confluent_server/confluent/sockapi.py @@ -238,7 +238,8 @@ def start_proxy_term(connection, cert, request): ccons = ClientConsole(connection) consession = consoleserver.ConsoleSession( node=request['node'], configmanager=cfm, username=request['user'], - datacallback=ccons.sendall, skipreplay=request['skipreplay']) + datacallback=ccons.sendall, skipreplay=request['skipreplay'], + direct=False) term_interact(None, None, ccons, None, connection, consession, None) def start_term(authname, cfm, connection, params, path, authdata, skipauth):