From 7c48621bb8e9efc47c68bb7b4af936da93325050 Mon Sep 17 00:00:00 2001 From: Abhijeet Kasurde Date: Wed, 19 Aug 2015 17:13:43 +0530 Subject: Added try/except block for user_input in ipautil Added error handling for function user_input in order to handle EOFError in ipautil.py https://fedorahosted.org/freeipa/ticket/3406 Signed-off-by: Abhijeet Kasurde Reviewed-By: Martin Basti --- ipapython/ipautil.py | 46 +++++++++++++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 17 deletions(-) (limited to 'ipapython') diff --git a/ipapython/ipautil.py b/ipapython/ipautil.py index ba8312e79..c3ffb1d5c 100644 --- a/ipapython/ipautil.py +++ b/ipapython/ipautil.py @@ -747,30 +747,40 @@ def ipa_generate_password(characters=None,pwd_len=None): def user_input(prompt, default = None, allow_empty = True): if default == None: while True: - ret = raw_input("%s: " % prompt) - if allow_empty or ret.strip(): - return ret + try: + ret = raw_input("%s: " % prompt) + if allow_empty or ret.strip(): + return ret + except EOFError: + if allow_empty: + return '' + raise RuntimeError("Failed to get user input") if isinstance(default, basestring): while True: - ret = raw_input("%s [%s]: " % (prompt, default)) - if not ret and (allow_empty or default): + try: + ret = raw_input("%s [%s]: " % (prompt, default)) + if not ret and (allow_empty or default): + return default + elif ret.strip(): + return ret + except EOFError: return default - elif ret.strip(): - return ret + if isinstance(default, bool): - if default: - choice = "yes" - else: - choice = "no" + choice = "yes" if default else "no" while True: - ret = raw_input("%s [%s]: " % (prompt, choice)) - if not ret: + try: + ret = raw_input("%s [%s]: " % (prompt, choice)) + if not ret: + return default + elif ret.lower()[0] == "y": + return True + elif ret.lower()[0] == "n": + return False + except EOFError: return default - elif ret.lower()[0] == "y": - return True - elif ret.lower()[0] == "n": - return False + if isinstance(default, int): while True: try: @@ -780,6 +790,8 @@ def user_input(prompt, default = None, allow_empty = True): ret = int(ret) except ValueError: pass + except EOFError: + return default else: return ret -- cgit