[PATCH jk-tui 1/2] Add some validation to the text rootpw spoke

Vratislav Podzimek vpodzime at redhat.com
Wed Aug 22 17:40:13 UTC 2012


On Tue, 2012-08-21 at 16:44 -0700, Jesse Keating wrote:
> This copies some code over from textw/userauth_text and massages it a
> bit to work in the new text UI.  See comments for some code that could
> move to a higher level and other notes.
> ---
>  pyanaconda/ui/tui/spokes/password.py | 52 ++++++++++++++++++++++++++++++++++--
>  1 file changed, 50 insertions(+), 2 deletions(-)
> 
> diff --git a/pyanaconda/ui/tui/spokes/password.py b/pyanaconda/ui/tui/spokes/password.py
> index ccf3f33..eb9ff1e 100644
> --- a/pyanaconda/ui/tui/spokes/password.py
> +++ b/pyanaconda/ui/tui/spokes/password.py
> @@ -22,6 +22,8 @@
>  from pyanaconda.ui.tui.spokes import NormalTUISpoke
>  from pyanaconda.ui.tui.simpleline import TextWidget
>  import getpass
> +import pwquality
> +import string
>  
>  import gettext
>  _ = lambda x: gettext.ldgettext("anaconda", x)
> @@ -58,8 +60,8 @@ class PasswordSpoke(NormalTUISpoke):
>          p1 = getpass.getpass(_("Password: "))
>          p2 = getpass.getpass(_("Password (confirm): "))
>  
> -        if p1 != p2:
> -            print _("Passwords do not match!")
> +        if not self.validate(p1, p2):
> +            return None
>          else:
>              self._password = p1
>              self.apply()
> @@ -70,3 +72,49 @@ class PasswordSpoke(NormalTUISpoke):
>      def apply(self):
>          self.data.rootpw.password = self._password
>          self.data.rootpw.isCrypted = False
> +
> +    def validate(self, p1, p2):
> +        # Check length of password
> +        if len(p1) < 6:
> +            print(_("The root password must be at least 6 characters long."))
> +            return False
> +        # Check equality
> +        elif p1 != p2:
> +            print(_("The passwords you entered were different. Please "
> +                  "try again."))
> +            return False
> +        # See if there are bad characters
> +        elif self.hasBadChars(p1):
> +            print(_("Requested password contains non-ASCII characters, "
> +                    "which are not allowed."))
> +            return False
> +        # Check the quality
> +        else:
> +            try:
> +                settings = pwquality.PWQSettings()
> +                settings.read_config()
> +                settings.check(p1, None, "root")
> +                return True
> +            except pwquality.PWQError as (e, msg):
> +                # This translation may not work.  Taken from textw/userauth_text
> +                # where it actually did the substitution /inside/ the _() call.
> +                print(_("You have provided a weak password: %s\n\n"
> +                        "Would you like to continue with this password?") % msg)
> +                # This yesno thing feels like it should be a library provided
> +                # utility, instead of written out here.  Move it somewhere
> +                # better someday.  jlk
> +                yesno = raw_input(_("Please enter y for yes or n for no: "))
> +                if yesno in [_("y"), _("Y"), _("yes"), _("YES"), _("Yes")]:
Wouldn't it be better to use 'yesno.lower() in [_("y"), _("yes")]: ' ? I
believe translators would like it more.

-- 
Vratislav Podzimek

Anaconda Rider | Red Hat, Inc. | Brno - Czech Republic



More information about the anaconda-patches mailing list