summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Cholasta <jcholast@redhat.com>2015-08-31 09:08:38 +0200
committerJan Cholasta <jcholast@redhat.com>2015-09-07 08:00:11 +0200
commitcc53526fd21d3faa7b90cd873713279c3ce049f5 (patch)
treefc2edb6f2ab2027cdce60f796134488f3ec358c7
parentcf9bf9dcafa6c6d434440e7b106f1886614eec05 (diff)
downloadfreeipa-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-xinstall/oddjob/com.redhat.idm.trust-fetch-domains2
-rwxr-xr-xinstall/tools/ipa-replica-manage2
-rwxr-xr-xipa-client/ipa-install/ipa-client-automount2
-rwxr-xr-xipa-client/ipa-install/ipa-client-install2
-rw-r--r--ipapython/ipautil.py19
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