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 )