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

[or-cvs] r24058: {arm} Including platform and arm/tor configurations in debug dumps (in arm/trunk: . src)



Author: atagar
Date: 2011-01-10 17:09:13 +0000 (Mon, 10 Jan 2011)
New Revision: 24058

Modified:
   arm/trunk/ChangeLog
   arm/trunk/TODO
   arm/trunk/armrc.sample
   arm/trunk/src/starter.py
   arm/trunk/src/version.py
Log:
Including platform and arm/tor configurations in debug dumps.



Modified: arm/trunk/ChangeLog
===================================================================
--- arm/trunk/ChangeLog	2011-01-10 12:45:42 UTC (rev 24057)
+++ arm/trunk/ChangeLog	2011-01-10 17:09:13 UTC (rev 24058)
@@ -1,6 +1,6 @@
 CHANGE LOG
 
-1/7/11 - version 1.4.1
+1/7/11 - version 1.4.1 (r24054)
 Platform specific enhancements including BSD compatibility and vastly improved performance on Linux.
 
     * added: querying the proc contents when able for tor resource and connection samplings to *greatly* reduce arm's resource usage (many thanks to psutil)

Modified: arm/trunk/TODO
===================================================================
--- arm/trunk/TODO	2011-01-10 12:45:42 UTC (rev 24057)
+++ arm/trunk/TODO	2011-01-10 17:09:13 UTC (rev 24058)
@@ -85,6 +85,7 @@
 
 - Bugs
   * The default resolver isn't configurable.
+  * When saving the config the Log entry should be filtered out if unnecessary.
   * The config write dialog (ie, the one for saving the config) has its a
     misaligned border when it's smaller than the top detail section.
   * The arm header panel doesn't properly reflect when the ip address

Modified: arm/trunk/armrc.sample
===================================================================
--- arm/trunk/armrc.sample	2011-01-10 12:45:42 UTC (rev 24057)
+++ arm/trunk/armrc.sample	2011-01-10 17:09:13 UTC (rev 24058)
@@ -227,4 +227,5 @@
 log.stats.failedProcResolution DEBUG
 log.stats.procResolutionFailover INFO
 log.stats.failedPsResolution INFO
+log.savingDebugLog NOTICE
 

Modified: arm/trunk/src/starter.py
===================================================================
--- arm/trunk/src/starter.py	2011-01-10 12:45:42 UTC (rev 24057)
+++ arm/trunk/src/starter.py	2011-01-10 17:09:13 UTC (rev 24058)
@@ -11,6 +11,7 @@
 import time
 import getopt
 import socket
+import platform
 
 import version
 import interface.controller
@@ -44,7 +45,8 @@
           "log.configDescriptions.persistance.loadSuccess": util.log.INFO,
           "log.configDescriptions.persistance.loadFailed": util.log.INFO,
           "log.configDescriptions.persistance.saveSuccess": util.log.INFO,
-          "log.configDescriptions.persistance.saveFailed": util.log.NOTICE}
+          "log.configDescriptions.persistance.saveFailed": util.log.NOTICE,
+          "log.savingDebugLog": util.log.NOTICE}
 
 OPT = "i:c:dbe:vh"
 OPT_EXPANDED = ["interface=", "config=", "debug", "blind", "event=", "version", "help"]
@@ -83,6 +85,9 @@
 STANDARD_CFG_LOAD_FAILED_MSG = "Failed to load configuration (using defaults): \"%s\""
 STANDARD_CFG_NOT_FOUND_MSG = "No configuration found at '%s', using defaults"
 
