From c7ab0bcb5df03f8fb6f84c0874def0fad2c414f6 Mon Sep 17 00:00:00 2001 From: Mike Date: Tue, 2 Oct 2018 02:21:40 -0700 Subject: [PATCH 1/2] Track down bug where default section didn't work without SSIDs (also increase verbosity) --- connection-specific-ssh-config | 45 ++++++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/connection-specific-ssh-config b/connection-specific-ssh-config index c4ba1fa..f08b132 100755 --- a/connection-specific-ssh-config +++ b/connection-specific-ssh-config @@ -65,9 +65,13 @@ class SSHConfiger: if ( "ssh_dir" not in self._config.keys() ): self.die("Config file needs key \"ssh_dir\" inside \"config\" section") ssh_dir = self._config["ssh_dir"] + self.log("SSH Dir: " + str(ssh_dir)) # Determine which ssh config file we should use ssh_config_name = self.determine_ssh_config_name() + self.log("Determined ssh config name: " + str(ssh_config_name)) + if not ssh_config_name: + self.die("Unable to determine appropriate ssh config name; Quitting") # Make paths ssh_config_path_link = os.path.join(ssh_dir, "config") @@ -105,29 +109,54 @@ class SSHConfiger: if ( self._action_command != "up" ): return None + # + self.log("Attempting to determine SSH config name") + # Check each section found_ssh_config_name = None for section_name in self._targets: # section = self._targets[section_name] + self.log("Examining section: " + str(section_name)) - # Must match at least one interface - if ( self._action_interface not in section["adapters"] ): + # Don't examine default if anything is picked already + if section_name == "default" and found_ssh_config_name: + self.log("Skipping default section because we've already found at least one match: " + str(found_ssh_config_name)) continue - # - interface_ssid = self.get_interface_ssid(self._action_interface) + # Check the interface + interface_matched = False + if ( + # Matches, if current interface found in adapters + self._action_interface in section["adapters"] + + # Can also match if we're in section "default" + or section_name == "default" + ): + interface_matched = True + if not interface_matched: + self.log("Section \"" + str(section_name) + "\" didn't match any interfaces; Skipping") + continue - # Must also match at least one SSID - if ( interface_ssid not in section["ssids"] ): + # Grab the SSID this adapter is currently connected to + interface_ssid = self.get_interface_ssid(self._action_interface) + if not interface_ssid: + self.log("Interface \"" + str(interface_ssid) + "\" isn't connected to anything ... ") + self.log("Interface \"" + str(self._action_interface) + "\" is currently connected to: \"" + str(interface_ssid) + "\"") + + # Must also match at least one SSID, + # OR we're in the default section + if interface_ssid not in section["ssids"] and section_name != "default": + self.log("Did not find SSID \"" + interface_ssid + "\" in section ssids: " + str(section["ssids"])) continue # Found a match! found_ssh_config_name = section["ssh_config_name"] + self.log("Found matching ssh config name: " + str(found_ssh_config_name)) # Didn't find anything? Go default ... - if (found_ssh_config_name == None): + if (not found_ssh_config_name): if ( "default" in self._targets.keys() ): if ( "ssh_config_name" in self._targets["default"].keys() ): found_ssh_config_name = self._targets["default"]["ssh_config_name"] @@ -172,6 +201,7 @@ class SSHConfiger: continue # + self.log("Parsing config target: \"" + section + "\"") target = { "adapters" : [], "ssids" : [] @@ -197,6 +227,7 @@ class SSHConfiger: # targets[section] = target + self.log("Parsed config for config target \"" + section + "\": " + str(target)) # self._config = config From e86f96d16d064acf43fbc8bdfd73c15dbdf1607f Mon Sep 17 00:00:00 2001 From: Mike Date: Tue, 2 Oct 2018 02:26:42 -0700 Subject: [PATCH 2/2] Exit more gracefully when the action command isn't "up" --- connection-specific-ssh-config | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/connection-specific-ssh-config b/connection-specific-ssh-config index f08b132..aa5fe63 100755 --- a/connection-specific-ssh-config +++ b/connection-specific-ssh-config @@ -52,12 +52,22 @@ class SSHConfiger: self.complain(s) raise Exception(s) + def quit(self, s): + + # + self.log("Quitting because: " + s) + sys.exit(0) + # def run(self): # self.log("Running for interface \""+ self._action_interface +"\": " + self._action_command) + # Only run if an interface is coming up + if ( self._action_command != "up" ): + self.quit("We don't need to run for action command: " + str(self._action_command)) + # Parse the config self.parse_config() @@ -105,10 +115,6 @@ class SSHConfiger: # def determine_ssh_config_name(self): - # Only run if an interface is coming up - if ( self._action_command != "up" ): - return None - # self.log("Attempting to determine SSH config name")