Blame SOURCES/Fix-behavior-for-dot-inside-proc-sys-path.patch

d2f14d
From dca3278e7875dd2df07f409abaedcb9cd1d77047 Mon Sep 17 00:00:00 2001
d2f14d
From: Petr Oros <poros@redhat.com>
d2f14d
Date: Mon, 18 May 2015 12:30:50 +0200
d2f14d
Subject: [PATCH 14/15] Fix behavior for dot inside /proc/sys/ path
d2f14d
d2f14d
	When /proc/sys/ path contain dot (for example netif name) and config
d2f14d
	file using * for filename tuna fail with traceback:
d2f14d
d2f14d
	Invalid item! file: /proc/sys/net/ipv6/conf/tuna/1/forwarding
d2f14d
	Traceback (most recent call last):
d2f14d
	  File "/usr/bin/tuna", line 647, in <module>
d2f14d
	    main()
d2f14d
	  File "/usr/bin/tuna", line 641, in main
d2f14d
	    app = tuna_gui.main_gui(kthreads, uthreads, cpus_filtered)
d2f14d
	  File "/usr/lib/python2.7/site-packages/tuna/tuna_gui.py", line 64, in __init__
d2f14d
	    self.profileview.init_default_file()
d2f14d
	  File "/usr/lib/python2.7/site-packages/tuna/gui/profileview.py", line 146, in init_default_file
d2f14d
	    self.commonview.updateCommonView()
d2f14d
	  File "/usr/lib/python2.7/site-packages/tuna/gui/commonview.py", line 13, in updateCommonView
d2f14d
	    self.setup()
d2f14d
	  File "/usr/lib/python2.7/site-packages/tuna/gui/commonview.py", line 80, in setup
d2f14d
	    frameContent[catCntr]['texts'][contentCntr].set_value(int(self.config.ctlParams[catCntr][val]))
d2f14d
	ValueError: invalid literal for int() with base 10: ''
d2f14d
d2f14d
	This patch add support for escaping "." character.
d2f14d
d2f14d
Signed-off-by: Petr Oros <poros@redhat.com>
d2f14d
Reported-by: Arnaldo Carvalho de Melo <acme@redhat.com>
d2f14d
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1178917
d2f14d
Signed-off-by: John Kacur <jkacur@redhat.com>
d2f14d
---
d2f14d
 tuna/config.py | 26 ++++++++++++++++----------
d2f14d
 1 file changed, 16 insertions(+), 10 deletions(-)
d2f14d
d2f14d
diff --git a/tuna/config.py b/tuna/config.py
d2f14d
index 7e19a28f967f..e82a4200c6ff 100644
d2f14d
--- a/tuna/config.py
d2f14d
+++ b/tuna/config.py
d2f14d
@@ -30,6 +30,12 @@ class Config:
d2f14d
 			self.config[option] = value
d2f14d
 		self.cacheFileName = ''
d2f14d
 
d2f14d
+	def FileNameToConfigPath(self, filename):
d2f14d
+		return filename.replace(".", "\\.").replace("/", ".")
d2f14d
+
d2f14d
+	def ConfigPathToFileName(self, configpath):
d2f14d
+		return configpath.replace(".", "/").replace("\\/", ".")
d2f14d
+
d2f14d
 	def updateDefault(self, filename):
d2f14d
 		if filename.replace("", "temp-direct-load.conf") != filename:
d2f14d
 			self.temp = ConfigParser.RawConfigParser()
d2f14d
@@ -154,9 +160,9 @@ class Config:
d2f14d
 					tempCfg = []
d2f14d
 					for index in range(len(oldTempCfg)):
d2f14d
 						if self.isFnString(oldTempCfg[index][0]):
d2f14d
-							expanded = self.getFilesByFN("/proc/sys", oldTempCfg[index][0].replace(".", "/"))
d2f14d
+							expanded = self.getFilesByFN("/proc/sys", self.ConfigPathToFileName(oldTempCfg[index][0]))
d2f14d
 							for index2 in range(len(expanded)):
d2f14d
-								expandedData = (expanded[index2].replace("/", "."), oldTempCfg[index][1])
d2f14d
+								expandedData = (self.FileNameToConfigPath(expanded[index2]), oldTempCfg[index][1])
d2f14d
 								tempCfg.append(expandedData)
d2f14d
 						else:
d2f14d
 							tempCfg.append(oldTempCfg[index])
