You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
4.8 KiB
145 lines
4.8 KiB
6 years ago
|
From f46ac074d066884480098c14397f5f3e34475e11 Mon Sep 17 00:00:00 2001
|
||
|
From: Jiri Popelka <jpopelka@redhat.com>
|
||
|
Date: Fri, 22 Jan 2016 16:30:13 +0100
|
||
|
Subject: [PATCH] fix from launchpad #1510950
|
||
|
|
||
|
---
|
||
|
base/password.py | 17 ++++++++++++++++-
|
||
|
base/utils.py | 53 ++++++++++++++++++++++++++++++++++-------------------
|
||
|
2 files changed, 50 insertions(+), 20 deletions(-)
|
||
|
|
||
|
diff --git a/base/password.py b/base/password.py
|
||
|
index 3ca16ae..6caefdf 100644
|
||
|
--- a/base/password.py
|
||
|
+++ b/base/password.py
|
||
|
@@ -104,6 +104,7 @@ def get_distro_name():
|
||
|
class Password(object):
|
||
|
def __init__(self, Mode = INTERACTIVE_MODE):
|
||
|
self.__password =""
|
||
|
+ self.__password_prompt_str=""
|
||
|
self.__passwordValidated = False
|
||
|
self.__mode = Mode
|
||
|
self.__readAuthType() #self.__authType
|
||
|
@@ -201,7 +202,17 @@ class Password(object):
|
||
|
|
||
|
cb = child.before
|
||
|
if cb:
|
||
|
-
|
||
|
+ if('true' in cmd and self.__password_prompt_str == ""): #sudo true or su -c "true"
|
||
|
+ cb = cb.replace("[", "\[")
|
||
|
+ cb = cb.replace("]", "\]")
|
||
|
+ self.__password_prompt_str = cb
|
||
|
+ try:
|
||
|
+ p = re.compile(cb, re.I)
|
||
|
+ except TypeError:
|
||
|
+ self.__expectList.append(cb)
|
||
|
+ else:
|
||
|
+ self.__expectList.append(p)
|
||
|
+
|
||
|
start = time.time()
|
||
|
output.write(cb)
|
||
|
|
||
|
@@ -355,3 +366,7 @@ class Password(object):
|
||
|
self.__validatePassword( pswd_msg)
|
||
|
return self.__password
|
||
|
|
||
|
+ def getPasswordPromptString(self):
|
||
|
+ return self.__password_prompt_str
|
||
|
+
|
||
|
+
|
||
|
diff --git a/base/utils.py b/base/utils.py
|
||
|
index f1ec1e1..5d108f0 100644
|
||
|
--- a/base/utils.py
|
||
|
+++ b/base/utils.py
|
||
|
@@ -108,22 +108,21 @@ MAJ_VER = sys.version_info[0]
|
||
|
MIN_VER = sys.version_info[1]
|
||
|
|
||
|
|
||
|
-
|
||
|
EXPECT_WORD_LIST = [
|
||
|
pexpect.EOF, # 0
|
||
|
pexpect.TIMEOUT, # 1
|
||
|
- "Continue?", # 2 (for zypper)
|
||
|
- "passwor[dt]:", # en/de/it/ru
|
||
|
- "kennwort", # de?
|
||
|
- "password for", # en
|
||
|
- "mot de passe", # fr
|
||
|
- "contraseña", # es
|
||
|
- "palavra passe", # pt
|
||
|
- "口令", # zh
|
||
|
- "wachtwoord", # nl
|
||
|
- "heslo", # czech
|
||
|
- "密码",
|
||
|
- "Lösenord", #sv
|
||
|
+ u"Continue?", # 2 (for zypper)
|
||
|
+ u"passwor[dt]:", # en/de/it/ru
|
||
|
+ u"kennwort", # de?
|
||
|
+ u"password for", # en
|
||
|
+ u"mot de passe", # fr
|
||
|
+ u"contraseña", # es
|
||
|
+ u"palavra passe", # pt
|
||
|
+ u"口令", # zh
|
||
|
+ u"wachtwoord", # nl
|
||
|
+ u"heslo", # czech
|
||
|
+ u"密码",
|
||
|
+ u"Lösenord", #sv
|
||
|
]
|
||
|
|
||
|
|
||
|
@@ -1260,6 +1259,15 @@ def run(cmd, passwordObj = None, pswd_msg='', log_output=True, spinner=True, tim
|
||
|
import io
|
||
|
output = io.StringIO()
|
||
|
|
||
|
+ pwd_prompt_str = ""
|
||
|
+ if passwordObj and ('su' in cmd or 'sudo' in cmd):
|
||
|
+ pwd_prompt_str = passwordObj.getPasswordPromptString()
|
||
|
+ log.debug("cmd = %s pwd_prompt_str = [%s]"%(cmd, pwd_prompt_str))
|
||
|
+ if(pwd_prompt_str == ""):
|
||
|
+ passwordObj.getPassword(pswd_msg, 0)
|
||
|
+ pwd_prompt_str = passwordObj.getPasswordPromptString()
|
||
|
+ log.debug("pwd_prompt_str2 = [%s]"%(pwd_prompt_str))
|
||
|
+
|
||
|
try:
|
||
|
child = pexpect.spawnu(cmd, timeout=timeout)
|
||
|
except pexpect.ExceptionPexpect as e:
|
||
|
@@ -1277,15 +1285,22 @@ def run(cmd, passwordObj = None, pswd_msg='', log_output=True, spinner=True, tim
|
||
|
continue
|
||
|
|
||
|
if child.before:
|
||
|
+ if(pwd_prompt_str and pwd_prompt_str not in EXPECT_LIST):
|
||
|
+ log.debug("Adding %s to EXPECT LIST"%pwd_prompt_str)
|
||
|
+ try:
|
||
|
+ p = re.compile(pwd_prompt_str, re.I)
|
||
|
+ except TypeError:
|
||
|
+ EXPECT_LIST.append(pwd_prompt_str)
|
||
|
+ else:
|
||
|
+ EXPECT_LIST.append(p)
|
||
|
+ EXPECT_LIST.append(pwd_prompt_str)
|
||
|
+
|
||
|
try:
|
||
|
output.write(child.before)
|
||
|
+ if log_output:
|
||
|
+ log.debug(child.before)
|
||
|
except Exception:
|
||
|
pass
|
||
|
- if log_output:
|
||
|
- try:
|
||
|
- log.debug(child.before)
|
||
|
- except Exception:
|
||
|
- pass
|
||
|
|
||
|
if i == 0: # EOF
|
||
|
break
|
||
|
@@ -2018,7 +2033,7 @@ def download_from_network(weburl, outputFile = None, useURLLIB=False):
|
||
|
|
||
|
if useURLLIB:
|
||
|
|
||
|
- sys.stdout.write("Download in progress..........")
|
||
|
+ #sys.stdout.write("Download in progress..........")
|
||
|
try:
|
||
|
response = urllib2_request.urlopen(weburl)
|
||
|
file_fd = open(outputFile, 'wb')
|
||
|
--
|
||
|
2.5.0
|
||
|
|