1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
|
# _saveprefs.py
#
# Code to save/restore openipmi GUI preferences
#
# Author: MontaVista Software, Inc.
# Corey Minyard <minyard@mvista.com>
# source@mvista.com
#
# Copyright 2005 MontaVista Software Inc.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public License
# as published by the Free Software Foundation; either version 2 of
# the License, or (at your option) any later version.
#
#
# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this program; if not, write to the Free
# Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
import xml.dom
import xml.dom.minidom
from openipmigui import _oi_logging
import os
import stat
import sys
class RestoreHandler:
def __init__(self, mainhandler, tag):
mainhandler.pref_taghash[tag] = self
return
def restore(self, attrlist):
return
pass
def save(objlist, file):
domimpl = xml.dom.getDOMImplementation()
doc = domimpl.createDocument(None, "IPMIPrefs", None)
main = doc.documentElement
for obj in objlist:
elem = doc.createElement(obj.getTag())
obj.SaveInfo(doc, elem)
main.appendChild(elem)
pass
try:
info = os.stat(file)
pass
except:
# File doesn't exist, create it.
try:
fd = os.open(file, os.O_WRONLY | os.O_CREAT,
stat.S_IRUSR | stat.S_IWUSR)
os.close(fd)
pass
except:
_oi_logging.error("Unable to create startup file " + file)
return
pass
try:
f = open(file, 'w')
doc.writexml(f, indent='', addindent='\t', newl='\n')
pass
except:
_oi_logging.error("Unable to save startup file " + file)
pass
return
def restore(mainhandler, file):
info = None
try:
info = os.stat(file)
except:
pass
if (info):
if ((info.st_mode & (stat.S_IRWXG | stat.S_IRWXO)) != 0):
sys.exit("The file '" + file + "' is group or world"
+ " accessible. It contains passwords, and"
+ " should be secure. Not starting the GUI,"
+ " please fix the problem first.")
return
pass
try:
doc = xml.dom.minidom.parse(file).documentElement
except:
pass
else:
for child in doc.childNodes:
if (child.nodeType == child.ELEMENT_NODE):
tag = child.nodeName
if (tag in mainhandler.pref_taghash):
mainhandler.pref_taghash[tag].restore(mainhandler, child)
child = child.nextSibling
pass
pass
pass
pass
return
|