[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