Handle default string values when using user_enabled_invert

When the user_enabled_invert setting is being used, values returned
from LDAP are ultimately converted to a bool type when we reach the
inversion logic.  If the user_enabled_default value is used due to
no value being returned from LDAP, the type is a string.  This causes
the inversion logic to be evaluated incorrectly, as 'not' will return
False for any non-empty string.  This results in disabled accounts
that should be enabled.

Change-Id: Id7b024c12815748305458ca05fc8f8a6324c1908
Closes-bug: #1376053
(cherry picked from commit 50a6312ffa1f636bd74c98d9938ea4083bed2768)
Fix parsing of emulated enabled DN

If a non-default emulated enabled DN is specified in configuration,
the DN structure returned from python-ldap is incorrectly converted
to a string.  This leads to an index error when we attempt to extract
the RDN attribute and value.

This patch removes the incorrect string conversion and instead does
the proper conversion on the RDN strings that we extract.

Change-Id: I8f0c4594cfa9a41e1875870c3eb63fae32c8c041
Resolves-bug: #1375772
(cherry picked from commit 5380ddaadb0ce34b866b097cb6ac1396d2b30100)
Convert unicode to UTF8 when calling ldap.str2dn()

The string passed to ldap.str2dn() needs to be UTF8 encoded, otherwise
we encounter UnicodeEncodeError exceptions.

This patch adds UTF8 encoding where it was missing for ldap.str2dn()
calls as well as some unit tests to cover the functions that were
lacking this encoding step.

Change-Id: I96e718f1d43f4aad272ca4990d3905a5adf1f07d
Closes-bug: #1375139
(cherry picked from commit 09d38008aa0e7f8c6802088c807dd0ad6ba80e10)
Merge "Fix parsing of emulated enabled DN" into proposed/juno
Merge "Convert unicode to UTF8 when calling ldap.str2dn()" into proposed/juno
Fix tests comparing tokens

There were tests that verified that the PKI token body could be
encrypted with CMS and compared to the token ID in the response.
This test isn't safe because the token body may be different than
the token encrypted with CMS since the order of items in the dict
can change.

The fix is to change the test to decode the PKI token ID and
compare that to the response body JSON instead.

Change-Id: Icc649b96071ff084d5c76f2ea2bcf3ecb08a0351
(cherry picked from commit 83394ba71ba06e9899aaa62f211919075f2a3d91)
Fixes an error deleting an endpoint group project

Deleting a endpoint group project fails because the router specifies
a controller method that doesn't exist. This returns a 500 error to
the user for what should be a successful operation.

Change-Id: I3b91d8023d31555893fb944da73633a69d8e286f
Closes-bug: #1377304
Validates controller methods exist when specified

It was possible to specify an invalid controller method in a router.
This will not cause an error until runtime. This change catches the
error much earlier in the application lifecycle. In fact with this
change errors should not be able to pass unit tests even if there is
no specific test for the behavior.

Related-bug: #1377304
Change-Id: Icc5646c143a234127a8b4ac8a74342ef3dca7e80
Ensure sql upgrade tests can run with non-sqlite databases.

This patch fixes the issues that were preventing the running of
live sql upgrade tests (either by running test_sql_upgrade directly
or via test_sql_livetest), namely:

- Dropping the tables that were in existence before the current
  scope of migration in an order that is FK friendly
- Fixing an issue where the tables were being dropped in the
  wrong order in the downgrade of federation
- Ensuring we don't hold sessions open over upgrade/downgrade
  steps in our test methods

Limitations:

- This patch has not been tested with DB2

Closes-Bug: 1363047
Closes-Bug: 1375937
Change-Id: Ied4741a9646b57bc6f2ddcdc8a380ea55b2a9634
Merge "Fixes an error deleting an endpoint group project" into proposed/juno
Merge "Validates controller methods exist when specified" into proposed/juno
updated translations

this boils down to:

$ python setup.py extract_messages
$ python setup.py update_catalog --no-fuzzy-matching \
  --ignore-obsolete=true
$ source \
  ../../openstack-infra/project-config/jenkins/scripts/common_translation_update.sh
$ setup_loglevel_vars
$ cleanup_po_files keystone

Change-Id: I2a03f3d7eebe0be0250d4834256dfa3c634dbb48
remove runtime dep on python-pbr
sync parameter values with keystone-dist.conf

and adjust descriptions to take dist.conf defaults into account (rhbz#923912)

Change-Id: If36c384f86843a6506a494d79beca65639fb3480