A recent PY3-compatibility fix was made to `check_whitelist_blacklist`.
The function was previously checking for the `__iter__` attribute to
check if the blacklist and/or whitelist was a sequence of expressions
or a single expression. However, the `str` type has the `__iter__`
attribute in PY3 while it does not in PY2. To fix this, the check was
changed to see if the blacklist and/or whitelist were `list` types. This
however causes problems in `salt.daemons.masterapi` when we pass `set`
types.
To fix this, we just check if the whitelist and/or blacklist are string
types, rather than that they are _not_ some sort of sequence type.
Many funcs in this module only convert the input to bytes on Python 3
because the hashing and base64-encoding funcs used in this module
require bytes as input. However, on Python 2, to get bytes the input
will be coerced to a str type if it is a unicode type. This will result
in a UnicodeEncodeError when the unicode string contains non-ascii
characters.
This commit ensures that all input which is going to be encoded/hashed
is converted to a bytes type first, and also ensures that all
base64-encoded results are returned as a unicode string on Python 2 to
conform with changes that have been made in 2018.3 to use unicode types
where possible.
Due to the many merge conflicts created from #47106 against the 2017.7 branch
and #46002 against the 2018.3 branch, the changes from #47106 have been largely
removed from this merge forward and the HEAD of 2018.3 was taken.
A separate fix for Tornado 5.0 support will need to be made directly against the
2018.3 branch.
Conflicts:
- doc/topics/development/conventions/formulas.rst
- salt/master.py
- salt/minion.py
- salt/netapi/rest_tornado/saltnado.py
- salt/states/zfs.py
- salt/transport/ipc.py
- salt/transport/tcp.py
- salt/transport/zeromq.py
- salt/utils/async.py
- tests/support/helpers.py
- tests/support/parser/cover.py
- tests/unit/grains/test_core.py
- tests/unit/modules/test_ssh.py
- tests/unit/test_minion.py
- tests/unit/utils/test_safe_walk.py