summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Gallagher <sgallagh@redhat.com>2011-03-24 10:54:34 -0400
committerStephen Gallagher <sgallagh@redhat.com>2011-03-25 09:16:28 -0400
commit61d3d86693b9ec5afd47c510c5aeab45cff768f8 (patch)
tree10cd5bdf12e5fe4cedbfb41966fbd45a54e94e66
parentdb5a650c14186a24fb66b4f83202479abe33e164 (diff)
downloadsssd-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.
-rw-r--r--src/tools/sss_obfuscate26
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: