diff options
author | Stephen Gallagher <sgallagh@redhat.com> | 2011-03-24 10:54:34 -0400 |
---|---|---|
committer | Stephen Gallagher <sgallagh@redhat.com> | 2011-03-25 09:16:28 -0400 |
commit | 61d3d86693b9ec5afd47c510c5aeab45cff768f8 (patch) | |
tree | 10cd5bdf12e5fe4cedbfb41966fbd45a54e94e66 /src/tools/sss_obfuscate | |
parent | db5a650c14186a24fb66b4f83202479abe33e164 (diff) | |
download | sssd-61d3d86693b9ec5afd47c510c5aeab45cff768f8.tar.gz sssd-61d3d86693b9ec5afd47c510c5aeab45cff768f8.tar.xz sssd-61d3d86693b9ec5afd47c510c5aeab45cff768f8.zip |
sss_obfuscate: Avoid traceback on ctrl+d
sss_obfuscate: abort on ctrl+c
There is a python bug (http://bugs.python.org/issue11236) where
getpass.getpass() does not throw KeyboardInterrupt on ctrl+c. This
workaround is the closest we can get: if we detect the control
character in the string that we read, we'll cancel.
Diffstat (limited to 'src/tools/sss_obfuscate')
-rw-r--r-- | src/tools/sss_obfuscate | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/src/tools/sss_obfuscate b/src/tools/sss_obfuscate index 506e2c410..fbea1213d 100644 --- a/src/tools/sss_obfuscate +++ b/src/tools/sss_obfuscate @@ -41,12 +41,28 @@ def main(): return 1 if not options.stdin: - pprompt = lambda: (getpass.getpass("Enter password: "), getpass.getpass("Re-enter password: ")) - p1, p2 = pprompt() - while p1 != p2: - print('Passwords do not match. Try again') + try: + pprompt = lambda: (getpass.getpass("Enter password: "), getpass.getpass("Re-enter password: ")) p1, p2 = pprompt() - password = p1 + + #Work around bug in Python 2.6 + if '\x03' in p1 or '\x03' in p2: + raise KeyboardInterrupt + + while p1 != p2: + print('Passwords do not match. Try again') + p1, p2 = pprompt() + + #Work around bug in Python 2.6 + if '\x03' in p1 or '\x03' in p2: + raise KeyboardInterrupt + password = p1 + + except EOFError: + print >> sys.stderr, '\nUnexpected end-of-file. Password change aborted' + return 1 + except KeyboardInterrupt: + return 1 else: try: |