|
|
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 |
|