Need to pass the URL path through quote to ensure any special characters are being quoted properly. if we include local_file for a PUT, read the file into data before passing it along to requests.requests.

This commit is contained in:
Gareth J. Greenaway 2018-06-26 14:40:01 -07:00
parent 9b364e25cf
commit 131486203e
No known key found for this signature in database
GPG key ID: 10B62F8A7CAD7A41

View file

@ -23,6 +23,7 @@ import salt.utils.hashutils
import salt.utils.xmlutil as xml
from salt._compat import ElementTree as ET
from salt.exceptions import CommandExecutionError
from salt.ext.six.moves.urllib.parse import quote as _quote
from salt.ext import six
log = logging.getLogger(__name__)
@ -117,6 +118,7 @@ def query(key, keyid, method='GET', params=None, headers=None,
location = salt.utils.aws.get_location()
data = ''
fh = None
payload_hash = None
if method == 'PUT':
if local_file:
@ -124,6 +126,7 @@ def query(key, keyid, method='GET', params=None, headers=None,
if path is None:
path = ''
path = _quote(path)
if not requesturl:
requesturl = (('https' if https_enable else 'http')+'://{0}/{1}').format(endpoint, path)
@ -152,7 +155,8 @@ def query(key, keyid, method='GET', params=None, headers=None,
try:
if method == 'PUT':
if local_file:
data = salt.utils.files.fopen(local_file, 'r') # pylint: disable=resource-leakage
fh = salt.utils.files.fopen(local_file, 'rb') # pylint: disable=resource-leakage
data = fh.read() # pylint: disable=resource-leakage
result = requests.request(method,
requesturl,
headers=headers,
@ -173,8 +177,8 @@ def query(key, keyid, method='GET', params=None, headers=None,
data=data,
verify=verify_ssl)
finally:
if data is not None:
data.close()
if fh is not None:
fh.close()
err_code = None
err_msg = None