Hi All,

Please find the update patch with review comments,


On 08/14/2015 05:19 PM, Martin Basti wrote:


On 08/14/2015 06:57 AM, Abhijeet Kasurde wrote:

On 08/13/2015 07:08 PM, Martin Basti wrote:


On 08/10/2015 01:47 PM, Abhijeet Kasurde wrote:
Hi All,

This patch fixes bug - https://fedorahosted.org/freeipa/ticket/3406

Thanks,
Abhijeet Kasurde



Hello,

thank you for the patch

1)
-            except ValueError:
+            except EOFError, ValueError:

Please use
except (EOFError, ValueError):
https://docs.python.org/2/tutorial/errors.html#handling-exceptions
OK, I will include this.
2)
I'm not sure if this code will work (I did not test it)

I expect when stdin is closed, this will result into infinite loop, because raw_input will always return EOFError.

        while True:
            try:
                ret = raw_input("%s: " % prompt)
                if allow_empty or ret.strip():
                    return ret
            except EOFError:
                pass

Could you please elaborate more on, so that I can include fix in this section of code?
If you receive EOF you cannot continue in while cycle because, it will return EOF every iteration forever.

If EOF is received the while cycle must end, and appropriate action must be take. It depends on situation, if default value is present then default value should be used, or in case if empty value is allowed, empty string should be returned.

In case there is no default value and empty value is not allowed, then an exception should be raised.

Martin^2

From 75dd07dcb39268232f4a49118137db6e9297d936 Mon Sep 17 00:00:00 2001
From: Abhijeet Kasurde <akasu...@redhat.com>
Date: Mon, 17 Aug 2015 14:36:39 +0530
Subject: [PATCH] Added try/except block for ipautil

Added error handling for user input in order to handle various errors
like ValueError and EOFError in ipautil.

https://fedorahosted.org/freeipa/ticket/3406

Signed-off-by: Abhijeet Kasurde <akasu...@redhat.com>
---
 ipapython/ipautil.py | 51 ++++++++++++++++++++++++++++++++-------------------
 1 file changed, 32 insertions(+), 19 deletions(-)

diff --git a/ipapython/ipautil.py b/ipapython/ipautil.py
index 88e89706b8e2aa6dea80809510d88bceaa836e85..3e3af9e95efec95eef30fcfea26dad7779b649de 100644
--- a/ipapython/ipautil.py
+++ b/ipapython/ipautil.py
@@ -746,30 +746,42 @@ 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 ''
 
     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:
-                return default
-            elif ret.lower()[0] == "y":
-                return True
-            elif ret.lower()[0] == "n":
-                return False
+            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:
+                if choice.lower()[0] == "y":
+                    return True
+                elif choice.lower()[0] == "n":
+                    return False
+
     if isinstance(default, int):
         while True:
             try:
@@ -779,10 +791,11 @@ def user_input(prompt, default = None, allow_empty = True):
                 ret = int(ret)
             except ValueError:
                 pass
+            except EOFError:
+                return default
             else:
                 return ret
 
-
 def get_gsserror(e):
     """
     A GSSError exception looks differently in python 2.4 than it does
-- 
2.4.3

-- 
Manage your subscription for the Freeipa-devel mailing list:
https://www.redhat.com/mailman/listinfo/freeipa-devel
Contribute to FreeIPA: http://www.freeipa.org/page/Contribute/Code

Reply via email to