+# torrc entries that are scrubbed when dumping
+PRIVATE_TORRC_ENTRIES = ["HashedControlPassword", "Bridge", "HiddenServiceDir"]
+
 def isValidIpAddr(ipStr):
   """
   Returns true if input is a valid IPv4 address, false otherwise.
@@ -179,6 +184,47 @@
         msg = DESC_INTERNAL_LOAD_FAILED_MSG % util.sysTools.getFileErrorMsg(exc)
         util.log.log(CONFIG["log.configDescriptions.internalLoadFailed"], msg)
 
+def _dumpConfig():
+  """
+  Dumps the current arm and tor configurations at the DEBUG runlevel. This
+  attempts to scrub private information, but naturally the user should double
+  check that I didn't miss anything.
+  """
+  
+  config = util.conf.getConfig("arm")
+  conn = util.torTools.getConn()
+  
+  # dumps arm's configuration
+  armConfigEntry = ""
+  armConfigKeys = list(config.getKeys())
+  armConfigKeys.sort()
+  
+  for configKey in armConfigKeys:
+    # Skips some config entries that are loaded by default. This fetches
+    # the config values directly to avoid misflagging them as being used by
+    # arm.
+    
+    if not configKey.startswith("config.summary.") and not configKey.startswith("torrc.") and not configKey.startswith("msg."):
+      armConfigEntry += "%s -> %s\n" % (configKey, config.contents[configKey])
+  
+  if armConfigEntry: armConfigEntry = "Arm Configuration:\n%s" % armConfigEntry
+  else: armConfigEntry = "Arm Configuration: None"
+  
+  # dumps tor's version and configuration
+  torConfigEntry = "Tor (%s) Configuration:\n" % conn.getInfo("version")
+  
+  for line in conn.getInfo("config-text").split("\n"):
+    if " " in line: key, value = line.split(" ", 1)
+    else: key, value = line, ""
+    
+    if key in PRIVATE_TORRC_ENTRIES:
+      torConfigEntry += "%s <scrubbed>\n" % key
+    else:
+      torConfigEntry += "%s %s\n" % (key, value)
+  
+  util.log.log(util.log.DEBUG, armConfigEntry.strip())
+  util.log.log(util.log.DEBUG, torConfigEntry.strip())
+
 if __name__ == '__main__':
   startTime = time.time()
   param = dict([(key, None) for key in CONFIG.keys()])
@@ -230,8 +276,9 @@
       currentTime = time.localtime()
       timeLabel = time.strftime("%H:%M:%S %m/%d/%Y (%Z)", currentTime)
       initMsg = "Arm %s Debug Dump, %s" % (version.VERSION, timeLabel)
+      osLabel = "Platform: %s (%s)" % (platform.system(), " ".join(platform.dist()))
       
-      util.log.DUMP_FILE.write("%s\n%s\n" % (initMsg, "-" * len(initMsg)))
+      util.log.DUMP_FILE.write("%s\n%s\n%s\n" % (initMsg, osLabel, "-" * 80))
       util.log.DUMP_FILE.flush()
     except (OSError, IOError), exc:
       print "Unable to write to debug log file: %s" % util.sysTools.getFileErrorMsg(exc)
@@ -355,6 +402,11 @@
   # fetches descriptions for tor's configuration options
   _loadConfigurationDescriptions(pathPrefix)
   
+  # dump tor and arm configuration when in debug mode
+  if isDebugMode:
+    util.log.log(CONFIG["log.savingDebugLog"], "Saving a debug log to '%s' (please check it for sensitive information before sharing)" % LOG_DUMP_PATH)
+    _dumpConfig()
+  
   interface.controller.startTorMonitor(time.time() - initTime, expandedEvents, param["startup.blindModeEnabled"])
   conn.close()
 

Modified: arm/trunk/src/version.py
===================================================================
--- arm/trunk/src/version.py	2011-01-10 12:45:42 UTC (rev 24057)
+++ arm/trunk/src/version.py	2011-01-10 17:09:13 UTC (rev 24058)
@@ -2,6 +2,6 @@
 Provides arm's version and release date.
 """
 
-VERSION = '1.4.1'
+VERSION = '1.4.1_dev'
 LAST_MODIFIED = "January 7, 2011"