From: Noel Power Date: Fri, 27 Apr 2018 14:11:54 +0000 (+0100) Subject: python/samba/netcmd: Fix password usage for py2/py3 compatability X-Git-Tag: tdb-1.3.17~1918 X-Git-Url: http://git.samba.org/samba.git/?p=nivanova%2Fsamba-autobuild%2F.git;a=commitdiff_plain;h=252950ac08554d7c86a5cfc2c7fbc626c4c5f863;ds=sidebyside python/samba/netcmd: Fix password usage for py2/py3 compatability getpass returns str (e.g. bytes) in python2 and str (unicode) in py3. Adapt code to so we don't do illegal things (like try and decode) a string in python3 Signed-off-by: Noel Power Reviewed-by: Andrew Bartlett --- diff --git a/python/samba/netcmd/domain.py b/python/samba/netcmd/domain.py index f3a17eec6b8..56386c579c1 100644 --- a/python/samba/netcmd/domain.py +++ b/python/samba/netcmd/domain.py @@ -102,6 +102,8 @@ from samba.provision.common import ( from samba.netcmd.pso import cmd_domain_passwordsettings_pso from samba.netcmd.domain_backup import cmd_domain_backup +from samba.compat import binary_type + string_version_to_constant = { "2008_R2": DS_DOMAIN_FUNCTION_2008_R2, "2012": DS_DOMAIN_FUNCTION_2012, @@ -570,8 +572,9 @@ class cmd_domain_provision(Command): def _adminpass_issue(self, adminpass): """Returns error string for a bad administrator password, or None if acceptable""" - - if len(adminpass.decode('utf-8')) < DEFAULT_MIN_PWD_LENGTH: + if isinstance(adminpass, binary_type): + adminpass = adminpass.decode('utf8') + if len(adminpass) < DEFAULT_MIN_PWD_LENGTH: return "Administrator password does not meet the default minimum" \ " password length requirement (%d characters)" \ % DEFAULT_MIN_PWD_LENGTH diff --git a/python/samba/provision/__init__.py b/python/samba/provision/__init__.py index 44434a215ff..9ecb2018060 100644 --- a/python/samba/provision/__init__.py +++ b/python/samba/provision/__init__.py @@ -28,6 +28,7 @@ __docformat__ = "restructuredText" from samba.compat import urllib_quote from samba.compat import string_types +from samba.compat import binary_type from base64 import b64encode import errno import os @@ -2313,7 +2314,8 @@ def provision(logger, session_info, smbconf=None, adminpass = samba.generate_random_password(12, 32) adminpass_generated = True else: - adminpass = unicode(adminpass, 'utf-8') + if isinstance(adminpass, binary_type): + adminpass = adminpass.decode('utf-8') adminpass_generated = False if samdb_fill == FILL_FULL: