* [PATCH] Pygrub exception trap when import fails
@ 2009-09-07 8:41 Michal Novotny
0 siblings, 0 replies; only message in thread
From: Michal Novotny @ 2009-09-07 8:41 UTC (permalink / raw)
To: 'xen-devel@lists.xensource.com'
[-- Attachment #1: Type: text/plain, Size: 503 bytes --]
Hi all,
this is the patch that fixes the issue when importing 'crypt' module or
crypt.crypt fails in pygrub. The exception is written on the same line
like "Failed!" message but only if there is an exception. If there is no
exception, we don't bother users with details (probably the password
they entered was wrong) so we just display "Failed!" message. Also, the
code for hasPassword() was rewritten not to have try/except block here.
Michal
Signed-off-by: Michal Novotny <minovotn@redhat.com>
[-- Attachment #2: xen-pygrub-grub-exception-trap.patch --]
[-- Type: text/x-patch, Size: 2989 bytes --]
diff -r ead107bc25cb tools/pygrub/src/GrubConf.py
--- a/tools/pygrub/src/GrubConf.py Fri Sep 04 08:43:05 2009 +0100
+++ b/tools/pygrub/src/GrubConf.py Mon Sep 07 10:36:09 2009 +0200
@@ -158,6 +158,7 @@ class GrubConfigFile(object):
self.timeout = -1
self._default = 0
self.passwordAccess = True
+ self.passExc = None
if fn is not None:
self.parse()
@@ -197,7 +198,6 @@ class GrubConfigFile(object):
if self.commands.has_key(com):
if self.commands[com] is not None:
setattr(self, self.commands[com], arg.strip())
- #print "%s = %s => %s" % (com, self.commands[com], arg.strip() )
else:
logging.info("Ignored directive %s" %(com,))
else:
@@ -216,25 +216,28 @@ class GrubConfigFile(object):
self.passwordAccess = val
def hasPassword(self):
- try:
- getattr(self, self.commands['password'])
+ return hasattr(self, 'password')
+
+ def checkPassword(self, password):
+ # Always allow if no password defined in grub.conf
+ if not self.hasPassword:
return True
- except:
- return False
-
- def checkPassword(self, password):
- try:
- pwd = getattr(self, self.commands['password']).split()
- if pwd[0] == '--md5':
+
+ # If we're here, we're having 'password' attribute set
+ pwd = getattr(self, 'password').split()
+
+ # We check whether password is in MD5 hash for comparison
+ if pwd[0] == '--md5':
+ try:
import crypt
if crypt.crypt(password, pwd[1]) == pwd[1]:
return True
-
- if pwd[0] == password:
- return True
-
- return False
- except:
+ except Exception, e:
+ self.passExc = "Can't verify password: %s" % str(e)
+ return False
+
+ # ... and if not, we compare it as a plain text
+ if pwd[0] == password:
return True
def set(self, line):
diff -r ead107bc25cb tools/pygrub/src/pygrub
--- a/tools/pygrub/src/pygrub Fri Sep 04 08:43:05 2009 +0100
+++ b/tools/pygrub/src/pygrub Mon Sep 07 10:36:09 2009 +0200
@@ -483,7 +483,11 @@ class Grub:
pwd = self.text_win.getstr(6, 8)
if not self.cf.checkPassword(pwd):
self.text_win.addstr(6, 1, "Password: ")
- self.text_win.addstr(7, 0, "Failed!")
+ if self.cf.passExc is not None:
+ self.text_win.addstr(7, 0, "Exception: %s"
+ % self.cf.passExc)
+ else:
+ self.text_win.addstr(7, 0, "Failed!")
self.cf.setPasswordAccess( False )
else:
self.cf.setPasswordAccess( True )
[-- Attachment #3: Type: text/plain, Size: 138 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2009-09-07 8:41 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-09-07 8:41 [PATCH] Pygrub exception trap when import fails Michal Novotny
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.