diff options
author | Jan Cholasta <jcholast@redhat.com> | 2015-08-31 09:08:38 +0200 |
---|---|---|
committer | Jan Cholasta <jcholast@redhat.com> | 2015-09-07 08:00:11 +0200 |
commit | cc53526fd21d3faa7b90cd873713279c3ce049f5 (patch) | |
tree | fc2edb6f2ab2027cdce60f796134488f3ec358c7 | |
parent | cf9bf9dcafa6c6d434440e7b106f1886614eec05 (diff) | |
download | freeipa-cc53526fd21d3faa7b90cd873713279c3ce049f5.tar.gz freeipa-cc53526fd21d3faa7b90cd873713279c3ce049f5.tar.xz freeipa-cc53526fd21d3faa7b90cd873713279c3ce049f5.zip |
Decode script arguments using file system encoding
This mimics Python 3's behavior, where sys.argv is automatically decoded
using file system encoding, as returned by sys.getfilesystemencoding(). This
includes reimplementation of os.fsdecode() from Python 3.
Reviewed-By: Petr Viktorin <pviktori@redhat.com>
-rwxr-xr-x | install/oddjob/com.redhat.idm.trust-fetch-domains | 2 | ||||
-rwxr-xr-x | install/tools/ipa-replica-manage | 2 | ||||
-rwxr-xr-x | ipa-client/ipa-install/ipa-client-automount | 2 | ||||
-rwxr-xr-x | ipa-client/ipa-install/ipa-client-install | 2 | ||||
-rw-r--r-- | ipapython/ipautil.py | 19 |
5 files changed, 23 insertions, 4 deletions
diff --git a/install/oddjob/com.redhat.idm.trust-fetch-domains b/install/oddjob/com.redhat.idm.trust-fetch-domains index d19e06f12..138779c0c 100755 --- a/install/oddjob/com.redhat.idm.trust-fetch-domains +++ b/install/oddjob/com.redhat.idm.trust-fetch-domains @@ -63,7 +63,7 @@ if len(args) != 1: # LSB status code 2: invalid or excess argument(s) raise ScriptError("You must specify trusted domain name", 2) -trusted_domain = unicode(args[0].lower()) +trusted_domain = ipautil.fsdecode(args[0]).lower() env = Env() env._bootstrap(context='server', debug=options.debug, log=None) diff --git a/install/tools/ipa-replica-manage b/install/tools/ipa-replica-manage index 58b62cdff..e92561f85 100755 --- a/install/tools/ipa-replica-manage +++ b/install/tools/ipa-replica-manage @@ -707,7 +707,7 @@ def del_master_managed(realm, hostname, options): Removing of master in managed_topology """ - hostname_u = unicode(hostname) + hostname_u = ipautil.fsdecode(hostname) if hostname == options.host: print("Can't remove itself: %s" % (options.host)) sys.exit(1) diff --git a/ipa-client/ipa-install/ipa-client-automount b/ipa-client/ipa-install/ipa-client-automount index 5cac122c2..5e4ab1396 100755 --- a/ipa-client/ipa-install/ipa-client-automount +++ b/ipa-client/ipa-install/ipa-client-automount @@ -447,7 +447,7 @@ def main(): # Use the RPC directly so older servers are supported result = api.Backend.rpcclient.forward( 'automountlocation_show', - unicode(options.location), + ipautil.fsdecode(options.location), version=u'2.0', ) except errors.VersionError as e: diff --git a/ipa-client/ipa-install/ipa-client-install b/ipa-client/ipa-install/ipa-client-install index f6cf2c027..91c78c9b3 100755 --- a/ipa-client/ipa-install/ipa-client-install +++ b/ipa-client/ipa-install/ipa-client-install @@ -1811,7 +1811,7 @@ def update_ssh_keys(server, hostname, ssh_dir, create_sshfp): # Use the RPC directly so older servers are supported api.Backend.rpcclient.forward( 'host_mod', - unicode(hostname), + ipautil.fsdecode(hostname), ipasshpubkey=[pk.openssh() for pk in pubkeys], updatedns=False, version=u'2.26', # this version adds support for SSH public keys diff --git a/ipapython/ipautil.py b/ipapython/ipautil.py index 80f79aac5..2402689cc 100644 --- a/ipapython/ipautil.py +++ b/ipapython/ipautil.py @@ -1352,3 +1352,22 @@ def private_ccache(path=None): if os.path.exists(path): os.remove(path) + + +if six.PY2: + def fsdecode(value): + """ + Decode argument using the file system encoding, as returned by + `sys.getfilesystemencoding()`. + """ + if isinstance(value, six.binary_type): + return value.decode(sys.getfilesystemencoding()) + elif isinstance(value, six.text_type): + return value + else: + raise TypeError("expect {0} or {1}, not {2}".format( + six.binary_type.__name__, + six.text_type.__name__, + type(value).__name__)) +else: + fsdecode = os.fsdecode #pylint: disable=no-member |