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