d2f14d
@@ -241,9 +247,9 @@ class Config:
d2f14d
 	def getSystemValue(self, filename):
d2f14d
 		filename = self.aliasToOriginal(filename)
d2f14d
 		try:
d2f14d
-			buffer = open("/proc/sys/" + filename.replace(".", "/"), 'r').read()
d2f14d
+			buffer = open("/proc/sys/" + self.ConfigPathToFileName(filename), 'r').read()
d2f14d
 		except IOError:
d2f14d
-			print _("Invalid item! file: /proc/sys/%s" %(filename.replace(".", "/")))
d2f14d
+			print _("Invalid item! file: /proc/sys/%s" %(self.ConfigPathToFileName(filename)))
d2f14d
 			return ""
d2f14d
 		return buffer.strip()
d2f14d
 
d2f14d
@@ -253,10 +259,10 @@ class Config:
d2f14d
 		if value == "" or old == value:
d2f14d
 			return 0
d2f14d
 		try:
d2f14d
-			fp = open("/proc/sys/" + filename.replace(".", "/"), 'w')
d2f14d
+			fp = open("/proc/sys/" + self.ConfigPathToFileName(filename), 'w')
d2f14d
 			fp.write(value)
d2f14d
 		except IOError:
d2f14d
-			print "%s%s %s %s" % (_("Cant write to file! path: /proc/sys/"), filename.replace(".","/"), _("value:"), value)
d2f14d
+			print "%s%s %s %s" % (_("Cant write to file! path: /proc/sys/"), self.ConfigPathToFileName(filename), _("value:"), value)
d2f14d
 			return -1
d2f14d
 		return 0
d2f14d
 
d2f14d
@@ -302,9 +308,9 @@ class Config:
d2f14d
 			snapcont = []
d2f14d
 			for index in range(len(snapcontPacked)):
d2f14d
 				if self.isFnString(snapcontPacked[index][0]):
d2f14d
-					expanded = self.getFilesByFN("/proc/sys",snapcontPacked[index][0].replace(".","/"))
d2f14d
+					expanded = self.getFilesByFN("/proc/sys",self.ConfigPathToFileName(snapcontPacked[index][0]))
d2f14d
 					for index2 in range(len(expanded)):
d2f14d
-						expandedData = (expanded[index2].replace("/","."),snapcontPacked[index][1])
d2f14d
+						expandedData = (self.FileNameToConfigPath(expanded[index2]),snapcontPacked[index][1])
d2f14d
 						snapcont.append(expandedData)
d2f14d
 				else:
d2f14d
 					snapcont.append(snapcontPacked[index])
d2f14d
@@ -348,7 +354,7 @@ class Config:
d2f14d
 					return msgStack
d2f14d
 				current = self.checkParser.items(option)
d2f14d
 				for opt,val in current:
d2f14d
-					if not os.path.exists("/proc/sys/" + opt.replace(".","/")) and len(self.getFilesByFN("/proc/sys/",opt.replace(".","/"))) == 0:
d2f14d
+					if not os.path.exists("/proc/sys/" + self.ConfigPathToFileName(opt)) and len(self.getFilesByFN("/proc/sys/", self.ConfigPathToFileName(opt))) == 0:
d2f14d
 						msgStack = "%s%s%s\n" % (msgStack, _("Warning: File not found: /proc/sys/"), opt)
d2f14d
 					self.empty = False
d2f14d
 			if self.empty:
d2f14d
@@ -367,7 +373,7 @@ class Config:
d2f14d
 					self.checkParser.set('categories', '#' + option, value)
d2f14d
 				current = self.checkParser.items(option)
d2f14d
 				for opt,val in current:
d2f14d
-					if not os.path.exists("/proc/sys/" + opt.replace(".", "/")) and len(self.getFilesByFN("/proc/sys/", opt.replace(".", "/"))) == 0:
d2f14d
+					if not os.path.exists("/proc/sys/" + self.ConfigPathToFileName(opt)) and len(self.getFilesByFN("/proc/sys/", self.ConfigPathToFileName(opt))) == 0:
d2f14d
 						self.checkParser.remove_option(option, opt)
d2f14d
 						self.checkParser.set(option, '#' + opt, val)
d2f14d
 		except (ConfigParser.Error, IOError) as e:
d2f14d
-- 
d2f14d
1.8.3.1
d2f14d