From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michal Novotny Subject: [PATCH] Pygrub exception trap when import fails Date: Mon, 07 Sep 2009 10:41:11 +0200 Message-ID: <4AA4C727.6050002@redhat.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------050208020000040400090405" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: "'xen-devel@lists.xensource.com'" List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --------------050208020000040400090405 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit 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 --------------050208020000040400090405 Content-Type: text/x-patch; name="xen-pygrub-grub-exception-trap.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="xen-pygrub-grub-exception-trap.patch" 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 ) --------------050208020000040400090405 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------------050208020000040400090405--