summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--doc/source/_theme/layout.html83
-rw-r--r--doc/source/_theme/theme.conf4
-rw-r--r--doc/source/architecture.rst2
-rw-r--r--doc/source/conf.py20
-rw-r--r--doc/source/developing.rst30
-rw-r--r--doc/source/man/keystone-all.rst2
-rw-r--r--doc/source/man/keystone-manage.rst2
-rw-r--r--etc/keystone.conf.sample3
-rw-r--r--keystone/assignment/backends/kvs.py2
-rw-r--r--keystone/assignment/backends/ldap.py27
-rw-r--r--keystone/assignment/backends/sql.py27
-rw-r--r--keystone/assignment/core.py35
-rw-r--r--keystone/catalog/backends/sql.py71
-rw-r--r--keystone/cli.py54
-rw-r--r--keystone/common/config.py1
-rw-r--r--keystone/common/dependency.py43
-rw-r--r--keystone/common/environment/__init__.py3
-rw-r--r--keystone/common/ldap/core.py11
-rw-r--r--keystone/common/logging.py4
-rw-r--r--keystone/common/sql/core.py4
-rw-r--r--keystone/common/sql/migrate_repo/versions/020_migrate_metadata_table_roles.py4
-rw-r--r--keystone/common/sql/migration.py42
-rw-r--r--keystone/common/utils.py13
-rw-r--r--keystone/common/wsgi.py5
-rw-r--r--keystone/contrib/ec2/core.py4
-rw-r--r--keystone/contrib/example/__init__.py (renamed from doc/source/_templates/.placeholder)0
-rw-r--r--keystone/contrib/example/migrate_repo/__init__.py0
-rw-r--r--keystone/contrib/example/migrate_repo/migrate.cfg25
-rw-r--r--keystone/contrib/example/migrate_repo/versions/001_example_table.py45
-rw-r--r--keystone/contrib/example/migrate_repo/versions/__init__.py0
-rw-r--r--keystone/identity/backends/kvs.py2
-rw-r--r--keystone/identity/backends/ldap.py45
-rw-r--r--keystone/identity/backends/pam.py2
-rw-r--r--keystone/identity/backends/sql.py4
-rw-r--r--keystone/identity/controllers.py10
-rw-r--r--keystone/identity/core.py10
-rw-r--r--keystone/locale/bg_BG/LC_MESSAGES/keystone.po366
-rw-r--r--keystone/locale/bs/LC_MESSAGES/keystone.po848
-rw-r--r--keystone/locale/ca/LC_MESSAGES/keystone.po368
-rw-r--r--keystone/locale/cs/LC_MESSAGES/keystone.po366
-rw-r--r--keystone/locale/da/LC_MESSAGES/keystone.po366
-rw-r--r--keystone/locale/de/LC_MESSAGES/keystone.po380
-rw-r--r--keystone/locale/en_AU/LC_MESSAGES/keystone.po847
-rw-r--r--keystone/locale/en_GB/LC_MESSAGES/keystone.po847
-rw-r--r--keystone/locale/en_US/LC_MESSAGES/keystone.po847
-rw-r--r--keystone/locale/es/LC_MESSAGES/keystone.po381
-rw-r--r--keystone/locale/fi_FI/LC_MESSAGES/keystone.po366
-rw-r--r--keystone/locale/fr/LC_MESSAGES/keystone.po366
-rw-r--r--keystone/locale/hr/LC_MESSAGES/keystone.po848
-rw-r--r--keystone/locale/hu/LC_MESSAGES/keystone.po368
-rw-r--r--keystone/locale/id/LC_MESSAGES/keystone.po847
-rw-r--r--keystone/locale/it/LC_MESSAGES/keystone.po381
-rw-r--r--keystone/locale/it_IT/LC_MESSAGES/keystone.po847
-rw-r--r--keystone/locale/ja/LC_MESSAGES/keystone.po368
-rw-r--r--keystone/locale/ka_GE/LC_MESSAGES/keystone.po366
-rw-r--r--keystone/locale/keystone.pot359
-rw-r--r--keystone/locale/ko/LC_MESSAGES/keystone.po847
-rw-r--r--keystone/locale/ko_KR/LC_MESSAGES/keystone.po366
-rw-r--r--keystone/locale/ms/LC_MESSAGES/keystone.po847
-rw-r--r--keystone/locale/nb/LC_MESSAGES/keystone.po847
-rw-r--r--keystone/locale/nl_NL/LC_MESSAGES/keystone.po847
-rw-r--r--keystone/locale/pl_PL/LC_MESSAGES/keystone.po366
-rw-r--r--keystone/locale/pt/LC_MESSAGES/keystone.po847
-rw-r--r--keystone/locale/pt_BR/LC_MESSAGES/keystone.po366
-rw-r--r--keystone/locale/ro/LC_MESSAGES/keystone.po366
-rw-r--r--keystone/locale/ru/LC_MESSAGES/keystone.po366
-rw-r--r--keystone/locale/ru_RU/LC_MESSAGES/keystone.po848
-rw-r--r--keystone/locale/sl_SI/LC_MESSAGES/keystone.po366
-rw-r--r--keystone/locale/sw_KE/LC_MESSAGES/keystone.po847
-rw-r--r--keystone/locale/tl/LC_MESSAGES/keystone.po847
-rw-r--r--keystone/locale/tr_TR/LC_MESSAGES/keystone.po847
-rw-r--r--keystone/locale/uk/LC_MESSAGES/keystone.po848
-rw-r--r--keystone/locale/vi_VN/LC_MESSAGES/keystone.po366
-rw-r--r--keystone/locale/zh_CN/LC_MESSAGES/keystone.po378
-rw-r--r--keystone/locale/zh_HK/LC_MESSAGES/keystone.po847
-rw-r--r--keystone/locale/zh_TW/LC_MESSAGES/keystone.po378
-rw-r--r--keystone/middleware/s3_token.py56
-rw-r--r--keystone/openstack/common/gettextutils.py263
-rw-r--r--keystone/openstack/common/importutils.py7
-rw-r--r--keystone/openstack/common/jsonutils.py67
-rw-r--r--keystone/openstack/common/local.py47
-rw-r--r--keystone/openstack/common/log.py559
-rw-r--r--keystone/openstack/common/timeutils.py32
-rw-r--r--keystone/service.py13
-rw-r--r--keystone/test.py31
-rw-r--r--keystone/token/controllers.py18
-rw-r--r--keystone/token/providers/uuid.py4
-rw-r--r--keystone/trust/controllers.py18
-rw-r--r--requirements.txt1
-rw-r--r--test-requirements.txt5
-rw-r--r--tests/test_auth.py7
-rw-r--r--tests/test_backend.py44
-rw-r--r--tests/test_backend_sql.py2
-rw-r--r--tests/test_injection.py44
-rw-r--r--tests/test_keystoneclient.py17
-rw-r--r--tests/test_s3_token_middleware.py58
-rw-r--r--tests/test_sql_migrate_extensions.py47
-rw-r--r--tests/test_sql_upgrade.py146
-rw-r--r--tests/test_token_provider.py1
-rw-r--r--tests/test_v3.py3
-rw-r--r--tests/test_v3_identity.py32
-rw-r--r--tests/test_wsgi.py68
103 files changed, 23898 insertions, 1701 deletions
diff --git a/.gitignore b/.gitignore
index 5cce17d6..d4915b0b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
*.pyc
*.swp
+*.egg/
vendor
.ksl-venv
.venv
diff --git a/doc/source/_theme/layout.html b/doc/source/_theme/layout.html
deleted file mode 100644
index 750b7822..00000000
--- a/doc/source/_theme/layout.html
+++ /dev/null
@@ -1,83 +0,0 @@
-{% extends "basic/layout.html" %}
-{% set css_files = css_files + ['_static/tweaks.css'] %}
-{% set script_files = script_files + ['_static/jquery.tweet.js'] %}
-
-{%- macro sidebar() %}
- {%- if not embedded %}{% if not theme_nosidebar|tobool %}
- <div class="sphinxsidebar">
- <div class="sphinxsidebarwrapper">
- {%- block sidebarlogo %}
- {%- if logo %}
- <p class="logo"><a href="{{ pathto(master_doc) }}">
- <img class="logo" src="{{ pathto('_static/' + logo, 1) }}" alt="Logo"/>
- </a></p>
- {%- endif %}
- {%- endblock %}
- {%- block sidebartoc %}
- {%- if display_toc %}
- <h3><a href="{{ pathto(master_doc) }}">{{ _('Table Of Contents') }}</a></h3>
- {{ toc }}
- {%- endif %}
- {%- endblock %}
- {%- block sidebarrel %}
- {%- if prev %}
- <h4>{{ _('Previous topic') }}</h4>
- <p class="topless"><a href="{{ prev.link|e }}"
- title="{{ _('previous chapter') }}">{{ prev.title }}</a></p>
- {%- endif %}
- {%- if next %}
- <h4>{{ _('Next topic') }}</h4>
- <p class="topless"><a href="{{ next.link|e }}"
- title="{{ _('next chapter') }}">{{ next.title }}</a></p>
- {%- endif %}
- {%- endblock %}
- {%- block sidebarsourcelink %}
- {%- if show_source and has_source and sourcename %}
- <h3>{{ _('This Page') }}</h3>
- <ul class="this-page-menu">
- <li><a href="{{ pathto('_sources/' + sourcename, true)|e }}"
- rel="nofollow">{{ _('Show Source') }}</a></li>
- </ul>
- {%- endif %}
- {%- endblock %}
- {%- if customsidebar %}
- {% include customsidebar %}
- {%- endif %}
- {%- block sidebarsearch %}
- {%- if pagename != "search" %}
- <div id="searchbox" style="display: none">
- <h3>{{ _('Quick search') }}</h3>
- <form class="search" action="{{ pathto('search') }}" method="get">
- <input type="text" name="q" size="18" />
- <input type="submit" value="{{ _('Go') }}" />
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
- <p class="searchtip" style="font-size: 90%">
- {{ _('Enter search terms or a module, class or function name.') }}
- </p>
- </div>
- <script type="text/javascript">$('#searchbox').show(0);</script>
- {%- endif %}
- {%- endblock %}
- </div>
- </div>
- {%- endif %}{% endif %}
-{%- endmacro %}
-
-{% block relbar1 %}{% endblock relbar1 %}
-
-{% block header %}
- <div id="header">
- <h1 id="logo"><a href="http://www.openstack.org/">OpenStack</a></h1>
- <ul id="navigation">
- <li><a href="http://www.openstack.org/" title="Go to the Home page" class="link">Home</a></li>
- <li><a href="http://www.openstack.org/projects/" title="Go to the OpenStack Projects page">Projects</a></li>
- <li><a href="http://www.openstack.org/user-stories/" title="Go to the User Stories page" class="link">User Stories</a></li>
- <li><a href="http://www.openstack.org/community/" title="Go to the Community page" class="link">Community</a></li>
- <li><a href="http://www.openstack.org/blog/" title="Go to the OpenStack Blog">Blog</a></li>
- <li><a href="http://wiki.openstack.org/" title="Go to the OpenStack Wiki">Wiki</a></li>
- <li><a href="http://docs.openstack.org/" title="Go to OpenStack Documentation" class="current">Documentation</a></li>
- </ul>
- </div>
-{% endblock %} \ No newline at end of file
diff --git a/doc/source/_theme/theme.conf b/doc/source/_theme/theme.conf
deleted file mode 100644
index 1cc40044..00000000
--- a/doc/source/_theme/theme.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-[theme]
-inherit = basic
-stylesheet = nature.css
-pygments_style = tango
diff --git a/doc/source/architecture.rst b/doc/source/architecture.rst
index 7ffaea4b..c3ddf0ce 100644
--- a/doc/source/architecture.rst
+++ b/doc/source/architecture.rst
@@ -178,7 +178,7 @@ interpolation)::
LDAP Backend
------------
-The LDAP backend stored Users and Tenents in separate Subtrees. Roles are recorded
+The LDAP backend stored Users and Tenants in separate Subtrees. Roles are recorded
as entries under the Tenants.
diff --git a/doc/source/conf.py b/doc/source/conf.py
index 293edf44..cd585d68 100644
--- a/doc/source/conf.py
+++ b/doc/source/conf.py
@@ -28,21 +28,19 @@ sys.path.insert(0, os.path.abspath('../..'))
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
-#extensions = ['sphinx.ext.autodoc', 'sphinx.ext.intersphinx',
-# 'sphinx.ext.todo', 'sphinx.ext.coverage']
extensions = ['sphinx.ext.autodoc',
'sphinx.ext.todo',
- # 'sphinx.ect.intersphinx',
- 'sphinx.ext.coverage']
+ 'sphinx.ext.coverage',
+ 'oslo.sphinx',
+ ]
todo_include_todos = True
# Add any paths that contain templates here, relative to this directory.
-templates_path = []
-if os.getenv('HUDSON_PUBLISH_DOCS'):
- templates_path = ['_ga', '_templates']
-else:
- templates_path = ['_templates']
+# if os.getenv('HUDSON_PUBLISH_DOCS'):
+# templates_path = ['_ga', '_templates']
+# else:
+# templates_path = ['_templates']
# The suffix of source filenames.
source_suffix = '.rst'
@@ -109,8 +107,8 @@ man_pages = [
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
-html_theme_path = ["."]
-html_theme = '_theme'
+# html_theme_path = ["."]
+# html_theme = '_theme'
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
diff --git a/doc/source/developing.rst b/doc/source/developing.rst
index c14ef7ab..2cf4b98e 100644
--- a/doc/source/developing.rst
+++ b/doc/source/developing.rst
@@ -71,6 +71,36 @@ place::
.. _`python-keystoneclient`: https://github.com/openstack/python-keystoneclient
+Database Schema Migrations
+--------------------------
+
+Keystone uses SQLAlchemy-migrate
+_`SQLAlchemy-migrate`:http://code.google.com/p/sqlalchemy-migrate/ to migrate the SQL database
+between revisions. For core components, the migrations are kept in a central
+repository under keystone/common/sql/migrate_repo.
+
+Extensions should be created as directories under `keystone/contrib`. An
+extension that requires sql migrations should not change the common repository,
+but should instead have its own repository. This repository must be in the
+extension's directory in `keystone/contrib/<extension>/migrate_repo.` In
+addition it needs a subdirectory named `versions`. For example, if the
+extension name is `my_extension` then the directory structure would be
+`keystone/contrib/my_extension/migrate_repo/versions/`. For the migration
+o work, both the migrate_repo and versions subdirectories must have empty
+__init__.py files. SQLAlchemy-migrate will look for a configuration file in
+the migrate_repo named migrate.cfg. This conforms to a Key/value ini file
+format. A sample config file with the minimal set of values is::
+
+ [db_settings]
+ repository_id=my_extension
+ version_table=migrate_version
+ required_dbs=[]
+
+The directory `keystone/contrib/example` contains a sample extension migration.
+
+Migrations for extension must be explicitly run. To run a migration for a specific
+extension, run `keystone-manage --extension <name> db_sync`.
+
Initial Sample Data
-------------------
diff --git a/doc/source/man/keystone-all.rst b/doc/source/man/keystone-all.rst
index 9b0859d9..76d5ab1f 100644
--- a/doc/source/man/keystone-all.rst
+++ b/doc/source/man/keystone-all.rst
@@ -6,7 +6,7 @@ keystone-all
Keystone Startup Command
------------------------
-:Author: openstack@lists.launchpad.net
+:Author: openstack@lists.openstack.org
:Date: 2010-11-16
:Copyright: OpenStack LLC
:Version: 2012.1
diff --git a/doc/source/man/keystone-manage.rst b/doc/source/man/keystone-manage.rst
index 84a3ec9f..1da4b40a 100644
--- a/doc/source/man/keystone-manage.rst
+++ b/doc/source/man/keystone-manage.rst
@@ -6,7 +6,7 @@ keystone-manage
Keystone Management Utility
---------------------------
-:Author: openstack@lists.launchpad.net
+:Author: openstack@lists.openstack.org
:Date: 2010-11-16
:Copyright: OpenStack LLC
:Version: 2012.1
diff --git a/etc/keystone.conf.sample b/etc/keystone.conf.sample
index a49a9a5e..90efe5f6 100644
--- a/etc/keystone.conf.sample
+++ b/etc/keystone.conf.sample
@@ -100,6 +100,9 @@
# exist to order to maintain support for your v2 clients.
# default_domain_id = default
+# Maximum supported length for user passwords; decrease to improve performance.
+# max_password_length = 4096
+
[credential]
# driver = keystone.credential.backends.sql.Credential
diff --git a/keystone/assignment/backends/kvs.py b/keystone/assignment/backends/kvs.py
index 4dfd908f..30d7b2eb 100644
--- a/keystone/assignment/backends/kvs.py
+++ b/keystone/assignment/backends/kvs.py
@@ -16,11 +16,13 @@
from keystone import assignment
from keystone import clean
+from keystone.common import dependency
from keystone.common import kvs
from keystone import exception
from keystone import identity
+@dependency.requires('identity_api')
class Assignment(kvs.Base, assignment.Driver):
def __init__(self):
super(Assignment, self).__init__()
diff --git a/keystone/assignment/backends/ldap.py b/keystone/assignment/backends/ldap.py
index f8c81eae..718d38c3 100644
--- a/keystone/assignment/backends/ldap.py
+++ b/keystone/assignment/backends/ldap.py
@@ -21,6 +21,7 @@ import ldap as ldap
from keystone import assignment
from keystone import clean
+from keystone.common import dependency
from keystone.common import ldap as common_ldap
from keystone.common import logging
from keystone.common import models
@@ -39,6 +40,7 @@ DEFAULT_DOMAIN = {
}
+@dependency.requires('identity_api')
class Assignment(assignment.Driver):
def __init__(self):
super(Assignment, self).__init__()
@@ -261,28 +263,19 @@ class ProjectApi(common_ldap.EnabledEmuMixIn, common_ldap.BaseLdap):
DEFAULT_OBJECTCLASS = 'groupOfNames'
DEFAULT_ID_ATTR = 'cn'
DEFAULT_MEMBER_ATTRIBUTE = 'member'
- DEFAULT_ATTRIBUTE_IGNORE = []
NotFound = exception.ProjectNotFound
notfound_arg = 'project_id' # NOTE(yorik-sar): while options_name = tenant
options_name = 'tenant'
- attribute_mapping = {'name': 'ou',
- 'description': 'description',
- 'tenantId': 'cn',
- 'enabled': 'enabled',
- 'domain_id': 'domain_id'}
+ attribute_options_names = {'name': 'name',
+ 'description': 'desc',
+ 'enabled': 'enabled',
+ 'domain_id': 'domain_id'}
model = models.Project
def __init__(self, conf):
super(ProjectApi, self).__init__(conf)
- self.attribute_mapping['name'] = conf.ldap.tenant_name_attribute
- self.attribute_mapping['description'] = conf.ldap.tenant_desc_attribute
- self.attribute_mapping['enabled'] = conf.ldap.tenant_enabled_attribute
- self.attribute_mapping['domain_id'] = (
- conf.ldap.tenant_domain_id_attribute)
self.member_attribute = (getattr(conf.ldap, 'tenant_member_attribute')
or self.DEFAULT_MEMBER_ATTRIBUTE)
- self.attribute_ignore = (getattr(conf.ldap, 'tenant_attribute_ignore')
- or self.DEFAULT_ATTRIBUTE_IGNORE)
def create(self, values):
self.affirm_unique(values)
@@ -379,21 +372,15 @@ class RoleApi(common_ldap.BaseLdap):
DEFAULT_STRUCTURAL_CLASSES = []
DEFAULT_OBJECTCLASS = 'organizationalRole'
DEFAULT_MEMBER_ATTRIBUTE = 'roleOccupant'
- DEFAULT_ATTRIBUTE_IGNORE = []
NotFound = exception.RoleNotFound
options_name = 'role'
- attribute_mapping = {'name': 'ou',
- #'serviceId': 'service_id',
- }
+ attribute_options_names = {'name': 'name'}
model = models.Role
def __init__(self, conf):
super(RoleApi, self).__init__(conf)
- self.attribute_mapping['name'] = conf.ldap.role_name_attribute
self.member_attribute = (getattr(conf.ldap, 'role_member_attribute')
or self.DEFAULT_MEMBER_ATTRIBUTE)
- self.attribute_ignore = (getattr(conf.ldap, 'role_attribute_ignore')
- or self.DEFAULT_ATTRIBUTE_IGNORE)
def get(self, id, filter=None):
model = super(RoleApi, self).get(id, filter)
diff --git a/keystone/assignment/backends/sql.py b/keystone/assignment/backends/sql.py
index 5ec435ff..cd2a0a5c 100644
--- a/keystone/assignment/backends/sql.py
+++ b/keystone/assignment/backends/sql.py
@@ -16,15 +16,14 @@
from keystone import assignment
from keystone import clean
+from keystone.common import dependency
from keystone.common import sql
from keystone.common.sql import migration
from keystone import exception
+@dependency.requires('identity_api')
class Assignment(sql.Base, assignment.Driver):
- def __init__(self):
- super(Assignment, self).__init__()
- self.identity_api = None
# Internal interface to manage the database
def db_sync(self, version=None):
@@ -657,9 +656,10 @@ class Domain(sql.ModelBase, sql.DictBase):
__tablename__ = 'domain'
attributes = ['id', 'name', 'enabled']
id = sql.Column(sql.String(64), primary_key=True)
- name = sql.Column(sql.String(64), unique=True, nullable=False)
- enabled = sql.Column(sql.Boolean, default=True)
+ name = sql.Column(sql.String(64), nullable=False)
+ enabled = sql.Column(sql.Boolean, default=True, nullable=False)
extra = sql.Column(sql.JsonBlob())
+ __table_args__ = (sql.UniqueConstraint('name'), {})
class Project(sql.ModelBase, sql.DictBase):
@@ -681,8 +681,9 @@ class Role(sql.ModelBase, sql.DictBase):
__tablename__ = 'role'
attributes = ['id', 'name']
id = sql.Column(sql.String(64), primary_key=True)
- name = sql.Column(sql.String(64), unique=True, nullable=False)
+ name = sql.Column(sql.String(255), nullable=False)
extra = sql.Column(sql.JsonBlob())
+ __table_args__ = (sql.UniqueConstraint('name'), {})
class BaseGrant(sql.DictBase):
@@ -720,9 +721,8 @@ class BaseGrant(sql.DictBase):
class UserProjectGrant(sql.ModelBase, BaseGrant):
__tablename__ = 'user_project_metadata'
- user_id = sql.Column(sql.String(64),
- primary_key=True)
- project_id = sql.Column(sql.String(64),
+ user_id = sql.Column(sql.String(64), primary_key=True)
+ project_id = sql.Column(sql.String(64), sql.ForeignKey('project.id'),
primary_key=True)
data = sql.Column(sql.JsonBlob())
@@ -730,19 +730,22 @@ class UserProjectGrant(sql.ModelBase, BaseGrant):
class UserDomainGrant(sql.ModelBase, BaseGrant):
__tablename__ = 'user_domain_metadata'
user_id = sql.Column(sql.String(64), primary_key=True)
- domain_id = sql.Column(sql.String(64), primary_key=True)
+ domain_id = sql.Column(sql.String(64), sql.ForeignKey('domain.id'),
+ primary_key=True)
data = sql.Column(sql.JsonBlob())
class GroupProjectGrant(sql.ModelBase, BaseGrant):
__tablename__ = 'group_project_metadata'
group_id = sql.Column(sql.String(64), primary_key=True)
- project_id = sql.Column(sql.String(64), primary_key=True)
+ project_id = sql.Column(sql.String(64), sql.ForeignKey('project.id'),
+ primary_key=True)
data = sql.Column(sql.JsonBlob())
class GroupDomainGrant(sql.ModelBase, BaseGrant):
__tablename__ = 'group_domain_metadata'
group_id = sql.Column(sql.String(64), primary_key=True)
- domain_id = sql.Column(sql.String(64), primary_key=True)
+ domain_id = sql.Column(sql.String(64), sql.ForeignKey('domain.id'),
+ primary_key=True)
data = sql.Column(sql.JsonBlob())
diff --git a/keystone/assignment/core.py b/keystone/assignment/core.py
index b71e2a18..0a2ee681 100644
--- a/keystone/assignment/core.py
+++ b/keystone/assignment/core.py
@@ -35,6 +35,7 @@ DEFAULT_DOMAIN = {'description':
@dependency.provider('assignment_api')
+@dependency.requires('identity_api')
class Manager(manager.Manager):
"""Default pivot point for the Assignment backend.
@@ -45,18 +46,14 @@ class Manager(manager.Manager):
api object by both managers.
"""
- def __init__(self, identity_api=None):
- if identity_api is None:
- from keystone import identity
- identity_api = identity.Manager(self)
-
+ def __init__(self):
assignment_driver = CONF.assignment.driver
+
if assignment_driver is None:
- assignment_driver = identity_api.default_assignment_driver()
+ identity_driver = dependency.REGISTRY['identity_api'].driver
+ assignment_driver = identity_driver.default_assignment_driver()
+
super(Manager, self).__init__(assignment_driver)
- self.driver.identity_api = identity_api
- self.identity_api = identity_api
- self.identity_api.assignment_api = self
def get_roles_for_user_and_project(self, user_id, tenant_id):
"""Get the roles associated with a user within given project.
@@ -181,9 +178,23 @@ class Manager(manager.Manager):
keystone.exception.UserNotFound
"""
- self.driver.add_role_to_user_and_project(user_id,
- tenant_id,
- config.CONF.member_role_id)
+ try:
+ self.driver.add_role_to_user_and_project(
+ user_id,
+ tenant_id,
+ config.CONF.member_role_id)
+ except exception.RoleNotFound:
+ LOG.info(_("Creating the default role %s "
+ "because it does not exist.") %
+ config.CONF.member_role_id)
+ role = {'id': CONF.member_role_id,
+ 'name': CONF.member_role_name}
+ self.driver.create_role(config.CONF.member_role_id, role)
+ #now that default role exists, the add should succeed
+ self.driver.add_role_to_user_and_project(
+ user_id,
+ tenant_id,
+ config.CONF.member_role_id)
def remove_user_from_project(self, tenant_id, user_id):
"""Remove user from a tenant
diff --git a/keystone/catalog/backends/sql.py b/keystone/catalog/backends/sql.py
index 7d3c6f4f..d7b2123a 100644
--- a/keystone/catalog/backends/sql.py
+++ b/keystone/catalog/backends/sql.py
@@ -32,6 +32,7 @@ class Service(sql.ModelBase, sql.DictBase):
id = sql.Column(sql.String(64), primary_key=True)
type = sql.Column(sql.String(255))
extra = sql.Column(sql.JsonBlob())
+ endpoints = sql.relationship("Endpoint", backref="service")
class Endpoint(sql.ModelBase, sql.DictBase):
@@ -150,28 +151,26 @@ class Catalog(sql.Base, catalog.Driver):
d.update({'tenant_id': tenant_id,
'user_id': user_id})
+ session = self.get_session()
+ endpoints = (session.query(Endpoint).
+ options(sql.joinedload(Endpoint.service)).
+ all())
+
catalog = {}
- services = {}
- for endpoint in self.list_endpoints():
- # look up the service
- services.setdefault(
- endpoint['service_id'],
- self.get_service(endpoint['service_id']))
- service = services[endpoint['service_id']]
-
- # add the endpoint to the catalog if it's not already there
- catalog.setdefault(endpoint['region'], {})
- catalog[endpoint['region']].setdefault(
- service['type'], {
- 'id': endpoint['id'],
- 'name': service['name'],
- 'publicURL': '', # this may be overridden, but must exist
- })
-
- # add the interface's url
- url = core.format_url(endpoint.get('url'), d)
+
+ for endpoint in endpoints:
+ region = endpoint['region']
+ service_type = endpoint.service['type']
+ default_service = {
+ 'id': endpoint['id'],
+ 'name': endpoint.service['name'],
+ 'publicURL': ''
+ }
+ catalog.setdefault(region, {})
+ catalog[region].setdefault(service_type, default_service)
+ url = core.format_url(endpoint['url'], d)
interface_url = '%sURL' % endpoint['interface']
- catalog[endpoint['region']][service['type']][interface_url] = url
+ catalog[region][service_type][interface_url] = url
return catalog
@@ -180,27 +179,19 @@ class Catalog(sql.Base, catalog.Driver):
d.update({'tenant_id': tenant_id,
'user_id': user_id})
- services = {}
- for endpoint in self.list_endpoints():
- # look up the service
- service_id = endpoint['service_id']
- services.setdefault(
- service_id,
- self.get_service(service_id))
- service = services[service_id]
+ session = self.get_session()
+ services = (session.query(Service).
+ options(sql.joinedload(Service.endpoints)).
+ all())
+
+ def make_v3_endpoint(endpoint):
del endpoint['service_id']
endpoint['url'] = core.format_url(endpoint['url'], d)
- if 'endpoints' in services[service_id]:
- services[service_id]['endpoints'].append(endpoint)
- else:
- services[service_id]['endpoints'] = [endpoint]
-
- catalog = []
- for service_id, service in services.iteritems():
- formatted_service = {}
- formatted_service['id'] = service['id']
- formatted_service['type'] = service['type']
- formatted_service['endpoints'] = service['endpoints']
- catalog.append(formatted_service)
+ return endpoint
+
+ catalog = [{'endpoints': [make_v3_endpoint(ep.to_dict())
+ for ep in svc.endpoints],
+ 'id': svc.id,
+ 'type': svc.type} for svc in services]
return catalog
diff --git a/keystone/cli.py b/keystone/cli.py
index 21d2ad40..18c095ce 100644
--- a/keystone/cli.py
+++ b/keystone/cli.py
@@ -20,12 +20,15 @@ import grp
import os
import pwd
+from migrate import exceptions
+
from oslo.config import cfg
import pbr.version
from keystone.common import openssl
from keystone.common.sql import migration
from keystone import config
+from keystone import contrib
from keystone.openstack.common import importutils
from keystone.openstack.common import jsonutils
from keystone import token
@@ -57,14 +60,35 @@ class DbSync(BaseApp):
'version. If not provided, db_sync will '
'migrate the database to the latest known '
'version.'))
+ parser.add_argument('--extension', default=None,
+ help=('Migrate the database for the specified '
+ 'extension. If not provided, db_sync will '
+ 'migrate the common repository.'))
+
return parser
@staticmethod
def main():
- for k in ['identity', 'catalog', 'policy', 'token', 'credential']:
- driver = importutils.import_object(getattr(CONF, k).driver)
- if hasattr(driver, 'db_sync'):
- driver.db_sync(CONF.command.version)
+ version = CONF.command.version
+ extension = CONF.command.extension
+ if not extension:
+ migration.db_sync(version=version)
+ else:
+ package_name = "%s.%s.migrate_repo" % (contrib.__name__, extension)
+ try:
+ package = importutils.import_module(package_name)
+ repo_path = os.path.abspath(os.path.dirname(package.__file__))
+ except ImportError:
+ print _("This extension does not provide migrations.")
+ exit(0)
+ try:
+ # Register the repo with the version control API
+ # If it already knows about the repo, it will throw
+ # an exception that we can safely ignore
+ migration.db_version_control(version=None, repo_path=repo_path)
+ except exceptions.DatabaseAlreadyControlledError:
+ pass
+ migration.db_sync(version=None, repo_path=repo_path)
class DbVersion(BaseApp):
@@ -72,9 +96,29 @@ class DbVersion(BaseApp):
name = 'db_version'
+ @classmethod
+ def add_argument_parser(cls, subparsers):
+ parser = super(DbVersion, cls).add_argument_parser(subparsers)
+ parser.add_argument('--extension', default=None,
+ help=('Migrate the database for the specified '
+ 'extension. If not provided, db_sync will '
+ 'migrate the common repository.'))
+
@staticmethod
def main():
- print(migration.db_version())
+ extension = CONF.command.extension
+ if extension:
+ try:
+ package_name = ("%s.%s.migrate_repo" %
+ (contrib.__name__, extension))
+ package = importutils.import_module(package_name)
+ repo_path = os.path.abspath(os.path.dirname(package.__file__))
+ print(migration.db_version(repo_path))
+ except ImportError:
+ print _("This extension does not provide migrations.")
+ exit(1)
+ else:
+ print(migration.db_version())
class BaseCertificateSetup(BaseApp):
diff --git a/keystone/common/config.py b/keystone/common/config.py
index 10c47a35..cd525369 100644
--- a/keystone/common/config.py
+++ b/keystone/common/config.py
@@ -210,6 +210,7 @@ def configure():
# identity
register_str('default_domain_id', group='identity', default='default')
+ register_int('max_password_length', group='identity', default=4096)
# trust
register_bool('enabled', group='trust', default=True)
diff --git a/keystone/common/dependency.py b/keystone/common/dependency.py
index dc3e4ac4..a640031d 100644
--- a/keystone/common/dependency.py
+++ b/keystone/common/dependency.py
@@ -16,6 +16,8 @@
REGISTRY = {}
+_future_dependencies = {}
+
class UnresolvableDependencyException(Exception):
def __init__(self, name):
@@ -32,6 +34,8 @@ def provider(name):
init(self, *args, **kwargs)
REGISTRY[name] = self
+ resolve_future_dependencies(name)
+
return __wrapped_init__
cls.__init__ = wrapped(cls.__init__)
@@ -48,7 +52,13 @@ def requires(*dependencies):
for dependency in self._dependencies:
if dependency not in REGISTRY:
- raise UnresolvableDependencyException(dependency)
+ if dependency in _future_dependencies:
+ _future_dependencies[dependency] += [self]
+ else:
+ _future_dependencies[dependency] = [self]
+
+ continue
+
setattr(self, dependency, REGISTRY[dependency])
def wrapped(cls):
@@ -65,3 +75,34 @@ def requires(*dependencies):
return cls
return wrapped
+
+
+def resolve_future_dependencies(provider_name=None):
+ if provider_name:
+ targets = _future_dependencies.pop(provider_name, [])
+
+ for target in targets:
+ setattr(target, provider_name, REGISTRY[provider_name])
+
+ return
+
+ try:
+ for dependency, targets in _future_dependencies.iteritems():
+ if dependency not in REGISTRY:
+ raise UnresolvableDependencyException(dependency)
+
+ for target in targets:
+ setattr(target, dependency, REGISTRY[dependency])
+ finally:
+ _future_dependencies.clear()
+
+
+def reset():
+ """Reset the registry of providers.
+
+ This is useful for unit testing to ensure that tests don't use providers
+ from previous tests.
+ """
+
+ REGISTRY.clear()
+ _future_dependencies.clear()
diff --git a/keystone/common/environment/__init__.py b/keystone/common/environment/__init__.py
index ac93e24f..2993536a 100644
--- a/keystone/common/environment/__init__.py
+++ b/keystone/common/environment/__init__.py
@@ -59,6 +59,9 @@ def use_eventlet(monkeypatch_thread=None):
if monkeypatch_thread is None:
monkeypatch_thread = not os.getenv('STANDARD_THREADS')
+ # Raise the default from 8192 to accommodate large tokens
+ eventlet.wsgi.MAX_HEADER_LINE = 16384
+
eventlet.patcher.monkey_patch(all=False, socket=True, time=True,
thread=monkeypatch_thread)
diff --git a/keystone/common/ldap/core.py b/keystone/common/ldap/core.py
index 7a2dfee7..39ea78de 100644
--- a/keystone/common/ldap/core.py
+++ b/keystone/common/ldap/core.py
@@ -114,7 +114,7 @@ class BaseLdap(object):
notfound_arg = None
options_name = None
model = None
- attribute_mapping = {}
+ attribute_options_names = {}
attribute_ignore = []
tree_dn = None
@@ -129,6 +129,7 @@ class BaseLdap(object):
self.tls_cacertfile = conf.ldap.tls_cacertfile
self.tls_cacertdir = conf.ldap.tls_cacertdir
self.tls_req_cert = parse_tls_cert(conf.ldap.tls_req_cert)
+ self.attribute_mapping = {}
if self.options_name is not None:
self.suffix = conf.ldap.suffix
@@ -145,6 +146,10 @@ class BaseLdap(object):
self.object_class = (getattr(conf.ldap, objclass)
or self.DEFAULT_OBJECTCLASS)
+ for k, v in self.attribute_options_names.iteritems():
+ v = '%s_%s_attribute' % (self.options_name, v)
+ self.attribute_mapping[k] = getattr(conf.ldap, v)
+
attr_mapping_opt = ('%s_additional_attribute_mapping' %
self.options_name)
attr_mapping = (getattr(conf.ldap, attr_mapping_opt)
@@ -167,6 +172,10 @@ class BaseLdap(object):
if self.notfound_arg is None:
self.notfound_arg = self.options_name + '_id'
+
+ attribute_ignore = '%s_attribute_ignore' % self.options_name
+ self.attribute_ignore = getattr(conf.ldap, attribute_ignore)
+
self.use_dumb_member = getattr(conf.ldap, 'use_dumb_member')
self.dumb_member = (getattr(conf.ldap, 'dumb_member') or
self.DUMB_MEMBER_DN)
diff --git a/keystone/common/logging.py b/keystone/common/logging.py
index 8c036f02..d221edb7 100644
--- a/keystone/common/logging.py
+++ b/keystone/common/logging.py
@@ -23,7 +23,6 @@ import logging
import logging.config
import logging.handlers
import pprint
-import traceback
# A list of things we want to replicate from logging.
@@ -78,8 +77,7 @@ def fail_gracefully(f):
try:
return f(*args, **kw)
except Exception as e:
- # tracebacks are kept in the debug log
- logging.debug(traceback.format_exc(e))
+ logging.debug(e, exc_info=True)
# exception message is printed to all logs
logging.critical(e)
diff --git a/keystone/common/sql/core.py b/keystone/common/sql/core.py
index 9dd545f4..67863588 100644
--- a/keystone/common/sql/core.py
+++ b/keystone/common/sql/core.py
@@ -55,6 +55,8 @@ NotFound = sql.orm.exc.NoResultFound
Boolean = sql.Boolean
Text = sql.Text
UniqueConstraint = sql.UniqueConstraint
+relationship = sql.orm.relationship
+joinedload = sql.orm.joinedload
def initialize_decorator(init):
@@ -180,6 +182,8 @@ class DictBase(object):
setattr(self, key, value)
def __getitem__(self, key):
+ if key in self.extra:
+ return self.extra[key]
return getattr(self, key)
def get(self, key, default=None):
diff --git a/keystone/common/sql/migrate_repo/versions/020_migrate_metadata_table_roles.py b/keystone/common/sql/migrate_repo/versions/020_migrate_metadata_table_roles.py
index 35110df4..a0c6ddbc 100644
--- a/keystone/common/sql/migrate_repo/versions/020_migrate_metadata_table_roles.py
+++ b/keystone/common/sql/migrate_repo/versions/020_migrate_metadata_table_roles.py
@@ -23,11 +23,9 @@ def upgrade(migrate_engine):
session = sql.orm.sessionmaker(bind=migrate_engine)()
for metadata in session.query(old_metadata_table):
+ data = json.loads(metadata.data)
if config.CONF.member_role_id not in metadata.data:
- data = json.loads(metadata.data)
data['roles'].append(config.CONF.member_role_id)
- else:
- data = metadata.data
r = session.query(new_metadata_table).filter_by(
user_id=metadata.user_id,
diff --git a/keystone/common/sql/migration.py b/keystone/common/sql/migration.py
index 86e0254c..3cb9cd63 100644
--- a/keystone/common/sql/migration.py
+++ b/keystone/common/sql/migration.py
@@ -39,39 +39,51 @@ except ImportError:
sys.exit('python-migrate is not installed. Exiting.')
-def db_sync(version=None):
+def migrate_repository(version, current_version, repo_path):
+ if version is None or version > current_version:
+ result = versioning_api.upgrade(CONF.sql.connection,
+ repo_path, version)
+ else:
+ result = versioning_api.downgrade(
+ CONF.sql.connection, repo_path, version)
+ return result
+
+
+def db_sync(version=None, repo_path=None):
if version is not None:
try:
version = int(version)
except ValueError:
raise Exception(_('version should be an integer'))
+ if repo_path is None:
+ repo_path = find_migrate_repo()
+ current_version = db_version(repo_path=repo_path)
+ return migrate_repository(version, current_version, repo_path)
- current_version = db_version()
- repo_path = _find_migrate_repo()
- if version is None or version > current_version:
- return versioning_api.upgrade(CONF.sql.connection, repo_path, version)
- else:
- return versioning_api.downgrade(
- CONF.sql.connection, repo_path, version)
-
-def db_version():
- repo_path = _find_migrate_repo()
+def db_version(repo_path=None):
+ if repo_path is None:
+ repo_path = find_migrate_repo()
try:
return versioning_api.db_version(CONF.sql.connection, repo_path)
except versioning_exceptions.DatabaseNotControlledError:
return db_version_control(0)
-def db_version_control(version=None):
- repo_path = _find_migrate_repo()
+def db_version_control(version=None, repo_path=None):
+ if repo_path is None:
+ repo_path = find_migrate_repo()
versioning_api.version_control(CONF.sql.connection, repo_path, version)
return version
-def _find_migrate_repo():
+def find_migrate_repo(package=None):
"""Get the path for the migrate repository."""
- path = os.path.join(os.path.abspath(os.path.dirname(__file__)),
+ if package is None:
+ file = __file__
+ else:
+ file = package.__file__
+ path = os.path.join(os.path.abspath(os.path.dirname(file)),
'migrate_repo')
assert os.path.exists(path)
return path
diff --git a/keystone/common/utils.py b/keystone/common/utils.py
index fd2d7567..9966ee67 100644
--- a/keystone/common/utils.py
+++ b/keystone/common/utils.py
@@ -36,8 +36,6 @@ config.register_int('crypt_strength', default=40000)
LOG = logging.getLogger(__name__)
-MAX_PASSWORD_LENGTH = 4096
-
def read_cached_file(filename, cache_info, reload_func=None):
"""Read from a file if it has been modified.
@@ -68,12 +66,13 @@ class SmarterEncoder(json.JSONEncoder):
def trunc_password(password):
- """Truncate passwords to the MAX_PASSWORD_LENGTH."""
+ """Truncate passwords to the max_length."""
+ max_length = CONF.identity.max_password_length
try:
- if len(password) > MAX_PASSWORD_LENGTH:
- return password[:MAX_PASSWORD_LENGTH]
- else:
- return password
+ if len(password) > max_length:
+ LOG.warning(
+ _('Truncating user password to %s characters.') % max_length)
+ return password[:max_length]
except TypeError:
raise exception.ValidationError(attribute='string', target='password')
diff --git a/keystone/common/wsgi.py b/keystone/common/wsgi.py
index 381f1ff0..f47cde13 100644
--- a/keystone/common/wsgi.py
+++ b/keystone/common/wsgi.py
@@ -203,7 +203,7 @@ class BaseApplication(object):
class Application(BaseApplication):
- @webob.dec.wsgify
+ @webob.dec.wsgify(RequestClass=Request)
def __call__(self, req):
arg_dict = req.environ['wsgiorg.routing_args'][1]
action = arg_dict.pop('action')
@@ -283,8 +283,7 @@ class Application(BaseApplication):
def assert_admin(self, context):
if not context['is_admin']:
try:
- user_token_ref = self.token_api.get_token(
- token_id=context['token_id'])
+ user_token_ref = self.token_api.get_token(context['token_id'])
except exception.TokenNotFound as e:
raise exception.Unauthorized(e)
diff --git a/keystone/contrib/ec2/core.py b/keystone/contrib/ec2/core.py
index adba7e74..8f72e431 100644
--- a/keystone/contrib/ec2/core.py
+++ b/keystone/contrib/ec2/core.py
@@ -188,9 +188,7 @@ class Ec2Controller(controller.V2Controller):
for role_id in roles]
catalog_ref = self.catalog_api.get_catalog(
- user_id=user_ref['id'],
- tenant_id=tenant_ref['id'],
- metadata=metadata_ref)
+ user_ref['id'], tenant_ref['id'], metadata_ref)
auth_token_data = dict(user=user_ref,
tenant=tenant_ref,
diff --git a/doc/source/_templates/.placeholder b/keystone/contrib/example/__init__.py
index e69de29b..e69de29b 100644
--- a/doc/source/_templates/.placeholder
+++ b/keystone/contrib/example/__init__.py
diff --git a/keystone/contrib/example/migrate_repo/__init__.py b/keystone/contrib/example/migrate_repo/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/keystone/contrib/example/migrate_repo/__init__.py
diff --git a/keystone/contrib/example/migrate_repo/migrate.cfg b/keystone/contrib/example/migrate_repo/migrate.cfg
new file mode 100644
index 00000000..5b1b1c0a
--- /dev/null
+++ b/keystone/contrib/example/migrate_repo/migrate.cfg
@@ -0,0 +1,25 @@
+[db_settings]
+# Used to identify which repository this database is versioned under.
+# You can use the name of your project.
+repository_id=example
+
+# The name of the database table used to track the schema version.
+# This name shouldn't already be used by your project.
+# If this is changed once a database is under version control, you'll need to
+# change the table name in each database too.
+version_table=migrate_version
+
+# When committing a change script, Migrate will attempt to generate the
+# sql for all supported databases; normally, if one of them fails - probably
+# because you don't have that database installed - it is ignored and the
+# commit continues, perhaps ending successfully.
+# Databases in this list MUST compile successfully during a commit, or the
+# entire commit will fail. List the databases your application will actually
+# be using to ensure your updates to that database work properly.
+# This must be a list; example: ['postgres','sqlite']
+required_dbs=[]
+
+# When creating new change scripts, Migrate will stamp the new script with
+# a version number. By default this is latest_version + 1. You can set this
+# to 'true' to tell Migrate to use the UTC timestamp instead.
+use_timestamp_numbering=False
diff --git a/keystone/contrib/example/migrate_repo/versions/001_example_table.py b/keystone/contrib/example/migrate_repo/versions/001_example_table.py
new file mode 100644
index 00000000..bb2203d3
--- /dev/null
+++ b/keystone/contrib/example/migrate_repo/versions/001_example_table.py
@@ -0,0 +1,45 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2012 OpenStack LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import sqlalchemy as sql
+
+
+def upgrade(migrate_engine):
+ # Upgrade operations go here. Don't create your own engine; bind
+ # migrate_engine to your metadata
+ meta = sql.MetaData()
+ meta.bind = migrate_engine
+
+ # catalog
+
+ service_table = sql.Table(
+ 'example',
+ meta,
+ sql.Column('id', sql.String(64), primary_key=True),
+ sql.Column('type', sql.String(255)),
+ sql.Column('extra', sql.Text()))
+ service_table.create(migrate_engine, checkfirst=True)
+
+
+def downgrade(migrate_engine):
+ # Operations to reverse the above upgrade go here.
+ meta = sql.MetaData()
+ meta.bind = migrate_engine
+
+ tables = ['example']
+ for t in tables:
+ table = sql.Table(t, meta, autoload=True)
+ table.drop(migrate_engine, checkfirst=True)
diff --git a/keystone/contrib/example/migrate_repo/versions/__init__.py b/keystone/contrib/example/migrate_repo/versions/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/keystone/contrib/example/migrate_repo/versions/__init__.py
diff --git a/keystone/identity/backends/kvs.py b/keystone/identity/backends/kvs.py
index 83535108..0323d3d0 100644
--- a/keystone/identity/backends/kvs.py
+++ b/keystone/identity/backends/kvs.py
@@ -28,7 +28,7 @@ class Identity(kvs.Base, identity.Driver):
return "keystone.assignment.backends.kvs.Assignment"
# Public interface
- def authenticate(self, user_id=None, password=None):
+ def authenticate(self, user_id, password):
user_ref = None
try:
user_ref = self._get_user(user_id)
diff --git a/keystone/identity/backends/ldap.py b/keystone/identity/backends/ldap.py
index 7f5cedc3..a359c63f 100644
--- a/keystone/identity/backends/ldap.py
+++ b/keystone/identity/backends/ldap.py
@@ -19,6 +19,7 @@ import uuid
import ldap
from keystone import clean
+from keystone.common import dependency
from keystone.common import ldap as common_ldap
from keystone.common import logging
from keystone.common import models
@@ -38,6 +39,7 @@ DEFAULT_DOMAIN = {
}
+@dependency.requires('assignment_api')
class Identity(identity.Driver):
def __init__(self):
super(Identity, self).__init__()
@@ -52,7 +54,7 @@ class Identity(identity.Driver):
def create_project(self, project_id, project):
return self.assignment_api.create_project(project_id, project)
- def authenticate(self, user_id=None, password=None):
+ def authenticate(self, user_id, password):
try:
user_ref = self._get_user(user_id)
except exception.UserNotFound:
@@ -77,7 +79,8 @@ class Identity(identity.Driver):
return self.assignment_api._set_default_domain(ref)
def list_users(self):
- return self.assignment_api._set_default_domain(self.user.get_all())
+ return (self.assignment_api._set_default_domain
+ (self.user.get_all_filtered()))
def get_user_by_name(self, user_name, domain_id):
self.assignment_api._validate_default_domain_id(domain_id)
@@ -181,7 +184,7 @@ class Identity(identity.Driver):
for user_dn in self.group.list_group_users(group_id):
user_id = self.user._dn_to_id(user_dn)
try:
- users.append(self.user.get(user_id))
+ users.append(self.user.get_filtered(user_id))
except exception.UserNotFound:
LOG.debug(_("Group member '%(user_dn)s' not found in"
" '%(group_id)s'. The user should be removed"
@@ -207,29 +210,20 @@ class UserApi(common_ldap.EnabledEmuMixIn, common_ldap.BaseLdap):
DEFAULT_STRUCTURAL_CLASSES = ['person']
DEFAULT_ID_ATTR = 'cn'
DEFAULT_OBJECTCLASS = 'inetOrgPerson'
- DEFAULT_ATTRIBUTE_IGNORE = ['tenant_id', 'tenants']
NotFound = exception.UserNotFound
options_name = 'user'
- attribute_mapping = {'password': 'userPassword',
- 'email': 'mail',
- 'name': 'sn',
- 'enabled': 'enabled',
- 'domain_id': 'domain_id'}
+ attribute_options_names = {'password': 'pass',
+ 'email': 'mail',
+ 'name': 'name',
+ 'enabled': 'enabled',
+ 'domain_id': 'domain_id'}
model = models.User
def __init__(self, conf):
super(UserApi, self).__init__(conf)
- self.attribute_mapping['name'] = conf.ldap.user_name_attribute
- self.attribute_mapping['email'] = conf.ldap.user_mail_attribute
- self.attribute_mapping['password'] = conf.ldap.user_pass_attribute
- self.attribute_mapping['enabled'] = conf.ldap.user_enabled_attribute
- self.attribute_mapping['domain_id'] = (
- conf.ldap.user_domain_id_attribute)
self.enabled_mask = conf.ldap.user_enabled_mask
self.enabled_default = conf.ldap.user_enabled_default
- self.attribute_ignore = (getattr(conf.ldap, 'user_attribute_ignore')
- or self.DEFAULT_ATTRIBUTE_IGNORE)
def _ldap_res_to_model(self, res):
obj = super(UserApi, self)._ldap_res_to_model(res)
@@ -264,6 +258,9 @@ class UserApi(common_ldap.EnabledEmuMixIn, common_ldap.BaseLdap):
user = self.get(user_id)
return identity.filter_user(user)
+ def get_all_filtered(self):
+ return [identity.filter_user(user) for user in self.get_all()]
+
class GroupApi(common_ldap.BaseLdap):
DEFAULT_OU = 'ou=UserGroups'
@@ -271,25 +268,17 @@ class GroupApi(common_ldap.BaseLdap):
DEFAULT_OBJECTCLASS = 'groupOfNames'
DEFAULT_ID_ATTR = 'cn'
DEFAULT_MEMBER_ATTRIBUTE = 'member'
- DEFAULT_ATTRIBUTE_IGNORE = []
NotFound = exception.GroupNotFound
options_name = 'group'
- attribute_mapping = {'name': 'ou',
- 'description': 'description',
- 'groupId': 'cn',
- 'domain_id': 'domain_id'}
+ attribute_options_names = {'description': 'desc',
+ 'name': 'name',
+ 'domain_id': 'domain_id'}
model = models.Group
def __init__(self, conf):
super(GroupApi, self).__init__(conf)
- self.attribute_mapping['name'] = conf.ldap.group_name_attribute
- self.attribute_mapping['description'] = conf.ldap.group_desc_attribute
- self.attribute_mapping['domain_id'] = (
- conf.ldap.group_domain_id_attribute)
self.member_attribute = (getattr(conf.ldap, 'group_member_attribute')
or self.DEFAULT_MEMBER_ATTRIBUTE)
- self.attribute_ignore = (getattr(conf.ldap, 'group_attribute_ignore')
- or self.DEFAULT_ATTRIBUTE_IGNORE)
def create(self, values):
self.affirm_unique(values)
diff --git a/keystone/identity/backends/pam.py b/keystone/identity/backends/pam.py
index 5cfa5b16..2a6ee621 100644
--- a/keystone/identity/backends/pam.py
+++ b/keystone/identity/backends/pam.py
@@ -58,7 +58,7 @@ class PamIdentity(identity.Driver):
Tenant is always the same as User, root user has admin role.
"""
- def authenticate(self, user_id=None, password=None):
+ def authenticate(self, user_id, password):
auth = pam.authenticate if pam else PAM_authenticate
if not auth(user_id, password):
raise AssertionError('Invalid user / password')
diff --git a/keystone/identity/backends/sql.py b/keystone/identity/backends/sql.py
index 2c00088e..bff41106 100644
--- a/keystone/identity/backends/sql.py
+++ b/keystone/identity/backends/sql.py
@@ -14,6 +14,7 @@
# License for the specific language governing permissions and limitations
# under the License.
+from keystone.common import dependency
from keystone.common import sql
from keystone.common.sql import migration
from keystone.common import utils
@@ -61,6 +62,7 @@ class UserGroupMembership(sql.ModelBase, sql.DictBase):
primary_key=True)
+@dependency.requires('assignment_api')
class Identity(sql.Base, identity.Driver):
def default_assignment_driver(self):
return "keystone.assignment.backends.sql.Assignment"
@@ -84,7 +86,7 @@ class Identity(sql.Base, identity.Driver):
return utils.check_password(password, user_ref.password)
# Identity interface
- def authenticate(self, user_id=None, password=None):
+ def authenticate(self, user_id, password):
session = self.get_session()
user_ref = None
try:
diff --git a/keystone/identity/controllers.py b/keystone/identity/controllers.py
index 12fb8145..7ca1f8bf 100644
--- a/keystone/identity/controllers.py
+++ b/keystone/identity/controllers.py
@@ -403,6 +403,8 @@ class DomainV3(controller.V3Controller):
@controller.protected
def create_domain(self, context, domain):
+ self._require_attribute(domain, 'name')
+
ref = self._assign_unique_id(self._normalize_dict(domain))
ref = self.identity_api.create_domain(ref['id'], ref)
return DomainV3.wrap_member(context, ref)
@@ -544,6 +546,8 @@ class ProjectV3(controller.V3Controller):
@controller.protected
def create_project(self, context, project):
+ self._require_attribute(project, 'name')
+
ref = self._assign_unique_id(self._normalize_dict(project))
ref = self._normalize_domain_id(context, ref)
ref = self.identity_api.create_project(ref['id'], ref)
@@ -592,6 +596,8 @@ class UserV3(controller.V3Controller):
@controller.protected
def create_user(self, context, user):
+ self._require_attribute(user, 'name')
+
ref = self._assign_unique_id(self._normalize_dict(user))
ref = self._normalize_domain_id(context, ref)
ref = self.identity_api.create_user(ref['id'], ref)
@@ -663,6 +669,8 @@ class GroupV3(controller.V3Controller):
@controller.protected
def create_group(self, context, group):
+ self._require_attribute(group, 'name')
+
ref = self._assign_unique_id(self._normalize_dict(group))
ref = self._normalize_domain_id(context, ref)
ref = self.identity_api.create_group(ref['id'], ref)
@@ -713,6 +721,8 @@ class RoleV3(controller.V3Controller):
@controller.protected
def create_role(self, context, role):
+ self._require_attribute(role, 'name')
+
ref = self._assign_unique_id(self._normalize_dict(role))
ref = self.identity_api.create_role(ref['id'], ref)
return RoleV3.wrap_member(context, ref)
diff --git a/keystone/identity/core.py b/keystone/identity/core.py
index b3efc0a7..b2b3eaf0 100644
--- a/keystone/identity/core.py
+++ b/keystone/identity/core.py
@@ -16,7 +16,6 @@
"""Main entry point into the Identity service."""
-from keystone import assignment
from keystone import clean
from keystone.common import dependency
from keystone.common import logging
@@ -53,6 +52,7 @@ def filter_user(user_ref):
@dependency.provider('identity_api')
+@dependency.requires('assignment_api')
class Manager(manager.Manager):
"""Default pivot point for the Identity backend.
@@ -61,12 +61,8 @@ class Manager(manager.Manager):
"""
- def __init__(self, assignment_api=None):
+ def __init__(self):
super(Manager, self).__init__(CONF.identity.driver)
- if assignment_api is None:
- assignment_api = assignment.Manager(self)
- self.assignment_api = assignment_api
- self.driver.assignment_api = assignment_api
def create_user(self, user_id, user_ref):
user = user_ref.copy()
@@ -216,7 +212,7 @@ class Manager(manager.Manager):
class Driver(object):
"""Interface description for an Identity driver."""
- def authenticate_user(self, user_id, password):
+ def authenticate(self, user_id, password):
"""Authenticate a given user and password.
:returns: user_ref
:raises: AssertionError
diff --git a/keystone/locale/bg_BG/LC_MESSAGES/keystone.po b/keystone/locale/bg_BG/LC_MESSAGES/keystone.po
index ef61d876..c6890424 100644
--- a/keystone/locale/bg_BG/LC_MESSAGES/keystone.po
+++ b/keystone/locale/bg_BG/LC_MESSAGES/keystone.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Keystone\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
-"POT-Creation-Date: 2013-07-11 17:05+0000\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
"PO-Revision-Date: 2013-05-17 16:06+0000\n"
"Last-Translator: openstackjenkins <jenkins@openstack.org>\n"
"Language-Team: Bulgarian (Bulgaria) "
@@ -16,7 +16,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 0.9.6\n"
+"Generated-By: Babel 1.3\n"
#: keystone/clean.py:23
#, python-format
@@ -38,78 +38,224 @@ msgstr ""
msgid "%(property_name)s is not a %(display_expected_type)s"
msgstr ""
-#: keystone/test.py:106
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
#, python-format
msgid "Failed to checkout %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:110
+#: keystone/assignment/core.py:529
#, python-format
msgid "Expected dict or list: %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:456
-#: keystone/identity/backends/ldap.py:433
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
#, python-format
-msgid "Role %s not found"
+msgid "Cannot remove role that has not been granted, %s"
msgstr ""
-#: keystone/assignment/backends/sql.py:244
+#: keystone/assignment/backends/ldap.py:418
#, python-format
-msgid "Cannot remove role that has not been granted, %s"
+msgid "Role %s not found"
msgstr ""
-#: keystone/auth/controllers.py:72
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
#, python-format
msgid "Project is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:78 keystone/auth/plugins/password.py:38
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
#, python-format
msgid "Domain is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:84 keystone/auth/plugins/password.py:44
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
#, python-format
msgid "User is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:259
+#: keystone/auth/controllers.py:262
msgid "Scoping to both domain and project is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:262
+#: keystone/auth/controllers.py:265
msgid "Scoping to both domain and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:265
+#: keystone/auth/controllers.py:268
msgid "Scoping to both project and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:325
-#, python-format
-msgid "Unable to lookup user %s"
-msgstr ""
-
-#: keystone/auth/controllers.py:355
+#: keystone/auth/controllers.py:353
msgid "User not found"
msgstr ""
-#: keystone/auth/token_factory.py:79
-msgid "User have no access to project"
-msgstr ""
-
-#: keystone/auth/token_factory.py:94
-msgid "User have no access to domain"
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
msgstr ""
-#: keystone/auth/token_factory.py:311 keystone/token/controllers.py:119
-msgid "Unable to sign token."
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
msgstr ""
-#: keystone/auth/token_factory.py:314 keystone/token/controllers.py:122
-#, python-format
-msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
msgstr ""
#: keystone/catalog/core.py:38
@@ -170,32 +316,32 @@ msgstr ""
msgid "RBAC: Invalid token"
msgstr ""
-#: keystone/common/controller.py:35 keystone/common/controller.py:56
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
msgid "RBAC: Invalid user"
msgstr ""
-#: keystone/common/controller.py:41
+#: keystone/common/controller.py:45
msgid "RBAC: Proceeding without project"
msgstr ""
-#: keystone/common/controller.py:61
+#: keystone/common/controller.py:65
msgid "RBAC: Proceeding without tenant"
msgstr ""
-#: keystone/common/controller.py:91 keystone/common/controller.py:142
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
msgid "RBAC: Bypassing authorization"
msgstr ""
-#: keystone/common/controller.py:100 keystone/common/controller.py:140
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
msgid "RBAC: Authorization granted"
msgstr ""
-#: keystone/common/controller.py:130
+#: keystone/common/controller.py:134
#, python-format
msgid "RBAC: Adding query filter params (%s)"
msgstr ""
-#: keystone/common/controller.py:318
+#: keystone/common/controller.py:322
msgid "Invalid token in normalize_domain_id"
msgstr ""
@@ -206,17 +352,48 @@ msgid ""
"listening on that port."
msgstr ""
-#: keystone/common/wsgi.py:162
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
#, python-format
msgid "arg_dict: %s"
msgstr ""
-#: keystone/common/wsgi.py:188
+#: keystone/common/wsgi.py:243
#, python-format
msgid "Authorization failed. %(exception)s from %(remote_addr)s"
msgstr ""
-#: keystone/common/wsgi.py:431
+#: keystone/common/wsgi.py:487
msgid "The resource could not be found."
msgstr ""
@@ -457,11 +634,11 @@ msgstr ""
msgid "Search scope %s not implemented."
msgstr ""
-#: keystone/common/sql/core.py:126
+#: keystone/common/sql/core.py:119
msgid "Global engine callback raised."
msgstr ""
-#: keystone/common/sql/core.py:240
+#: keystone/common/sql/core.py:233
#, python-format
msgid "Got mysql server has gone away: %s"
msgstr ""
@@ -510,7 +687,7 @@ msgstr ""
msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
msgstr ""
-#: keystone/identity/controllers.py:878
+#: keystone/identity/controllers.py:952
#, python-format
msgid ""
"Group %(group)s not found for role-assignment - %(target)s with Role: "
@@ -521,18 +698,18 @@ msgstr ""
msgid "User not found in group"
msgstr ""
-#: keystone/identity/backends/ldap.py:192
+#: keystone/identity/backends/ldap.py:189
#, python-format
msgid ""
"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
"be removed from the group. The user will be ignored."
msgstr ""
-#: keystone/identity/backends/ldap.py:621
+#: keystone/identity/backends/ldap.py:334
msgid "Changing Name not supported by LDAP"
msgstr ""
-#: keystone/identity/backends/ldap.py:634
+#: keystone/identity/backends/ldap.py:347
#, python-format
msgid "User %(user_id)s is already a member of group %(group_id)s"
msgstr ""
@@ -552,26 +729,56 @@ msgstr ""
msgid "Failed to understand rule %(rule)r"
msgstr ""
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
#: keystone/policy/backends/rules.py:93
#, python-format
msgid "enforce %(action)s: %(credentials)s"
msgstr ""
-#: keystone/token/controllers.py:396
+#: keystone/token/controllers.py:378
#, python-format
msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
msgstr ""
-#: keystone/token/controllers.py:413 keystone/token/controllers.py:416
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
msgid "Token does not belong to specified tenant."
msgstr ""
-#: keystone/token/controllers.py:423
-msgid "Non-default domain is not supported"
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
msgstr ""
-#: keystone/token/controllers.py:431
-msgid "Domain scoped token is not supported"
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
msgstr ""
#: keystone/token/backends/memcache.py:144
@@ -596,3 +803,54 @@ msgstr ""
msgid "Unable to add token to revocation list."
msgstr ""
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
+#~ msgid "User have no access to project"
+#~ msgstr ""
+
+#~ msgid "User have no access to domain"
+#~ msgstr ""
+
+#~ msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#~ msgstr ""
+
diff --git a/keystone/locale/bs/LC_MESSAGES/keystone.po b/keystone/locale/bs/LC_MESSAGES/keystone.po
new file mode 100644
index 00000000..8aee9ca5
--- /dev/null
+++ b/keystone/locale/bs/LC_MESSAGES/keystone.po
@@ -0,0 +1,848 @@
+# Bosnian translations for keystone.
+# Copyright (C) 2013 ORGANIZATION
+# This file is distributed under the same license as the keystone project.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Keystone\n"
+"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
+"PO-Revision-Date: 2013-07-29 22:01+0000\n"
+"Last-Translator: openstackjenkins <jenkins@openstack.org>\n"
+"Language-Team: Bosnian "
+"(http://www.transifex.com/projects/p/openstack/language/bs/)\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 1.3\n"
+
+#: keystone/clean.py:23
+#, python-format
+msgid "%s cannot be empty."
+msgstr ""
+
+#: keystone/clean.py:25
+#, python-format
+msgid "%(property_name)s cannot be less than %(min_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:29
+#, python-format
+msgid "%(property_name)s should not be greater than %(max_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:36
+#, python-format
+msgid "%(property_name)s is not a %(display_expected_type)s"
+msgstr ""
+
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
+#, python-format
+msgid "Failed to checkout %s"
+msgstr ""
+
+#: keystone/assignment/core.py:529
+#, python-format
+msgid "Expected dict or list: %s"
+msgstr ""
+
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
+#, python-format
+msgid "Cannot remove role that has not been granted, %s"
+msgstr ""
+
+#: keystone/assignment/backends/ldap.py:418
+#, python-format
+msgid "Role %s not found"
+msgstr ""
+
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
+#, python-format
+msgid "Project is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
+#, python-format
+msgid "Domain is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
+#, python-format
+msgid "User is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:262
+msgid "Scoping to both domain and project is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:265
+msgid "Scoping to both domain and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:268
+msgid "Scoping to both project and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:353
+msgid "User not found"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
+msgstr ""
+
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
+msgstr ""
+
+#: keystone/catalog/core.py:38
+#, python-format
+msgid "Malformed endpoint %(url)s - unknown key %(keyerror)s"
+msgstr ""
+
+#: keystone/catalog/core.py:43
+#, python-format
+msgid ""
+"Malformed endpoint %(url)s - unknown key %(keyerror)s(are you missing "
+"brackets ?)"
+msgstr ""
+
+#: keystone/catalog/core.py:49
+#, python-format
+msgid ""
+"Malformed endpoint %s - incomplete format (are you "
+"missing a type notifier ?)"
+msgstr ""
+
+#: keystone/catalog/backends/templated.py:109
+#, python-format
+msgid "Unable to open template file %s"
+msgstr ""
+
+#: keystone/common/cms.py:26
+#, python-format
+msgid "Verify error: %s"
+msgstr ""
+
+#: keystone/common/cms.py:118
+msgid ""
+"Signing error: Unable to load certificate - ensure you've configured PKI "
+"with 'keystone-manage pki_setup'"
+msgstr ""
+
+#: keystone/common/cms.py:122
+#, python-format
+msgid "Signing error: %s"
+msgstr ""
+
+#: keystone/common/config.py:89
+#, python-format
+msgid "Unable to locate specified logging config file: %s"
+msgstr ""
+
+#: keystone/common/config.py:107
+msgid "Invalid syslog facility"
+msgstr ""
+
+#: keystone/common/controller.py:18
+#, python-format
+msgid "RBAC: Authorizing %(action)s(%(kwargs)s)"
+msgstr ""
+
+#: keystone/common/controller.py:25
+msgid "RBAC: Invalid token"
+msgstr ""
+
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
+msgid "RBAC: Invalid user"
+msgstr ""
+
+#: keystone/common/controller.py:45
+msgid "RBAC: Proceeding without project"
+msgstr ""
+
+#: keystone/common/controller.py:65
+msgid "RBAC: Proceeding without tenant"
+msgstr ""
+
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
+msgid "RBAC: Bypassing authorization"
+msgstr ""
+
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
+msgid "RBAC: Authorization granted"
+msgstr ""
+
+#: keystone/common/controller.py:134
+#, python-format
+msgid "RBAC: Adding query filter params (%s)"
+msgstr ""
+
+#: keystone/common/controller.py:322
+msgid "Invalid token in normalize_domain_id"
+msgstr ""
+
+#: keystone/common/utils.py:233
+msgid ""
+"Error setting up the debug environment. Verify that the option --debug-"
+"url has the format <host>:<port> and that a debugger processes is "
+"listening on that port."
+msgstr ""
+
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
+#, python-format
+msgid "arg_dict: %s"
+msgstr ""
+
+#: keystone/common/wsgi.py:243
+#, python-format
+msgid "Authorization failed. %(exception)s from %(remote_addr)s"
+msgstr ""
+
+#: keystone/common/wsgi.py:487
+msgid "The resource could not be found."
+msgstr ""
+
+#: keystone/common/environment/__init__.py:37
+#, python-format
+msgid "Environment configured as: %s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:51
+#, python-format
+msgid "Starting %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:113
+msgid "Server error"
+msgstr ""
+
+#: keystone/common/ldap/core.py:79
+#, python-format
+msgid "Invalid LDAP deref option: %s. Choose one of: "
+msgstr ""
+
+#: keystone/common/ldap/core.py:87
+#, python-format
+msgid "Invalid LDAP TLS certs option: %(option). Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:99
+#, python-format
+msgid "Invalid LDAP scope: %(scope)s. Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:189
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%s\". Format must be "
+"<ldap_attribute>:<keystone_attribute>"
+msgstr ""
+
+#: keystone/common/ldap/core.py:195
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%(item)s\". Value "
+"\"%(attr_map)s\" must use one of %(keys)s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:279 keystone/identity/backends/kvs.py:177
+#: keystone/identity/backends/kvs.py:205
+#, python-format
+msgid "Duplicate name, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:289 keystone/identity/backends/kvs.py:170
+#, python-format
+msgid "Duplicate ID, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:294
+#, python-format
+msgid "LDAP %s create"
+msgstr ""
+
+#: keystone/common/ldap/core.py:372
+#, python-format
+msgid "LDAP %s update"
+msgstr ""
+
+#: keystone/common/ldap/core.py:405
+#, python-format
+msgid "LDAP %s delete"
+msgstr ""
+
+#: keystone/common/ldap/core.py:430
+#, python-format
+msgid "LDAP init: url=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:431
+#, python-format
+msgid ""
+"LDAP init: use_tls=%(use_tls)s\n"
+"tls_cacertfile=%(tls_cacertfile)s\n"
+"tls_cacertdir=%(tls_cacertdir)s\n"
+"tls_req_cert=%(tls_req_cert)s\n"
+"tls_avail=%(tls_avail)s\n"
+msgstr ""
+
+#: keystone/common/ldap/core.py:450
+msgid "Invalid TLS / LDAPS combination"
+msgstr ""
+
+#: keystone/common/ldap/core.py:454
+#, python-format
+msgid "Invalid LDAP TLS_AVAIL option: %s. TLS not available"
+msgstr ""
+
+#: keystone/common/ldap/core.py:464
+#, python-format
+msgid "tls_cacertfile %s not found or is not a file"
+msgstr ""
+
+#: keystone/common/ldap/core.py:476
+#, python-format
+msgid "tls_cacertdir %s not found or is not a directory"
+msgstr ""
+
+#: keystone/common/ldap/core.py:483
+#, python-format
+msgid "LDAP TLS: invalid TLS_REQUIRE_CERT Option=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:497
+#, python-format
+msgid "LDAP bind: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:508
+#, python-format
+msgid "LDAP add: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:514
+#, python-format
+msgid ""
+"LDAP search: dn=%(dn)s, scope=%(scope)s, query=%(query)s, "
+"attrs=%(attrlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:567
+msgid ""
+"LDAP Server does not support paging. Disable paging in keystone.conf to "
+"avoid this message."
+msgstr ""
+
+#: keystone/common/ldap/core.py:584
+#, python-format
+msgid "LDAP modify: dn=%(dn)s, modlist=%(modlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:590
+#, python-format
+msgid "LDAP delete: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:595
+#, python-format
+msgid "LDAP delete_ext: dn=%(dn)s, serverctrls=%(serverctrls)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:146
+#, python-format
+msgid "FakeLdap initialize url=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:156
+#, python-format
+msgid "FakeLdap bind dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:163
+#, python-format
+msgid "FakeLdap bind fail: dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:170
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:175
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s does not match"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:190
+#, python-format
+msgid "FakeLdap add item: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:193
+#, python-format
+msgid "FakeLdap add item failed: dn=%s is already in store."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:207 keystone/common/ldap/fakeldap.py:221
+#, python-format
+msgid "FakeLdap delete item: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:211 keystone/common/ldap/fakeldap.py:225
+#, python-format
+msgid "FakeLdap delete item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:240
+#, python-format
+msgid "FakeLdap modify item: dn=%(dn)s attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:245
+#, python-format
+msgid "FakeLdap modify item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:262
+#, python-format
+msgid "FakeLdap modify item failed: item has no attribute \"%s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:273
+#, python-format
+msgid ""
+"FakeLdap modify item failed: item has no attribute \"%(k)s\" with value "
+"\"%(v)s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:279
+#, python-format
+msgid "FakeLdap modify item failed: unknown command %s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:281
+#, python-format
+msgid "modify_s action %s not implemented"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:300
+#, python-format
+msgid "FakeLdap search at dn=%(dn)s scope=%(scope)s query=%(query)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:306
+msgid "FakeLdap search fail: dn not found for SCOPE_BASE"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:320
+#, python-format
+msgid "Search scope %s not implemented."
+msgstr ""
+
+#: keystone/common/sql/core.py:119
+msgid "Global engine callback raised."
+msgstr ""
+
+#: keystone/common/sql/core.py:233
+#, python-format
+msgid "Got mysql server has gone away: %s"
+msgstr ""
+
+#: keystone/common/sql/legacy.py:188
+#, python-format
+msgid "Cannot migrate EC2 credential: %s"
+msgstr ""
+
+#: keystone/common/sql/migration.py:47
+msgid "version should be an integer"
+msgstr ""
+
+#: keystone/common/sql/nova.py:65
+#, python-format
+msgid "Create tenant %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:82
+#, python-format
+msgid "Create user %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:91
+#, python-format
+msgid "Add user %(user_id)s to tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:100
+#, python-format
+msgid "Ignoring existing role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:107
+#, python-format
+msgid "Create role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:117
+#, python-format
+msgid "Assign role %(role_id)s to user %(user_id)s on tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:136
+#, python-format
+msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/identity/controllers.py:952
+#, python-format
+msgid ""
+"Group %(group)s not found for role-assignment - %(target)s with Role: "
+"%(role)s"
+msgstr ""
+
+#: keystone/identity/backends/kvs.py:126 keystone/identity/backends/kvs.py:135
+msgid "User not found in group"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:189
+#, python-format
+msgid ""
+"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
+"be removed from the group. The user will be ignored."
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:334
+msgid "Changing Name not supported by LDAP"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:347
+#, python-format
+msgid "User %(user_id)s is already a member of group %(group_id)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:394
+#, python-format
+msgid "Failed to understand rule %(rule)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:404
+#, python-format
+msgid "No handler for matches of kind %s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:679
+#, python-format
+msgid "Failed to understand rule %(rule)r"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
+#: keystone/policy/backends/rules.py:93
+#, python-format
+msgid "enforce %(action)s: %(credentials)s"
+msgstr ""
+
+#: keystone/token/controllers.py:378
+#, python-format
+msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
+msgstr ""
+
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
+msgid "Token does not belong to specified tenant."
+msgstr ""
+
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
+msgstr ""
+
+#: keystone/token/backends/memcache.py:144
+#, python-format
+msgid ""
+"Successful set of token-index-list for user-key \"%(user_key)s\", "
+"#%(count)d records"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:154
+#, python-format
+msgid ""
+"Failed to set token-index-list for user-key \"%(user_key)s\". Attempt "
+"%(cas_retry)d of %(cas_retry_max)d"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:163
+msgid "Unable to add token user list"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:172
+msgid "Unable to add token to revocation list."
+msgstr ""
+
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
diff --git a/keystone/locale/ca/LC_MESSAGES/keystone.po b/keystone/locale/ca/LC_MESSAGES/keystone.po
index 3d83598f..110ea54c 100644
--- a/keystone/locale/ca/LC_MESSAGES/keystone.po
+++ b/keystone/locale/ca/LC_MESSAGES/keystone.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Keystone\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
-"POT-Creation-Date: 2013-07-11 17:05+0000\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
"PO-Revision-Date: 2012-11-03 03:08+0000\n"
"Last-Translator: Sergi Almacellas <pokoli@gmail.com>\n"
"Language-Team: ca <LL@li.org>\n"
@@ -16,7 +16,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 0.9.6\n"
+"Generated-By: Babel 1.3\n"
#: keystone/clean.py:23
#, python-format
@@ -38,79 +38,224 @@ msgstr ""
msgid "%(property_name)s is not a %(display_expected_type)s"
msgstr ""
-#: keystone/test.py:106
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
#, python-format
msgid "Failed to checkout %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:110
+#: keystone/assignment/core.py:529
#, python-format
msgid "Expected dict or list: %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:456
-#: keystone/identity/backends/ldap.py:433
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
#, python-format
-msgid "Role %s not found"
+msgid "Cannot remove role that has not been granted, %s"
msgstr ""
-#: keystone/assignment/backends/sql.py:244
+#: keystone/assignment/backends/ldap.py:418
#, python-format
-msgid "Cannot remove role that has not been granted, %s"
+msgid "Role %s not found"
+msgstr ""
+
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
msgstr ""
-#: keystone/auth/controllers.py:72
+#: keystone/auth/controllers.py:71
#, python-format
msgid "Project is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:78 keystone/auth/plugins/password.py:38
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
#, python-format
msgid "Domain is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:84 keystone/auth/plugins/password.py:44
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
#, python-format
msgid "User is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:259
+#: keystone/auth/controllers.py:262
msgid "Scoping to both domain and project is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:262
+#: keystone/auth/controllers.py:265
msgid "Scoping to both domain and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:265
+#: keystone/auth/controllers.py:268
msgid "Scoping to both project and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:325
-#, fuzzy, python-format
-msgid "Unable to lookup user %s"
-msgstr "No es pot afegir el token a la llista d'usuaris."
-
-#: keystone/auth/controllers.py:355
+#: keystone/auth/controllers.py:353
msgid "User not found"
msgstr ""
-#: keystone/auth/token_factory.py:79
-msgid "User have no access to project"
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
msgstr ""
-#: keystone/auth/token_factory.py:94
-msgid "User have no access to domain"
-msgstr ""
-
-#: keystone/auth/token_factory.py:311 keystone/token/controllers.py:119
-#, fuzzy
-msgid "Unable to sign token."
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, fuzzy, python-format
+msgid "Unable to lookup user %s"
msgstr "No es pot afegir el token a la llista d'usuaris."
-#: keystone/auth/token_factory.py:314 keystone/token/controllers.py:122
-#, python-format
-msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
msgstr ""
#: keystone/catalog/core.py:38
@@ -171,32 +316,32 @@ msgstr ""
msgid "RBAC: Invalid token"
msgstr ""
-#: keystone/common/controller.py:35 keystone/common/controller.py:56
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
msgid "RBAC: Invalid user"
msgstr ""
-#: keystone/common/controller.py:41
+#: keystone/common/controller.py:45
msgid "RBAC: Proceeding without project"
msgstr ""
-#: keystone/common/controller.py:61
+#: keystone/common/controller.py:65
msgid "RBAC: Proceeding without tenant"
msgstr ""
-#: keystone/common/controller.py:91 keystone/common/controller.py:142
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
msgid "RBAC: Bypassing authorization"
msgstr ""
-#: keystone/common/controller.py:100 keystone/common/controller.py:140
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
msgid "RBAC: Authorization granted"
msgstr ""
-#: keystone/common/controller.py:130
+#: keystone/common/controller.py:134
#, python-format
msgid "RBAC: Adding query filter params (%s)"
msgstr ""
-#: keystone/common/controller.py:318
+#: keystone/common/controller.py:322
msgid "Invalid token in normalize_domain_id"
msgstr ""
@@ -207,17 +352,48 @@ msgid ""
"listening on that port."
msgstr ""
-#: keystone/common/wsgi.py:162
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
#, python-format
msgid "arg_dict: %s"
msgstr ""
-#: keystone/common/wsgi.py:188
+#: keystone/common/wsgi.py:243
#, python-format
msgid "Authorization failed. %(exception)s from %(remote_addr)s"
msgstr ""
-#: keystone/common/wsgi.py:431
+#: keystone/common/wsgi.py:487
msgid "The resource could not be found."
msgstr ""
@@ -458,11 +634,11 @@ msgstr ""
msgid "Search scope %s not implemented."
msgstr ""
-#: keystone/common/sql/core.py:126
+#: keystone/common/sql/core.py:119
msgid "Global engine callback raised."
msgstr ""
-#: keystone/common/sql/core.py:240
+#: keystone/common/sql/core.py:233
#, python-format
msgid "Got mysql server has gone away: %s"
msgstr ""
@@ -511,7 +687,7 @@ msgstr ""
msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
msgstr ""
-#: keystone/identity/controllers.py:878
+#: keystone/identity/controllers.py:952
#, python-format
msgid ""
"Group %(group)s not found for role-assignment - %(target)s with Role: "
@@ -522,18 +698,18 @@ msgstr ""
msgid "User not found in group"
msgstr ""
-#: keystone/identity/backends/ldap.py:192
+#: keystone/identity/backends/ldap.py:189
#, python-format
msgid ""
"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
"be removed from the group. The user will be ignored."
msgstr ""
-#: keystone/identity/backends/ldap.py:621
+#: keystone/identity/backends/ldap.py:334
msgid "Changing Name not supported by LDAP"
msgstr ""
-#: keystone/identity/backends/ldap.py:634
+#: keystone/identity/backends/ldap.py:347
#, python-format
msgid "User %(user_id)s is already a member of group %(group_id)s"
msgstr ""
@@ -553,26 +729,56 @@ msgstr ""
msgid "Failed to understand rule %(rule)r"
msgstr ""
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
#: keystone/policy/backends/rules.py:93
#, python-format
msgid "enforce %(action)s: %(credentials)s"
msgstr ""
-#: keystone/token/controllers.py:396
+#: keystone/token/controllers.py:378
#, python-format
msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
msgstr ""
-#: keystone/token/controllers.py:413 keystone/token/controllers.py:416
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
msgid "Token does not belong to specified tenant."
msgstr ""
-#: keystone/token/controllers.py:423
-msgid "Non-default domain is not supported"
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
msgstr ""
-#: keystone/token/controllers.py:431
-msgid "Domain scoped token is not supported"
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
msgstr ""
#: keystone/token/backends/memcache.py:144
@@ -597,3 +803,55 @@ msgstr ""
msgid "Unable to add token to revocation list."
msgstr "No es pot afegir el token a la llista de revocats."
+#: keystone/token/providers/pki.py:43
+#, fuzzy
+msgid "Unable to sign token."
+msgstr "No es pot afegir el token a la llista d'usuaris."
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
+#~ msgid "User have no access to project"
+#~ msgstr ""
+
+#~ msgid "User have no access to domain"
+#~ msgstr ""
+
+#~ msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#~ msgstr ""
+
diff --git a/keystone/locale/cs/LC_MESSAGES/keystone.po b/keystone/locale/cs/LC_MESSAGES/keystone.po
index 60948581..75cddd40 100644
--- a/keystone/locale/cs/LC_MESSAGES/keystone.po
+++ b/keystone/locale/cs/LC_MESSAGES/keystone.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Keystone\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
-"POT-Creation-Date: 2013-07-11 17:05+0000\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
"PO-Revision-Date: 2013-05-17 16:06+0000\n"
"Last-Translator: openstackjenkins <jenkins@openstack.org>\n"
"Language-Team: Czech "
@@ -16,7 +16,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 0.9.6\n"
+"Generated-By: Babel 1.3\n"
#: keystone/clean.py:23
#, python-format
@@ -38,78 +38,224 @@ msgstr ""
msgid "%(property_name)s is not a %(display_expected_type)s"
msgstr ""
-#: keystone/test.py:106
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
#, python-format
msgid "Failed to checkout %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:110
+#: keystone/assignment/core.py:529
#, python-format
msgid "Expected dict or list: %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:456
-#: keystone/identity/backends/ldap.py:433
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
#, python-format
-msgid "Role %s not found"
+msgid "Cannot remove role that has not been granted, %s"
msgstr ""
-#: keystone/assignment/backends/sql.py:244
+#: keystone/assignment/backends/ldap.py:418
#, python-format
-msgid "Cannot remove role that has not been granted, %s"
+msgid "Role %s not found"
msgstr ""
-#: keystone/auth/controllers.py:72
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
#, python-format
msgid "Project is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:78 keystone/auth/plugins/password.py:38
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
#, python-format
msgid "Domain is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:84 keystone/auth/plugins/password.py:44
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
#, python-format
msgid "User is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:259
+#: keystone/auth/controllers.py:262
msgid "Scoping to both domain and project is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:262
+#: keystone/auth/controllers.py:265
msgid "Scoping to both domain and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:265
+#: keystone/auth/controllers.py:268
msgid "Scoping to both project and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:325
-#, python-format
-msgid "Unable to lookup user %s"
-msgstr ""
-
-#: keystone/auth/controllers.py:355
+#: keystone/auth/controllers.py:353
msgid "User not found"
msgstr ""
-#: keystone/auth/token_factory.py:79
-msgid "User have no access to project"
-msgstr ""
-
-#: keystone/auth/token_factory.py:94
-msgid "User have no access to domain"
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
msgstr ""
-#: keystone/auth/token_factory.py:311 keystone/token/controllers.py:119
-msgid "Unable to sign token."
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
msgstr ""
-#: keystone/auth/token_factory.py:314 keystone/token/controllers.py:122
-#, python-format
-msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
msgstr ""
#: keystone/catalog/core.py:38
@@ -170,32 +316,32 @@ msgstr ""
msgid "RBAC: Invalid token"
msgstr ""
-#: keystone/common/controller.py:35 keystone/common/controller.py:56
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
msgid "RBAC: Invalid user"
msgstr ""
-#: keystone/common/controller.py:41
+#: keystone/common/controller.py:45
msgid "RBAC: Proceeding without project"
msgstr ""
-#: keystone/common/controller.py:61
+#: keystone/common/controller.py:65
msgid "RBAC: Proceeding without tenant"
msgstr ""
-#: keystone/common/controller.py:91 keystone/common/controller.py:142
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
msgid "RBAC: Bypassing authorization"
msgstr ""
-#: keystone/common/controller.py:100 keystone/common/controller.py:140
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
msgid "RBAC: Authorization granted"
msgstr ""
-#: keystone/common/controller.py:130
+#: keystone/common/controller.py:134
#, python-format
msgid "RBAC: Adding query filter params (%s)"
msgstr ""
-#: keystone/common/controller.py:318
+#: keystone/common/controller.py:322
msgid "Invalid token in normalize_domain_id"
msgstr ""
@@ -206,17 +352,48 @@ msgid ""
"listening on that port."
msgstr ""
-#: keystone/common/wsgi.py:162
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
#, python-format
msgid "arg_dict: %s"
msgstr ""
-#: keystone/common/wsgi.py:188
+#: keystone/common/wsgi.py:243
#, python-format
msgid "Authorization failed. %(exception)s from %(remote_addr)s"
msgstr ""
-#: keystone/common/wsgi.py:431
+#: keystone/common/wsgi.py:487
msgid "The resource could not be found."
msgstr ""
@@ -457,11 +634,11 @@ msgstr ""
msgid "Search scope %s not implemented."
msgstr ""
-#: keystone/common/sql/core.py:126
+#: keystone/common/sql/core.py:119
msgid "Global engine callback raised."
msgstr ""
-#: keystone/common/sql/core.py:240
+#: keystone/common/sql/core.py:233
#, python-format
msgid "Got mysql server has gone away: %s"
msgstr ""
@@ -510,7 +687,7 @@ msgstr ""
msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
msgstr ""
-#: keystone/identity/controllers.py:878
+#: keystone/identity/controllers.py:952
#, python-format
msgid ""
"Group %(group)s not found for role-assignment - %(target)s with Role: "
@@ -521,18 +698,18 @@ msgstr ""
msgid "User not found in group"
msgstr ""
-#: keystone/identity/backends/ldap.py:192
+#: keystone/identity/backends/ldap.py:189
#, python-format
msgid ""
"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
"be removed from the group. The user will be ignored."
msgstr ""
-#: keystone/identity/backends/ldap.py:621
+#: keystone/identity/backends/ldap.py:334
msgid "Changing Name not supported by LDAP"
msgstr ""
-#: keystone/identity/backends/ldap.py:634
+#: keystone/identity/backends/ldap.py:347
#, python-format
msgid "User %(user_id)s is already a member of group %(group_id)s"
msgstr ""
@@ -552,26 +729,56 @@ msgstr ""
msgid "Failed to understand rule %(rule)r"
msgstr ""
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
#: keystone/policy/backends/rules.py:93
#, python-format
msgid "enforce %(action)s: %(credentials)s"
msgstr ""
-#: keystone/token/controllers.py:396
+#: keystone/token/controllers.py:378
#, python-format
msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
msgstr ""
-#: keystone/token/controllers.py:413 keystone/token/controllers.py:416
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
msgid "Token does not belong to specified tenant."
msgstr ""
-#: keystone/token/controllers.py:423
-msgid "Non-default domain is not supported"
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
msgstr ""
-#: keystone/token/controllers.py:431
-msgid "Domain scoped token is not supported"
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
msgstr ""
#: keystone/token/backends/memcache.py:144
@@ -596,3 +803,54 @@ msgstr ""
msgid "Unable to add token to revocation list."
msgstr ""
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
+#~ msgid "User have no access to project"
+#~ msgstr ""
+
+#~ msgid "User have no access to domain"
+#~ msgstr ""
+
+#~ msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#~ msgstr ""
+
diff --git a/keystone/locale/da/LC_MESSAGES/keystone.po b/keystone/locale/da/LC_MESSAGES/keystone.po
index ed07f63b..4243c60f 100644
--- a/keystone/locale/da/LC_MESSAGES/keystone.po
+++ b/keystone/locale/da/LC_MESSAGES/keystone.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Keystone\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
-"POT-Creation-Date: 2013-07-11 17:05+0000\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
"PO-Revision-Date: 2013-05-17 16:06+0000\n"
"Last-Translator: openstackjenkins <jenkins@openstack.org>\n"
"Language-Team: Danish "
@@ -16,7 +16,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 0.9.6\n"
+"Generated-By: Babel 1.3\n"
#: keystone/clean.py:23
#, python-format
@@ -38,78 +38,224 @@ msgstr ""
msgid "%(property_name)s is not a %(display_expected_type)s"
msgstr ""
-#: keystone/test.py:106
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
#, python-format
msgid "Failed to checkout %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:110
+#: keystone/assignment/core.py:529
#, python-format
msgid "Expected dict or list: %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:456
-#: keystone/identity/backends/ldap.py:433
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
#, python-format
-msgid "Role %s not found"
+msgid "Cannot remove role that has not been granted, %s"
msgstr ""
-#: keystone/assignment/backends/sql.py:244
+#: keystone/assignment/backends/ldap.py:418
#, python-format
-msgid "Cannot remove role that has not been granted, %s"
+msgid "Role %s not found"
msgstr ""
-#: keystone/auth/controllers.py:72
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
#, python-format
msgid "Project is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:78 keystone/auth/plugins/password.py:38
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
#, python-format
msgid "Domain is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:84 keystone/auth/plugins/password.py:44
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
#, python-format
msgid "User is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:259
+#: keystone/auth/controllers.py:262
msgid "Scoping to both domain and project is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:262
+#: keystone/auth/controllers.py:265
msgid "Scoping to both domain and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:265
+#: keystone/auth/controllers.py:268
msgid "Scoping to both project and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:325
-#, python-format
-msgid "Unable to lookup user %s"
-msgstr ""
-
-#: keystone/auth/controllers.py:355
+#: keystone/auth/controllers.py:353
msgid "User not found"
msgstr ""
-#: keystone/auth/token_factory.py:79
-msgid "User have no access to project"
-msgstr ""
-
-#: keystone/auth/token_factory.py:94
-msgid "User have no access to domain"
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
msgstr ""
-#: keystone/auth/token_factory.py:311 keystone/token/controllers.py:119
-msgid "Unable to sign token."
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
msgstr ""
-#: keystone/auth/token_factory.py:314 keystone/token/controllers.py:122
-#, python-format
-msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
msgstr ""
#: keystone/catalog/core.py:38
@@ -170,32 +316,32 @@ msgstr ""
msgid "RBAC: Invalid token"
msgstr ""
-#: keystone/common/controller.py:35 keystone/common/controller.py:56
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
msgid "RBAC: Invalid user"
msgstr ""
-#: keystone/common/controller.py:41
+#: keystone/common/controller.py:45
msgid "RBAC: Proceeding without project"
msgstr ""
-#: keystone/common/controller.py:61
+#: keystone/common/controller.py:65
msgid "RBAC: Proceeding without tenant"
msgstr ""
-#: keystone/common/controller.py:91 keystone/common/controller.py:142
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
msgid "RBAC: Bypassing authorization"
msgstr ""
-#: keystone/common/controller.py:100 keystone/common/controller.py:140
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
msgid "RBAC: Authorization granted"
msgstr ""
-#: keystone/common/controller.py:130
+#: keystone/common/controller.py:134
#, python-format
msgid "RBAC: Adding query filter params (%s)"
msgstr ""
-#: keystone/common/controller.py:318
+#: keystone/common/controller.py:322
msgid "Invalid token in normalize_domain_id"
msgstr ""
@@ -206,17 +352,48 @@ msgid ""
"listening on that port."
msgstr ""
-#: keystone/common/wsgi.py:162
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
#, python-format
msgid "arg_dict: %s"
msgstr ""
-#: keystone/common/wsgi.py:188
+#: keystone/common/wsgi.py:243
#, python-format
msgid "Authorization failed. %(exception)s from %(remote_addr)s"
msgstr ""
-#: keystone/common/wsgi.py:431
+#: keystone/common/wsgi.py:487
msgid "The resource could not be found."
msgstr ""
@@ -457,11 +634,11 @@ msgstr ""
msgid "Search scope %s not implemented."
msgstr ""
-#: keystone/common/sql/core.py:126
+#: keystone/common/sql/core.py:119
msgid "Global engine callback raised."
msgstr ""
-#: keystone/common/sql/core.py:240
+#: keystone/common/sql/core.py:233
#, python-format
msgid "Got mysql server has gone away: %s"
msgstr ""
@@ -510,7 +687,7 @@ msgstr ""
msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
msgstr ""
-#: keystone/identity/controllers.py:878
+#: keystone/identity/controllers.py:952
#, python-format
msgid ""
"Group %(group)s not found for role-assignment - %(target)s with Role: "
@@ -521,18 +698,18 @@ msgstr ""
msgid "User not found in group"
msgstr ""
-#: keystone/identity/backends/ldap.py:192
+#: keystone/identity/backends/ldap.py:189
#, python-format
msgid ""
"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
"be removed from the group. The user will be ignored."
msgstr ""
-#: keystone/identity/backends/ldap.py:621
+#: keystone/identity/backends/ldap.py:334
msgid "Changing Name not supported by LDAP"
msgstr ""
-#: keystone/identity/backends/ldap.py:634
+#: keystone/identity/backends/ldap.py:347
#, python-format
msgid "User %(user_id)s is already a member of group %(group_id)s"
msgstr ""
@@ -552,26 +729,56 @@ msgstr ""
msgid "Failed to understand rule %(rule)r"
msgstr ""
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
#: keystone/policy/backends/rules.py:93
#, python-format
msgid "enforce %(action)s: %(credentials)s"
msgstr ""
-#: keystone/token/controllers.py:396
+#: keystone/token/controllers.py:378
#, python-format
msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
msgstr ""
-#: keystone/token/controllers.py:413 keystone/token/controllers.py:416
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
msgid "Token does not belong to specified tenant."
msgstr ""
-#: keystone/token/controllers.py:423
-msgid "Non-default domain is not supported"
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
msgstr ""
-#: keystone/token/controllers.py:431
-msgid "Domain scoped token is not supported"
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
msgstr ""
#: keystone/token/backends/memcache.py:144
@@ -596,3 +803,54 @@ msgstr ""
msgid "Unable to add token to revocation list."
msgstr ""
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
+#~ msgid "User have no access to project"
+#~ msgstr ""
+
+#~ msgid "User have no access to domain"
+#~ msgstr ""
+
+#~ msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#~ msgstr ""
+
diff --git a/keystone/locale/de/LC_MESSAGES/keystone.po b/keystone/locale/de/LC_MESSAGES/keystone.po
index b47004fb..eb3b905d 100644
--- a/keystone/locale/de/LC_MESSAGES/keystone.po
+++ b/keystone/locale/de/LC_MESSAGES/keystone.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Keystone\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
-"POT-Creation-Date: 2013-07-11 17:05+0000\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
"PO-Revision-Date: 2013-05-22 03:45+0000\n"
"Last-Translator: daisy.ycguo <daisy.ycguo@gmail.com>\n"
"Language-Team: German "
@@ -16,7 +16,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 0.9.6\n"
+"Generated-By: Babel 1.3\n"
#: keystone/clean.py:23
#, python-format
@@ -38,81 +38,225 @@ msgstr "%(property_name)s sollte nicht größer als %(max_length)s Zeichen sein.
msgid "%(property_name)s is not a %(display_expected_type)s"
msgstr ""
-#: keystone/test.py:106
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
#, python-format
msgid "Failed to checkout %s"
msgstr "%s wurde nicht ausgecheckt"
-#: keystone/assignment/backends/ldap.py:110
+#: keystone/assignment/core.py:529
#, python-format
msgid "Expected dict or list: %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:456
-#: keystone/identity/backends/ldap.py:433
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
+#, python-format
+msgid "Cannot remove role that has not been granted, %s"
+msgstr "Nicht gewährte Rolle kann nicht entfernt werden, %s"
+
+#: keystone/assignment/backends/ldap.py:418
#, python-format
msgid "Role %s not found"
msgstr "Rolle %s nicht gefunden"
-#: keystone/assignment/backends/sql.py:244
-#, python-format
-msgid "Cannot remove role that has not been granted, %s"
-msgstr "Nicht gewährte Rolle kann nicht entfernt werden, %s"
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
-#: keystone/auth/controllers.py:72
+#: keystone/auth/controllers.py:71
#, python-format
msgid "Project is disabled: %s"
msgstr "Projekt ist inaktiviert: %s"
-#: keystone/auth/controllers.py:78 keystone/auth/plugins/password.py:38
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
#, python-format
msgid "Domain is disabled: %s"
msgstr "Domäne ist inaktiviert: %s"
-#: keystone/auth/controllers.py:84 keystone/auth/plugins/password.py:44
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
#, python-format
msgid "User is disabled: %s"
msgstr "Benutzer ist inaktiviert: %s"
-#: keystone/auth/controllers.py:259
+#: keystone/auth/controllers.py:262
msgid "Scoping to both domain and project is not allowed"
msgstr "Scoping sowohl auf 'domain' als auch auf 'project' ist nicht zulässig"
-#: keystone/auth/controllers.py:262
+#: keystone/auth/controllers.py:265
msgid "Scoping to both domain and trust is not allowed"
msgstr "Scoping sowohl auf 'domain' als auch auf 'trust' ist nicht zulässig"
-#: keystone/auth/controllers.py:265
+#: keystone/auth/controllers.py:268
msgid "Scoping to both project and trust is not allowed"
msgstr "Scoping sowohl auf 'project' als auch auf 'trust' ist nicht zulässig"
-#: keystone/auth/controllers.py:325
-#, python-format
-msgid "Unable to lookup user %s"
-msgstr "Suche nach Benutzer %s nicht möglich"
-
-#: keystone/auth/controllers.py:355
+#: keystone/auth/controllers.py:353
msgid "User not found"
msgstr "Benutzer nicht gefunden"
-#: keystone/auth/token_factory.py:79
-msgid "User have no access to project"
-msgstr "Benutzer hat keinen Zugriff auf Projekt"
-
-#: keystone/auth/token_factory.py:94
-msgid "User have no access to domain"
-msgstr "Benutzer hat keinen Zugriff auf Domäne"
-
-#: keystone/auth/token_factory.py:311 keystone/token/controllers.py:119
-msgid "Unable to sign token."
-msgstr "Token kann nicht unterzeichnet werden."
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
+msgstr ""
-#: keystone/auth/token_factory.py:314 keystone/token/controllers.py:122
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
#, python-format
-msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+msgid "Unable to lookup user %s"
+msgstr "Suche nach Benutzer %s nicht möglich"
+
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
msgstr ""
-"Ungültiger Wert für 'token_format': %s. Zulässige Werte sind PKI oder "
-"UUID."
#: keystone/catalog/core.py:38
#, python-format
@@ -178,34 +322,34 @@ msgstr ""
msgid "RBAC: Invalid token"
msgstr "Rollenbasierte Zugriffssteuerung: Ungültiges Token"
-#: keystone/common/controller.py:35 keystone/common/controller.py:56
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
msgid "RBAC: Invalid user"
msgstr "Rollenbasierte Zugriffssteuerung: Ungültiger Benutzer"
-#: keystone/common/controller.py:41
+#: keystone/common/controller.py:45
msgid "RBAC: Proceeding without project"
msgstr "Rollenbasierte Zugriffssteuerung: Fortfahren ohne Projekt"
-#: keystone/common/controller.py:61
+#: keystone/common/controller.py:65
msgid "RBAC: Proceeding without tenant"
msgstr "Rollenbasierte Zugriffssteuerung: Fortsetzung ohne Nutzer"
-#: keystone/common/controller.py:91 keystone/common/controller.py:142
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
msgid "RBAC: Bypassing authorization"
msgstr "Rollenbasierte Zugriffssteuerung: Umgehen von Autorisierung"
-#: keystone/common/controller.py:100 keystone/common/controller.py:140
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
msgid "RBAC: Authorization granted"
msgstr "Rollenbasierte Zugriffssteuerung: Autorisierung erteilt"
-#: keystone/common/controller.py:130
+#: keystone/common/controller.py:134
#, python-format
msgid "RBAC: Adding query filter params (%s)"
msgstr ""
"Rollenbasierte Zugriffssteuerung: Hinzufügen von Abfragefilterparametern "
"(%s)"
-#: keystone/common/controller.py:318
+#: keystone/common/controller.py:322
msgid "Invalid token in normalize_domain_id"
msgstr "Ungültiges Token in 'normalize_domain_id'"
@@ -216,17 +360,48 @@ msgid ""
"listening on that port."
msgstr ""
-#: keystone/common/wsgi.py:162
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
#, python-format
msgid "arg_dict: %s"
msgstr "arg_dict: %s"
-#: keystone/common/wsgi.py:188
+#: keystone/common/wsgi.py:243
#, fuzzy, python-format
msgid "Authorization failed. %(exception)s from %(remote_addr)s"
msgstr "Autorisierung fehlgeschlagen. %s von %s"
-#: keystone/common/wsgi.py:431
+#: keystone/common/wsgi.py:487
msgid "The resource could not be found."
msgstr "Die Ressource konnte nicht gefunden werden."
@@ -473,11 +648,11 @@ msgstr "FakeLdap-Suche fehlgeschlagen: dn für 'SCOPE_BASE' nicht gefunden"
msgid "Search scope %s not implemented."
msgstr "Suchbereich %s nicht implementiert."
-#: keystone/common/sql/core.py:126
+#: keystone/common/sql/core.py:119
msgid "Global engine callback raised."
msgstr ""
-#: keystone/common/sql/core.py:240
+#: keystone/common/sql/core.py:233
#, python-format
msgid "Got mysql server has gone away: %s"
msgstr ""
@@ -528,7 +703,7 @@ msgstr "Rolle %s Benutzer %s auf Nutzer %s zuweisen"
msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
msgstr "Erstellen von EC2-Berechtigungsnachweis für Benutzer %s und Nutzer %s"
-#: keystone/identity/controllers.py:878
+#: keystone/identity/controllers.py:952
#, python-format
msgid ""
"Group %(group)s not found for role-assignment - %(target)s with Role: "
@@ -539,18 +714,18 @@ msgstr ""
msgid "User not found in group"
msgstr "Benutzer nicht in Gruppe gefunden"
-#: keystone/identity/backends/ldap.py:192
+#: keystone/identity/backends/ldap.py:189
#, python-format
msgid ""
"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
"be removed from the group. The user will be ignored."
msgstr ""
-#: keystone/identity/backends/ldap.py:621
+#: keystone/identity/backends/ldap.py:334
msgid "Changing Name not supported by LDAP"
msgstr "Änderung von Namen wird von LDAP nicht unterstützt"
-#: keystone/identity/backends/ldap.py:634
+#: keystone/identity/backends/ldap.py:347
#, fuzzy, python-format
msgid "User %(user_id)s is already a member of group %(group_id)s"
msgstr "Benutzer %s ist bereits Mitglied der Gruppe %s."
@@ -570,27 +745,57 @@ msgstr "Kein Handler für Übereinstimmungen des Typs %s"
msgid "Failed to understand rule %(rule)r"
msgstr "Regel '%(rule)r' konnte nicht verstanden werden"
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
#: keystone/policy/backends/rules.py:93
#, python-format
msgid "enforce %(action)s: %(credentials)s"
msgstr ""
-#: keystone/token/controllers.py:396
+#: keystone/token/controllers.py:378
#, python-format
msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
msgstr ""
-#: keystone/token/controllers.py:413 keystone/token/controllers.py:416
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
msgid "Token does not belong to specified tenant."
msgstr "Token gehört nicht zu angegebenem Nutzer."
-#: keystone/token/controllers.py:423
-msgid "Non-default domain is not supported"
-msgstr "Nicht-Standard-Domäne wird nicht unterstützt"
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
+msgstr ""
-#: keystone/token/controllers.py:431
-msgid "Domain scoped token is not supported"
-msgstr "Bereichsorientiertes Token der Domäne wird nicht unterstützt"
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
+msgstr ""
#: keystone/token/backends/memcache.py:144
#, python-format
@@ -614,3 +819,56 @@ msgstr ""
msgid "Unable to add token to revocation list."
msgstr "Token kann nicht zu Widerrufsliste hinzugefügt werden."
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr "Token kann nicht unterzeichnet werden."
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr "Nicht-Standard-Domäne wird nicht unterstützt"
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr "Bereichsorientiertes Token der Domäne wird nicht unterstützt"
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
+#~ msgid "User have no access to project"
+#~ msgstr "Benutzer hat keinen Zugriff auf Projekt"
+
+#~ msgid "User have no access to domain"
+#~ msgstr "Benutzer hat keinen Zugriff auf Domäne"
+
+#~ msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#~ msgstr ""
+#~ "Ungültiger Wert für 'token_format': %s. "
+#~ "Zulässige Werte sind PKI oder UUID."
+
diff --git a/keystone/locale/en_AU/LC_MESSAGES/keystone.po b/keystone/locale/en_AU/LC_MESSAGES/keystone.po
new file mode 100644
index 00000000..65c1161c
--- /dev/null
+++ b/keystone/locale/en_AU/LC_MESSAGES/keystone.po
@@ -0,0 +1,847 @@
+# English (Australia) translations for keystone.
+# Copyright (C) 2013 ORGANIZATION
+# This file is distributed under the same license as the keystone project.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Keystone\n"
+"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
+"PO-Revision-Date: 2013-07-29 22:01+0000\n"
+"Last-Translator: openstackjenkins <jenkins@openstack.org>\n"
+"Language-Team: English (Australia) "
+"(http://www.transifex.com/projects/p/openstack/language/en_AU/)\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 1.3\n"
+
+#: keystone/clean.py:23
+#, python-format
+msgid "%s cannot be empty."
+msgstr ""
+
+#: keystone/clean.py:25
+#, python-format
+msgid "%(property_name)s cannot be less than %(min_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:29
+#, python-format
+msgid "%(property_name)s should not be greater than %(max_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:36
+#, python-format
+msgid "%(property_name)s is not a %(display_expected_type)s"
+msgstr ""
+
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
+#, python-format
+msgid "Failed to checkout %s"
+msgstr ""
+
+#: keystone/assignment/core.py:529
+#, python-format
+msgid "Expected dict or list: %s"
+msgstr ""
+
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
+#, python-format
+msgid "Cannot remove role that has not been granted, %s"
+msgstr ""
+
+#: keystone/assignment/backends/ldap.py:418
+#, python-format
+msgid "Role %s not found"
+msgstr ""
+
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
+#, python-format
+msgid "Project is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
+#, python-format
+msgid "Domain is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
+#, python-format
+msgid "User is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:262
+msgid "Scoping to both domain and project is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:265
+msgid "Scoping to both domain and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:268
+msgid "Scoping to both project and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:353
+msgid "User not found"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
+msgstr ""
+
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
+msgstr ""
+
+#: keystone/catalog/core.py:38
+#, python-format
+msgid "Malformed endpoint %(url)s - unknown key %(keyerror)s"
+msgstr ""
+
+#: keystone/catalog/core.py:43
+#, python-format
+msgid ""
+"Malformed endpoint %(url)s - unknown key %(keyerror)s(are you missing "
+"brackets ?)"
+msgstr ""
+
+#: keystone/catalog/core.py:49
+#, python-format
+msgid ""
+"Malformed endpoint %s - incomplete format (are you "
+"missing a type notifier ?)"
+msgstr ""
+
+#: keystone/catalog/backends/templated.py:109
+#, python-format
+msgid "Unable to open template file %s"
+msgstr ""
+
+#: keystone/common/cms.py:26
+#, python-format
+msgid "Verify error: %s"
+msgstr ""
+
+#: keystone/common/cms.py:118
+msgid ""
+"Signing error: Unable to load certificate - ensure you've configured PKI "
+"with 'keystone-manage pki_setup'"
+msgstr ""
+
+#: keystone/common/cms.py:122
+#, python-format
+msgid "Signing error: %s"
+msgstr ""
+
+#: keystone/common/config.py:89
+#, python-format
+msgid "Unable to locate specified logging config file: %s"
+msgstr ""
+
+#: keystone/common/config.py:107
+msgid "Invalid syslog facility"
+msgstr ""
+
+#: keystone/common/controller.py:18
+#, python-format
+msgid "RBAC: Authorizing %(action)s(%(kwargs)s)"
+msgstr ""
+
+#: keystone/common/controller.py:25
+msgid "RBAC: Invalid token"
+msgstr ""
+
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
+msgid "RBAC: Invalid user"
+msgstr ""
+
+#: keystone/common/controller.py:45
+msgid "RBAC: Proceeding without project"
+msgstr ""
+
+#: keystone/common/controller.py:65
+msgid "RBAC: Proceeding without tenant"
+msgstr ""
+
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
+msgid "RBAC: Bypassing authorization"
+msgstr ""
+
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
+msgid "RBAC: Authorization granted"
+msgstr ""
+
+#: keystone/common/controller.py:134
+#, python-format
+msgid "RBAC: Adding query filter params (%s)"
+msgstr ""
+
+#: keystone/common/controller.py:322
+msgid "Invalid token in normalize_domain_id"
+msgstr ""
+
+#: keystone/common/utils.py:233
+msgid ""
+"Error setting up the debug environment. Verify that the option --debug-"
+"url has the format <host>:<port> and that a debugger processes is "
+"listening on that port."
+msgstr ""
+
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
+#, python-format
+msgid "arg_dict: %s"
+msgstr ""
+
+#: keystone/common/wsgi.py:243
+#, python-format
+msgid "Authorization failed. %(exception)s from %(remote_addr)s"
+msgstr ""
+
+#: keystone/common/wsgi.py:487
+msgid "The resource could not be found."
+msgstr ""
+
+#: keystone/common/environment/__init__.py:37
+#, python-format
+msgid "Environment configured as: %s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:51
+#, python-format
+msgid "Starting %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:113
+msgid "Server error"
+msgstr ""
+
+#: keystone/common/ldap/core.py:79
+#, python-format
+msgid "Invalid LDAP deref option: %s. Choose one of: "
+msgstr ""
+
+#: keystone/common/ldap/core.py:87
+#, python-format
+msgid "Invalid LDAP TLS certs option: %(option). Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:99
+#, python-format
+msgid "Invalid LDAP scope: %(scope)s. Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:189
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%s\". Format must be "
+"<ldap_attribute>:<keystone_attribute>"
+msgstr ""
+
+#: keystone/common/ldap/core.py:195
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%(item)s\". Value "
+"\"%(attr_map)s\" must use one of %(keys)s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:279 keystone/identity/backends/kvs.py:177
+#: keystone/identity/backends/kvs.py:205
+#, python-format
+msgid "Duplicate name, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:289 keystone/identity/backends/kvs.py:170
+#, python-format
+msgid "Duplicate ID, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:294
+#, python-format
+msgid "LDAP %s create"
+msgstr ""
+
+#: keystone/common/ldap/core.py:372
+#, python-format
+msgid "LDAP %s update"
+msgstr ""
+
+#: keystone/common/ldap/core.py:405
+#, python-format
+msgid "LDAP %s delete"
+msgstr ""
+
+#: keystone/common/ldap/core.py:430
+#, python-format
+msgid "LDAP init: url=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:431
+#, python-format
+msgid ""
+"LDAP init: use_tls=%(use_tls)s\n"
+"tls_cacertfile=%(tls_cacertfile)s\n"
+"tls_cacertdir=%(tls_cacertdir)s\n"
+"tls_req_cert=%(tls_req_cert)s\n"
+"tls_avail=%(tls_avail)s\n"
+msgstr ""
+
+#: keystone/common/ldap/core.py:450
+msgid "Invalid TLS / LDAPS combination"
+msgstr ""
+
+#: keystone/common/ldap/core.py:454
+#, python-format
+msgid "Invalid LDAP TLS_AVAIL option: %s. TLS not available"
+msgstr ""
+
+#: keystone/common/ldap/core.py:464
+#, python-format
+msgid "tls_cacertfile %s not found or is not a file"
+msgstr ""
+
+#: keystone/common/ldap/core.py:476
+#, python-format
+msgid "tls_cacertdir %s not found or is not a directory"
+msgstr ""
+
+#: keystone/common/ldap/core.py:483
+#, python-format
+msgid "LDAP TLS: invalid TLS_REQUIRE_CERT Option=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:497
+#, python-format
+msgid "LDAP bind: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:508
+#, python-format
+msgid "LDAP add: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:514
+#, python-format
+msgid ""
+"LDAP search: dn=%(dn)s, scope=%(scope)s, query=%(query)s, "
+"attrs=%(attrlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:567
+msgid ""
+"LDAP Server does not support paging. Disable paging in keystone.conf to "
+"avoid this message."
+msgstr ""
+
+#: keystone/common/ldap/core.py:584
+#, python-format
+msgid "LDAP modify: dn=%(dn)s, modlist=%(modlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:590
+#, python-format
+msgid "LDAP delete: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:595
+#, python-format
+msgid "LDAP delete_ext: dn=%(dn)s, serverctrls=%(serverctrls)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:146
+#, python-format
+msgid "FakeLdap initialize url=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:156
+#, python-format
+msgid "FakeLdap bind dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:163
+#, python-format
+msgid "FakeLdap bind fail: dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:170
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:175
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s does not match"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:190
+#, python-format
+msgid "FakeLdap add item: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:193
+#, python-format
+msgid "FakeLdap add item failed: dn=%s is already in store."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:207 keystone/common/ldap/fakeldap.py:221
+#, python-format
+msgid "FakeLdap delete item: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:211 keystone/common/ldap/fakeldap.py:225
+#, python-format
+msgid "FakeLdap delete item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:240
+#, python-format
+msgid "FakeLdap modify item: dn=%(dn)s attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:245
+#, python-format
+msgid "FakeLdap modify item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:262
+#, python-format
+msgid "FakeLdap modify item failed: item has no attribute \"%s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:273
+#, python-format
+msgid ""
+"FakeLdap modify item failed: item has no attribute \"%(k)s\" with value "
+"\"%(v)s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:279
+#, python-format
+msgid "FakeLdap modify item failed: unknown command %s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:281
+#, python-format
+msgid "modify_s action %s not implemented"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:300
+#, python-format
+msgid "FakeLdap search at dn=%(dn)s scope=%(scope)s query=%(query)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:306
+msgid "FakeLdap search fail: dn not found for SCOPE_BASE"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:320
+#, python-format
+msgid "Search scope %s not implemented."
+msgstr ""
+
+#: keystone/common/sql/core.py:119
+msgid "Global engine callback raised."
+msgstr ""
+
+#: keystone/common/sql/core.py:233
+#, python-format
+msgid "Got mysql server has gone away: %s"
+msgstr ""
+
+#: keystone/common/sql/legacy.py:188
+#, python-format
+msgid "Cannot migrate EC2 credential: %s"
+msgstr ""
+
+#: keystone/common/sql/migration.py:47
+msgid "version should be an integer"
+msgstr ""
+
+#: keystone/common/sql/nova.py:65
+#, python-format
+msgid "Create tenant %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:82
+#, python-format
+msgid "Create user %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:91
+#, python-format
+msgid "Add user %(user_id)s to tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:100
+#, python-format
+msgid "Ignoring existing role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:107
+#, python-format
+msgid "Create role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:117
+#, python-format
+msgid "Assign role %(role_id)s to user %(user_id)s on tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:136
+#, python-format
+msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/identity/controllers.py:952
+#, python-format
+msgid ""
+"Group %(group)s not found for role-assignment - %(target)s with Role: "
+"%(role)s"
+msgstr ""
+
+#: keystone/identity/backends/kvs.py:126 keystone/identity/backends/kvs.py:135
+msgid "User not found in group"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:189
+#, python-format
+msgid ""
+"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
+"be removed from the group. The user will be ignored."
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:334
+msgid "Changing Name not supported by LDAP"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:347
+#, python-format
+msgid "User %(user_id)s is already a member of group %(group_id)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:394
+#, python-format
+msgid "Failed to understand rule %(rule)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:404
+#, python-format
+msgid "No handler for matches of kind %s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:679
+#, python-format
+msgid "Failed to understand rule %(rule)r"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
+#: keystone/policy/backends/rules.py:93
+#, python-format
+msgid "enforce %(action)s: %(credentials)s"
+msgstr ""
+
+#: keystone/token/controllers.py:378
+#, python-format
+msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
+msgstr ""
+
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
+msgid "Token does not belong to specified tenant."
+msgstr ""
+
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
+msgstr ""
+
+#: keystone/token/backends/memcache.py:144
+#, python-format
+msgid ""
+"Successful set of token-index-list for user-key \"%(user_key)s\", "
+"#%(count)d records"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:154
+#, python-format
+msgid ""
+"Failed to set token-index-list for user-key \"%(user_key)s\". Attempt "
+"%(cas_retry)d of %(cas_retry_max)d"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:163
+msgid "Unable to add token user list"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:172
+msgid "Unable to add token to revocation list."
+msgstr ""
+
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
diff --git a/keystone/locale/en_GB/LC_MESSAGES/keystone.po b/keystone/locale/en_GB/LC_MESSAGES/keystone.po
new file mode 100644
index 00000000..73b4dbef
--- /dev/null
+++ b/keystone/locale/en_GB/LC_MESSAGES/keystone.po
@@ -0,0 +1,847 @@
+# English (United Kingdom) translations for keystone.
+# Copyright (C) 2013 ORGANIZATION
+# This file is distributed under the same license as the keystone project.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Keystone\n"
+"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
+"PO-Revision-Date: 2013-07-29 22:01+0000\n"
+"Last-Translator: openstackjenkins <jenkins@openstack.org>\n"
+"Language-Team: English (United Kingdom) "
+"(http://www.transifex.com/projects/p/openstack/language/en_GB/)\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 1.3\n"
+
+#: keystone/clean.py:23
+#, python-format
+msgid "%s cannot be empty."
+msgstr ""
+
+#: keystone/clean.py:25
+#, python-format
+msgid "%(property_name)s cannot be less than %(min_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:29
+#, python-format
+msgid "%(property_name)s should not be greater than %(max_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:36
+#, python-format
+msgid "%(property_name)s is not a %(display_expected_type)s"
+msgstr ""
+
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
+#, python-format
+msgid "Failed to checkout %s"
+msgstr ""
+
+#: keystone/assignment/core.py:529
+#, python-format
+msgid "Expected dict or list: %s"
+msgstr ""
+
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
+#, python-format
+msgid "Cannot remove role that has not been granted, %s"
+msgstr ""
+
+#: keystone/assignment/backends/ldap.py:418
+#, python-format
+msgid "Role %s not found"
+msgstr ""
+
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
+#, python-format
+msgid "Project is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
+#, python-format
+msgid "Domain is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
+#, python-format
+msgid "User is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:262
+msgid "Scoping to both domain and project is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:265
+msgid "Scoping to both domain and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:268
+msgid "Scoping to both project and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:353
+msgid "User not found"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
+msgstr ""
+
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
+msgstr ""
+
+#: keystone/catalog/core.py:38
+#, python-format
+msgid "Malformed endpoint %(url)s - unknown key %(keyerror)s"
+msgstr ""
+
+#: keystone/catalog/core.py:43
+#, python-format
+msgid ""
+"Malformed endpoint %(url)s - unknown key %(keyerror)s(are you missing "
+"brackets ?)"
+msgstr ""
+
+#: keystone/catalog/core.py:49
+#, python-format
+msgid ""
+"Malformed endpoint %s - incomplete format (are you "
+"missing a type notifier ?)"
+msgstr ""
+
+#: keystone/catalog/backends/templated.py:109
+#, python-format
+msgid "Unable to open template file %s"
+msgstr ""
+
+#: keystone/common/cms.py:26
+#, python-format
+msgid "Verify error: %s"
+msgstr ""
+
+#: keystone/common/cms.py:118
+msgid ""
+"Signing error: Unable to load certificate - ensure you've configured PKI "
+"with 'keystone-manage pki_setup'"
+msgstr ""
+
+#: keystone/common/cms.py:122
+#, python-format
+msgid "Signing error: %s"
+msgstr ""
+
+#: keystone/common/config.py:89
+#, python-format
+msgid "Unable to locate specified logging config file: %s"
+msgstr ""
+
+#: keystone/common/config.py:107
+msgid "Invalid syslog facility"
+msgstr ""
+
+#: keystone/common/controller.py:18
+#, python-format
+msgid "RBAC: Authorizing %(action)s(%(kwargs)s)"
+msgstr ""
+
+#: keystone/common/controller.py:25
+msgid "RBAC: Invalid token"
+msgstr ""
+
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
+msgid "RBAC: Invalid user"
+msgstr ""
+
+#: keystone/common/controller.py:45
+msgid "RBAC: Proceeding without project"
+msgstr ""
+
+#: keystone/common/controller.py:65
+msgid "RBAC: Proceeding without tenant"
+msgstr ""
+
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
+msgid "RBAC: Bypassing authorization"
+msgstr ""
+
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
+msgid "RBAC: Authorization granted"
+msgstr ""
+
+#: keystone/common/controller.py:134
+#, python-format
+msgid "RBAC: Adding query filter params (%s)"
+msgstr ""
+
+#: keystone/common/controller.py:322
+msgid "Invalid token in normalize_domain_id"
+msgstr ""
+
+#: keystone/common/utils.py:233
+msgid ""
+"Error setting up the debug environment. Verify that the option --debug-"
+"url has the format <host>:<port> and that a debugger processes is "
+"listening on that port."
+msgstr ""
+
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
+#, python-format
+msgid "arg_dict: %s"
+msgstr ""
+
+#: keystone/common/wsgi.py:243
+#, python-format
+msgid "Authorization failed. %(exception)s from %(remote_addr)s"
+msgstr ""
+
+#: keystone/common/wsgi.py:487
+msgid "The resource could not be found."
+msgstr ""
+
+#: keystone/common/environment/__init__.py:37
+#, python-format
+msgid "Environment configured as: %s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:51
+#, python-format
+msgid "Starting %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:113
+msgid "Server error"
+msgstr ""
+
+#: keystone/common/ldap/core.py:79
+#, python-format
+msgid "Invalid LDAP deref option: %s. Choose one of: "
+msgstr ""
+
+#: keystone/common/ldap/core.py:87
+#, python-format
+msgid "Invalid LDAP TLS certs option: %(option). Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:99
+#, python-format
+msgid "Invalid LDAP scope: %(scope)s. Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:189
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%s\". Format must be "
+"<ldap_attribute>:<keystone_attribute>"
+msgstr ""
+
+#: keystone/common/ldap/core.py:195
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%(item)s\". Value "
+"\"%(attr_map)s\" must use one of %(keys)s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:279 keystone/identity/backends/kvs.py:177
+#: keystone/identity/backends/kvs.py:205
+#, python-format
+msgid "Duplicate name, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:289 keystone/identity/backends/kvs.py:170
+#, python-format
+msgid "Duplicate ID, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:294
+#, python-format
+msgid "LDAP %s create"
+msgstr ""
+
+#: keystone/common/ldap/core.py:372
+#, python-format
+msgid "LDAP %s update"
+msgstr ""
+
+#: keystone/common/ldap/core.py:405
+#, python-format
+msgid "LDAP %s delete"
+msgstr ""
+
+#: keystone/common/ldap/core.py:430
+#, python-format
+msgid "LDAP init: url=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:431
+#, python-format
+msgid ""
+"LDAP init: use_tls=%(use_tls)s\n"
+"tls_cacertfile=%(tls_cacertfile)s\n"
+"tls_cacertdir=%(tls_cacertdir)s\n"
+"tls_req_cert=%(tls_req_cert)s\n"
+"tls_avail=%(tls_avail)s\n"
+msgstr ""
+
+#: keystone/common/ldap/core.py:450
+msgid "Invalid TLS / LDAPS combination"
+msgstr ""
+
+#: keystone/common/ldap/core.py:454
+#, python-format
+msgid "Invalid LDAP TLS_AVAIL option: %s. TLS not available"
+msgstr ""
+
+#: keystone/common/ldap/core.py:464
+#, python-format
+msgid "tls_cacertfile %s not found or is not a file"
+msgstr ""
+
+#: keystone/common/ldap/core.py:476
+#, python-format
+msgid "tls_cacertdir %s not found or is not a directory"
+msgstr ""
+
+#: keystone/common/ldap/core.py:483
+#, python-format
+msgid "LDAP TLS: invalid TLS_REQUIRE_CERT Option=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:497
+#, python-format
+msgid "LDAP bind: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:508
+#, python-format
+msgid "LDAP add: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:514
+#, python-format
+msgid ""
+"LDAP search: dn=%(dn)s, scope=%(scope)s, query=%(query)s, "
+"attrs=%(attrlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:567
+msgid ""
+"LDAP Server does not support paging. Disable paging in keystone.conf to "
+"avoid this message."
+msgstr ""
+
+#: keystone/common/ldap/core.py:584
+#, python-format
+msgid "LDAP modify: dn=%(dn)s, modlist=%(modlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:590
+#, python-format
+msgid "LDAP delete: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:595
+#, python-format
+msgid "LDAP delete_ext: dn=%(dn)s, serverctrls=%(serverctrls)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:146
+#, python-format
+msgid "FakeLdap initialize url=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:156
+#, python-format
+msgid "FakeLdap bind dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:163
+#, python-format
+msgid "FakeLdap bind fail: dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:170
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:175
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s does not match"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:190
+#, python-format
+msgid "FakeLdap add item: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:193
+#, python-format
+msgid "FakeLdap add item failed: dn=%s is already in store."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:207 keystone/common/ldap/fakeldap.py:221
+#, python-format
+msgid "FakeLdap delete item: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:211 keystone/common/ldap/fakeldap.py:225
+#, python-format
+msgid "FakeLdap delete item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:240
+#, python-format
+msgid "FakeLdap modify item: dn=%(dn)s attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:245
+#, python-format
+msgid "FakeLdap modify item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:262
+#, python-format
+msgid "FakeLdap modify item failed: item has no attribute \"%s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:273
+#, python-format
+msgid ""
+"FakeLdap modify item failed: item has no attribute \"%(k)s\" with value "
+"\"%(v)s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:279
+#, python-format
+msgid "FakeLdap modify item failed: unknown command %s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:281
+#, python-format
+msgid "modify_s action %s not implemented"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:300
+#, python-format
+msgid "FakeLdap search at dn=%(dn)s scope=%(scope)s query=%(query)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:306
+msgid "FakeLdap search fail: dn not found for SCOPE_BASE"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:320
+#, python-format
+msgid "Search scope %s not implemented."
+msgstr ""
+
+#: keystone/common/sql/core.py:119
+msgid "Global engine callback raised."
+msgstr ""
+
+#: keystone/common/sql/core.py:233
+#, python-format
+msgid "Got mysql server has gone away: %s"
+msgstr ""
+
+#: keystone/common/sql/legacy.py:188
+#, python-format
+msgid "Cannot migrate EC2 credential: %s"
+msgstr ""
+
+#: keystone/common/sql/migration.py:47
+msgid "version should be an integer"
+msgstr ""
+
+#: keystone/common/sql/nova.py:65
+#, python-format
+msgid "Create tenant %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:82
+#, python-format
+msgid "Create user %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:91
+#, python-format
+msgid "Add user %(user_id)s to tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:100
+#, python-format
+msgid "Ignoring existing role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:107
+#, python-format
+msgid "Create role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:117
+#, python-format
+msgid "Assign role %(role_id)s to user %(user_id)s on tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:136
+#, python-format
+msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/identity/controllers.py:952
+#, python-format
+msgid ""
+"Group %(group)s not found for role-assignment - %(target)s with Role: "
+"%(role)s"
+msgstr ""
+
+#: keystone/identity/backends/kvs.py:126 keystone/identity/backends/kvs.py:135
+msgid "User not found in group"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:189
+#, python-format
+msgid ""
+"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
+"be removed from the group. The user will be ignored."
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:334
+msgid "Changing Name not supported by LDAP"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:347
+#, python-format
+msgid "User %(user_id)s is already a member of group %(group_id)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:394
+#, python-format
+msgid "Failed to understand rule %(rule)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:404
+#, python-format
+msgid "No handler for matches of kind %s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:679
+#, python-format
+msgid "Failed to understand rule %(rule)r"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
+#: keystone/policy/backends/rules.py:93
+#, python-format
+msgid "enforce %(action)s: %(credentials)s"
+msgstr ""
+
+#: keystone/token/controllers.py:378
+#, python-format
+msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
+msgstr ""
+
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
+msgid "Token does not belong to specified tenant."
+msgstr ""
+
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
+msgstr ""
+
+#: keystone/token/backends/memcache.py:144
+#, python-format
+msgid ""
+"Successful set of token-index-list for user-key \"%(user_key)s\", "
+"#%(count)d records"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:154
+#, python-format
+msgid ""
+"Failed to set token-index-list for user-key \"%(user_key)s\". Attempt "
+"%(cas_retry)d of %(cas_retry_max)d"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:163
+msgid "Unable to add token user list"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:172
+msgid "Unable to add token to revocation list."
+msgstr ""
+
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
diff --git a/keystone/locale/en_US/LC_MESSAGES/keystone.po b/keystone/locale/en_US/LC_MESSAGES/keystone.po
new file mode 100644
index 00000000..c440b653
--- /dev/null
+++ b/keystone/locale/en_US/LC_MESSAGES/keystone.po
@@ -0,0 +1,847 @@
+# English (United States) translations for keystone.
+# Copyright (C) 2013 ORGANIZATION
+# This file is distributed under the same license as the keystone project.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Keystone\n"
+"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
+"PO-Revision-Date: 2013-07-29 22:01+0000\n"
+"Last-Translator: openstackjenkins <jenkins@openstack.org>\n"
+"Language-Team: English (United States) "
+"(http://www.transifex.com/projects/p/openstack/language/en_US/)\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 1.3\n"
+
+#: keystone/clean.py:23
+#, python-format
+msgid "%s cannot be empty."
+msgstr ""
+
+#: keystone/clean.py:25
+#, python-format
+msgid "%(property_name)s cannot be less than %(min_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:29
+#, python-format
+msgid "%(property_name)s should not be greater than %(max_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:36
+#, python-format
+msgid "%(property_name)s is not a %(display_expected_type)s"
+msgstr ""
+
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
+#, python-format
+msgid "Failed to checkout %s"
+msgstr ""
+
+#: keystone/assignment/core.py:529
+#, python-format
+msgid "Expected dict or list: %s"
+msgstr ""
+
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
+#, python-format
+msgid "Cannot remove role that has not been granted, %s"
+msgstr ""
+
+#: keystone/assignment/backends/ldap.py:418
+#, python-format
+msgid "Role %s not found"
+msgstr ""
+
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
+#, python-format
+msgid "Project is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
+#, python-format
+msgid "Domain is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
+#, python-format
+msgid "User is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:262
+msgid "Scoping to both domain and project is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:265
+msgid "Scoping to both domain and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:268
+msgid "Scoping to both project and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:353
+msgid "User not found"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
+msgstr ""
+
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
+msgstr ""
+
+#: keystone/catalog/core.py:38
+#, python-format
+msgid "Malformed endpoint %(url)s - unknown key %(keyerror)s"
+msgstr ""
+
+#: keystone/catalog/core.py:43
+#, python-format
+msgid ""
+"Malformed endpoint %(url)s - unknown key %(keyerror)s(are you missing "
+"brackets ?)"
+msgstr ""
+
+#: keystone/catalog/core.py:49
+#, python-format
+msgid ""
+"Malformed endpoint %s - incomplete format (are you "
+"missing a type notifier ?)"
+msgstr ""
+
+#: keystone/catalog/backends/templated.py:109
+#, python-format
+msgid "Unable to open template file %s"
+msgstr ""
+
+#: keystone/common/cms.py:26
+#, python-format
+msgid "Verify error: %s"
+msgstr ""
+
+#: keystone/common/cms.py:118
+msgid ""
+"Signing error: Unable to load certificate - ensure you've configured PKI "
+"with 'keystone-manage pki_setup'"
+msgstr ""
+
+#: keystone/common/cms.py:122
+#, python-format
+msgid "Signing error: %s"
+msgstr ""
+
+#: keystone/common/config.py:89
+#, python-format
+msgid "Unable to locate specified logging config file: %s"
+msgstr ""
+
+#: keystone/common/config.py:107
+msgid "Invalid syslog facility"
+msgstr ""
+
+#: keystone/common/controller.py:18
+#, python-format
+msgid "RBAC: Authorizing %(action)s(%(kwargs)s)"
+msgstr ""
+
+#: keystone/common/controller.py:25
+msgid "RBAC: Invalid token"
+msgstr ""
+
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
+msgid "RBAC: Invalid user"
+msgstr ""
+
+#: keystone/common/controller.py:45
+msgid "RBAC: Proceeding without project"
+msgstr ""
+
+#: keystone/common/controller.py:65
+msgid "RBAC: Proceeding without tenant"
+msgstr ""
+
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
+msgid "RBAC: Bypassing authorization"
+msgstr ""
+
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
+msgid "RBAC: Authorization granted"
+msgstr ""
+
+#: keystone/common/controller.py:134
+#, python-format
+msgid "RBAC: Adding query filter params (%s)"
+msgstr ""
+
+#: keystone/common/controller.py:322
+msgid "Invalid token in normalize_domain_id"
+msgstr ""
+
+#: keystone/common/utils.py:233
+msgid ""
+"Error setting up the debug environment. Verify that the option --debug-"
+"url has the format <host>:<port> and that a debugger processes is "
+"listening on that port."
+msgstr ""
+
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
+#, python-format
+msgid "arg_dict: %s"
+msgstr ""
+
+#: keystone/common/wsgi.py:243
+#, python-format
+msgid "Authorization failed. %(exception)s from %(remote_addr)s"
+msgstr ""
+
+#: keystone/common/wsgi.py:487
+msgid "The resource could not be found."
+msgstr ""
+
+#: keystone/common/environment/__init__.py:37
+#, python-format
+msgid "Environment configured as: %s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:51
+#, python-format
+msgid "Starting %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:113
+msgid "Server error"
+msgstr ""
+
+#: keystone/common/ldap/core.py:79
+#, python-format
+msgid "Invalid LDAP deref option: %s. Choose one of: "
+msgstr ""
+
+#: keystone/common/ldap/core.py:87
+#, python-format
+msgid "Invalid LDAP TLS certs option: %(option). Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:99
+#, python-format
+msgid "Invalid LDAP scope: %(scope)s. Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:189
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%s\". Format must be "
+"<ldap_attribute>:<keystone_attribute>"
+msgstr ""
+
+#: keystone/common/ldap/core.py:195
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%(item)s\". Value "
+"\"%(attr_map)s\" must use one of %(keys)s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:279 keystone/identity/backends/kvs.py:177
+#: keystone/identity/backends/kvs.py:205
+#, python-format
+msgid "Duplicate name, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:289 keystone/identity/backends/kvs.py:170
+#, python-format
+msgid "Duplicate ID, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:294
+#, python-format
+msgid "LDAP %s create"
+msgstr ""
+
+#: keystone/common/ldap/core.py:372
+#, python-format
+msgid "LDAP %s update"
+msgstr ""
+
+#: keystone/common/ldap/core.py:405
+#, python-format
+msgid "LDAP %s delete"
+msgstr ""
+
+#: keystone/common/ldap/core.py:430
+#, python-format
+msgid "LDAP init: url=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:431
+#, python-format
+msgid ""
+"LDAP init: use_tls=%(use_tls)s\n"
+"tls_cacertfile=%(tls_cacertfile)s\n"
+"tls_cacertdir=%(tls_cacertdir)s\n"
+"tls_req_cert=%(tls_req_cert)s\n"
+"tls_avail=%(tls_avail)s\n"
+msgstr ""
+
+#: keystone/common/ldap/core.py:450
+msgid "Invalid TLS / LDAPS combination"
+msgstr ""
+
+#: keystone/common/ldap/core.py:454
+#, python-format
+msgid "Invalid LDAP TLS_AVAIL option: %s. TLS not available"
+msgstr ""
+
+#: keystone/common/ldap/core.py:464
+#, python-format
+msgid "tls_cacertfile %s not found or is not a file"
+msgstr ""
+
+#: keystone/common/ldap/core.py:476
+#, python-format
+msgid "tls_cacertdir %s not found or is not a directory"
+msgstr ""
+
+#: keystone/common/ldap/core.py:483
+#, python-format
+msgid "LDAP TLS: invalid TLS_REQUIRE_CERT Option=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:497
+#, python-format
+msgid "LDAP bind: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:508
+#, python-format
+msgid "LDAP add: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:514
+#, python-format
+msgid ""
+"LDAP search: dn=%(dn)s, scope=%(scope)s, query=%(query)s, "
+"attrs=%(attrlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:567
+msgid ""
+"LDAP Server does not support paging. Disable paging in keystone.conf to "
+"avoid this message."
+msgstr ""
+
+#: keystone/common/ldap/core.py:584
+#, python-format
+msgid "LDAP modify: dn=%(dn)s, modlist=%(modlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:590
+#, python-format
+msgid "LDAP delete: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:595
+#, python-format
+msgid "LDAP delete_ext: dn=%(dn)s, serverctrls=%(serverctrls)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:146
+#, python-format
+msgid "FakeLdap initialize url=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:156
+#, python-format
+msgid "FakeLdap bind dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:163
+#, python-format
+msgid "FakeLdap bind fail: dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:170
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:175
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s does not match"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:190
+#, python-format
+msgid "FakeLdap add item: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:193
+#, python-format
+msgid "FakeLdap add item failed: dn=%s is already in store."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:207 keystone/common/ldap/fakeldap.py:221
+#, python-format
+msgid "FakeLdap delete item: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:211 keystone/common/ldap/fakeldap.py:225
+#, python-format
+msgid "FakeLdap delete item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:240
+#, python-format
+msgid "FakeLdap modify item: dn=%(dn)s attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:245
+#, python-format
+msgid "FakeLdap modify item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:262
+#, python-format
+msgid "FakeLdap modify item failed: item has no attribute \"%s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:273
+#, python-format
+msgid ""
+"FakeLdap modify item failed: item has no attribute \"%(k)s\" with value "
+"\"%(v)s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:279
+#, python-format
+msgid "FakeLdap modify item failed: unknown command %s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:281
+#, python-format
+msgid "modify_s action %s not implemented"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:300
+#, python-format
+msgid "FakeLdap search at dn=%(dn)s scope=%(scope)s query=%(query)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:306
+msgid "FakeLdap search fail: dn not found for SCOPE_BASE"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:320
+#, python-format
+msgid "Search scope %s not implemented."
+msgstr ""
+
+#: keystone/common/sql/core.py:119
+msgid "Global engine callback raised."
+msgstr ""
+
+#: keystone/common/sql/core.py:233
+#, python-format
+msgid "Got mysql server has gone away: %s"
+msgstr ""
+
+#: keystone/common/sql/legacy.py:188
+#, python-format
+msgid "Cannot migrate EC2 credential: %s"
+msgstr ""
+
+#: keystone/common/sql/migration.py:47
+msgid "version should be an integer"
+msgstr ""
+
+#: keystone/common/sql/nova.py:65
+#, python-format
+msgid "Create tenant %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:82
+#, python-format
+msgid "Create user %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:91
+#, python-format
+msgid "Add user %(user_id)s to tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:100
+#, python-format
+msgid "Ignoring existing role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:107
+#, python-format
+msgid "Create role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:117
+#, python-format
+msgid "Assign role %(role_id)s to user %(user_id)s on tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:136
+#, python-format
+msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/identity/controllers.py:952
+#, python-format
+msgid ""
+"Group %(group)s not found for role-assignment - %(target)s with Role: "
+"%(role)s"
+msgstr ""
+
+#: keystone/identity/backends/kvs.py:126 keystone/identity/backends/kvs.py:135
+msgid "User not found in group"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:189
+#, python-format
+msgid ""
+"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
+"be removed from the group. The user will be ignored."
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:334
+msgid "Changing Name not supported by LDAP"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:347
+#, python-format
+msgid "User %(user_id)s is already a member of group %(group_id)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:394
+#, python-format
+msgid "Failed to understand rule %(rule)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:404
+#, python-format
+msgid "No handler for matches of kind %s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:679
+#, python-format
+msgid "Failed to understand rule %(rule)r"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
+#: keystone/policy/backends/rules.py:93
+#, python-format
+msgid "enforce %(action)s: %(credentials)s"
+msgstr ""
+
+#: keystone/token/controllers.py:378
+#, python-format
+msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
+msgstr ""
+
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
+msgid "Token does not belong to specified tenant."
+msgstr ""
+
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
+msgstr ""
+
+#: keystone/token/backends/memcache.py:144
+#, python-format
+msgid ""
+"Successful set of token-index-list for user-key \"%(user_key)s\", "
+"#%(count)d records"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:154
+#, python-format
+msgid ""
+"Failed to set token-index-list for user-key \"%(user_key)s\". Attempt "
+"%(cas_retry)d of %(cas_retry_max)d"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:163
+msgid "Unable to add token user list"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:172
+msgid "Unable to add token to revocation list."
+msgstr ""
+
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
diff --git a/keystone/locale/es/LC_MESSAGES/keystone.po b/keystone/locale/es/LC_MESSAGES/keystone.po
index 7f1d56a4..b97acbc8 100644
--- a/keystone/locale/es/LC_MESSAGES/keystone.po
+++ b/keystone/locale/es/LC_MESSAGES/keystone.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Keystone\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
-"POT-Creation-Date: 2013-07-11 17:05+0000\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
"PO-Revision-Date: 2013-05-21 09:13+0000\n"
"Last-Translator: daisy.ycguo <daisy.ycguo@gmail.com>\n"
"Language-Team: Spanish "
@@ -16,7 +16,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 0.9.6\n"
+"Generated-By: Babel 1.3\n"
#: keystone/clean.py:23
#, python-format
@@ -38,81 +38,225 @@ msgstr "%(property_name)s no debe tener más de %(max_length)s caracteres."
msgid "%(property_name)s is not a %(display_expected_type)s"
msgstr ""
-#: keystone/test.py:106
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
#, python-format
msgid "Failed to checkout %s"
msgstr "No se ha podido extraer %s"
-#: keystone/assignment/backends/ldap.py:110
+#: keystone/assignment/core.py:529
#, python-format
msgid "Expected dict or list: %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:456
-#: keystone/identity/backends/ldap.py:433
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
+#, python-format
+msgid "Cannot remove role that has not been granted, %s"
+msgstr "No se puede eliminar un rol que no se ha otorgado, %s"
+
+#: keystone/assignment/backends/ldap.py:418
#, python-format
msgid "Role %s not found"
msgstr "No se ha encontrado el rol %s"
-#: keystone/assignment/backends/sql.py:244
-#, python-format
-msgid "Cannot remove role that has not been granted, %s"
-msgstr "No se puede eliminar un rol que no se ha otorgado, %s"
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
-#: keystone/auth/controllers.py:72
+#: keystone/auth/controllers.py:71
#, python-format
msgid "Project is disabled: %s"
msgstr "El proyecto está inhabilitado: %s"
-#: keystone/auth/controllers.py:78 keystone/auth/plugins/password.py:38
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
#, python-format
msgid "Domain is disabled: %s"
msgstr "El dominio está inhabilitado: %s"
-#: keystone/auth/controllers.py:84 keystone/auth/plugins/password.py:44
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
#, python-format
msgid "User is disabled: %s"
msgstr "El usuario está inhabilitado: %s"
-#: keystone/auth/controllers.py:259
+#: keystone/auth/controllers.py:262
msgid "Scoping to both domain and project is not allowed"
msgstr "El ámbito para dominio y proyecto no está permitido"
-#: keystone/auth/controllers.py:262
+#: keystone/auth/controllers.py:265
msgid "Scoping to both domain and trust is not allowed"
msgstr "El ámbito para dominio y confianza no está permitido"
-#: keystone/auth/controllers.py:265
+#: keystone/auth/controllers.py:268
msgid "Scoping to both project and trust is not allowed"
msgstr "El ámbito para proyecto y confianza no está permitido"
-#: keystone/auth/controllers.py:325
-#, python-format
-msgid "Unable to lookup user %s"
-msgstr "No se ha podido buscar el usuario %s"
-
-#: keystone/auth/controllers.py:355
+#: keystone/auth/controllers.py:353
msgid "User not found"
msgstr "Usuario no encontrado"
-#: keystone/auth/token_factory.py:79
-msgid "User have no access to project"
-msgstr "El usuario no tiene acceso al proyecto"
-
-#: keystone/auth/token_factory.py:94
-msgid "User have no access to domain"
-msgstr "El usuario no tiene acceso al dominio"
-
-#: keystone/auth/token_factory.py:311 keystone/token/controllers.py:119
-msgid "Unable to sign token."
-msgstr "No se ha podido firmar la señal."
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
+msgstr ""
-#: keystone/auth/token_factory.py:314 keystone/token/controllers.py:122
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
#, python-format
-msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+msgid "Unable to lookup user %s"
+msgstr "No se ha podido buscar el usuario %s"
+
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
msgstr ""
-"Valor no válido para token_format: %s. Los valores permitidos son PKI o "
-"UUID."
#: keystone/catalog/core.py:38
#, python-format
@@ -182,32 +326,32 @@ msgstr ""
msgid "RBAC: Invalid token"
msgstr "RBAC: Señal no válida"
-#: keystone/common/controller.py:35 keystone/common/controller.py:56
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
msgid "RBAC: Invalid user"
msgstr "RBAC: Usuario no válido"
-#: keystone/common/controller.py:41
+#: keystone/common/controller.py:45
msgid "RBAC: Proceeding without project"
msgstr "RBAC: continuando sin proyecto"
-#: keystone/common/controller.py:61
+#: keystone/common/controller.py:65
msgid "RBAC: Proceeding without tenant"
msgstr "RBAC: Continuando sin arrendatario"
-#: keystone/common/controller.py:91 keystone/common/controller.py:142
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
msgid "RBAC: Bypassing authorization"
msgstr "RBAC: Eludiendo autorización"
-#: keystone/common/controller.py:100 keystone/common/controller.py:140
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
msgid "RBAC: Authorization granted"
msgstr "RBAC: Autorización otorgada"
-#: keystone/common/controller.py:130
+#: keystone/common/controller.py:134
#, python-format
msgid "RBAC: Adding query filter params (%s)"
msgstr "RBAC: añadiendo parámetros de filtro de consultas (%s)"
-#: keystone/common/controller.py:318
+#: keystone/common/controller.py:322
msgid "Invalid token in normalize_domain_id"
msgstr "Señal no válida en normalize_domain_id"
@@ -218,17 +362,48 @@ msgid ""
"listening on that port."
msgstr ""
-#: keystone/common/wsgi.py:162
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
#, python-format
msgid "arg_dict: %s"
msgstr "arg_dict: %s"
-#: keystone/common/wsgi.py:188
+#: keystone/common/wsgi.py:243
#, fuzzy, python-format
msgid "Authorization failed. %(exception)s from %(remote_addr)s"
msgstr "Ha fallado la autorización. %s de %s"
-#: keystone/common/wsgi.py:431
+#: keystone/common/wsgi.py:487
msgid "The resource could not be found."
msgstr "El recurso no se ha podido encontrar."
@@ -482,11 +657,11 @@ msgstr ""
msgid "Search scope %s not implemented."
msgstr "Ámbito de búsqueda %s no implementado."
-#: keystone/common/sql/core.py:126
+#: keystone/common/sql/core.py:119
msgid "Global engine callback raised."
msgstr ""
-#: keystone/common/sql/core.py:240
+#: keystone/common/sql/core.py:233
#, python-format
msgid "Got mysql server has gone away: %s"
msgstr "Se ha notificado que mysql server ha desaparecido: %s"
@@ -535,7 +710,7 @@ msgstr "Asignar el rol %s al usuario %s en el arrendatario %s"
msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
msgstr "Creando credencial ec2 para el usuario %s y el arrendatario %s"
-#: keystone/identity/controllers.py:878
+#: keystone/identity/controllers.py:952
#, python-format
msgid ""
"Group %(group)s not found for role-assignment - %(target)s with Role: "
@@ -546,18 +721,18 @@ msgstr ""
msgid "User not found in group"
msgstr "Usuario no encontrado en grupo"
-#: keystone/identity/backends/ldap.py:192
+#: keystone/identity/backends/ldap.py:189
#, python-format
msgid ""
"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
"be removed from the group. The user will be ignored."
msgstr ""
-#: keystone/identity/backends/ldap.py:621
+#: keystone/identity/backends/ldap.py:334
msgid "Changing Name not supported by LDAP"
msgstr "LDAP no soporta el cambio de nombre"
-#: keystone/identity/backends/ldap.py:634
+#: keystone/identity/backends/ldap.py:347
#, fuzzy, python-format
msgid "User %(user_id)s is already a member of group %(group_id)s"
msgstr "El usuario %s ya es miembro del grupo %s"
@@ -577,27 +752,57 @@ msgstr "No hay manejador para coincidencias de clase %s"
msgid "Failed to understand rule %(rule)r"
msgstr "No se ha podido comprender la regla %(rule)r"
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
#: keystone/policy/backends/rules.py:93
#, python-format
msgid "enforce %(action)s: %(credentials)s"
msgstr ""
-#: keystone/token/controllers.py:396
+#: keystone/token/controllers.py:378
#, python-format
msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
msgstr ""
-#: keystone/token/controllers.py:413 keystone/token/controllers.py:416
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
msgid "Token does not belong to specified tenant."
msgstr "La señal no pertenece al arrendatario especificado."
-#: keystone/token/controllers.py:423
-msgid "Non-default domain is not supported"
-msgstr "El dominio no predeterminado no está soportado"
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
+msgstr ""
-#: keystone/token/controllers.py:431
-msgid "Domain scoped token is not supported"
-msgstr "La señal con ámbito de dominio no está soportada"
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
+msgstr ""
#: keystone/token/backends/memcache.py:144
#, python-format
@@ -621,3 +826,57 @@ msgstr ""
msgid "Unable to add token to revocation list."
msgstr "No se puede añadir señal a lista de revocación. "
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr "No se ha podido firmar la señal."
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr "El dominio no predeterminado no está soportado"
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr "La señal con ámbito de dominio no está soportada"
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
+#~ msgid "User have no access to project"
+#~ msgstr "El usuario no tiene acceso al proyecto"
+
+#~ msgid "User have no access to domain"
+#~ msgstr "El usuario no tiene acceso al dominio"
+
+#~ msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#~ msgstr ""
+#~ "Valor no válido para token_format: %s."
+#~ " Los valores permitidos son PKI o "
+#~ "UUID."
+
diff --git a/keystone/locale/fi_FI/LC_MESSAGES/keystone.po b/keystone/locale/fi_FI/LC_MESSAGES/keystone.po
index 1f8b79e2..cda26e08 100644
--- a/keystone/locale/fi_FI/LC_MESSAGES/keystone.po
+++ b/keystone/locale/fi_FI/LC_MESSAGES/keystone.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Keystone\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
-"POT-Creation-Date: 2013-07-11 17:05+0000\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
"PO-Revision-Date: 2013-05-17 16:06+0000\n"
"Last-Translator: openstackjenkins <jenkins@openstack.org>\n"
"Language-Team: Finnish (Finland) "
@@ -16,7 +16,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 0.9.6\n"
+"Generated-By: Babel 1.3\n"
#: keystone/clean.py:23
#, python-format
@@ -38,78 +38,224 @@ msgstr ""
msgid "%(property_name)s is not a %(display_expected_type)s"
msgstr ""
-#: keystone/test.py:106
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
#, python-format
msgid "Failed to checkout %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:110
+#: keystone/assignment/core.py:529
#, python-format
msgid "Expected dict or list: %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:456
-#: keystone/identity/backends/ldap.py:433
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
#, python-format
-msgid "Role %s not found"
+msgid "Cannot remove role that has not been granted, %s"
msgstr ""
-#: keystone/assignment/backends/sql.py:244
+#: keystone/assignment/backends/ldap.py:418
#, python-format
-msgid "Cannot remove role that has not been granted, %s"
+msgid "Role %s not found"
msgstr ""
-#: keystone/auth/controllers.py:72
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
#, python-format
msgid "Project is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:78 keystone/auth/plugins/password.py:38
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
#, python-format
msgid "Domain is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:84 keystone/auth/plugins/password.py:44
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
#, python-format
msgid "User is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:259
+#: keystone/auth/controllers.py:262
msgid "Scoping to both domain and project is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:262
+#: keystone/auth/controllers.py:265
msgid "Scoping to both domain and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:265
+#: keystone/auth/controllers.py:268
msgid "Scoping to both project and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:325
-#, python-format
-msgid "Unable to lookup user %s"
-msgstr ""
-
-#: keystone/auth/controllers.py:355
+#: keystone/auth/controllers.py:353
msgid "User not found"
msgstr ""
-#: keystone/auth/token_factory.py:79
-msgid "User have no access to project"
-msgstr ""
-
-#: keystone/auth/token_factory.py:94
-msgid "User have no access to domain"
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
msgstr ""
-#: keystone/auth/token_factory.py:311 keystone/token/controllers.py:119
-msgid "Unable to sign token."
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
msgstr ""
-#: keystone/auth/token_factory.py:314 keystone/token/controllers.py:122
-#, python-format
-msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
msgstr ""
#: keystone/catalog/core.py:38
@@ -170,32 +316,32 @@ msgstr ""
msgid "RBAC: Invalid token"
msgstr ""
-#: keystone/common/controller.py:35 keystone/common/controller.py:56
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
msgid "RBAC: Invalid user"
msgstr ""
-#: keystone/common/controller.py:41
+#: keystone/common/controller.py:45
msgid "RBAC: Proceeding without project"
msgstr ""
-#: keystone/common/controller.py:61
+#: keystone/common/controller.py:65
msgid "RBAC: Proceeding without tenant"
msgstr ""
-#: keystone/common/controller.py:91 keystone/common/controller.py:142
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
msgid "RBAC: Bypassing authorization"
msgstr ""
-#: keystone/common/controller.py:100 keystone/common/controller.py:140
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
msgid "RBAC: Authorization granted"
msgstr ""
-#: keystone/common/controller.py:130
+#: keystone/common/controller.py:134
#, python-format
msgid "RBAC: Adding query filter params (%s)"
msgstr ""
-#: keystone/common/controller.py:318
+#: keystone/common/controller.py:322
msgid "Invalid token in normalize_domain_id"
msgstr ""
@@ -206,17 +352,48 @@ msgid ""
"listening on that port."
msgstr ""
-#: keystone/common/wsgi.py:162
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
#, python-format
msgid "arg_dict: %s"
msgstr ""
-#: keystone/common/wsgi.py:188
+#: keystone/common/wsgi.py:243
#, python-format
msgid "Authorization failed. %(exception)s from %(remote_addr)s"
msgstr ""
-#: keystone/common/wsgi.py:431
+#: keystone/common/wsgi.py:487
msgid "The resource could not be found."
msgstr ""
@@ -457,11 +634,11 @@ msgstr ""
msgid "Search scope %s not implemented."
msgstr ""
-#: keystone/common/sql/core.py:126
+#: keystone/common/sql/core.py:119
msgid "Global engine callback raised."
msgstr ""
-#: keystone/common/sql/core.py:240
+#: keystone/common/sql/core.py:233
#, python-format
msgid "Got mysql server has gone away: %s"
msgstr ""
@@ -510,7 +687,7 @@ msgstr ""
msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
msgstr ""
-#: keystone/identity/controllers.py:878
+#: keystone/identity/controllers.py:952
#, python-format
msgid ""
"Group %(group)s not found for role-assignment - %(target)s with Role: "
@@ -521,18 +698,18 @@ msgstr ""
msgid "User not found in group"
msgstr ""
-#: keystone/identity/backends/ldap.py:192
+#: keystone/identity/backends/ldap.py:189
#, python-format
msgid ""
"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
"be removed from the group. The user will be ignored."
msgstr ""
-#: keystone/identity/backends/ldap.py:621
+#: keystone/identity/backends/ldap.py:334
msgid "Changing Name not supported by LDAP"
msgstr ""
-#: keystone/identity/backends/ldap.py:634
+#: keystone/identity/backends/ldap.py:347
#, python-format
msgid "User %(user_id)s is already a member of group %(group_id)s"
msgstr ""
@@ -552,26 +729,56 @@ msgstr ""
msgid "Failed to understand rule %(rule)r"
msgstr ""
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
#: keystone/policy/backends/rules.py:93
#, python-format
msgid "enforce %(action)s: %(credentials)s"
msgstr ""
-#: keystone/token/controllers.py:396
+#: keystone/token/controllers.py:378
#, python-format
msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
msgstr ""
-#: keystone/token/controllers.py:413 keystone/token/controllers.py:416
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
msgid "Token does not belong to specified tenant."
msgstr ""
-#: keystone/token/controllers.py:423
-msgid "Non-default domain is not supported"
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
msgstr ""
-#: keystone/token/controllers.py:431
-msgid "Domain scoped token is not supported"
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
msgstr ""
#: keystone/token/backends/memcache.py:144
@@ -596,3 +803,54 @@ msgstr ""
msgid "Unable to add token to revocation list."
msgstr ""
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
+#~ msgid "User have no access to project"
+#~ msgstr ""
+
+#~ msgid "User have no access to domain"
+#~ msgstr ""
+
+#~ msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#~ msgstr ""
+
diff --git a/keystone/locale/fr/LC_MESSAGES/keystone.po b/keystone/locale/fr/LC_MESSAGES/keystone.po
index 61e4adde..d2aced78 100644
--- a/keystone/locale/fr/LC_MESSAGES/keystone.po
+++ b/keystone/locale/fr/LC_MESSAGES/keystone.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Keystone\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
-"POT-Creation-Date: 2013-07-11 17:05+0000\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
"PO-Revision-Date: 2013-05-17 16:06+0000\n"
"Last-Translator: openstackjenkins <jenkins@openstack.org>\n"
"Language-Team: French "
@@ -16,7 +16,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 0.9.6\n"
+"Generated-By: Babel 1.3\n"
#: keystone/clean.py:23
#, python-format
@@ -38,78 +38,224 @@ msgstr ""
msgid "%(property_name)s is not a %(display_expected_type)s"
msgstr ""
-#: keystone/test.py:106
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
#, python-format
msgid "Failed to checkout %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:110
+#: keystone/assignment/core.py:529
#, python-format
msgid "Expected dict or list: %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:456
-#: keystone/identity/backends/ldap.py:433
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
#, python-format
-msgid "Role %s not found"
+msgid "Cannot remove role that has not been granted, %s"
msgstr ""
-#: keystone/assignment/backends/sql.py:244
+#: keystone/assignment/backends/ldap.py:418
#, python-format
-msgid "Cannot remove role that has not been granted, %s"
+msgid "Role %s not found"
msgstr ""
-#: keystone/auth/controllers.py:72
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
#, python-format
msgid "Project is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:78 keystone/auth/plugins/password.py:38
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
#, python-format
msgid "Domain is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:84 keystone/auth/plugins/password.py:44
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
#, python-format
msgid "User is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:259
+#: keystone/auth/controllers.py:262
msgid "Scoping to both domain and project is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:262
+#: keystone/auth/controllers.py:265
msgid "Scoping to both domain and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:265
+#: keystone/auth/controllers.py:268
msgid "Scoping to both project and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:325
-#, python-format
-msgid "Unable to lookup user %s"
-msgstr ""
-
-#: keystone/auth/controllers.py:355
+#: keystone/auth/controllers.py:353
msgid "User not found"
msgstr ""
-#: keystone/auth/token_factory.py:79
-msgid "User have no access to project"
-msgstr ""
-
-#: keystone/auth/token_factory.py:94
-msgid "User have no access to domain"
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
msgstr ""
-#: keystone/auth/token_factory.py:311 keystone/token/controllers.py:119
-msgid "Unable to sign token."
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
msgstr ""
-#: keystone/auth/token_factory.py:314 keystone/token/controllers.py:122
-#, python-format
-msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
msgstr ""
#: keystone/catalog/core.py:38
@@ -170,32 +316,32 @@ msgstr ""
msgid "RBAC: Invalid token"
msgstr ""
-#: keystone/common/controller.py:35 keystone/common/controller.py:56
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
msgid "RBAC: Invalid user"
msgstr ""
-#: keystone/common/controller.py:41
+#: keystone/common/controller.py:45
msgid "RBAC: Proceeding without project"
msgstr ""
-#: keystone/common/controller.py:61
+#: keystone/common/controller.py:65
msgid "RBAC: Proceeding without tenant"
msgstr ""
-#: keystone/common/controller.py:91 keystone/common/controller.py:142
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
msgid "RBAC: Bypassing authorization"
msgstr ""
-#: keystone/common/controller.py:100 keystone/common/controller.py:140
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
msgid "RBAC: Authorization granted"
msgstr ""
-#: keystone/common/controller.py:130
+#: keystone/common/controller.py:134
#, python-format
msgid "RBAC: Adding query filter params (%s)"
msgstr ""
-#: keystone/common/controller.py:318
+#: keystone/common/controller.py:322
msgid "Invalid token in normalize_domain_id"
msgstr ""
@@ -206,17 +352,48 @@ msgid ""
"listening on that port."
msgstr ""
-#: keystone/common/wsgi.py:162
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
#, python-format
msgid "arg_dict: %s"
msgstr ""
-#: keystone/common/wsgi.py:188
+#: keystone/common/wsgi.py:243
#, python-format
msgid "Authorization failed. %(exception)s from %(remote_addr)s"
msgstr ""
-#: keystone/common/wsgi.py:431
+#: keystone/common/wsgi.py:487
msgid "The resource could not be found."
msgstr ""
@@ -457,11 +634,11 @@ msgstr ""
msgid "Search scope %s not implemented."
msgstr ""
-#: keystone/common/sql/core.py:126
+#: keystone/common/sql/core.py:119
msgid "Global engine callback raised."
msgstr ""
-#: keystone/common/sql/core.py:240
+#: keystone/common/sql/core.py:233
#, python-format
msgid "Got mysql server has gone away: %s"
msgstr ""
@@ -510,7 +687,7 @@ msgstr ""
msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
msgstr ""
-#: keystone/identity/controllers.py:878
+#: keystone/identity/controllers.py:952
#, python-format
msgid ""
"Group %(group)s not found for role-assignment - %(target)s with Role: "
@@ -521,18 +698,18 @@ msgstr ""
msgid "User not found in group"
msgstr ""
-#: keystone/identity/backends/ldap.py:192
+#: keystone/identity/backends/ldap.py:189
#, python-format
msgid ""
"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
"be removed from the group. The user will be ignored."
msgstr ""
-#: keystone/identity/backends/ldap.py:621
+#: keystone/identity/backends/ldap.py:334
msgid "Changing Name not supported by LDAP"
msgstr ""
-#: keystone/identity/backends/ldap.py:634
+#: keystone/identity/backends/ldap.py:347
#, python-format
msgid "User %(user_id)s is already a member of group %(group_id)s"
msgstr ""
@@ -552,26 +729,56 @@ msgstr ""
msgid "Failed to understand rule %(rule)r"
msgstr ""
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
#: keystone/policy/backends/rules.py:93
#, python-format
msgid "enforce %(action)s: %(credentials)s"
msgstr ""
-#: keystone/token/controllers.py:396
+#: keystone/token/controllers.py:378
#, python-format
msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
msgstr ""
-#: keystone/token/controllers.py:413 keystone/token/controllers.py:416
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
msgid "Token does not belong to specified tenant."
msgstr ""
-#: keystone/token/controllers.py:423
-msgid "Non-default domain is not supported"
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
msgstr ""
-#: keystone/token/controllers.py:431
-msgid "Domain scoped token is not supported"
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
msgstr ""
#: keystone/token/backends/memcache.py:144
@@ -596,3 +803,54 @@ msgstr ""
msgid "Unable to add token to revocation list."
msgstr ""
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
+#~ msgid "User have no access to project"
+#~ msgstr ""
+
+#~ msgid "User have no access to domain"
+#~ msgstr ""
+
+#~ msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#~ msgstr ""
+
diff --git a/keystone/locale/hr/LC_MESSAGES/keystone.po b/keystone/locale/hr/LC_MESSAGES/keystone.po
new file mode 100644
index 00000000..8c5e03f5
--- /dev/null
+++ b/keystone/locale/hr/LC_MESSAGES/keystone.po
@@ -0,0 +1,848 @@
+# Croatian translations for keystone.
+# Copyright (C) 2013 ORGANIZATION
+# This file is distributed under the same license as the keystone project.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Keystone\n"
+"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
+"PO-Revision-Date: 2013-07-29 22:01+0000\n"
+"Last-Translator: openstackjenkins <jenkins@openstack.org>\n"
+"Language-Team: Croatian "
+"(http://www.transifex.com/projects/p/openstack/language/hr/)\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 1.3\n"
+
+#: keystone/clean.py:23
+#, python-format
+msgid "%s cannot be empty."
+msgstr ""
+
+#: keystone/clean.py:25
+#, python-format
+msgid "%(property_name)s cannot be less than %(min_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:29
+#, python-format
+msgid "%(property_name)s should not be greater than %(max_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:36
+#, python-format
+msgid "%(property_name)s is not a %(display_expected_type)s"
+msgstr ""
+
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
+#, python-format
+msgid "Failed to checkout %s"
+msgstr ""
+
+#: keystone/assignment/core.py:529
+#, python-format
+msgid "Expected dict or list: %s"
+msgstr ""
+
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
+#, python-format
+msgid "Cannot remove role that has not been granted, %s"
+msgstr ""
+
+#: keystone/assignment/backends/ldap.py:418
+#, python-format
+msgid "Role %s not found"
+msgstr ""
+
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
+#, python-format
+msgid "Project is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
+#, python-format
+msgid "Domain is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
+#, python-format
+msgid "User is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:262
+msgid "Scoping to both domain and project is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:265
+msgid "Scoping to both domain and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:268
+msgid "Scoping to both project and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:353
+msgid "User not found"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
+msgstr ""
+
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
+msgstr ""
+
+#: keystone/catalog/core.py:38
+#, python-format
+msgid "Malformed endpoint %(url)s - unknown key %(keyerror)s"
+msgstr ""
+
+#: keystone/catalog/core.py:43
+#, python-format
+msgid ""
+"Malformed endpoint %(url)s - unknown key %(keyerror)s(are you missing "
+"brackets ?)"
+msgstr ""
+
+#: keystone/catalog/core.py:49
+#, python-format
+msgid ""
+"Malformed endpoint %s - incomplete format (are you "
+"missing a type notifier ?)"
+msgstr ""
+
+#: keystone/catalog/backends/templated.py:109
+#, python-format
+msgid "Unable to open template file %s"
+msgstr ""
+
+#: keystone/common/cms.py:26
+#, python-format
+msgid "Verify error: %s"
+msgstr ""
+
+#: keystone/common/cms.py:118
+msgid ""
+"Signing error: Unable to load certificate - ensure you've configured PKI "
+"with 'keystone-manage pki_setup'"
+msgstr ""
+
+#: keystone/common/cms.py:122
+#, python-format
+msgid "Signing error: %s"
+msgstr ""
+
+#: keystone/common/config.py:89
+#, python-format
+msgid "Unable to locate specified logging config file: %s"
+msgstr ""
+
+#: keystone/common/config.py:107
+msgid "Invalid syslog facility"
+msgstr ""
+
+#: keystone/common/controller.py:18
+#, python-format
+msgid "RBAC: Authorizing %(action)s(%(kwargs)s)"
+msgstr ""
+
+#: keystone/common/controller.py:25
+msgid "RBAC: Invalid token"
+msgstr ""
+
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
+msgid "RBAC: Invalid user"
+msgstr ""
+
+#: keystone/common/controller.py:45
+msgid "RBAC: Proceeding without project"
+msgstr ""
+
+#: keystone/common/controller.py:65
+msgid "RBAC: Proceeding without tenant"
+msgstr ""
+
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
+msgid "RBAC: Bypassing authorization"
+msgstr ""
+
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
+msgid "RBAC: Authorization granted"
+msgstr ""
+
+#: keystone/common/controller.py:134
+#, python-format
+msgid "RBAC: Adding query filter params (%s)"
+msgstr ""
+
+#: keystone/common/controller.py:322
+msgid "Invalid token in normalize_domain_id"
+msgstr ""
+
+#: keystone/common/utils.py:233
+msgid ""
+"Error setting up the debug environment. Verify that the option --debug-"
+"url has the format <host>:<port> and that a debugger processes is "
+"listening on that port."
+msgstr ""
+
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
+#, python-format
+msgid "arg_dict: %s"
+msgstr ""
+
+#: keystone/common/wsgi.py:243
+#, python-format
+msgid "Authorization failed. %(exception)s from %(remote_addr)s"
+msgstr ""
+
+#: keystone/common/wsgi.py:487
+msgid "The resource could not be found."
+msgstr ""
+
+#: keystone/common/environment/__init__.py:37
+#, python-format
+msgid "Environment configured as: %s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:51
+#, python-format
+msgid "Starting %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:113
+msgid "Server error"
+msgstr ""
+
+#: keystone/common/ldap/core.py:79
+#, python-format
+msgid "Invalid LDAP deref option: %s. Choose one of: "
+msgstr ""
+
+#: keystone/common/ldap/core.py:87
+#, python-format
+msgid "Invalid LDAP TLS certs option: %(option). Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:99
+#, python-format
+msgid "Invalid LDAP scope: %(scope)s. Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:189
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%s\". Format must be "
+"<ldap_attribute>:<keystone_attribute>"
+msgstr ""
+
+#: keystone/common/ldap/core.py:195
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%(item)s\". Value "
+"\"%(attr_map)s\" must use one of %(keys)s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:279 keystone/identity/backends/kvs.py:177
+#: keystone/identity/backends/kvs.py:205
+#, python-format
+msgid "Duplicate name, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:289 keystone/identity/backends/kvs.py:170
+#, python-format
+msgid "Duplicate ID, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:294
+#, python-format
+msgid "LDAP %s create"
+msgstr ""
+
+#: keystone/common/ldap/core.py:372
+#, python-format
+msgid "LDAP %s update"
+msgstr ""
+
+#: keystone/common/ldap/core.py:405
+#, python-format
+msgid "LDAP %s delete"
+msgstr ""
+
+#: keystone/common/ldap/core.py:430
+#, python-format
+msgid "LDAP init: url=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:431
+#, python-format
+msgid ""
+"LDAP init: use_tls=%(use_tls)s\n"
+"tls_cacertfile=%(tls_cacertfile)s\n"
+"tls_cacertdir=%(tls_cacertdir)s\n"
+"tls_req_cert=%(tls_req_cert)s\n"
+"tls_avail=%(tls_avail)s\n"
+msgstr ""
+
+#: keystone/common/ldap/core.py:450
+msgid "Invalid TLS / LDAPS combination"
+msgstr ""
+
+#: keystone/common/ldap/core.py:454
+#, python-format
+msgid "Invalid LDAP TLS_AVAIL option: %s. TLS not available"
+msgstr ""
+
+#: keystone/common/ldap/core.py:464
+#, python-format
+msgid "tls_cacertfile %s not found or is not a file"
+msgstr ""
+
+#: keystone/common/ldap/core.py:476
+#, python-format
+msgid "tls_cacertdir %s not found or is not a directory"
+msgstr ""
+
+#: keystone/common/ldap/core.py:483
+#, python-format
+msgid "LDAP TLS: invalid TLS_REQUIRE_CERT Option=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:497
+#, python-format
+msgid "LDAP bind: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:508
+#, python-format
+msgid "LDAP add: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:514
+#, python-format
+msgid ""
+"LDAP search: dn=%(dn)s, scope=%(scope)s, query=%(query)s, "
+"attrs=%(attrlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:567
+msgid ""
+"LDAP Server does not support paging. Disable paging in keystone.conf to "
+"avoid this message."
+msgstr ""
+
+#: keystone/common/ldap/core.py:584
+#, python-format
+msgid "LDAP modify: dn=%(dn)s, modlist=%(modlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:590
+#, python-format
+msgid "LDAP delete: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:595
+#, python-format
+msgid "LDAP delete_ext: dn=%(dn)s, serverctrls=%(serverctrls)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:146
+#, python-format
+msgid "FakeLdap initialize url=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:156
+#, python-format
+msgid "FakeLdap bind dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:163
+#, python-format
+msgid "FakeLdap bind fail: dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:170
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:175
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s does not match"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:190
+#, python-format
+msgid "FakeLdap add item: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:193
+#, python-format
+msgid "FakeLdap add item failed: dn=%s is already in store."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:207 keystone/common/ldap/fakeldap.py:221
+#, python-format
+msgid "FakeLdap delete item: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:211 keystone/common/ldap/fakeldap.py:225
+#, python-format
+msgid "FakeLdap delete item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:240
+#, python-format
+msgid "FakeLdap modify item: dn=%(dn)s attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:245
+#, python-format
+msgid "FakeLdap modify item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:262
+#, python-format
+msgid "FakeLdap modify item failed: item has no attribute \"%s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:273
+#, python-format
+msgid ""
+"FakeLdap modify item failed: item has no attribute \"%(k)s\" with value "
+"\"%(v)s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:279
+#, python-format
+msgid "FakeLdap modify item failed: unknown command %s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:281
+#, python-format
+msgid "modify_s action %s not implemented"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:300
+#, python-format
+msgid "FakeLdap search at dn=%(dn)s scope=%(scope)s query=%(query)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:306
+msgid "FakeLdap search fail: dn not found for SCOPE_BASE"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:320
+#, python-format
+msgid "Search scope %s not implemented."
+msgstr ""
+
+#: keystone/common/sql/core.py:119
+msgid "Global engine callback raised."
+msgstr ""
+
+#: keystone/common/sql/core.py:233
+#, python-format
+msgid "Got mysql server has gone away: %s"
+msgstr ""
+
+#: keystone/common/sql/legacy.py:188
+#, python-format
+msgid "Cannot migrate EC2 credential: %s"
+msgstr ""
+
+#: keystone/common/sql/migration.py:47
+msgid "version should be an integer"
+msgstr ""
+
+#: keystone/common/sql/nova.py:65
+#, python-format
+msgid "Create tenant %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:82
+#, python-format
+msgid "Create user %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:91
+#, python-format
+msgid "Add user %(user_id)s to tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:100
+#, python-format
+msgid "Ignoring existing role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:107
+#, python-format
+msgid "Create role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:117
+#, python-format
+msgid "Assign role %(role_id)s to user %(user_id)s on tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:136
+#, python-format
+msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/identity/controllers.py:952
+#, python-format
+msgid ""
+"Group %(group)s not found for role-assignment - %(target)s with Role: "
+"%(role)s"
+msgstr ""
+
+#: keystone/identity/backends/kvs.py:126 keystone/identity/backends/kvs.py:135
+msgid "User not found in group"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:189
+#, python-format
+msgid ""
+"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
+"be removed from the group. The user will be ignored."
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:334
+msgid "Changing Name not supported by LDAP"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:347
+#, python-format
+msgid "User %(user_id)s is already a member of group %(group_id)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:394
+#, python-format
+msgid "Failed to understand rule %(rule)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:404
+#, python-format
+msgid "No handler for matches of kind %s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:679
+#, python-format
+msgid "Failed to understand rule %(rule)r"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
+#: keystone/policy/backends/rules.py:93
+#, python-format
+msgid "enforce %(action)s: %(credentials)s"
+msgstr ""
+
+#: keystone/token/controllers.py:378
+#, python-format
+msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
+msgstr ""
+
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
+msgid "Token does not belong to specified tenant."
+msgstr ""
+
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
+msgstr ""
+
+#: keystone/token/backends/memcache.py:144
+#, python-format
+msgid ""
+"Successful set of token-index-list for user-key \"%(user_key)s\", "
+"#%(count)d records"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:154
+#, python-format
+msgid ""
+"Failed to set token-index-list for user-key \"%(user_key)s\". Attempt "
+"%(cas_retry)d of %(cas_retry_max)d"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:163
+msgid "Unable to add token user list"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:172
+msgid "Unable to add token to revocation list."
+msgstr ""
+
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
diff --git a/keystone/locale/hu/LC_MESSAGES/keystone.po b/keystone/locale/hu/LC_MESSAGES/keystone.po
index ca656d2e..c8942c5b 100644
--- a/keystone/locale/hu/LC_MESSAGES/keystone.po
+++ b/keystone/locale/hu/LC_MESSAGES/keystone.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Keystone\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
-"POT-Creation-Date: 2013-07-11 17:05+0000\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
"PO-Revision-Date: 2012-12-15 14:14+0000\n"
"Last-Translator: kelemeng <kelemeng@gnome.hu>\n"
"Language-Team: hu <LL@li.org>\n"
@@ -17,7 +17,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 0.9.6\n"
+"Generated-By: Babel 1.3\n"
#: keystone/clean.py:23
#, python-format
@@ -39,79 +39,224 @@ msgstr "%(property_name)s nem lehet több, mint %(max_length)s karakter."
msgid "%(property_name)s is not a %(display_expected_type)s"
msgstr "%(property_name)s nem %(display_expected_type)s"
-#: keystone/test.py:106
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
#, python-format
msgid "Failed to checkout %s"
msgstr "Nem sikerült %s kiiktatása"
-#: keystone/assignment/backends/ldap.py:110
+#: keystone/assignment/core.py:529
#, python-format
msgid "Expected dict or list: %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:456
-#: keystone/identity/backends/ldap.py:433
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
#, python-format
-msgid "Role %s not found"
+msgid "Cannot remove role that has not been granted, %s"
msgstr ""
-#: keystone/assignment/backends/sql.py:244
+#: keystone/assignment/backends/ldap.py:418
#, python-format
-msgid "Cannot remove role that has not been granted, %s"
+msgid "Role %s not found"
+msgstr ""
+
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
msgstr ""
-#: keystone/auth/controllers.py:72
+#: keystone/auth/controllers.py:71
#, python-format
msgid "Project is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:78 keystone/auth/plugins/password.py:38
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
#, python-format
msgid "Domain is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:84 keystone/auth/plugins/password.py:44
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
#, python-format
msgid "User is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:259
+#: keystone/auth/controllers.py:262
msgid "Scoping to both domain and project is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:262
+#: keystone/auth/controllers.py:265
msgid "Scoping to both domain and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:265
+#: keystone/auth/controllers.py:268
msgid "Scoping to both project and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:325
-#, fuzzy, python-format
-msgid "Unable to lookup user %s"
-msgstr "Nem vehető fel a token felhasználólistája."
-
-#: keystone/auth/controllers.py:355
+#: keystone/auth/controllers.py:353
msgid "User not found"
msgstr ""
-#: keystone/auth/token_factory.py:79
-msgid "User have no access to project"
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
msgstr ""
-#: keystone/auth/token_factory.py:94
-msgid "User have no access to domain"
-msgstr ""
-
-#: keystone/auth/token_factory.py:311 keystone/token/controllers.py:119
-#, fuzzy
-msgid "Unable to sign token."
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, fuzzy, python-format
+msgid "Unable to lookup user %s"
msgstr "Nem vehető fel a token felhasználólistája."
-#: keystone/auth/token_factory.py:314 keystone/token/controllers.py:122
-#, python-format
-msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
msgstr ""
#: keystone/catalog/core.py:38
@@ -174,32 +319,32 @@ msgstr ""
msgid "RBAC: Invalid token"
msgstr ""
-#: keystone/common/controller.py:35 keystone/common/controller.py:56
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
msgid "RBAC: Invalid user"
msgstr ""
-#: keystone/common/controller.py:41
+#: keystone/common/controller.py:45
msgid "RBAC: Proceeding without project"
msgstr ""
-#: keystone/common/controller.py:61
+#: keystone/common/controller.py:65
msgid "RBAC: Proceeding without tenant"
msgstr ""
-#: keystone/common/controller.py:91 keystone/common/controller.py:142
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
msgid "RBAC: Bypassing authorization"
msgstr ""
-#: keystone/common/controller.py:100 keystone/common/controller.py:140
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
msgid "RBAC: Authorization granted"
msgstr ""
-#: keystone/common/controller.py:130
+#: keystone/common/controller.py:134
#, python-format
msgid "RBAC: Adding query filter params (%s)"
msgstr ""
-#: keystone/common/controller.py:318
+#: keystone/common/controller.py:322
msgid "Invalid token in normalize_domain_id"
msgstr ""
@@ -210,17 +355,48 @@ msgid ""
"listening on that port."
msgstr ""
-#: keystone/common/wsgi.py:162
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
#, python-format
msgid "arg_dict: %s"
msgstr "arg_dict: %s"
-#: keystone/common/wsgi.py:188
+#: keystone/common/wsgi.py:243
#, fuzzy, python-format
msgid "Authorization failed. %(exception)s from %(remote_addr)s"
msgstr "Hitelesítés sikertelen. %s innen: %s"
-#: keystone/common/wsgi.py:431
+#: keystone/common/wsgi.py:487
msgid "The resource could not be found."
msgstr "Az erőforrás nem található."
@@ -465,11 +641,11 @@ msgstr "FakeLdap keresés sikertelen: a dn nem található a SCOPE_BASE-hez"
msgid "Search scope %s not implemented."
msgstr "A(z) %s keresési hatókör nincs megvalósítva."
-#: keystone/common/sql/core.py:126
+#: keystone/common/sql/core.py:119
msgid "Global engine callback raised."
msgstr ""
-#: keystone/common/sql/core.py:240
+#: keystone/common/sql/core.py:233
#, python-format
msgid "Got mysql server has gone away: %s"
msgstr "A kapott MySQL szerver eltűnt: %s"
@@ -518,7 +694,7 @@ msgstr "%s szerep hozzárendelése %s felhasználóhoz %s bérlőben"
msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
msgstr "EC2 hitelesítési adatok létrehozása %s felhasználóhoz és %s bérlőhöz"
-#: keystone/identity/controllers.py:878
+#: keystone/identity/controllers.py:952
#, python-format
msgid ""
"Group %(group)s not found for role-assignment - %(target)s with Role: "
@@ -529,18 +705,18 @@ msgstr ""
msgid "User not found in group"
msgstr ""
-#: keystone/identity/backends/ldap.py:192
+#: keystone/identity/backends/ldap.py:189
#, python-format
msgid ""
"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
"be removed from the group. The user will be ignored."
msgstr ""
-#: keystone/identity/backends/ldap.py:621
+#: keystone/identity/backends/ldap.py:334
msgid "Changing Name not supported by LDAP"
msgstr ""
-#: keystone/identity/backends/ldap.py:634
+#: keystone/identity/backends/ldap.py:347
#, python-format
msgid "User %(user_id)s is already a member of group %(group_id)s"
msgstr ""
@@ -560,26 +736,56 @@ msgstr ""
msgid "Failed to understand rule %(rule)r"
msgstr ""
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
#: keystone/policy/backends/rules.py:93
#, python-format
msgid "enforce %(action)s: %(credentials)s"
msgstr ""
-#: keystone/token/controllers.py:396
+#: keystone/token/controllers.py:378
#, python-format
msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
msgstr ""
-#: keystone/token/controllers.py:413 keystone/token/controllers.py:416
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
msgid "Token does not belong to specified tenant."
msgstr ""
-#: keystone/token/controllers.py:423
-msgid "Non-default domain is not supported"
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
msgstr ""
-#: keystone/token/controllers.py:431
-msgid "Domain scoped token is not supported"
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
msgstr ""
#: keystone/token/backends/memcache.py:144
@@ -604,3 +810,55 @@ msgstr ""
msgid "Unable to add token to revocation list."
msgstr "A token nem adható a visszavonási listához."
+#: keystone/token/providers/pki.py:43
+#, fuzzy
+msgid "Unable to sign token."
+msgstr "Nem vehető fel a token felhasználólistája."
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
+#~ msgid "User have no access to project"
+#~ msgstr ""
+
+#~ msgid "User have no access to domain"
+#~ msgstr ""
+
+#~ msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#~ msgstr ""
+
diff --git a/keystone/locale/id/LC_MESSAGES/keystone.po b/keystone/locale/id/LC_MESSAGES/keystone.po
new file mode 100644
index 00000000..1d5650b6
--- /dev/null
+++ b/keystone/locale/id/LC_MESSAGES/keystone.po
@@ -0,0 +1,847 @@
+# Indonesian translations for keystone.
+# Copyright (C) 2013 ORGANIZATION
+# This file is distributed under the same license as the keystone project.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Keystone\n"
+"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
+"PO-Revision-Date: 2013-07-29 22:01+0000\n"
+"Last-Translator: openstackjenkins <jenkins@openstack.org>\n"
+"Language-Team: Indonesian "
+"(http://www.transifex.com/projects/p/openstack/language/id/)\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 1.3\n"
+
+#: keystone/clean.py:23
+#, python-format
+msgid "%s cannot be empty."
+msgstr ""
+
+#: keystone/clean.py:25
+#, python-format
+msgid "%(property_name)s cannot be less than %(min_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:29
+#, python-format
+msgid "%(property_name)s should not be greater than %(max_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:36
+#, python-format
+msgid "%(property_name)s is not a %(display_expected_type)s"
+msgstr ""
+
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
+#, python-format
+msgid "Failed to checkout %s"
+msgstr ""
+
+#: keystone/assignment/core.py:529
+#, python-format
+msgid "Expected dict or list: %s"
+msgstr ""
+
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
+#, python-format
+msgid "Cannot remove role that has not been granted, %s"
+msgstr ""
+
+#: keystone/assignment/backends/ldap.py:418
+#, python-format
+msgid "Role %s not found"
+msgstr ""
+
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
+#, python-format
+msgid "Project is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
+#, python-format
+msgid "Domain is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
+#, python-format
+msgid "User is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:262
+msgid "Scoping to both domain and project is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:265
+msgid "Scoping to both domain and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:268
+msgid "Scoping to both project and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:353
+msgid "User not found"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
+msgstr ""
+
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
+msgstr ""
+
+#: keystone/catalog/core.py:38
+#, python-format
+msgid "Malformed endpoint %(url)s - unknown key %(keyerror)s"
+msgstr ""
+
+#: keystone/catalog/core.py:43
+#, python-format
+msgid ""
+"Malformed endpoint %(url)s - unknown key %(keyerror)s(are you missing "
+"brackets ?)"
+msgstr ""
+
+#: keystone/catalog/core.py:49
+#, python-format
+msgid ""
+"Malformed endpoint %s - incomplete format (are you "
+"missing a type notifier ?)"
+msgstr ""
+
+#: keystone/catalog/backends/templated.py:109
+#, python-format
+msgid "Unable to open template file %s"
+msgstr ""
+
+#: keystone/common/cms.py:26
+#, python-format
+msgid "Verify error: %s"
+msgstr ""
+
+#: keystone/common/cms.py:118
+msgid ""
+"Signing error: Unable to load certificate - ensure you've configured PKI "
+"with 'keystone-manage pki_setup'"
+msgstr ""
+
+#: keystone/common/cms.py:122
+#, python-format
+msgid "Signing error: %s"
+msgstr ""
+
+#: keystone/common/config.py:89
+#, python-format
+msgid "Unable to locate specified logging config file: %s"
+msgstr ""
+
+#: keystone/common/config.py:107
+msgid "Invalid syslog facility"
+msgstr ""
+
+#: keystone/common/controller.py:18
+#, python-format
+msgid "RBAC: Authorizing %(action)s(%(kwargs)s)"
+msgstr ""
+
+#: keystone/common/controller.py:25
+msgid "RBAC: Invalid token"
+msgstr ""
+
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
+msgid "RBAC: Invalid user"
+msgstr ""
+
+#: keystone/common/controller.py:45
+msgid "RBAC: Proceeding without project"
+msgstr ""
+
+#: keystone/common/controller.py:65
+msgid "RBAC: Proceeding without tenant"
+msgstr ""
+
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
+msgid "RBAC: Bypassing authorization"
+msgstr ""
+
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
+msgid "RBAC: Authorization granted"
+msgstr ""
+
+#: keystone/common/controller.py:134
+#, python-format
+msgid "RBAC: Adding query filter params (%s)"
+msgstr ""
+
+#: keystone/common/controller.py:322
+msgid "Invalid token in normalize_domain_id"
+msgstr ""
+
+#: keystone/common/utils.py:233
+msgid ""
+"Error setting up the debug environment. Verify that the option --debug-"
+"url has the format <host>:<port> and that a debugger processes is "
+"listening on that port."
+msgstr ""
+
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
+#, python-format
+msgid "arg_dict: %s"
+msgstr ""
+
+#: keystone/common/wsgi.py:243
+#, python-format
+msgid "Authorization failed. %(exception)s from %(remote_addr)s"
+msgstr ""
+
+#: keystone/common/wsgi.py:487
+msgid "The resource could not be found."
+msgstr ""
+
+#: keystone/common/environment/__init__.py:37
+#, python-format
+msgid "Environment configured as: %s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:51
+#, python-format
+msgid "Starting %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:113
+msgid "Server error"
+msgstr ""
+
+#: keystone/common/ldap/core.py:79
+#, python-format
+msgid "Invalid LDAP deref option: %s. Choose one of: "
+msgstr ""
+
+#: keystone/common/ldap/core.py:87
+#, python-format
+msgid "Invalid LDAP TLS certs option: %(option). Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:99
+#, python-format
+msgid "Invalid LDAP scope: %(scope)s. Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:189
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%s\". Format must be "
+"<ldap_attribute>:<keystone_attribute>"
+msgstr ""
+
+#: keystone/common/ldap/core.py:195
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%(item)s\". Value "
+"\"%(attr_map)s\" must use one of %(keys)s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:279 keystone/identity/backends/kvs.py:177
+#: keystone/identity/backends/kvs.py:205
+#, python-format
+msgid "Duplicate name, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:289 keystone/identity/backends/kvs.py:170
+#, python-format
+msgid "Duplicate ID, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:294
+#, python-format
+msgid "LDAP %s create"
+msgstr ""
+
+#: keystone/common/ldap/core.py:372
+#, python-format
+msgid "LDAP %s update"
+msgstr ""
+
+#: keystone/common/ldap/core.py:405
+#, python-format
+msgid "LDAP %s delete"
+msgstr ""
+
+#: keystone/common/ldap/core.py:430
+#, python-format
+msgid "LDAP init: url=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:431
+#, python-format
+msgid ""
+"LDAP init: use_tls=%(use_tls)s\n"
+"tls_cacertfile=%(tls_cacertfile)s\n"
+"tls_cacertdir=%(tls_cacertdir)s\n"
+"tls_req_cert=%(tls_req_cert)s\n"
+"tls_avail=%(tls_avail)s\n"
+msgstr ""
+
+#: keystone/common/ldap/core.py:450
+msgid "Invalid TLS / LDAPS combination"
+msgstr ""
+
+#: keystone/common/ldap/core.py:454
+#, python-format
+msgid "Invalid LDAP TLS_AVAIL option: %s. TLS not available"
+msgstr ""
+
+#: keystone/common/ldap/core.py:464
+#, python-format
+msgid "tls_cacertfile %s not found or is not a file"
+msgstr ""
+
+#: keystone/common/ldap/core.py:476
+#, python-format
+msgid "tls_cacertdir %s not found or is not a directory"
+msgstr ""
+
+#: keystone/common/ldap/core.py:483
+#, python-format
+msgid "LDAP TLS: invalid TLS_REQUIRE_CERT Option=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:497
+#, python-format
+msgid "LDAP bind: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:508
+#, python-format
+msgid "LDAP add: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:514
+#, python-format
+msgid ""
+"LDAP search: dn=%(dn)s, scope=%(scope)s, query=%(query)s, "
+"attrs=%(attrlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:567
+msgid ""
+"LDAP Server does not support paging. Disable paging in keystone.conf to "
+"avoid this message."
+msgstr ""
+
+#: keystone/common/ldap/core.py:584
+#, python-format
+msgid "LDAP modify: dn=%(dn)s, modlist=%(modlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:590
+#, python-format
+msgid "LDAP delete: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:595
+#, python-format
+msgid "LDAP delete_ext: dn=%(dn)s, serverctrls=%(serverctrls)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:146
+#, python-format
+msgid "FakeLdap initialize url=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:156
+#, python-format
+msgid "FakeLdap bind dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:163
+#, python-format
+msgid "FakeLdap bind fail: dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:170
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:175
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s does not match"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:190
+#, python-format
+msgid "FakeLdap add item: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:193
+#, python-format
+msgid "FakeLdap add item failed: dn=%s is already in store."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:207 keystone/common/ldap/fakeldap.py:221
+#, python-format
+msgid "FakeLdap delete item: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:211 keystone/common/ldap/fakeldap.py:225
+#, python-format
+msgid "FakeLdap delete item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:240
+#, python-format
+msgid "FakeLdap modify item: dn=%(dn)s attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:245
+#, python-format
+msgid "FakeLdap modify item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:262
+#, python-format
+msgid "FakeLdap modify item failed: item has no attribute \"%s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:273
+#, python-format
+msgid ""
+"FakeLdap modify item failed: item has no attribute \"%(k)s\" with value "
+"\"%(v)s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:279
+#, python-format
+msgid "FakeLdap modify item failed: unknown command %s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:281
+#, python-format
+msgid "modify_s action %s not implemented"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:300
+#, python-format
+msgid "FakeLdap search at dn=%(dn)s scope=%(scope)s query=%(query)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:306
+msgid "FakeLdap search fail: dn not found for SCOPE_BASE"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:320
+#, python-format
+msgid "Search scope %s not implemented."
+msgstr ""
+
+#: keystone/common/sql/core.py:119
+msgid "Global engine callback raised."
+msgstr ""
+
+#: keystone/common/sql/core.py:233
+#, python-format
+msgid "Got mysql server has gone away: %s"
+msgstr ""
+
+#: keystone/common/sql/legacy.py:188
+#, python-format
+msgid "Cannot migrate EC2 credential: %s"
+msgstr ""
+
+#: keystone/common/sql/migration.py:47
+msgid "version should be an integer"
+msgstr ""
+
+#: keystone/common/sql/nova.py:65
+#, python-format
+msgid "Create tenant %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:82
+#, python-format
+msgid "Create user %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:91
+#, python-format
+msgid "Add user %(user_id)s to tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:100
+#, python-format
+msgid "Ignoring existing role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:107
+#, python-format
+msgid "Create role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:117
+#, python-format
+msgid "Assign role %(role_id)s to user %(user_id)s on tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:136
+#, python-format
+msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/identity/controllers.py:952
+#, python-format
+msgid ""
+"Group %(group)s not found for role-assignment - %(target)s with Role: "
+"%(role)s"
+msgstr ""
+
+#: keystone/identity/backends/kvs.py:126 keystone/identity/backends/kvs.py:135
+msgid "User not found in group"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:189
+#, python-format
+msgid ""
+"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
+"be removed from the group. The user will be ignored."
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:334
+msgid "Changing Name not supported by LDAP"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:347
+#, python-format
+msgid "User %(user_id)s is already a member of group %(group_id)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:394
+#, python-format
+msgid "Failed to understand rule %(rule)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:404
+#, python-format
+msgid "No handler for matches of kind %s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:679
+#, python-format
+msgid "Failed to understand rule %(rule)r"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
+#: keystone/policy/backends/rules.py:93
+#, python-format
+msgid "enforce %(action)s: %(credentials)s"
+msgstr ""
+
+#: keystone/token/controllers.py:378
+#, python-format
+msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
+msgstr ""
+
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
+msgid "Token does not belong to specified tenant."
+msgstr ""
+
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
+msgstr ""
+
+#: keystone/token/backends/memcache.py:144
+#, python-format
+msgid ""
+"Successful set of token-index-list for user-key \"%(user_key)s\", "
+"#%(count)d records"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:154
+#, python-format
+msgid ""
+"Failed to set token-index-list for user-key \"%(user_key)s\". Attempt "
+"%(cas_retry)d of %(cas_retry_max)d"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:163
+msgid "Unable to add token user list"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:172
+msgid "Unable to add token to revocation list."
+msgstr ""
+
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
diff --git a/keystone/locale/it/LC_MESSAGES/keystone.po b/keystone/locale/it/LC_MESSAGES/keystone.po
index 790166b4..89f965ee 100644
--- a/keystone/locale/it/LC_MESSAGES/keystone.po
+++ b/keystone/locale/it/LC_MESSAGES/keystone.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Keystone\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
-"POT-Creation-Date: 2013-07-11 17:05+0000\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
"PO-Revision-Date: 2013-05-17 16:06+0000\n"
"Last-Translator: openstackjenkins <jenkins@openstack.org>\n"
"Language-Team: Italian "
@@ -16,7 +16,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 0.9.6\n"
+"Generated-By: Babel 1.3\n"
#: keystone/clean.py:23
#, python-format
@@ -38,81 +38,225 @@ msgstr "%(property_name)s non può essere superiore a %(max_length)s caratteri."
msgid "%(property_name)s is not a %(display_expected_type)s"
msgstr ""
-#: keystone/test.py:106
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
#, python-format
msgid "Failed to checkout %s"
msgstr "Impossibile eseguire il checkout %s"
-#: keystone/assignment/backends/ldap.py:110
+#: keystone/assignment/core.py:529
#, python-format
msgid "Expected dict or list: %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:456
-#: keystone/identity/backends/ldap.py:433
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
+#, python-format
+msgid "Cannot remove role that has not been granted, %s"
+msgstr "Impossibile rimuovere un ruolo che non è stato concesso, %s"
+
+#: keystone/assignment/backends/ldap.py:418
#, python-format
msgid "Role %s not found"
msgstr "Ruolo %s non trovato"
-#: keystone/assignment/backends/sql.py:244
-#, python-format
-msgid "Cannot remove role that has not been granted, %s"
-msgstr "Impossibile rimuovere un ruolo che non è stato concesso, %s"
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
-#: keystone/auth/controllers.py:72
+#: keystone/auth/controllers.py:71
#, python-format
msgid "Project is disabled: %s"
msgstr "Il progetto è disabilitato: %s"
-#: keystone/auth/controllers.py:78 keystone/auth/plugins/password.py:38
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
#, python-format
msgid "Domain is disabled: %s"
msgstr "Il dominio è disabilitato: %s"
-#: keystone/auth/controllers.py:84 keystone/auth/plugins/password.py:44
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
#, python-format
msgid "User is disabled: %s"
msgstr "L'utente è disabilitato: %s"
-#: keystone/auth/controllers.py:259
+#: keystone/auth/controllers.py:262
msgid "Scoping to both domain and project is not allowed"
msgstr "Il controllo sia del dominio che del progetto non è consentito"
-#: keystone/auth/controllers.py:262
+#: keystone/auth/controllers.py:265
msgid "Scoping to both domain and trust is not allowed"
msgstr "Il controllo sia del dominio che di trust non è consentito"
-#: keystone/auth/controllers.py:265
+#: keystone/auth/controllers.py:268
msgid "Scoping to both project and trust is not allowed"
msgstr "Il controllo sia delprogetto che di trust non è consentito"
-#: keystone/auth/controllers.py:325
-#, python-format
-msgid "Unable to lookup user %s"
-msgstr "Impossibile eseguire la ricerca dell'utente %s"
-
-#: keystone/auth/controllers.py:355
+#: keystone/auth/controllers.py:353
msgid "User not found"
msgstr "Utente non trovato"
-#: keystone/auth/token_factory.py:79
-msgid "User have no access to project"
-msgstr "L'utente non ha accesso al progetto"
-
-#: keystone/auth/token_factory.py:94
-msgid "User have no access to domain"
-msgstr "L'utente non ha accesso al dominio"
-
-#: keystone/auth/token_factory.py:311 keystone/token/controllers.py:119
-msgid "Unable to sign token."
-msgstr "Impossibile firmare il token."
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
+msgstr ""
-#: keystone/auth/token_factory.py:314 keystone/token/controllers.py:122
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
#, python-format
-msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+msgid "Unable to lookup user %s"
+msgstr "Impossibile eseguire la ricerca dell'utente %s"
+
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
msgstr ""
-"Valore non valido per token_format: %s. I valori consentiti sono PKI o "
-"UUID."
#: keystone/catalog/core.py:38
#, python-format
@@ -178,32 +322,32 @@ msgstr ""
msgid "RBAC: Invalid token"
msgstr "RBAC: token non valido"
-#: keystone/common/controller.py:35 keystone/common/controller.py:56
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
msgid "RBAC: Invalid user"
msgstr "RBAC: utente non valido"
-#: keystone/common/controller.py:41
+#: keystone/common/controller.py:45
msgid "RBAC: Proceeding without project"
msgstr "RBAC: si procede senza progetto"
-#: keystone/common/controller.py:61
+#: keystone/common/controller.py:65
msgid "RBAC: Proceeding without tenant"
msgstr "RBAC: si procede senza tenant"
-#: keystone/common/controller.py:91 keystone/common/controller.py:142
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
msgid "RBAC: Bypassing authorization"
msgstr "RBAC: autorizzazione oltrepassata"
-#: keystone/common/controller.py:100 keystone/common/controller.py:140
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
msgid "RBAC: Authorization granted"
msgstr "RBAC: autorizzazione concessa"
-#: keystone/common/controller.py:130
+#: keystone/common/controller.py:134
#, python-format
msgid "RBAC: Adding query filter params (%s)"
msgstr "RBAC: aggiunta parametri del filtro della query (%s)"
-#: keystone/common/controller.py:318
+#: keystone/common/controller.py:322
msgid "Invalid token in normalize_domain_id"
msgstr "Token non valido in normalize_domain_id"
@@ -214,17 +358,48 @@ msgid ""
"listening on that port."
msgstr ""
-#: keystone/common/wsgi.py:162
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
#, python-format
msgid "arg_dict: %s"
msgstr "arg_dict: %s"
-#: keystone/common/wsgi.py:188
+#: keystone/common/wsgi.py:243
#, fuzzy, python-format
msgid "Authorization failed. %(exception)s from %(remote_addr)s"
msgstr "Autorizzazione non riuscita. %s da %s"
-#: keystone/common/wsgi.py:431
+#: keystone/common/wsgi.py:487
msgid "The resource could not be found."
msgstr "Impossibile trovare la risorsa."
@@ -471,11 +646,11 @@ msgstr "FakeLdap ricerca non riuscita: dn non trovato per SCOPE_BASE"
msgid "Search scope %s not implemented."
msgstr "Ambito di ricerca %s non implementato."
-#: keystone/common/sql/core.py:126
+#: keystone/common/sql/core.py:119
msgid "Global engine callback raised."
msgstr ""
-#: keystone/common/sql/core.py:240
+#: keystone/common/sql/core.py:233
#, python-format
msgid "Got mysql server has gone away: %s"
msgstr "Ricevuto messaggio di interruzione della connessione del server mysql: %s"
@@ -524,7 +699,7 @@ msgstr "Assegna il ruolo %s all'utente %s nel tenant %s"
msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
msgstr "Creazione credenziale ec2 per l'utente %s e del tenant %s"
-#: keystone/identity/controllers.py:878
+#: keystone/identity/controllers.py:952
#, python-format
msgid ""
"Group %(group)s not found for role-assignment - %(target)s with Role: "
@@ -535,18 +710,18 @@ msgstr ""
msgid "User not found in group"
msgstr "Utente non trovato nel gruppo"
-#: keystone/identity/backends/ldap.py:192
+#: keystone/identity/backends/ldap.py:189
#, python-format
msgid ""
"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
"be removed from the group. The user will be ignored."
msgstr ""
-#: keystone/identity/backends/ldap.py:621
+#: keystone/identity/backends/ldap.py:334
msgid "Changing Name not supported by LDAP"
msgstr "Modifica nome non supportato da LDAP"
-#: keystone/identity/backends/ldap.py:634
+#: keystone/identity/backends/ldap.py:347
#, fuzzy, python-format
msgid "User %(user_id)s is already a member of group %(group_id)s"
msgstr "L'utente %s è già membro del gruppo %s"
@@ -566,27 +741,57 @@ msgstr "Nessun gestore per le corrispondenze di tipo %s"
msgid "Failed to understand rule %(rule)r"
msgstr "Impossibile comprendere la regola %(rule)r"
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
#: keystone/policy/backends/rules.py:93
#, python-format
msgid "enforce %(action)s: %(credentials)s"
msgstr ""
-#: keystone/token/controllers.py:396
+#: keystone/token/controllers.py:378
#, python-format
msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
msgstr ""
-#: keystone/token/controllers.py:413 keystone/token/controllers.py:416
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
msgid "Token does not belong to specified tenant."
msgstr "Il token non appartiene al tenant specificato."
-#: keystone/token/controllers.py:423
-msgid "Non-default domain is not supported"
-msgstr "Il dominio non predefinito non è supportato"
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
+msgstr ""
-#: keystone/token/controllers.py:431
-msgid "Domain scoped token is not supported"
-msgstr "L'ambito del dominio token non è supportato"
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
+msgstr ""
#: keystone/token/backends/memcache.py:144
#, python-format
@@ -610,3 +815,57 @@ msgstr ""
msgid "Unable to add token to revocation list."
msgstr "Impossibile aggiungere un token ad un elenco di revoca."
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr "Impossibile firmare il token."
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr "Il dominio non predefinito non è supportato"
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr "L'ambito del dominio token non è supportato"
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
+#~ msgid "User have no access to project"
+#~ msgstr "L'utente non ha accesso al progetto"
+
+#~ msgid "User have no access to domain"
+#~ msgstr "L'utente non ha accesso al dominio"
+
+#~ msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#~ msgstr ""
+#~ "Valore non valido per token_format: %s."
+#~ " I valori consentiti sono PKI o "
+#~ "UUID."
+
diff --git a/keystone/locale/it_IT/LC_MESSAGES/keystone.po b/keystone/locale/it_IT/LC_MESSAGES/keystone.po
new file mode 100644
index 00000000..7b8e76da
--- /dev/null
+++ b/keystone/locale/it_IT/LC_MESSAGES/keystone.po
@@ -0,0 +1,847 @@
+# Italian (Italy) translations for keystone.
+# Copyright (C) 2013 ORGANIZATION
+# This file is distributed under the same license as the keystone project.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Keystone\n"
+"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
+"PO-Revision-Date: 2013-07-29 22:01+0000\n"
+"Last-Translator: openstackjenkins <jenkins@openstack.org>\n"
+"Language-Team: Italian (Italy) "
+"(http://www.transifex.com/projects/p/openstack/language/it_IT/)\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 1.3\n"
+
+#: keystone/clean.py:23
+#, python-format
+msgid "%s cannot be empty."
+msgstr ""
+
+#: keystone/clean.py:25
+#, python-format
+msgid "%(property_name)s cannot be less than %(min_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:29
+#, python-format
+msgid "%(property_name)s should not be greater than %(max_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:36
+#, python-format
+msgid "%(property_name)s is not a %(display_expected_type)s"
+msgstr ""
+
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
+#, python-format
+msgid "Failed to checkout %s"
+msgstr ""
+
+#: keystone/assignment/core.py:529
+#, python-format
+msgid "Expected dict or list: %s"
+msgstr ""
+
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
+#, python-format
+msgid "Cannot remove role that has not been granted, %s"
+msgstr ""
+
+#: keystone/assignment/backends/ldap.py:418
+#, python-format
+msgid "Role %s not found"
+msgstr ""
+
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
+#, python-format
+msgid "Project is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
+#, python-format
+msgid "Domain is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
+#, python-format
+msgid "User is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:262
+msgid "Scoping to both domain and project is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:265
+msgid "Scoping to both domain and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:268
+msgid "Scoping to both project and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:353
+msgid "User not found"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
+msgstr ""
+
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
+msgstr ""
+
+#: keystone/catalog/core.py:38
+#, python-format
+msgid "Malformed endpoint %(url)s - unknown key %(keyerror)s"
+msgstr ""
+
+#: keystone/catalog/core.py:43
+#, python-format
+msgid ""
+"Malformed endpoint %(url)s - unknown key %(keyerror)s(are you missing "
+"brackets ?)"
+msgstr ""
+
+#: keystone/catalog/core.py:49
+#, python-format
+msgid ""
+"Malformed endpoint %s - incomplete format (are you "
+"missing a type notifier ?)"
+msgstr ""
+
+#: keystone/catalog/backends/templated.py:109
+#, python-format
+msgid "Unable to open template file %s"
+msgstr ""
+
+#: keystone/common/cms.py:26
+#, python-format
+msgid "Verify error: %s"
+msgstr ""
+
+#: keystone/common/cms.py:118
+msgid ""
+"Signing error: Unable to load certificate - ensure you've configured PKI "
+"with 'keystone-manage pki_setup'"
+msgstr ""
+
+#: keystone/common/cms.py:122
+#, python-format
+msgid "Signing error: %s"
+msgstr ""
+
+#: keystone/common/config.py:89
+#, python-format
+msgid "Unable to locate specified logging config file: %s"
+msgstr ""
+
+#: keystone/common/config.py:107
+msgid "Invalid syslog facility"
+msgstr ""
+
+#: keystone/common/controller.py:18
+#, python-format
+msgid "RBAC: Authorizing %(action)s(%(kwargs)s)"
+msgstr ""
+
+#: keystone/common/controller.py:25
+msgid "RBAC: Invalid token"
+msgstr ""
+
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
+msgid "RBAC: Invalid user"
+msgstr ""
+
+#: keystone/common/controller.py:45
+msgid "RBAC: Proceeding without project"
+msgstr ""
+
+#: keystone/common/controller.py:65
+msgid "RBAC: Proceeding without tenant"
+msgstr ""
+
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
+msgid "RBAC: Bypassing authorization"
+msgstr ""
+
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
+msgid "RBAC: Authorization granted"
+msgstr ""
+
+#: keystone/common/controller.py:134
+#, python-format
+msgid "RBAC: Adding query filter params (%s)"
+msgstr ""
+
+#: keystone/common/controller.py:322
+msgid "Invalid token in normalize_domain_id"
+msgstr ""
+
+#: keystone/common/utils.py:233
+msgid ""
+"Error setting up the debug environment. Verify that the option --debug-"
+"url has the format <host>:<port> and that a debugger processes is "
+"listening on that port."
+msgstr ""
+
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
+#, python-format
+msgid "arg_dict: %s"
+msgstr ""
+
+#: keystone/common/wsgi.py:243
+#, python-format
+msgid "Authorization failed. %(exception)s from %(remote_addr)s"
+msgstr ""
+
+#: keystone/common/wsgi.py:487
+msgid "The resource could not be found."
+msgstr ""
+
+#: keystone/common/environment/__init__.py:37
+#, python-format
+msgid "Environment configured as: %s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:51
+#, python-format
+msgid "Starting %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:113
+msgid "Server error"
+msgstr ""
+
+#: keystone/common/ldap/core.py:79
+#, python-format
+msgid "Invalid LDAP deref option: %s. Choose one of: "
+msgstr ""
+
+#: keystone/common/ldap/core.py:87
+#, python-format
+msgid "Invalid LDAP TLS certs option: %(option). Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:99
+#, python-format
+msgid "Invalid LDAP scope: %(scope)s. Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:189
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%s\". Format must be "
+"<ldap_attribute>:<keystone_attribute>"
+msgstr ""
+
+#: keystone/common/ldap/core.py:195
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%(item)s\". Value "
+"\"%(attr_map)s\" must use one of %(keys)s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:279 keystone/identity/backends/kvs.py:177
+#: keystone/identity/backends/kvs.py:205
+#, python-format
+msgid "Duplicate name, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:289 keystone/identity/backends/kvs.py:170
+#, python-format
+msgid "Duplicate ID, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:294
+#, python-format
+msgid "LDAP %s create"
+msgstr ""
+
+#: keystone/common/ldap/core.py:372
+#, python-format
+msgid "LDAP %s update"
+msgstr ""
+
+#: keystone/common/ldap/core.py:405
+#, python-format
+msgid "LDAP %s delete"
+msgstr ""
+
+#: keystone/common/ldap/core.py:430
+#, python-format
+msgid "LDAP init: url=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:431
+#, python-format
+msgid ""
+"LDAP init: use_tls=%(use_tls)s\n"
+"tls_cacertfile=%(tls_cacertfile)s\n"
+"tls_cacertdir=%(tls_cacertdir)s\n"
+"tls_req_cert=%(tls_req_cert)s\n"
+"tls_avail=%(tls_avail)s\n"
+msgstr ""
+
+#: keystone/common/ldap/core.py:450
+msgid "Invalid TLS / LDAPS combination"
+msgstr ""
+
+#: keystone/common/ldap/core.py:454
+#, python-format
+msgid "Invalid LDAP TLS_AVAIL option: %s. TLS not available"
+msgstr ""
+
+#: keystone/common/ldap/core.py:464
+#, python-format
+msgid "tls_cacertfile %s not found or is not a file"
+msgstr ""
+
+#: keystone/common/ldap/core.py:476
+#, python-format
+msgid "tls_cacertdir %s not found or is not a directory"
+msgstr ""
+
+#: keystone/common/ldap/core.py:483
+#, python-format
+msgid "LDAP TLS: invalid TLS_REQUIRE_CERT Option=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:497
+#, python-format
+msgid "LDAP bind: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:508
+#, python-format
+msgid "LDAP add: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:514
+#, python-format
+msgid ""
+"LDAP search: dn=%(dn)s, scope=%(scope)s, query=%(query)s, "
+"attrs=%(attrlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:567
+msgid ""
+"LDAP Server does not support paging. Disable paging in keystone.conf to "
+"avoid this message."
+msgstr ""
+
+#: keystone/common/ldap/core.py:584
+#, python-format
+msgid "LDAP modify: dn=%(dn)s, modlist=%(modlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:590
+#, python-format
+msgid "LDAP delete: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:595
+#, python-format
+msgid "LDAP delete_ext: dn=%(dn)s, serverctrls=%(serverctrls)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:146
+#, python-format
+msgid "FakeLdap initialize url=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:156
+#, python-format
+msgid "FakeLdap bind dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:163
+#, python-format
+msgid "FakeLdap bind fail: dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:170
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:175
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s does not match"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:190
+#, python-format
+msgid "FakeLdap add item: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:193
+#, python-format
+msgid "FakeLdap add item failed: dn=%s is already in store."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:207 keystone/common/ldap/fakeldap.py:221
+#, python-format
+msgid "FakeLdap delete item: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:211 keystone/common/ldap/fakeldap.py:225
+#, python-format
+msgid "FakeLdap delete item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:240
+#, python-format
+msgid "FakeLdap modify item: dn=%(dn)s attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:245
+#, python-format
+msgid "FakeLdap modify item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:262
+#, python-format
+msgid "FakeLdap modify item failed: item has no attribute \"%s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:273
+#, python-format
+msgid ""
+"FakeLdap modify item failed: item has no attribute \"%(k)s\" with value "
+"\"%(v)s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:279
+#, python-format
+msgid "FakeLdap modify item failed: unknown command %s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:281
+#, python-format
+msgid "modify_s action %s not implemented"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:300
+#, python-format
+msgid "FakeLdap search at dn=%(dn)s scope=%(scope)s query=%(query)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:306
+msgid "FakeLdap search fail: dn not found for SCOPE_BASE"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:320
+#, python-format
+msgid "Search scope %s not implemented."
+msgstr ""
+
+#: keystone/common/sql/core.py:119
+msgid "Global engine callback raised."
+msgstr ""
+
+#: keystone/common/sql/core.py:233
+#, python-format
+msgid "Got mysql server has gone away: %s"
+msgstr ""
+
+#: keystone/common/sql/legacy.py:188
+#, python-format
+msgid "Cannot migrate EC2 credential: %s"
+msgstr ""
+
+#: keystone/common/sql/migration.py:47
+msgid "version should be an integer"
+msgstr ""
+
+#: keystone/common/sql/nova.py:65
+#, python-format
+msgid "Create tenant %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:82
+#, python-format
+msgid "Create user %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:91
+#, python-format
+msgid "Add user %(user_id)s to tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:100
+#, python-format
+msgid "Ignoring existing role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:107
+#, python-format
+msgid "Create role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:117
+#, python-format
+msgid "Assign role %(role_id)s to user %(user_id)s on tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:136
+#, python-format
+msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/identity/controllers.py:952
+#, python-format
+msgid ""
+"Group %(group)s not found for role-assignment - %(target)s with Role: "
+"%(role)s"
+msgstr ""
+
+#: keystone/identity/backends/kvs.py:126 keystone/identity/backends/kvs.py:135
+msgid "User not found in group"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:189
+#, python-format
+msgid ""
+"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
+"be removed from the group. The user will be ignored."
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:334
+msgid "Changing Name not supported by LDAP"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:347
+#, python-format
+msgid "User %(user_id)s is already a member of group %(group_id)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:394
+#, python-format
+msgid "Failed to understand rule %(rule)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:404
+#, python-format
+msgid "No handler for matches of kind %s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:679
+#, python-format
+msgid "Failed to understand rule %(rule)r"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
+#: keystone/policy/backends/rules.py:93
+#, python-format
+msgid "enforce %(action)s: %(credentials)s"
+msgstr ""
+
+#: keystone/token/controllers.py:378
+#, python-format
+msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
+msgstr ""
+
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
+msgid "Token does not belong to specified tenant."
+msgstr ""
+
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
+msgstr ""
+
+#: keystone/token/backends/memcache.py:144
+#, python-format
+msgid ""
+"Successful set of token-index-list for user-key \"%(user_key)s\", "
+"#%(count)d records"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:154
+#, python-format
+msgid ""
+"Failed to set token-index-list for user-key \"%(user_key)s\". Attempt "
+"%(cas_retry)d of %(cas_retry_max)d"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:163
+msgid "Unable to add token user list"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:172
+msgid "Unable to add token to revocation list."
+msgstr ""
+
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
diff --git a/keystone/locale/ja/LC_MESSAGES/keystone.po b/keystone/locale/ja/LC_MESSAGES/keystone.po
index bd31a1d3..a8f0bb69 100644
--- a/keystone/locale/ja/LC_MESSAGES/keystone.po
+++ b/keystone/locale/ja/LC_MESSAGES/keystone.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Keystone\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
-"POT-Creation-Date: 2013-07-11 17:05+0000\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
"PO-Revision-Date: 2012-11-03 01:25+0000\n"
"Last-Translator: Tomoyuki KATO <tomo@dream.daynight.jp>\n"
"Language-Team: Japanese "
@@ -16,7 +16,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 0.9.6\n"
+"Generated-By: Babel 1.3\n"
#: keystone/clean.py:23
#, python-format
@@ -38,79 +38,224 @@ msgstr ""
msgid "%(property_name)s is not a %(display_expected_type)s"
msgstr ""
-#: keystone/test.py:106
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
#, python-format
msgid "Failed to checkout %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:110
+#: keystone/assignment/core.py:529
#, python-format
msgid "Expected dict or list: %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:456
-#: keystone/identity/backends/ldap.py:433
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
#, python-format
-msgid "Role %s not found"
+msgid "Cannot remove role that has not been granted, %s"
msgstr ""
-#: keystone/assignment/backends/sql.py:244
+#: keystone/assignment/backends/ldap.py:418
#, python-format
-msgid "Cannot remove role that has not been granted, %s"
+msgid "Role %s not found"
+msgstr ""
+
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
msgstr ""
-#: keystone/auth/controllers.py:72
+#: keystone/auth/controllers.py:71
#, python-format
msgid "Project is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:78 keystone/auth/plugins/password.py:38
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
#, python-format
msgid "Domain is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:84 keystone/auth/plugins/password.py:44
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
#, python-format
msgid "User is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:259
+#: keystone/auth/controllers.py:262
msgid "Scoping to both domain and project is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:262
+#: keystone/auth/controllers.py:265
msgid "Scoping to both domain and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:265
+#: keystone/auth/controllers.py:268
msgid "Scoping to both project and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:325
-#, fuzzy, python-format
-msgid "Unable to lookup user %s"
-msgstr "ユーザーリストにトークンを追加できません。"
-
-#: keystone/auth/controllers.py:355
+#: keystone/auth/controllers.py:353
msgid "User not found"
msgstr ""
-#: keystone/auth/token_factory.py:79
-msgid "User have no access to project"
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
msgstr ""
-#: keystone/auth/token_factory.py:94
-msgid "User have no access to domain"
-msgstr ""
-
-#: keystone/auth/token_factory.py:311 keystone/token/controllers.py:119
-#, fuzzy
-msgid "Unable to sign token."
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, fuzzy, python-format
+msgid "Unable to lookup user %s"
msgstr "ユーザーリストにトークンを追加できません。"
-#: keystone/auth/token_factory.py:314 keystone/token/controllers.py:122
-#, python-format
-msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
msgstr ""
#: keystone/catalog/core.py:38
@@ -171,32 +316,32 @@ msgstr ""
msgid "RBAC: Invalid token"
msgstr ""
-#: keystone/common/controller.py:35 keystone/common/controller.py:56
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
msgid "RBAC: Invalid user"
msgstr ""
-#: keystone/common/controller.py:41
+#: keystone/common/controller.py:45
msgid "RBAC: Proceeding without project"
msgstr ""
-#: keystone/common/controller.py:61
+#: keystone/common/controller.py:65
msgid "RBAC: Proceeding without tenant"
msgstr ""
-#: keystone/common/controller.py:91 keystone/common/controller.py:142
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
msgid "RBAC: Bypassing authorization"
msgstr ""
-#: keystone/common/controller.py:100 keystone/common/controller.py:140
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
msgid "RBAC: Authorization granted"
msgstr ""
-#: keystone/common/controller.py:130
+#: keystone/common/controller.py:134
#, python-format
msgid "RBAC: Adding query filter params (%s)"
msgstr ""
-#: keystone/common/controller.py:318
+#: keystone/common/controller.py:322
msgid "Invalid token in normalize_domain_id"
msgstr ""
@@ -207,17 +352,48 @@ msgid ""
"listening on that port."
msgstr ""
-#: keystone/common/wsgi.py:162
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
#, python-format
msgid "arg_dict: %s"
msgstr ""
-#: keystone/common/wsgi.py:188
+#: keystone/common/wsgi.py:243
#, python-format
msgid "Authorization failed. %(exception)s from %(remote_addr)s"
msgstr ""
-#: keystone/common/wsgi.py:431
+#: keystone/common/wsgi.py:487
msgid "The resource could not be found."
msgstr ""
@@ -458,11 +634,11 @@ msgstr ""
msgid "Search scope %s not implemented."
msgstr ""
-#: keystone/common/sql/core.py:126
+#: keystone/common/sql/core.py:119
msgid "Global engine callback raised."
msgstr ""
-#: keystone/common/sql/core.py:240
+#: keystone/common/sql/core.py:233
#, python-format
msgid "Got mysql server has gone away: %s"
msgstr ""
@@ -511,7 +687,7 @@ msgstr ""
msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
msgstr ""
-#: keystone/identity/controllers.py:878
+#: keystone/identity/controllers.py:952
#, python-format
msgid ""
"Group %(group)s not found for role-assignment - %(target)s with Role: "
@@ -522,18 +698,18 @@ msgstr ""
msgid "User not found in group"
msgstr ""
-#: keystone/identity/backends/ldap.py:192
+#: keystone/identity/backends/ldap.py:189
#, python-format
msgid ""
"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
"be removed from the group. The user will be ignored."
msgstr ""
-#: keystone/identity/backends/ldap.py:621
+#: keystone/identity/backends/ldap.py:334
msgid "Changing Name not supported by LDAP"
msgstr ""
-#: keystone/identity/backends/ldap.py:634
+#: keystone/identity/backends/ldap.py:347
#, python-format
msgid "User %(user_id)s is already a member of group %(group_id)s"
msgstr ""
@@ -553,26 +729,56 @@ msgstr ""
msgid "Failed to understand rule %(rule)r"
msgstr ""
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
#: keystone/policy/backends/rules.py:93
#, python-format
msgid "enforce %(action)s: %(credentials)s"
msgstr ""
-#: keystone/token/controllers.py:396
+#: keystone/token/controllers.py:378
#, python-format
msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
msgstr ""
-#: keystone/token/controllers.py:413 keystone/token/controllers.py:416
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
msgid "Token does not belong to specified tenant."
msgstr ""
-#: keystone/token/controllers.py:423
-msgid "Non-default domain is not supported"
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
msgstr ""
-#: keystone/token/controllers.py:431
-msgid "Domain scoped token is not supported"
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
msgstr ""
#: keystone/token/backends/memcache.py:144
@@ -597,3 +803,55 @@ msgstr ""
msgid "Unable to add token to revocation list."
msgstr "失効リストにトークンを追加できません。"
+#: keystone/token/providers/pki.py:43
+#, fuzzy
+msgid "Unable to sign token."
+msgstr "ユーザーリストにトークンを追加できません。"
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
+#~ msgid "User have no access to project"
+#~ msgstr ""
+
+#~ msgid "User have no access to domain"
+#~ msgstr ""
+
+#~ msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#~ msgstr ""
+
diff --git a/keystone/locale/ka_GE/LC_MESSAGES/keystone.po b/keystone/locale/ka_GE/LC_MESSAGES/keystone.po
index 090bf2e2..8d998614 100644
--- a/keystone/locale/ka_GE/LC_MESSAGES/keystone.po
+++ b/keystone/locale/ka_GE/LC_MESSAGES/keystone.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Keystone\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
-"POT-Creation-Date: 2013-07-11 17:05+0000\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
"PO-Revision-Date: 2013-05-17 16:06+0000\n"
"Last-Translator: openstackjenkins <jenkins@openstack.org>\n"
"Language-Team: ka_GE <LL@li.org>\n"
@@ -16,7 +16,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 0.9.6\n"
+"Generated-By: Babel 1.3\n"
#: keystone/clean.py:23
#, python-format
@@ -38,78 +38,224 @@ msgstr ""
msgid "%(property_name)s is not a %(display_expected_type)s"
msgstr ""
-#: keystone/test.py:106
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
#, python-format
msgid "Failed to checkout %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:110
+#: keystone/assignment/core.py:529
#, python-format
msgid "Expected dict or list: %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:456
-#: keystone/identity/backends/ldap.py:433
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
+#, python-format
+msgid "Cannot remove role that has not been granted, %s"
+msgstr ""
+
+#: keystone/assignment/backends/ldap.py:418
#, python-format
msgid "Role %s not found"
msgstr "როლი %s ვერ მოიძებნა"
-#: keystone/assignment/backends/sql.py:244
-#, python-format
-msgid "Cannot remove role that has not been granted, %s"
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
msgstr ""
-#: keystone/auth/controllers.py:72
+#: keystone/auth/controllers.py:71
#, python-format
msgid "Project is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:78 keystone/auth/plugins/password.py:38
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
#, python-format
msgid "Domain is disabled: %s"
msgstr "დომენი გათიშულია: %s"
-#: keystone/auth/controllers.py:84 keystone/auth/plugins/password.py:44
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
#, python-format
msgid "User is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:259
+#: keystone/auth/controllers.py:262
msgid "Scoping to both domain and project is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:262
+#: keystone/auth/controllers.py:265
msgid "Scoping to both domain and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:265
+#: keystone/auth/controllers.py:268
msgid "Scoping to both project and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:325
-#, python-format
-msgid "Unable to lookup user %s"
-msgstr ""
-
-#: keystone/auth/controllers.py:355
+#: keystone/auth/controllers.py:353
msgid "User not found"
msgstr "მომხმარებელი ვერ მოიძებნა"
-#: keystone/auth/token_factory.py:79
-msgid "User have no access to project"
-msgstr "მომხმარებელს არ აქვს წვდომა პროექტზე"
-
-#: keystone/auth/token_factory.py:94
-msgid "User have no access to domain"
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
msgstr ""
-#: keystone/auth/token_factory.py:311 keystone/token/controllers.py:119
-msgid "Unable to sign token."
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
msgstr ""
-#: keystone/auth/token_factory.py:314 keystone/token/controllers.py:122
-#, python-format
-msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
msgstr ""
#: keystone/catalog/core.py:38
@@ -170,32 +316,32 @@ msgstr ""
msgid "RBAC: Invalid token"
msgstr ""
-#: keystone/common/controller.py:35 keystone/common/controller.py:56
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
msgid "RBAC: Invalid user"
msgstr ""
-#: keystone/common/controller.py:41
+#: keystone/common/controller.py:45
msgid "RBAC: Proceeding without project"
msgstr ""
-#: keystone/common/controller.py:61
+#: keystone/common/controller.py:65
msgid "RBAC: Proceeding without tenant"
msgstr ""
-#: keystone/common/controller.py:91 keystone/common/controller.py:142
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
msgid "RBAC: Bypassing authorization"
msgstr ""
-#: keystone/common/controller.py:100 keystone/common/controller.py:140
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
msgid "RBAC: Authorization granted"
msgstr ""
-#: keystone/common/controller.py:130
+#: keystone/common/controller.py:134
#, python-format
msgid "RBAC: Adding query filter params (%s)"
msgstr ""
-#: keystone/common/controller.py:318
+#: keystone/common/controller.py:322
msgid "Invalid token in normalize_domain_id"
msgstr ""
@@ -206,17 +352,48 @@ msgid ""
"listening on that port."
msgstr ""
-#: keystone/common/wsgi.py:162
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
#, python-format
msgid "arg_dict: %s"
msgstr ""
-#: keystone/common/wsgi.py:188
+#: keystone/common/wsgi.py:243
#, python-format
msgid "Authorization failed. %(exception)s from %(remote_addr)s"
msgstr ""
-#: keystone/common/wsgi.py:431
+#: keystone/common/wsgi.py:487
msgid "The resource could not be found."
msgstr ""
@@ -457,11 +634,11 @@ msgstr ""
msgid "Search scope %s not implemented."
msgstr ""
-#: keystone/common/sql/core.py:126
+#: keystone/common/sql/core.py:119
msgid "Global engine callback raised."
msgstr ""
-#: keystone/common/sql/core.py:240
+#: keystone/common/sql/core.py:233
#, python-format
msgid "Got mysql server has gone away: %s"
msgstr ""
@@ -510,7 +687,7 @@ msgstr ""
msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
msgstr ""
-#: keystone/identity/controllers.py:878
+#: keystone/identity/controllers.py:952
#, python-format
msgid ""
"Group %(group)s not found for role-assignment - %(target)s with Role: "
@@ -521,18 +698,18 @@ msgstr ""
msgid "User not found in group"
msgstr ""
-#: keystone/identity/backends/ldap.py:192
+#: keystone/identity/backends/ldap.py:189
#, python-format
msgid ""
"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
"be removed from the group. The user will be ignored."
msgstr ""
-#: keystone/identity/backends/ldap.py:621
+#: keystone/identity/backends/ldap.py:334
msgid "Changing Name not supported by LDAP"
msgstr ""
-#: keystone/identity/backends/ldap.py:634
+#: keystone/identity/backends/ldap.py:347
#, python-format
msgid "User %(user_id)s is already a member of group %(group_id)s"
msgstr ""
@@ -552,26 +729,56 @@ msgstr ""
msgid "Failed to understand rule %(rule)r"
msgstr ""
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
#: keystone/policy/backends/rules.py:93
#, python-format
msgid "enforce %(action)s: %(credentials)s"
msgstr ""
-#: keystone/token/controllers.py:396
+#: keystone/token/controllers.py:378
#, python-format
msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
msgstr ""
-#: keystone/token/controllers.py:413 keystone/token/controllers.py:416
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
msgid "Token does not belong to specified tenant."
msgstr ""
-#: keystone/token/controllers.py:423
-msgid "Non-default domain is not supported"
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
msgstr ""
-#: keystone/token/controllers.py:431
-msgid "Domain scoped token is not supported"
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
msgstr ""
#: keystone/token/backends/memcache.py:144
@@ -596,3 +803,54 @@ msgstr ""
msgid "Unable to add token to revocation list."
msgstr ""
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
+#~ msgid "User have no access to project"
+#~ msgstr "მომხმარებელს არ აქვს წვდომა პროექტზე"
+
+#~ msgid "User have no access to domain"
+#~ msgstr ""
+
+#~ msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#~ msgstr ""
+
diff --git a/keystone/locale/keystone.pot b/keystone/locale/keystone.pot
index b5773f2e..718b35c8 100644
--- a/keystone/locale/keystone.pot
+++ b/keystone/locale/keystone.pot
@@ -7,16 +7,16 @@
msgid ""
msgstr ""
"Project-Id-Version: keystone "
-"jenkins.keystone.propose.translation.update.258\n"
+"jenkins.keystone.propose.translation.update.280\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2013-07-11 17:05+0000\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 0.9.6\n"
+"Generated-By: Babel 1.3\n"
#: keystone/clean.py:23
#, python-format
@@ -38,78 +38,224 @@ msgstr ""
msgid "%(property_name)s is not a %(display_expected_type)s"
msgstr ""
-#: keystone/test.py:106
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
#, python-format
msgid "Failed to checkout %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:110
+#: keystone/assignment/core.py:529
#, python-format
msgid "Expected dict or list: %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:456
-#: keystone/identity/backends/ldap.py:433
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
#, python-format
-msgid "Role %s not found"
+msgid "Cannot remove role that has not been granted, %s"
msgstr ""
-#: keystone/assignment/backends/sql.py:244
+#: keystone/assignment/backends/ldap.py:418
#, python-format
-msgid "Cannot remove role that has not been granted, %s"
+msgid "Role %s not found"
msgstr ""
-#: keystone/auth/controllers.py:72
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
#, python-format
msgid "Project is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:78 keystone/auth/plugins/password.py:38
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
#, python-format
msgid "Domain is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:84 keystone/auth/plugins/password.py:44
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
#, python-format
msgid "User is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:259
+#: keystone/auth/controllers.py:262
msgid "Scoping to both domain and project is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:262
+#: keystone/auth/controllers.py:265
msgid "Scoping to both domain and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:265
+#: keystone/auth/controllers.py:268
msgid "Scoping to both project and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:325
-#, python-format
-msgid "Unable to lookup user %s"
-msgstr ""
-
-#: keystone/auth/controllers.py:355
+#: keystone/auth/controllers.py:353
msgid "User not found"
msgstr ""
-#: keystone/auth/token_factory.py:79
-msgid "User have no access to project"
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
msgstr ""
-#: keystone/auth/token_factory.py:94
-msgid "User have no access to domain"
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
msgstr ""
-#: keystone/auth/token_factory.py:311 keystone/token/controllers.py:119
-msgid "Unable to sign token."
-msgstr ""
-
-#: keystone/auth/token_factory.py:314 keystone/token/controllers.py:122
-#, python-format
-msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
msgstr ""
#: keystone/catalog/core.py:38
@@ -170,32 +316,32 @@ msgstr ""
msgid "RBAC: Invalid token"
msgstr ""
-#: keystone/common/controller.py:35 keystone/common/controller.py:56
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
msgid "RBAC: Invalid user"
msgstr ""
-#: keystone/common/controller.py:41
+#: keystone/common/controller.py:45
msgid "RBAC: Proceeding without project"
msgstr ""
-#: keystone/common/controller.py:61
+#: keystone/common/controller.py:65
msgid "RBAC: Proceeding without tenant"
msgstr ""
-#: keystone/common/controller.py:91 keystone/common/controller.py:142
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
msgid "RBAC: Bypassing authorization"
msgstr ""
-#: keystone/common/controller.py:100 keystone/common/controller.py:140
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
msgid "RBAC: Authorization granted"
msgstr ""
-#: keystone/common/controller.py:130
+#: keystone/common/controller.py:134
#, python-format
msgid "RBAC: Adding query filter params (%s)"
msgstr ""
-#: keystone/common/controller.py:318
+#: keystone/common/controller.py:322
msgid "Invalid token in normalize_domain_id"
msgstr ""
@@ -206,17 +352,48 @@ msgid ""
"listening on that port."
msgstr ""
-#: keystone/common/wsgi.py:162
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
#, python-format
msgid "arg_dict: %s"
msgstr ""
-#: keystone/common/wsgi.py:188
+#: keystone/common/wsgi.py:243
#, python-format
msgid "Authorization failed. %(exception)s from %(remote_addr)s"
msgstr ""
-#: keystone/common/wsgi.py:431
+#: keystone/common/wsgi.py:487
msgid "The resource could not be found."
msgstr ""
@@ -457,11 +634,11 @@ msgstr ""
msgid "Search scope %s not implemented."
msgstr ""
-#: keystone/common/sql/core.py:126
+#: keystone/common/sql/core.py:119
msgid "Global engine callback raised."
msgstr ""
-#: keystone/common/sql/core.py:240
+#: keystone/common/sql/core.py:233
#, python-format
msgid "Got mysql server has gone away: %s"
msgstr ""
@@ -510,7 +687,7 @@ msgstr ""
msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
msgstr ""
-#: keystone/identity/controllers.py:878
+#: keystone/identity/controllers.py:952
#, python-format
msgid ""
"Group %(group)s not found for role-assignment - %(target)s with Role: "
@@ -521,18 +698,18 @@ msgstr ""
msgid "User not found in group"
msgstr ""
-#: keystone/identity/backends/ldap.py:192
+#: keystone/identity/backends/ldap.py:189
#, python-format
msgid ""
"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
"be removed from the group. The user will be ignored."
msgstr ""
-#: keystone/identity/backends/ldap.py:621
+#: keystone/identity/backends/ldap.py:334
msgid "Changing Name not supported by LDAP"
msgstr ""
-#: keystone/identity/backends/ldap.py:634
+#: keystone/identity/backends/ldap.py:347
#, python-format
msgid "User %(user_id)s is already a member of group %(group_id)s"
msgstr ""
@@ -552,26 +729,56 @@ msgstr ""
msgid "Failed to understand rule %(rule)r"
msgstr ""
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
#: keystone/policy/backends/rules.py:93
#, python-format
msgid "enforce %(action)s: %(credentials)s"
msgstr ""
-#: keystone/token/controllers.py:396
+#: keystone/token/controllers.py:378
#, python-format
msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
msgstr ""
-#: keystone/token/controllers.py:413 keystone/token/controllers.py:416
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
msgid "Token does not belong to specified tenant."
msgstr ""
-#: keystone/token/controllers.py:423
-msgid "Non-default domain is not supported"
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
msgstr ""
-#: keystone/token/controllers.py:431
-msgid "Domain scoped token is not supported"
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
msgstr ""
#: keystone/token/backends/memcache.py:144
@@ -596,3 +803,45 @@ msgstr ""
msgid "Unable to add token to revocation list."
msgstr ""
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
diff --git a/keystone/locale/ko/LC_MESSAGES/keystone.po b/keystone/locale/ko/LC_MESSAGES/keystone.po
new file mode 100644
index 00000000..cb047f5f
--- /dev/null
+++ b/keystone/locale/ko/LC_MESSAGES/keystone.po
@@ -0,0 +1,847 @@
+# Korean translations for keystone.
+# Copyright (C) 2013 ORGANIZATION
+# This file is distributed under the same license as the keystone project.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Keystone\n"
+"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
+"PO-Revision-Date: 2013-07-29 22:01+0000\n"
+"Last-Translator: openstackjenkins <jenkins@openstack.org>\n"
+"Language-Team: Korean "
+"(http://www.transifex.com/projects/p/openstack/language/ko/)\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 1.3\n"
+
+#: keystone/clean.py:23
+#, python-format
+msgid "%s cannot be empty."
+msgstr ""
+
+#: keystone/clean.py:25
+#, python-format
+msgid "%(property_name)s cannot be less than %(min_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:29
+#, python-format
+msgid "%(property_name)s should not be greater than %(max_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:36
+#, python-format
+msgid "%(property_name)s is not a %(display_expected_type)s"
+msgstr ""
+
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
+#, python-format
+msgid "Failed to checkout %s"
+msgstr ""
+
+#: keystone/assignment/core.py:529
+#, python-format
+msgid "Expected dict or list: %s"
+msgstr ""
+
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
+#, python-format
+msgid "Cannot remove role that has not been granted, %s"
+msgstr ""
+
+#: keystone/assignment/backends/ldap.py:418
+#, python-format
+msgid "Role %s not found"
+msgstr ""
+
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
+#, python-format
+msgid "Project is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
+#, python-format
+msgid "Domain is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
+#, python-format
+msgid "User is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:262
+msgid "Scoping to both domain and project is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:265
+msgid "Scoping to both domain and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:268
+msgid "Scoping to both project and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:353
+msgid "User not found"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
+msgstr ""
+
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
+msgstr ""
+
+#: keystone/catalog/core.py:38
+#, python-format
+msgid "Malformed endpoint %(url)s - unknown key %(keyerror)s"
+msgstr ""
+
+#: keystone/catalog/core.py:43
+#, python-format
+msgid ""
+"Malformed endpoint %(url)s - unknown key %(keyerror)s(are you missing "
+"brackets ?)"
+msgstr ""
+
+#: keystone/catalog/core.py:49
+#, python-format
+msgid ""
+"Malformed endpoint %s - incomplete format (are you "
+"missing a type notifier ?)"
+msgstr ""
+
+#: keystone/catalog/backends/templated.py:109
+#, python-format
+msgid "Unable to open template file %s"
+msgstr ""
+
+#: keystone/common/cms.py:26
+#, python-format
+msgid "Verify error: %s"
+msgstr ""
+
+#: keystone/common/cms.py:118
+msgid ""
+"Signing error: Unable to load certificate - ensure you've configured PKI "
+"with 'keystone-manage pki_setup'"
+msgstr ""
+
+#: keystone/common/cms.py:122
+#, python-format
+msgid "Signing error: %s"
+msgstr ""
+
+#: keystone/common/config.py:89
+#, python-format
+msgid "Unable to locate specified logging config file: %s"
+msgstr ""
+
+#: keystone/common/config.py:107
+msgid "Invalid syslog facility"
+msgstr ""
+
+#: keystone/common/controller.py:18
+#, python-format
+msgid "RBAC: Authorizing %(action)s(%(kwargs)s)"
+msgstr ""
+
+#: keystone/common/controller.py:25
+msgid "RBAC: Invalid token"
+msgstr ""
+
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
+msgid "RBAC: Invalid user"
+msgstr ""
+
+#: keystone/common/controller.py:45
+msgid "RBAC: Proceeding without project"
+msgstr ""
+
+#: keystone/common/controller.py:65
+msgid "RBAC: Proceeding without tenant"
+msgstr ""
+
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
+msgid "RBAC: Bypassing authorization"
+msgstr ""
+
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
+msgid "RBAC: Authorization granted"
+msgstr ""
+
+#: keystone/common/controller.py:134
+#, python-format
+msgid "RBAC: Adding query filter params (%s)"
+msgstr ""
+
+#: keystone/common/controller.py:322
+msgid "Invalid token in normalize_domain_id"
+msgstr ""
+
+#: keystone/common/utils.py:233
+msgid ""
+"Error setting up the debug environment. Verify that the option --debug-"
+"url has the format <host>:<port> and that a debugger processes is "
+"listening on that port."
+msgstr ""
+
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
+#, python-format
+msgid "arg_dict: %s"
+msgstr ""
+
+#: keystone/common/wsgi.py:243
+#, python-format
+msgid "Authorization failed. %(exception)s from %(remote_addr)s"
+msgstr ""
+
+#: keystone/common/wsgi.py:487
+msgid "The resource could not be found."
+msgstr ""
+
+#: keystone/common/environment/__init__.py:37
+#, python-format
+msgid "Environment configured as: %s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:51
+#, python-format
+msgid "Starting %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:113
+msgid "Server error"
+msgstr ""
+
+#: keystone/common/ldap/core.py:79
+#, python-format
+msgid "Invalid LDAP deref option: %s. Choose one of: "
+msgstr ""
+
+#: keystone/common/ldap/core.py:87
+#, python-format
+msgid "Invalid LDAP TLS certs option: %(option). Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:99
+#, python-format
+msgid "Invalid LDAP scope: %(scope)s. Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:189
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%s\". Format must be "
+"<ldap_attribute>:<keystone_attribute>"
+msgstr ""
+
+#: keystone/common/ldap/core.py:195
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%(item)s\". Value "
+"\"%(attr_map)s\" must use one of %(keys)s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:279 keystone/identity/backends/kvs.py:177
+#: keystone/identity/backends/kvs.py:205
+#, python-format
+msgid "Duplicate name, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:289 keystone/identity/backends/kvs.py:170
+#, python-format
+msgid "Duplicate ID, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:294
+#, python-format
+msgid "LDAP %s create"
+msgstr ""
+
+#: keystone/common/ldap/core.py:372
+#, python-format
+msgid "LDAP %s update"
+msgstr ""
+
+#: keystone/common/ldap/core.py:405
+#, python-format
+msgid "LDAP %s delete"
+msgstr ""
+
+#: keystone/common/ldap/core.py:430
+#, python-format
+msgid "LDAP init: url=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:431
+#, python-format
+msgid ""
+"LDAP init: use_tls=%(use_tls)s\n"
+"tls_cacertfile=%(tls_cacertfile)s\n"
+"tls_cacertdir=%(tls_cacertdir)s\n"
+"tls_req_cert=%(tls_req_cert)s\n"
+"tls_avail=%(tls_avail)s\n"
+msgstr ""
+
+#: keystone/common/ldap/core.py:450
+msgid "Invalid TLS / LDAPS combination"
+msgstr ""
+
+#: keystone/common/ldap/core.py:454
+#, python-format
+msgid "Invalid LDAP TLS_AVAIL option: %s. TLS not available"
+msgstr ""
+
+#: keystone/common/ldap/core.py:464
+#, python-format
+msgid "tls_cacertfile %s not found or is not a file"
+msgstr ""
+
+#: keystone/common/ldap/core.py:476
+#, python-format
+msgid "tls_cacertdir %s not found or is not a directory"
+msgstr ""
+
+#: keystone/common/ldap/core.py:483
+#, python-format
+msgid "LDAP TLS: invalid TLS_REQUIRE_CERT Option=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:497
+#, python-format
+msgid "LDAP bind: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:508
+#, python-format
+msgid "LDAP add: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:514
+#, python-format
+msgid ""
+"LDAP search: dn=%(dn)s, scope=%(scope)s, query=%(query)s, "
+"attrs=%(attrlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:567
+msgid ""
+"LDAP Server does not support paging. Disable paging in keystone.conf to "
+"avoid this message."
+msgstr ""
+
+#: keystone/common/ldap/core.py:584
+#, python-format
+msgid "LDAP modify: dn=%(dn)s, modlist=%(modlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:590
+#, python-format
+msgid "LDAP delete: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:595
+#, python-format
+msgid "LDAP delete_ext: dn=%(dn)s, serverctrls=%(serverctrls)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:146
+#, python-format
+msgid "FakeLdap initialize url=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:156
+#, python-format
+msgid "FakeLdap bind dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:163
+#, python-format
+msgid "FakeLdap bind fail: dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:170
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:175
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s does not match"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:190
+#, python-format
+msgid "FakeLdap add item: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:193
+#, python-format
+msgid "FakeLdap add item failed: dn=%s is already in store."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:207 keystone/common/ldap/fakeldap.py:221
+#, python-format
+msgid "FakeLdap delete item: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:211 keystone/common/ldap/fakeldap.py:225
+#, python-format
+msgid "FakeLdap delete item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:240
+#, python-format
+msgid "FakeLdap modify item: dn=%(dn)s attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:245
+#, python-format
+msgid "FakeLdap modify item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:262
+#, python-format
+msgid "FakeLdap modify item failed: item has no attribute \"%s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:273
+#, python-format
+msgid ""
+"FakeLdap modify item failed: item has no attribute \"%(k)s\" with value "
+"\"%(v)s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:279
+#, python-format
+msgid "FakeLdap modify item failed: unknown command %s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:281
+#, python-format
+msgid "modify_s action %s not implemented"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:300
+#, python-format
+msgid "FakeLdap search at dn=%(dn)s scope=%(scope)s query=%(query)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:306
+msgid "FakeLdap search fail: dn not found for SCOPE_BASE"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:320
+#, python-format
+msgid "Search scope %s not implemented."
+msgstr ""
+
+#: keystone/common/sql/core.py:119
+msgid "Global engine callback raised."
+msgstr ""
+
+#: keystone/common/sql/core.py:233
+#, python-format
+msgid "Got mysql server has gone away: %s"
+msgstr ""
+
+#: keystone/common/sql/legacy.py:188
+#, python-format
+msgid "Cannot migrate EC2 credential: %s"
+msgstr ""
+
+#: keystone/common/sql/migration.py:47
+msgid "version should be an integer"
+msgstr ""
+
+#: keystone/common/sql/nova.py:65
+#, python-format
+msgid "Create tenant %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:82
+#, python-format
+msgid "Create user %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:91
+#, python-format
+msgid "Add user %(user_id)s to tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:100
+#, python-format
+msgid "Ignoring existing role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:107
+#, python-format
+msgid "Create role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:117
+#, python-format
+msgid "Assign role %(role_id)s to user %(user_id)s on tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:136
+#, python-format
+msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/identity/controllers.py:952
+#, python-format
+msgid ""
+"Group %(group)s not found for role-assignment - %(target)s with Role: "
+"%(role)s"
+msgstr ""
+
+#: keystone/identity/backends/kvs.py:126 keystone/identity/backends/kvs.py:135
+msgid "User not found in group"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:189
+#, python-format
+msgid ""
+"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
+"be removed from the group. The user will be ignored."
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:334
+msgid "Changing Name not supported by LDAP"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:347
+#, python-format
+msgid "User %(user_id)s is already a member of group %(group_id)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:394
+#, python-format
+msgid "Failed to understand rule %(rule)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:404
+#, python-format
+msgid "No handler for matches of kind %s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:679
+#, python-format
+msgid "Failed to understand rule %(rule)r"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
+#: keystone/policy/backends/rules.py:93
+#, python-format
+msgid "enforce %(action)s: %(credentials)s"
+msgstr ""
+
+#: keystone/token/controllers.py:378
+#, python-format
+msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
+msgstr ""
+
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
+msgid "Token does not belong to specified tenant."
+msgstr ""
+
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
+msgstr ""
+
+#: keystone/token/backends/memcache.py:144
+#, python-format
+msgid ""
+"Successful set of token-index-list for user-key \"%(user_key)s\", "
+"#%(count)d records"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:154
+#, python-format
+msgid ""
+"Failed to set token-index-list for user-key \"%(user_key)s\". Attempt "
+"%(cas_retry)d of %(cas_retry_max)d"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:163
+msgid "Unable to add token user list"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:172
+msgid "Unable to add token to revocation list."
+msgstr ""
+
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
diff --git a/keystone/locale/ko_KR/LC_MESSAGES/keystone.po b/keystone/locale/ko_KR/LC_MESSAGES/keystone.po
index 47659fa0..733aef75 100644
--- a/keystone/locale/ko_KR/LC_MESSAGES/keystone.po
+++ b/keystone/locale/ko_KR/LC_MESSAGES/keystone.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Keystone\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
-"POT-Creation-Date: 2013-07-11 17:05+0000\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
"PO-Revision-Date: 2013-03-21 18:34+0000\n"
"Last-Translator: openstackjenkins <jenkins@openstack.org>\n"
"Language-Team: ko_KR <LL@li.org>\n"
@@ -16,7 +16,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 0.9.6\n"
+"Generated-By: Babel 1.3\n"
#: keystone/clean.py:23
#, python-format
@@ -38,78 +38,224 @@ msgstr ""
msgid "%(property_name)s is not a %(display_expected_type)s"
msgstr ""
-#: keystone/test.py:106
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
#, python-format
msgid "Failed to checkout %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:110
+#: keystone/assignment/core.py:529
#, python-format
msgid "Expected dict or list: %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:456
-#: keystone/identity/backends/ldap.py:433
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
#, python-format
-msgid "Role %s not found"
+msgid "Cannot remove role that has not been granted, %s"
msgstr ""
-#: keystone/assignment/backends/sql.py:244
+#: keystone/assignment/backends/ldap.py:418
#, python-format
-msgid "Cannot remove role that has not been granted, %s"
+msgid "Role %s not found"
msgstr ""
-#: keystone/auth/controllers.py:72
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
#, python-format
msgid "Project is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:78 keystone/auth/plugins/password.py:38
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
#, python-format
msgid "Domain is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:84 keystone/auth/plugins/password.py:44
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
#, python-format
msgid "User is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:259
+#: keystone/auth/controllers.py:262
msgid "Scoping to both domain and project is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:262
+#: keystone/auth/controllers.py:265
msgid "Scoping to both domain and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:265
+#: keystone/auth/controllers.py:268
msgid "Scoping to both project and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:325
-#, python-format
-msgid "Unable to lookup user %s"
-msgstr ""
-
-#: keystone/auth/controllers.py:355
+#: keystone/auth/controllers.py:353
msgid "User not found"
msgstr ""
-#: keystone/auth/token_factory.py:79
-msgid "User have no access to project"
-msgstr ""
-
-#: keystone/auth/token_factory.py:94
-msgid "User have no access to domain"
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
msgstr ""
-#: keystone/auth/token_factory.py:311 keystone/token/controllers.py:119
-msgid "Unable to sign token."
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
msgstr ""
-#: keystone/auth/token_factory.py:314 keystone/token/controllers.py:122
-#, python-format
-msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
msgstr ""
#: keystone/catalog/core.py:38
@@ -170,32 +316,32 @@ msgstr ""
msgid "RBAC: Invalid token"
msgstr ""
-#: keystone/common/controller.py:35 keystone/common/controller.py:56
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
msgid "RBAC: Invalid user"
msgstr ""
-#: keystone/common/controller.py:41
+#: keystone/common/controller.py:45
msgid "RBAC: Proceeding without project"
msgstr ""
-#: keystone/common/controller.py:61
+#: keystone/common/controller.py:65
msgid "RBAC: Proceeding without tenant"
msgstr ""
-#: keystone/common/controller.py:91 keystone/common/controller.py:142
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
msgid "RBAC: Bypassing authorization"
msgstr ""
-#: keystone/common/controller.py:100 keystone/common/controller.py:140
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
msgid "RBAC: Authorization granted"
msgstr ""
-#: keystone/common/controller.py:130
+#: keystone/common/controller.py:134
#, python-format
msgid "RBAC: Adding query filter params (%s)"
msgstr ""
-#: keystone/common/controller.py:318
+#: keystone/common/controller.py:322
msgid "Invalid token in normalize_domain_id"
msgstr ""
@@ -206,17 +352,48 @@ msgid ""
"listening on that port."
msgstr ""
-#: keystone/common/wsgi.py:162
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
#, python-format
msgid "arg_dict: %s"
msgstr ""
-#: keystone/common/wsgi.py:188
+#: keystone/common/wsgi.py:243
#, python-format
msgid "Authorization failed. %(exception)s from %(remote_addr)s"
msgstr ""
-#: keystone/common/wsgi.py:431
+#: keystone/common/wsgi.py:487
msgid "The resource could not be found."
msgstr ""
@@ -457,11 +634,11 @@ msgstr ""
msgid "Search scope %s not implemented."
msgstr ""
-#: keystone/common/sql/core.py:126
+#: keystone/common/sql/core.py:119
msgid "Global engine callback raised."
msgstr ""
-#: keystone/common/sql/core.py:240
+#: keystone/common/sql/core.py:233
#, python-format
msgid "Got mysql server has gone away: %s"
msgstr ""
@@ -510,7 +687,7 @@ msgstr ""
msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
msgstr ""
-#: keystone/identity/controllers.py:878
+#: keystone/identity/controllers.py:952
#, python-format
msgid ""
"Group %(group)s not found for role-assignment - %(target)s with Role: "
@@ -521,18 +698,18 @@ msgstr ""
msgid "User not found in group"
msgstr ""
-#: keystone/identity/backends/ldap.py:192
+#: keystone/identity/backends/ldap.py:189
#, python-format
msgid ""
"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
"be removed from the group. The user will be ignored."
msgstr ""
-#: keystone/identity/backends/ldap.py:621
+#: keystone/identity/backends/ldap.py:334
msgid "Changing Name not supported by LDAP"
msgstr ""
-#: keystone/identity/backends/ldap.py:634
+#: keystone/identity/backends/ldap.py:347
#, python-format
msgid "User %(user_id)s is already a member of group %(group_id)s"
msgstr ""
@@ -552,26 +729,56 @@ msgstr ""
msgid "Failed to understand rule %(rule)r"
msgstr ""
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
#: keystone/policy/backends/rules.py:93
#, python-format
msgid "enforce %(action)s: %(credentials)s"
msgstr ""
-#: keystone/token/controllers.py:396
+#: keystone/token/controllers.py:378
#, python-format
msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
msgstr ""
-#: keystone/token/controllers.py:413 keystone/token/controllers.py:416
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
msgid "Token does not belong to specified tenant."
msgstr ""
-#: keystone/token/controllers.py:423
-msgid "Non-default domain is not supported"
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
msgstr ""
-#: keystone/token/controllers.py:431
-msgid "Domain scoped token is not supported"
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
msgstr ""
#: keystone/token/backends/memcache.py:144
@@ -596,3 +803,54 @@ msgstr ""
msgid "Unable to add token to revocation list."
msgstr ""
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
+#~ msgid "User have no access to project"
+#~ msgstr ""
+
+#~ msgid "User have no access to domain"
+#~ msgstr ""
+
+#~ msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#~ msgstr ""
+
diff --git a/keystone/locale/ms/LC_MESSAGES/keystone.po b/keystone/locale/ms/LC_MESSAGES/keystone.po
new file mode 100644
index 00000000..576761b9
--- /dev/null
+++ b/keystone/locale/ms/LC_MESSAGES/keystone.po
@@ -0,0 +1,847 @@
+# Malay translations for keystone.
+# Copyright (C) 2013 ORGANIZATION
+# This file is distributed under the same license as the keystone project.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Keystone\n"
+"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
+"PO-Revision-Date: 2013-07-29 22:01+0000\n"
+"Last-Translator: openstackjenkins <jenkins@openstack.org>\n"
+"Language-Team: Malay "
+"(http://www.transifex.com/projects/p/openstack/language/ms/)\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 1.3\n"
+
+#: keystone/clean.py:23
+#, python-format
+msgid "%s cannot be empty."
+msgstr ""
+
+#: keystone/clean.py:25
+#, python-format
+msgid "%(property_name)s cannot be less than %(min_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:29
+#, python-format
+msgid "%(property_name)s should not be greater than %(max_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:36
+#, python-format
+msgid "%(property_name)s is not a %(display_expected_type)s"
+msgstr ""
+
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
+#, python-format
+msgid "Failed to checkout %s"
+msgstr ""
+
+#: keystone/assignment/core.py:529
+#, python-format
+msgid "Expected dict or list: %s"
+msgstr ""
+
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
+#, python-format
+msgid "Cannot remove role that has not been granted, %s"
+msgstr ""
+
+#: keystone/assignment/backends/ldap.py:418
+#, python-format
+msgid "Role %s not found"
+msgstr ""
+
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
+#, python-format
+msgid "Project is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
+#, python-format
+msgid "Domain is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
+#, python-format
+msgid "User is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:262
+msgid "Scoping to both domain and project is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:265
+msgid "Scoping to both domain and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:268
+msgid "Scoping to both project and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:353
+msgid "User not found"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
+msgstr ""
+
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
+msgstr ""
+
+#: keystone/catalog/core.py:38
+#, python-format
+msgid "Malformed endpoint %(url)s - unknown key %(keyerror)s"
+msgstr ""
+
+#: keystone/catalog/core.py:43
+#, python-format
+msgid ""
+"Malformed endpoint %(url)s - unknown key %(keyerror)s(are you missing "
+"brackets ?)"
+msgstr ""
+
+#: keystone/catalog/core.py:49
+#, python-format
+msgid ""
+"Malformed endpoint %s - incomplete format (are you "
+"missing a type notifier ?)"
+msgstr ""
+
+#: keystone/catalog/backends/templated.py:109
+#, python-format
+msgid "Unable to open template file %s"
+msgstr ""
+
+#: keystone/common/cms.py:26
+#, python-format
+msgid "Verify error: %s"
+msgstr ""
+
+#: keystone/common/cms.py:118
+msgid ""
+"Signing error: Unable to load certificate - ensure you've configured PKI "
+"with 'keystone-manage pki_setup'"
+msgstr ""
+
+#: keystone/common/cms.py:122
+#, python-format
+msgid "Signing error: %s"
+msgstr ""
+
+#: keystone/common/config.py:89
+#, python-format
+msgid "Unable to locate specified logging config file: %s"
+msgstr ""
+
+#: keystone/common/config.py:107
+msgid "Invalid syslog facility"
+msgstr ""
+
+#: keystone/common/controller.py:18
+#, python-format
+msgid "RBAC: Authorizing %(action)s(%(kwargs)s)"
+msgstr ""
+
+#: keystone/common/controller.py:25
+msgid "RBAC: Invalid token"
+msgstr ""
+
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
+msgid "RBAC: Invalid user"
+msgstr ""
+
+#: keystone/common/controller.py:45
+msgid "RBAC: Proceeding without project"
+msgstr ""
+
+#: keystone/common/controller.py:65
+msgid "RBAC: Proceeding without tenant"
+msgstr ""
+
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
+msgid "RBAC: Bypassing authorization"
+msgstr ""
+
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
+msgid "RBAC: Authorization granted"
+msgstr ""
+
+#: keystone/common/controller.py:134
+#, python-format
+msgid "RBAC: Adding query filter params (%s)"
+msgstr ""
+
+#: keystone/common/controller.py:322
+msgid "Invalid token in normalize_domain_id"
+msgstr ""
+
+#: keystone/common/utils.py:233
+msgid ""
+"Error setting up the debug environment. Verify that the option --debug-"
+"url has the format <host>:<port> and that a debugger processes is "
+"listening on that port."
+msgstr ""
+
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
+#, python-format
+msgid "arg_dict: %s"
+msgstr ""
+
+#: keystone/common/wsgi.py:243
+#, python-format
+msgid "Authorization failed. %(exception)s from %(remote_addr)s"
+msgstr ""
+
+#: keystone/common/wsgi.py:487
+msgid "The resource could not be found."
+msgstr ""
+
+#: keystone/common/environment/__init__.py:37
+#, python-format
+msgid "Environment configured as: %s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:51
+#, python-format
+msgid "Starting %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:113
+msgid "Server error"
+msgstr ""
+
+#: keystone/common/ldap/core.py:79
+#, python-format
+msgid "Invalid LDAP deref option: %s. Choose one of: "
+msgstr ""
+
+#: keystone/common/ldap/core.py:87
+#, python-format
+msgid "Invalid LDAP TLS certs option: %(option). Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:99
+#, python-format
+msgid "Invalid LDAP scope: %(scope)s. Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:189
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%s\". Format must be "
+"<ldap_attribute>:<keystone_attribute>"
+msgstr ""
+
+#: keystone/common/ldap/core.py:195
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%(item)s\". Value "
+"\"%(attr_map)s\" must use one of %(keys)s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:279 keystone/identity/backends/kvs.py:177
+#: keystone/identity/backends/kvs.py:205
+#, python-format
+msgid "Duplicate name, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:289 keystone/identity/backends/kvs.py:170
+#, python-format
+msgid "Duplicate ID, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:294
+#, python-format
+msgid "LDAP %s create"
+msgstr ""
+
+#: keystone/common/ldap/core.py:372
+#, python-format
+msgid "LDAP %s update"
+msgstr ""
+
+#: keystone/common/ldap/core.py:405
+#, python-format
+msgid "LDAP %s delete"
+msgstr ""
+
+#: keystone/common/ldap/core.py:430
+#, python-format
+msgid "LDAP init: url=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:431
+#, python-format
+msgid ""
+"LDAP init: use_tls=%(use_tls)s\n"
+"tls_cacertfile=%(tls_cacertfile)s\n"
+"tls_cacertdir=%(tls_cacertdir)s\n"
+"tls_req_cert=%(tls_req_cert)s\n"
+"tls_avail=%(tls_avail)s\n"
+msgstr ""
+
+#: keystone/common/ldap/core.py:450
+msgid "Invalid TLS / LDAPS combination"
+msgstr ""
+
+#: keystone/common/ldap/core.py:454
+#, python-format
+msgid "Invalid LDAP TLS_AVAIL option: %s. TLS not available"
+msgstr ""
+
+#: keystone/common/ldap/core.py:464
+#, python-format
+msgid "tls_cacertfile %s not found or is not a file"
+msgstr ""
+
+#: keystone/common/ldap/core.py:476
+#, python-format
+msgid "tls_cacertdir %s not found or is not a directory"
+msgstr ""
+
+#: keystone/common/ldap/core.py:483
+#, python-format
+msgid "LDAP TLS: invalid TLS_REQUIRE_CERT Option=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:497
+#, python-format
+msgid "LDAP bind: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:508
+#, python-format
+msgid "LDAP add: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:514
+#, python-format
+msgid ""
+"LDAP search: dn=%(dn)s, scope=%(scope)s, query=%(query)s, "
+"attrs=%(attrlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:567
+msgid ""
+"LDAP Server does not support paging. Disable paging in keystone.conf to "
+"avoid this message."
+msgstr ""
+
+#: keystone/common/ldap/core.py:584
+#, python-format
+msgid "LDAP modify: dn=%(dn)s, modlist=%(modlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:590
+#, python-format
+msgid "LDAP delete: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:595
+#, python-format
+msgid "LDAP delete_ext: dn=%(dn)s, serverctrls=%(serverctrls)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:146
+#, python-format
+msgid "FakeLdap initialize url=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:156
+#, python-format
+msgid "FakeLdap bind dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:163
+#, python-format
+msgid "FakeLdap bind fail: dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:170
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:175
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s does not match"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:190
+#, python-format
+msgid "FakeLdap add item: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:193
+#, python-format
+msgid "FakeLdap add item failed: dn=%s is already in store."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:207 keystone/common/ldap/fakeldap.py:221
+#, python-format
+msgid "FakeLdap delete item: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:211 keystone/common/ldap/fakeldap.py:225
+#, python-format
+msgid "FakeLdap delete item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:240
+#, python-format
+msgid "FakeLdap modify item: dn=%(dn)s attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:245
+#, python-format
+msgid "FakeLdap modify item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:262
+#, python-format
+msgid "FakeLdap modify item failed: item has no attribute \"%s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:273
+#, python-format
+msgid ""
+"FakeLdap modify item failed: item has no attribute \"%(k)s\" with value "
+"\"%(v)s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:279
+#, python-format
+msgid "FakeLdap modify item failed: unknown command %s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:281
+#, python-format
+msgid "modify_s action %s not implemented"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:300
+#, python-format
+msgid "FakeLdap search at dn=%(dn)s scope=%(scope)s query=%(query)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:306
+msgid "FakeLdap search fail: dn not found for SCOPE_BASE"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:320
+#, python-format
+msgid "Search scope %s not implemented."
+msgstr ""
+
+#: keystone/common/sql/core.py:119
+msgid "Global engine callback raised."
+msgstr ""
+
+#: keystone/common/sql/core.py:233
+#, python-format
+msgid "Got mysql server has gone away: %s"
+msgstr ""
+
+#: keystone/common/sql/legacy.py:188
+#, python-format
+msgid "Cannot migrate EC2 credential: %s"
+msgstr ""
+
+#: keystone/common/sql/migration.py:47
+msgid "version should be an integer"
+msgstr ""
+
+#: keystone/common/sql/nova.py:65
+#, python-format
+msgid "Create tenant %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:82
+#, python-format
+msgid "Create user %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:91
+#, python-format
+msgid "Add user %(user_id)s to tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:100
+#, python-format
+msgid "Ignoring existing role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:107
+#, python-format
+msgid "Create role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:117
+#, python-format
+msgid "Assign role %(role_id)s to user %(user_id)s on tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:136
+#, python-format
+msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/identity/controllers.py:952
+#, python-format
+msgid ""
+"Group %(group)s not found for role-assignment - %(target)s with Role: "
+"%(role)s"
+msgstr ""
+
+#: keystone/identity/backends/kvs.py:126 keystone/identity/backends/kvs.py:135
+msgid "User not found in group"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:189
+#, python-format
+msgid ""
+"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
+"be removed from the group. The user will be ignored."
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:334
+msgid "Changing Name not supported by LDAP"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:347
+#, python-format
+msgid "User %(user_id)s is already a member of group %(group_id)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:394
+#, python-format
+msgid "Failed to understand rule %(rule)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:404
+#, python-format
+msgid "No handler for matches of kind %s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:679
+#, python-format
+msgid "Failed to understand rule %(rule)r"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
+#: keystone/policy/backends/rules.py:93
+#, python-format
+msgid "enforce %(action)s: %(credentials)s"
+msgstr ""
+
+#: keystone/token/controllers.py:378
+#, python-format
+msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
+msgstr ""
+
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
+msgid "Token does not belong to specified tenant."
+msgstr ""
+
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
+msgstr ""
+
+#: keystone/token/backends/memcache.py:144
+#, python-format
+msgid ""
+"Successful set of token-index-list for user-key \"%(user_key)s\", "
+"#%(count)d records"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:154
+#, python-format
+msgid ""
+"Failed to set token-index-list for user-key \"%(user_key)s\". Attempt "
+"%(cas_retry)d of %(cas_retry_max)d"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:163
+msgid "Unable to add token user list"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:172
+msgid "Unable to add token to revocation list."
+msgstr ""
+
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
diff --git a/keystone/locale/nb/LC_MESSAGES/keystone.po b/keystone/locale/nb/LC_MESSAGES/keystone.po
new file mode 100644
index 00000000..d7a13243
--- /dev/null
+++ b/keystone/locale/nb/LC_MESSAGES/keystone.po
@@ -0,0 +1,847 @@
+# Norwegian Bokmål translations for keystone.
+# Copyright (C) 2013 ORGANIZATION
+# This file is distributed under the same license as the keystone project.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Keystone\n"
+"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
+"PO-Revision-Date: 2013-07-29 22:01+0000\n"
+"Last-Translator: openstackjenkins <jenkins@openstack.org>\n"
+"Language-Team: Norwegian Bokmål "
+"(http://www.transifex.com/projects/p/openstack/language/nb/)\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 1.3\n"
+
+#: keystone/clean.py:23
+#, python-format
+msgid "%s cannot be empty."
+msgstr ""
+
+#: keystone/clean.py:25
+#, python-format
+msgid "%(property_name)s cannot be less than %(min_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:29
+#, python-format
+msgid "%(property_name)s should not be greater than %(max_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:36
+#, python-format
+msgid "%(property_name)s is not a %(display_expected_type)s"
+msgstr ""
+
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
+#, python-format
+msgid "Failed to checkout %s"
+msgstr ""
+
+#: keystone/assignment/core.py:529
+#, python-format
+msgid "Expected dict or list: %s"
+msgstr ""
+
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
+#, python-format
+msgid "Cannot remove role that has not been granted, %s"
+msgstr ""
+
+#: keystone/assignment/backends/ldap.py:418
+#, python-format
+msgid "Role %s not found"
+msgstr ""
+
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
+#, python-format
+msgid "Project is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
+#, python-format
+msgid "Domain is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
+#, python-format
+msgid "User is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:262
+msgid "Scoping to both domain and project is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:265
+msgid "Scoping to both domain and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:268
+msgid "Scoping to both project and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:353
+msgid "User not found"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
+msgstr ""
+
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
+msgstr ""
+
+#: keystone/catalog/core.py:38
+#, python-format
+msgid "Malformed endpoint %(url)s - unknown key %(keyerror)s"
+msgstr ""
+
+#: keystone/catalog/core.py:43
+#, python-format
+msgid ""
+"Malformed endpoint %(url)s - unknown key %(keyerror)s(are you missing "
+"brackets ?)"
+msgstr ""
+
+#: keystone/catalog/core.py:49
+#, python-format
+msgid ""
+"Malformed endpoint %s - incomplete format (are you "
+"missing a type notifier ?)"
+msgstr ""
+
+#: keystone/catalog/backends/templated.py:109
+#, python-format
+msgid "Unable to open template file %s"
+msgstr ""
+
+#: keystone/common/cms.py:26
+#, python-format
+msgid "Verify error: %s"
+msgstr ""
+
+#: keystone/common/cms.py:118
+msgid ""
+"Signing error: Unable to load certificate - ensure you've configured PKI "
+"with 'keystone-manage pki_setup'"
+msgstr ""
+
+#: keystone/common/cms.py:122
+#, python-format
+msgid "Signing error: %s"
+msgstr ""
+
+#: keystone/common/config.py:89
+#, python-format
+msgid "Unable to locate specified logging config file: %s"
+msgstr ""
+
+#: keystone/common/config.py:107
+msgid "Invalid syslog facility"
+msgstr ""
+
+#: keystone/common/controller.py:18
+#, python-format
+msgid "RBAC: Authorizing %(action)s(%(kwargs)s)"
+msgstr ""
+
+#: keystone/common/controller.py:25
+msgid "RBAC: Invalid token"
+msgstr ""
+
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
+msgid "RBAC: Invalid user"
+msgstr ""
+
+#: keystone/common/controller.py:45
+msgid "RBAC: Proceeding without project"
+msgstr ""
+
+#: keystone/common/controller.py:65
+msgid "RBAC: Proceeding without tenant"
+msgstr ""
+
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
+msgid "RBAC: Bypassing authorization"
+msgstr ""
+
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
+msgid "RBAC: Authorization granted"
+msgstr ""
+
+#: keystone/common/controller.py:134
+#, python-format
+msgid "RBAC: Adding query filter params (%s)"
+msgstr ""
+
+#: keystone/common/controller.py:322
+msgid "Invalid token in normalize_domain_id"
+msgstr ""
+
+#: keystone/common/utils.py:233
+msgid ""
+"Error setting up the debug environment. Verify that the option --debug-"
+"url has the format <host>:<port> and that a debugger processes is "
+"listening on that port."
+msgstr ""
+
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
+#, python-format
+msgid "arg_dict: %s"
+msgstr ""
+
+#: keystone/common/wsgi.py:243
+#, python-format
+msgid "Authorization failed. %(exception)s from %(remote_addr)s"
+msgstr ""
+
+#: keystone/common/wsgi.py:487
+msgid "The resource could not be found."
+msgstr ""
+
+#: keystone/common/environment/__init__.py:37
+#, python-format
+msgid "Environment configured as: %s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:51
+#, python-format
+msgid "Starting %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:113
+msgid "Server error"
+msgstr ""
+
+#: keystone/common/ldap/core.py:79
+#, python-format
+msgid "Invalid LDAP deref option: %s. Choose one of: "
+msgstr ""
+
+#: keystone/common/ldap/core.py:87
+#, python-format
+msgid "Invalid LDAP TLS certs option: %(option). Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:99
+#, python-format
+msgid "Invalid LDAP scope: %(scope)s. Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:189
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%s\". Format must be "
+"<ldap_attribute>:<keystone_attribute>"
+msgstr ""
+
+#: keystone/common/ldap/core.py:195
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%(item)s\". Value "
+"\"%(attr_map)s\" must use one of %(keys)s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:279 keystone/identity/backends/kvs.py:177
+#: keystone/identity/backends/kvs.py:205
+#, python-format
+msgid "Duplicate name, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:289 keystone/identity/backends/kvs.py:170
+#, python-format
+msgid "Duplicate ID, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:294
+#, python-format
+msgid "LDAP %s create"
+msgstr ""
+
+#: keystone/common/ldap/core.py:372
+#, python-format
+msgid "LDAP %s update"
+msgstr ""
+
+#: keystone/common/ldap/core.py:405
+#, python-format
+msgid "LDAP %s delete"
+msgstr ""
+
+#: keystone/common/ldap/core.py:430
+#, python-format
+msgid "LDAP init: url=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:431
+#, python-format
+msgid ""
+"LDAP init: use_tls=%(use_tls)s\n"
+"tls_cacertfile=%(tls_cacertfile)s\n"
+"tls_cacertdir=%(tls_cacertdir)s\n"
+"tls_req_cert=%(tls_req_cert)s\n"
+"tls_avail=%(tls_avail)s\n"
+msgstr ""
+
+#: keystone/common/ldap/core.py:450
+msgid "Invalid TLS / LDAPS combination"
+msgstr ""
+
+#: keystone/common/ldap/core.py:454
+#, python-format
+msgid "Invalid LDAP TLS_AVAIL option: %s. TLS not available"
+msgstr ""
+
+#: keystone/common/ldap/core.py:464
+#, python-format
+msgid "tls_cacertfile %s not found or is not a file"
+msgstr ""
+
+#: keystone/common/ldap/core.py:476
+#, python-format
+msgid "tls_cacertdir %s not found or is not a directory"
+msgstr ""
+
+#: keystone/common/ldap/core.py:483
+#, python-format
+msgid "LDAP TLS: invalid TLS_REQUIRE_CERT Option=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:497
+#, python-format
+msgid "LDAP bind: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:508
+#, python-format
+msgid "LDAP add: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:514
+#, python-format
+msgid ""
+"LDAP search: dn=%(dn)s, scope=%(scope)s, query=%(query)s, "
+"attrs=%(attrlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:567
+msgid ""
+"LDAP Server does not support paging. Disable paging in keystone.conf to "
+"avoid this message."
+msgstr ""
+
+#: keystone/common/ldap/core.py:584
+#, python-format
+msgid "LDAP modify: dn=%(dn)s, modlist=%(modlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:590
+#, python-format
+msgid "LDAP delete: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:595
+#, python-format
+msgid "LDAP delete_ext: dn=%(dn)s, serverctrls=%(serverctrls)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:146
+#, python-format
+msgid "FakeLdap initialize url=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:156
+#, python-format
+msgid "FakeLdap bind dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:163
+#, python-format
+msgid "FakeLdap bind fail: dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:170
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:175
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s does not match"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:190
+#, python-format
+msgid "FakeLdap add item: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:193
+#, python-format
+msgid "FakeLdap add item failed: dn=%s is already in store."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:207 keystone/common/ldap/fakeldap.py:221
+#, python-format
+msgid "FakeLdap delete item: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:211 keystone/common/ldap/fakeldap.py:225
+#, python-format
+msgid "FakeLdap delete item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:240
+#, python-format
+msgid "FakeLdap modify item: dn=%(dn)s attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:245
+#, python-format
+msgid "FakeLdap modify item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:262
+#, python-format
+msgid "FakeLdap modify item failed: item has no attribute \"%s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:273
+#, python-format
+msgid ""
+"FakeLdap modify item failed: item has no attribute \"%(k)s\" with value "
+"\"%(v)s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:279
+#, python-format
+msgid "FakeLdap modify item failed: unknown command %s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:281
+#, python-format
+msgid "modify_s action %s not implemented"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:300
+#, python-format
+msgid "FakeLdap search at dn=%(dn)s scope=%(scope)s query=%(query)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:306
+msgid "FakeLdap search fail: dn not found for SCOPE_BASE"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:320
+#, python-format
+msgid "Search scope %s not implemented."
+msgstr ""
+
+#: keystone/common/sql/core.py:119
+msgid "Global engine callback raised."
+msgstr ""
+
+#: keystone/common/sql/core.py:233
+#, python-format
+msgid "Got mysql server has gone away: %s"
+msgstr ""
+
+#: keystone/common/sql/legacy.py:188
+#, python-format
+msgid "Cannot migrate EC2 credential: %s"
+msgstr ""
+
+#: keystone/common/sql/migration.py:47
+msgid "version should be an integer"
+msgstr ""
+
+#: keystone/common/sql/nova.py:65
+#, python-format
+msgid "Create tenant %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:82
+#, python-format
+msgid "Create user %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:91
+#, python-format
+msgid "Add user %(user_id)s to tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:100
+#, python-format
+msgid "Ignoring existing role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:107
+#, python-format
+msgid "Create role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:117
+#, python-format
+msgid "Assign role %(role_id)s to user %(user_id)s on tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:136
+#, python-format
+msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/identity/controllers.py:952
+#, python-format
+msgid ""
+"Group %(group)s not found for role-assignment - %(target)s with Role: "
+"%(role)s"
+msgstr ""
+
+#: keystone/identity/backends/kvs.py:126 keystone/identity/backends/kvs.py:135
+msgid "User not found in group"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:189
+#, python-format
+msgid ""
+"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
+"be removed from the group. The user will be ignored."
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:334
+msgid "Changing Name not supported by LDAP"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:347
+#, python-format
+msgid "User %(user_id)s is already a member of group %(group_id)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:394
+#, python-format
+msgid "Failed to understand rule %(rule)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:404
+#, python-format
+msgid "No handler for matches of kind %s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:679
+#, python-format
+msgid "Failed to understand rule %(rule)r"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
+#: keystone/policy/backends/rules.py:93
+#, python-format
+msgid "enforce %(action)s: %(credentials)s"
+msgstr ""
+
+#: keystone/token/controllers.py:378
+#, python-format
+msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
+msgstr ""
+
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
+msgid "Token does not belong to specified tenant."
+msgstr ""
+
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
+msgstr ""
+
+#: keystone/token/backends/memcache.py:144
+#, python-format
+msgid ""
+"Successful set of token-index-list for user-key \"%(user_key)s\", "
+"#%(count)d records"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:154
+#, python-format
+msgid ""
+"Failed to set token-index-list for user-key \"%(user_key)s\". Attempt "
+"%(cas_retry)d of %(cas_retry_max)d"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:163
+msgid "Unable to add token user list"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:172
+msgid "Unable to add token to revocation list."
+msgstr ""
+
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
diff --git a/keystone/locale/nl_NL/LC_MESSAGES/keystone.po b/keystone/locale/nl_NL/LC_MESSAGES/keystone.po
new file mode 100644
index 00000000..6bbb3ab3
--- /dev/null
+++ b/keystone/locale/nl_NL/LC_MESSAGES/keystone.po
@@ -0,0 +1,847 @@
+# Dutch (Netherlands) translations for keystone.
+# Copyright (C) 2013 ORGANIZATION
+# This file is distributed under the same license as the keystone project.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Keystone\n"
+"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
+"PO-Revision-Date: 2013-07-29 22:01+0000\n"
+"Last-Translator: openstackjenkins <jenkins@openstack.org>\n"
+"Language-Team: Dutch (Netherlands) "
+"(http://www.transifex.com/projects/p/openstack/language/nl_NL/)\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 1.3\n"
+
+#: keystone/clean.py:23
+#, python-format
+msgid "%s cannot be empty."
+msgstr ""
+
+#: keystone/clean.py:25
+#, python-format
+msgid "%(property_name)s cannot be less than %(min_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:29
+#, python-format
+msgid "%(property_name)s should not be greater than %(max_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:36
+#, python-format
+msgid "%(property_name)s is not a %(display_expected_type)s"
+msgstr ""
+
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
+#, python-format
+msgid "Failed to checkout %s"
+msgstr ""
+
+#: keystone/assignment/core.py:529
+#, python-format
+msgid "Expected dict or list: %s"
+msgstr ""
+
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
+#, python-format
+msgid "Cannot remove role that has not been granted, %s"
+msgstr ""
+
+#: keystone/assignment/backends/ldap.py:418
+#, python-format
+msgid "Role %s not found"
+msgstr ""
+
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
+#, python-format
+msgid "Project is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
+#, python-format
+msgid "Domain is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
+#, python-format
+msgid "User is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:262
+msgid "Scoping to both domain and project is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:265
+msgid "Scoping to both domain and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:268
+msgid "Scoping to both project and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:353
+msgid "User not found"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
+msgstr ""
+
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
+msgstr ""
+
+#: keystone/catalog/core.py:38
+#, python-format
+msgid "Malformed endpoint %(url)s - unknown key %(keyerror)s"
+msgstr ""
+
+#: keystone/catalog/core.py:43
+#, python-format
+msgid ""
+"Malformed endpoint %(url)s - unknown key %(keyerror)s(are you missing "
+"brackets ?)"
+msgstr ""
+
+#: keystone/catalog/core.py:49
+#, python-format
+msgid ""
+"Malformed endpoint %s - incomplete format (are you "
+"missing a type notifier ?)"
+msgstr ""
+
+#: keystone/catalog/backends/templated.py:109
+#, python-format
+msgid "Unable to open template file %s"
+msgstr ""
+
+#: keystone/common/cms.py:26
+#, python-format
+msgid "Verify error: %s"
+msgstr ""
+
+#: keystone/common/cms.py:118
+msgid ""
+"Signing error: Unable to load certificate - ensure you've configured PKI "
+"with 'keystone-manage pki_setup'"
+msgstr ""
+
+#: keystone/common/cms.py:122
+#, python-format
+msgid "Signing error: %s"
+msgstr ""
+
+#: keystone/common/config.py:89
+#, python-format
+msgid "Unable to locate specified logging config file: %s"
+msgstr ""
+
+#: keystone/common/config.py:107
+msgid "Invalid syslog facility"
+msgstr ""
+
+#: keystone/common/controller.py:18
+#, python-format
+msgid "RBAC: Authorizing %(action)s(%(kwargs)s)"
+msgstr ""
+
+#: keystone/common/controller.py:25
+msgid "RBAC: Invalid token"
+msgstr ""
+
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
+msgid "RBAC: Invalid user"
+msgstr ""
+
+#: keystone/common/controller.py:45
+msgid "RBAC: Proceeding without project"
+msgstr ""
+
+#: keystone/common/controller.py:65
+msgid "RBAC: Proceeding without tenant"
+msgstr ""
+
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
+msgid "RBAC: Bypassing authorization"
+msgstr ""
+
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
+msgid "RBAC: Authorization granted"
+msgstr ""
+
+#: keystone/common/controller.py:134
+#, python-format
+msgid "RBAC: Adding query filter params (%s)"
+msgstr ""
+
+#: keystone/common/controller.py:322
+msgid "Invalid token in normalize_domain_id"
+msgstr ""
+
+#: keystone/common/utils.py:233
+msgid ""
+"Error setting up the debug environment. Verify that the option --debug-"
+"url has the format <host>:<port> and that a debugger processes is "
+"listening on that port."
+msgstr ""
+
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
+#, python-format
+msgid "arg_dict: %s"
+msgstr ""
+
+#: keystone/common/wsgi.py:243
+#, python-format
+msgid "Authorization failed. %(exception)s from %(remote_addr)s"
+msgstr ""
+
+#: keystone/common/wsgi.py:487
+msgid "The resource could not be found."
+msgstr ""
+
+#: keystone/common/environment/__init__.py:37
+#, python-format
+msgid "Environment configured as: %s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:51
+#, python-format
+msgid "Starting %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:113
+msgid "Server error"
+msgstr ""
+
+#: keystone/common/ldap/core.py:79
+#, python-format
+msgid "Invalid LDAP deref option: %s. Choose one of: "
+msgstr ""
+
+#: keystone/common/ldap/core.py:87
+#, python-format
+msgid "Invalid LDAP TLS certs option: %(option). Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:99
+#, python-format
+msgid "Invalid LDAP scope: %(scope)s. Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:189
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%s\". Format must be "
+"<ldap_attribute>:<keystone_attribute>"
+msgstr ""
+
+#: keystone/common/ldap/core.py:195
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%(item)s\". Value "
+"\"%(attr_map)s\" must use one of %(keys)s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:279 keystone/identity/backends/kvs.py:177
+#: keystone/identity/backends/kvs.py:205
+#, python-format
+msgid "Duplicate name, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:289 keystone/identity/backends/kvs.py:170
+#, python-format
+msgid "Duplicate ID, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:294
+#, python-format
+msgid "LDAP %s create"
+msgstr ""
+
+#: keystone/common/ldap/core.py:372
+#, python-format
+msgid "LDAP %s update"
+msgstr ""
+
+#: keystone/common/ldap/core.py:405
+#, python-format
+msgid "LDAP %s delete"
+msgstr ""
+
+#: keystone/common/ldap/core.py:430
+#, python-format
+msgid "LDAP init: url=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:431
+#, python-format
+msgid ""
+"LDAP init: use_tls=%(use_tls)s\n"
+"tls_cacertfile=%(tls_cacertfile)s\n"
+"tls_cacertdir=%(tls_cacertdir)s\n"
+"tls_req_cert=%(tls_req_cert)s\n"
+"tls_avail=%(tls_avail)s\n"
+msgstr ""
+
+#: keystone/common/ldap/core.py:450
+msgid "Invalid TLS / LDAPS combination"
+msgstr ""
+
+#: keystone/common/ldap/core.py:454
+#, python-format
+msgid "Invalid LDAP TLS_AVAIL option: %s. TLS not available"
+msgstr ""
+
+#: keystone/common/ldap/core.py:464
+#, python-format
+msgid "tls_cacertfile %s not found or is not a file"
+msgstr ""
+
+#: keystone/common/ldap/core.py:476
+#, python-format
+msgid "tls_cacertdir %s not found or is not a directory"
+msgstr ""
+
+#: keystone/common/ldap/core.py:483
+#, python-format
+msgid "LDAP TLS: invalid TLS_REQUIRE_CERT Option=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:497
+#, python-format
+msgid "LDAP bind: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:508
+#, python-format
+msgid "LDAP add: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:514
+#, python-format
+msgid ""
+"LDAP search: dn=%(dn)s, scope=%(scope)s, query=%(query)s, "
+"attrs=%(attrlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:567
+msgid ""
+"LDAP Server does not support paging. Disable paging in keystone.conf to "
+"avoid this message."
+msgstr ""
+
+#: keystone/common/ldap/core.py:584
+#, python-format
+msgid "LDAP modify: dn=%(dn)s, modlist=%(modlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:590
+#, python-format
+msgid "LDAP delete: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:595
+#, python-format
+msgid "LDAP delete_ext: dn=%(dn)s, serverctrls=%(serverctrls)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:146
+#, python-format
+msgid "FakeLdap initialize url=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:156
+#, python-format
+msgid "FakeLdap bind dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:163
+#, python-format
+msgid "FakeLdap bind fail: dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:170
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:175
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s does not match"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:190
+#, python-format
+msgid "FakeLdap add item: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:193
+#, python-format
+msgid "FakeLdap add item failed: dn=%s is already in store."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:207 keystone/common/ldap/fakeldap.py:221
+#, python-format
+msgid "FakeLdap delete item: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:211 keystone/common/ldap/fakeldap.py:225
+#, python-format
+msgid "FakeLdap delete item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:240
+#, python-format
+msgid "FakeLdap modify item: dn=%(dn)s attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:245
+#, python-format
+msgid "FakeLdap modify item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:262
+#, python-format
+msgid "FakeLdap modify item failed: item has no attribute \"%s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:273
+#, python-format
+msgid ""
+"FakeLdap modify item failed: item has no attribute \"%(k)s\" with value "
+"\"%(v)s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:279
+#, python-format
+msgid "FakeLdap modify item failed: unknown command %s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:281
+#, python-format
+msgid "modify_s action %s not implemented"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:300
+#, python-format
+msgid "FakeLdap search at dn=%(dn)s scope=%(scope)s query=%(query)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:306
+msgid "FakeLdap search fail: dn not found for SCOPE_BASE"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:320
+#, python-format
+msgid "Search scope %s not implemented."
+msgstr ""
+
+#: keystone/common/sql/core.py:119
+msgid "Global engine callback raised."
+msgstr ""
+
+#: keystone/common/sql/core.py:233
+#, python-format
+msgid "Got mysql server has gone away: %s"
+msgstr ""
+
+#: keystone/common/sql/legacy.py:188
+#, python-format
+msgid "Cannot migrate EC2 credential: %s"
+msgstr ""
+
+#: keystone/common/sql/migration.py:47
+msgid "version should be an integer"
+msgstr ""
+
+#: keystone/common/sql/nova.py:65
+#, python-format
+msgid "Create tenant %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:82
+#, python-format
+msgid "Create user %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:91
+#, python-format
+msgid "Add user %(user_id)s to tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:100
+#, python-format
+msgid "Ignoring existing role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:107
+#, python-format
+msgid "Create role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:117
+#, python-format
+msgid "Assign role %(role_id)s to user %(user_id)s on tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:136
+#, python-format
+msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/identity/controllers.py:952
+#, python-format
+msgid ""
+"Group %(group)s not found for role-assignment - %(target)s with Role: "
+"%(role)s"
+msgstr ""
+
+#: keystone/identity/backends/kvs.py:126 keystone/identity/backends/kvs.py:135
+msgid "User not found in group"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:189
+#, python-format
+msgid ""
+"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
+"be removed from the group. The user will be ignored."
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:334
+msgid "Changing Name not supported by LDAP"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:347
+#, python-format
+msgid "User %(user_id)s is already a member of group %(group_id)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:394
+#, python-format
+msgid "Failed to understand rule %(rule)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:404
+#, python-format
+msgid "No handler for matches of kind %s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:679
+#, python-format
+msgid "Failed to understand rule %(rule)r"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
+#: keystone/policy/backends/rules.py:93
+#, python-format
+msgid "enforce %(action)s: %(credentials)s"
+msgstr ""
+
+#: keystone/token/controllers.py:378
+#, python-format
+msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
+msgstr ""
+
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
+msgid "Token does not belong to specified tenant."
+msgstr ""
+
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
+msgstr ""
+
+#: keystone/token/backends/memcache.py:144
+#, python-format
+msgid ""
+"Successful set of token-index-list for user-key \"%(user_key)s\", "
+"#%(count)d records"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:154
+#, python-format
+msgid ""
+"Failed to set token-index-list for user-key \"%(user_key)s\". Attempt "
+"%(cas_retry)d of %(cas_retry_max)d"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:163
+msgid "Unable to add token user list"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:172
+msgid "Unable to add token to revocation list."
+msgstr ""
+
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
diff --git a/keystone/locale/pl_PL/LC_MESSAGES/keystone.po b/keystone/locale/pl_PL/LC_MESSAGES/keystone.po
index 960d8df6..1971b675 100644
--- a/keystone/locale/pl_PL/LC_MESSAGES/keystone.po
+++ b/keystone/locale/pl_PL/LC_MESSAGES/keystone.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Keystone\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
-"POT-Creation-Date: 2013-07-11 17:05+0000\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
"PO-Revision-Date: 2013-06-28 06:06+0000\n"
"Last-Translator: daisy.ycguo <daisy.ycguo@gmail.com>\n"
"Language-Team: Polish (Poland) "
@@ -17,7 +17,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 0.9.6\n"
+"Generated-By: Babel 1.3\n"
#: keystone/clean.py:23
#, python-format
@@ -39,78 +39,224 @@ msgstr ""
msgid "%(property_name)s is not a %(display_expected_type)s"
msgstr ""
-#: keystone/test.py:106
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
#, python-format
msgid "Failed to checkout %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:110
+#: keystone/assignment/core.py:529
#, python-format
msgid "Expected dict or list: %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:456
-#: keystone/identity/backends/ldap.py:433
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
#, python-format
-msgid "Role %s not found"
+msgid "Cannot remove role that has not been granted, %s"
msgstr ""
-#: keystone/assignment/backends/sql.py:244
+#: keystone/assignment/backends/ldap.py:418
#, python-format
-msgid "Cannot remove role that has not been granted, %s"
+msgid "Role %s not found"
msgstr ""
-#: keystone/auth/controllers.py:72
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
#, python-format
msgid "Project is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:78 keystone/auth/plugins/password.py:38
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
#, python-format
msgid "Domain is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:84 keystone/auth/plugins/password.py:44
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
#, python-format
msgid "User is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:259
+#: keystone/auth/controllers.py:262
msgid "Scoping to both domain and project is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:262
+#: keystone/auth/controllers.py:265
msgid "Scoping to both domain and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:265
+#: keystone/auth/controllers.py:268
msgid "Scoping to both project and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:325
-#, python-format
-msgid "Unable to lookup user %s"
-msgstr ""
-
-#: keystone/auth/controllers.py:355
+#: keystone/auth/controllers.py:353
msgid "User not found"
msgstr ""
-#: keystone/auth/token_factory.py:79
-msgid "User have no access to project"
-msgstr ""
-
-#: keystone/auth/token_factory.py:94
-msgid "User have no access to domain"
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
msgstr ""
-#: keystone/auth/token_factory.py:311 keystone/token/controllers.py:119
-msgid "Unable to sign token."
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
msgstr ""
-#: keystone/auth/token_factory.py:314 keystone/token/controllers.py:122
-#, python-format
-msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
msgstr ""
#: keystone/catalog/core.py:38
@@ -171,32 +317,32 @@ msgstr ""
msgid "RBAC: Invalid token"
msgstr ""
-#: keystone/common/controller.py:35 keystone/common/controller.py:56
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
msgid "RBAC: Invalid user"
msgstr ""
-#: keystone/common/controller.py:41
+#: keystone/common/controller.py:45
msgid "RBAC: Proceeding without project"
msgstr ""
-#: keystone/common/controller.py:61
+#: keystone/common/controller.py:65
msgid "RBAC: Proceeding without tenant"
msgstr ""
-#: keystone/common/controller.py:91 keystone/common/controller.py:142
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
msgid "RBAC: Bypassing authorization"
msgstr ""
-#: keystone/common/controller.py:100 keystone/common/controller.py:140
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
msgid "RBAC: Authorization granted"
msgstr ""
-#: keystone/common/controller.py:130
+#: keystone/common/controller.py:134
#, python-format
msgid "RBAC: Adding query filter params (%s)"
msgstr ""
-#: keystone/common/controller.py:318
+#: keystone/common/controller.py:322
msgid "Invalid token in normalize_domain_id"
msgstr ""
@@ -207,17 +353,48 @@ msgid ""
"listening on that port."
msgstr ""
-#: keystone/common/wsgi.py:162
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
#, python-format
msgid "arg_dict: %s"
msgstr ""
-#: keystone/common/wsgi.py:188
+#: keystone/common/wsgi.py:243
#, python-format
msgid "Authorization failed. %(exception)s from %(remote_addr)s"
msgstr ""
-#: keystone/common/wsgi.py:431
+#: keystone/common/wsgi.py:487
msgid "The resource could not be found."
msgstr ""
@@ -458,11 +635,11 @@ msgstr ""
msgid "Search scope %s not implemented."
msgstr ""
-#: keystone/common/sql/core.py:126
+#: keystone/common/sql/core.py:119
msgid "Global engine callback raised."
msgstr ""
-#: keystone/common/sql/core.py:240
+#: keystone/common/sql/core.py:233
#, python-format
msgid "Got mysql server has gone away: %s"
msgstr ""
@@ -511,7 +688,7 @@ msgstr ""
msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
msgstr ""
-#: keystone/identity/controllers.py:878
+#: keystone/identity/controllers.py:952
#, python-format
msgid ""
"Group %(group)s not found for role-assignment - %(target)s with Role: "
@@ -522,18 +699,18 @@ msgstr ""
msgid "User not found in group"
msgstr ""
-#: keystone/identity/backends/ldap.py:192
+#: keystone/identity/backends/ldap.py:189
#, python-format
msgid ""
"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
"be removed from the group. The user will be ignored."
msgstr ""
-#: keystone/identity/backends/ldap.py:621
+#: keystone/identity/backends/ldap.py:334
msgid "Changing Name not supported by LDAP"
msgstr ""
-#: keystone/identity/backends/ldap.py:634
+#: keystone/identity/backends/ldap.py:347
#, python-format
msgid "User %(user_id)s is already a member of group %(group_id)s"
msgstr ""
@@ -553,26 +730,56 @@ msgstr ""
msgid "Failed to understand rule %(rule)r"
msgstr ""
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
#: keystone/policy/backends/rules.py:93
#, python-format
msgid "enforce %(action)s: %(credentials)s"
msgstr ""
-#: keystone/token/controllers.py:396
+#: keystone/token/controllers.py:378
#, python-format
msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
msgstr ""
-#: keystone/token/controllers.py:413 keystone/token/controllers.py:416
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
msgid "Token does not belong to specified tenant."
msgstr ""
-#: keystone/token/controllers.py:423
-msgid "Non-default domain is not supported"
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
msgstr ""
-#: keystone/token/controllers.py:431
-msgid "Domain scoped token is not supported"
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
msgstr ""
#: keystone/token/backends/memcache.py:144
@@ -597,3 +804,54 @@ msgstr ""
msgid "Unable to add token to revocation list."
msgstr ""
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
+#~ msgid "User have no access to project"
+#~ msgstr ""
+
+#~ msgid "User have no access to domain"
+#~ msgstr ""
+
+#~ msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#~ msgstr ""
+
diff --git a/keystone/locale/pt/LC_MESSAGES/keystone.po b/keystone/locale/pt/LC_MESSAGES/keystone.po
new file mode 100644
index 00000000..7f09b091
--- /dev/null
+++ b/keystone/locale/pt/LC_MESSAGES/keystone.po
@@ -0,0 +1,847 @@
+# Portuguese translations for keystone.
+# Copyright (C) 2013 ORGANIZATION
+# This file is distributed under the same license as the keystone project.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Keystone\n"
+"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
+"PO-Revision-Date: 2013-07-29 22:01+0000\n"
+"Last-Translator: openstackjenkins <jenkins@openstack.org>\n"
+"Language-Team: Portuguese "
+"(http://www.transifex.com/projects/p/openstack/language/pt/)\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 1.3\n"
+
+#: keystone/clean.py:23
+#, python-format
+msgid "%s cannot be empty."
+msgstr ""
+
+#: keystone/clean.py:25
+#, python-format
+msgid "%(property_name)s cannot be less than %(min_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:29
+#, python-format
+msgid "%(property_name)s should not be greater than %(max_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:36
+#, python-format
+msgid "%(property_name)s is not a %(display_expected_type)s"
+msgstr ""
+
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
+#, python-format
+msgid "Failed to checkout %s"
+msgstr ""
+
+#: keystone/assignment/core.py:529
+#, python-format
+msgid "Expected dict or list: %s"
+msgstr ""
+
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
+#, python-format
+msgid "Cannot remove role that has not been granted, %s"
+msgstr ""
+
+#: keystone/assignment/backends/ldap.py:418
+#, python-format
+msgid "Role %s not found"
+msgstr ""
+
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
+#, python-format
+msgid "Project is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
+#, python-format
+msgid "Domain is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
+#, python-format
+msgid "User is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:262
+msgid "Scoping to both domain and project is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:265
+msgid "Scoping to both domain and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:268
+msgid "Scoping to both project and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:353
+msgid "User not found"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
+msgstr ""
+
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
+msgstr ""
+
+#: keystone/catalog/core.py:38
+#, python-format
+msgid "Malformed endpoint %(url)s - unknown key %(keyerror)s"
+msgstr ""
+
+#: keystone/catalog/core.py:43
+#, python-format
+msgid ""
+"Malformed endpoint %(url)s - unknown key %(keyerror)s(are you missing "
+"brackets ?)"
+msgstr ""
+
+#: keystone/catalog/core.py:49
+#, python-format
+msgid ""
+"Malformed endpoint %s - incomplete format (are you "
+"missing a type notifier ?)"
+msgstr ""
+
+#: keystone/catalog/backends/templated.py:109
+#, python-format
+msgid "Unable to open template file %s"
+msgstr ""
+
+#: keystone/common/cms.py:26
+#, python-format
+msgid "Verify error: %s"
+msgstr ""
+
+#: keystone/common/cms.py:118
+msgid ""
+"Signing error: Unable to load certificate - ensure you've configured PKI "
+"with 'keystone-manage pki_setup'"
+msgstr ""
+
+#: keystone/common/cms.py:122
+#, python-format
+msgid "Signing error: %s"
+msgstr ""
+
+#: keystone/common/config.py:89
+#, python-format
+msgid "Unable to locate specified logging config file: %s"
+msgstr ""
+
+#: keystone/common/config.py:107
+msgid "Invalid syslog facility"
+msgstr ""
+
+#: keystone/common/controller.py:18
+#, python-format
+msgid "RBAC: Authorizing %(action)s(%(kwargs)s)"
+msgstr ""
+
+#: keystone/common/controller.py:25
+msgid "RBAC: Invalid token"
+msgstr ""
+
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
+msgid "RBAC: Invalid user"
+msgstr ""
+
+#: keystone/common/controller.py:45
+msgid "RBAC: Proceeding without project"
+msgstr ""
+
+#: keystone/common/controller.py:65
+msgid "RBAC: Proceeding without tenant"
+msgstr ""
+
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
+msgid "RBAC: Bypassing authorization"
+msgstr ""
+
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
+msgid "RBAC: Authorization granted"
+msgstr ""
+
+#: keystone/common/controller.py:134
+#, python-format
+msgid "RBAC: Adding query filter params (%s)"
+msgstr ""
+
+#: keystone/common/controller.py:322
+msgid "Invalid token in normalize_domain_id"
+msgstr ""
+
+#: keystone/common/utils.py:233
+msgid ""
+"Error setting up the debug environment. Verify that the option --debug-"
+"url has the format <host>:<port> and that a debugger processes is "
+"listening on that port."
+msgstr ""
+
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
+#, python-format
+msgid "arg_dict: %s"
+msgstr ""
+
+#: keystone/common/wsgi.py:243
+#, python-format
+msgid "Authorization failed. %(exception)s from %(remote_addr)s"
+msgstr ""
+
+#: keystone/common/wsgi.py:487
+msgid "The resource could not be found."
+msgstr ""
+
+#: keystone/common/environment/__init__.py:37
+#, python-format
+msgid "Environment configured as: %s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:51
+#, python-format
+msgid "Starting %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:113
+msgid "Server error"
+msgstr ""
+
+#: keystone/common/ldap/core.py:79
+#, python-format
+msgid "Invalid LDAP deref option: %s. Choose one of: "
+msgstr ""
+
+#: keystone/common/ldap/core.py:87
+#, python-format
+msgid "Invalid LDAP TLS certs option: %(option). Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:99
+#, python-format
+msgid "Invalid LDAP scope: %(scope)s. Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:189
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%s\". Format must be "
+"<ldap_attribute>:<keystone_attribute>"
+msgstr ""
+
+#: keystone/common/ldap/core.py:195
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%(item)s\". Value "
+"\"%(attr_map)s\" must use one of %(keys)s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:279 keystone/identity/backends/kvs.py:177
+#: keystone/identity/backends/kvs.py:205
+#, python-format
+msgid "Duplicate name, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:289 keystone/identity/backends/kvs.py:170
+#, python-format
+msgid "Duplicate ID, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:294
+#, python-format
+msgid "LDAP %s create"
+msgstr ""
+
+#: keystone/common/ldap/core.py:372
+#, python-format
+msgid "LDAP %s update"
+msgstr ""
+
+#: keystone/common/ldap/core.py:405
+#, python-format
+msgid "LDAP %s delete"
+msgstr ""
+
+#: keystone/common/ldap/core.py:430
+#, python-format
+msgid "LDAP init: url=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:431
+#, python-format
+msgid ""
+"LDAP init: use_tls=%(use_tls)s\n"
+"tls_cacertfile=%(tls_cacertfile)s\n"
+"tls_cacertdir=%(tls_cacertdir)s\n"
+"tls_req_cert=%(tls_req_cert)s\n"
+"tls_avail=%(tls_avail)s\n"
+msgstr ""
+
+#: keystone/common/ldap/core.py:450
+msgid "Invalid TLS / LDAPS combination"
+msgstr ""
+
+#: keystone/common/ldap/core.py:454
+#, python-format
+msgid "Invalid LDAP TLS_AVAIL option: %s. TLS not available"
+msgstr ""
+
+#: keystone/common/ldap/core.py:464
+#, python-format
+msgid "tls_cacertfile %s not found or is not a file"
+msgstr ""
+
+#: keystone/common/ldap/core.py:476
+#, python-format
+msgid "tls_cacertdir %s not found or is not a directory"
+msgstr ""
+
+#: keystone/common/ldap/core.py:483
+#, python-format
+msgid "LDAP TLS: invalid TLS_REQUIRE_CERT Option=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:497
+#, python-format
+msgid "LDAP bind: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:508
+#, python-format
+msgid "LDAP add: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:514
+#, python-format
+msgid ""
+"LDAP search: dn=%(dn)s, scope=%(scope)s, query=%(query)s, "
+"attrs=%(attrlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:567
+msgid ""
+"LDAP Server does not support paging. Disable paging in keystone.conf to "
+"avoid this message."
+msgstr ""
+
+#: keystone/common/ldap/core.py:584
+#, python-format
+msgid "LDAP modify: dn=%(dn)s, modlist=%(modlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:590
+#, python-format
+msgid "LDAP delete: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:595
+#, python-format
+msgid "LDAP delete_ext: dn=%(dn)s, serverctrls=%(serverctrls)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:146
+#, python-format
+msgid "FakeLdap initialize url=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:156
+#, python-format
+msgid "FakeLdap bind dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:163
+#, python-format
+msgid "FakeLdap bind fail: dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:170
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:175
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s does not match"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:190
+#, python-format
+msgid "FakeLdap add item: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:193
+#, python-format
+msgid "FakeLdap add item failed: dn=%s is already in store."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:207 keystone/common/ldap/fakeldap.py:221
+#, python-format
+msgid "FakeLdap delete item: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:211 keystone/common/ldap/fakeldap.py:225
+#, python-format
+msgid "FakeLdap delete item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:240
+#, python-format
+msgid "FakeLdap modify item: dn=%(dn)s attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:245
+#, python-format
+msgid "FakeLdap modify item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:262
+#, python-format
+msgid "FakeLdap modify item failed: item has no attribute \"%s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:273
+#, python-format
+msgid ""
+"FakeLdap modify item failed: item has no attribute \"%(k)s\" with value "
+"\"%(v)s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:279
+#, python-format
+msgid "FakeLdap modify item failed: unknown command %s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:281
+#, python-format
+msgid "modify_s action %s not implemented"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:300
+#, python-format
+msgid "FakeLdap search at dn=%(dn)s scope=%(scope)s query=%(query)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:306
+msgid "FakeLdap search fail: dn not found for SCOPE_BASE"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:320
+#, python-format
+msgid "Search scope %s not implemented."
+msgstr ""
+
+#: keystone/common/sql/core.py:119
+msgid "Global engine callback raised."
+msgstr ""
+
+#: keystone/common/sql/core.py:233
+#, python-format
+msgid "Got mysql server has gone away: %s"
+msgstr ""
+
+#: keystone/common/sql/legacy.py:188
+#, python-format
+msgid "Cannot migrate EC2 credential: %s"
+msgstr ""
+
+#: keystone/common/sql/migration.py:47
+msgid "version should be an integer"
+msgstr ""
+
+#: keystone/common/sql/nova.py:65
+#, python-format
+msgid "Create tenant %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:82
+#, python-format
+msgid "Create user %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:91
+#, python-format
+msgid "Add user %(user_id)s to tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:100
+#, python-format
+msgid "Ignoring existing role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:107
+#, python-format
+msgid "Create role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:117
+#, python-format
+msgid "Assign role %(role_id)s to user %(user_id)s on tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:136
+#, python-format
+msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/identity/controllers.py:952
+#, python-format
+msgid ""
+"Group %(group)s not found for role-assignment - %(target)s with Role: "
+"%(role)s"
+msgstr ""
+
+#: keystone/identity/backends/kvs.py:126 keystone/identity/backends/kvs.py:135
+msgid "User not found in group"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:189
+#, python-format
+msgid ""
+"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
+"be removed from the group. The user will be ignored."
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:334
+msgid "Changing Name not supported by LDAP"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:347
+#, python-format
+msgid "User %(user_id)s is already a member of group %(group_id)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:394
+#, python-format
+msgid "Failed to understand rule %(rule)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:404
+#, python-format
+msgid "No handler for matches of kind %s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:679
+#, python-format
+msgid "Failed to understand rule %(rule)r"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
+#: keystone/policy/backends/rules.py:93
+#, python-format
+msgid "enforce %(action)s: %(credentials)s"
+msgstr ""
+
+#: keystone/token/controllers.py:378
+#, python-format
+msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
+msgstr ""
+
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
+msgid "Token does not belong to specified tenant."
+msgstr ""
+
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
+msgstr ""
+
+#: keystone/token/backends/memcache.py:144
+#, python-format
+msgid ""
+"Successful set of token-index-list for user-key \"%(user_key)s\", "
+"#%(count)d records"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:154
+#, python-format
+msgid ""
+"Failed to set token-index-list for user-key \"%(user_key)s\". Attempt "
+"%(cas_retry)d of %(cas_retry_max)d"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:163
+msgid "Unable to add token user list"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:172
+msgid "Unable to add token to revocation list."
+msgstr ""
+
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
diff --git a/keystone/locale/pt_BR/LC_MESSAGES/keystone.po b/keystone/locale/pt_BR/LC_MESSAGES/keystone.po
index fed29df8..c580894d 100644
--- a/keystone/locale/pt_BR/LC_MESSAGES/keystone.po
+++ b/keystone/locale/pt_BR/LC_MESSAGES/keystone.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Keystone\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
-"POT-Creation-Date: 2013-07-11 17:05+0000\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
"PO-Revision-Date: 2012-11-02 18:30+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Portuguese (Brazil) "
@@ -16,7 +16,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 0.9.6\n"
+"Generated-By: Babel 1.3\n"
#: keystone/clean.py:23
#, python-format
@@ -38,78 +38,224 @@ msgstr ""
msgid "%(property_name)s is not a %(display_expected_type)s"
msgstr ""
-#: keystone/test.py:106
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
#, python-format
msgid "Failed to checkout %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:110
+#: keystone/assignment/core.py:529
#, python-format
msgid "Expected dict or list: %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:456
-#: keystone/identity/backends/ldap.py:433
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
#, python-format
-msgid "Role %s not found"
+msgid "Cannot remove role that has not been granted, %s"
msgstr ""
-#: keystone/assignment/backends/sql.py:244
+#: keystone/assignment/backends/ldap.py:418
#, python-format
-msgid "Cannot remove role that has not been granted, %s"
+msgid "Role %s not found"
msgstr ""
-#: keystone/auth/controllers.py:72
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
#, python-format
msgid "Project is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:78 keystone/auth/plugins/password.py:38
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
#, python-format
msgid "Domain is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:84 keystone/auth/plugins/password.py:44
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
#, python-format
msgid "User is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:259
+#: keystone/auth/controllers.py:262
msgid "Scoping to both domain and project is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:262
+#: keystone/auth/controllers.py:265
msgid "Scoping to both domain and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:265
+#: keystone/auth/controllers.py:268
msgid "Scoping to both project and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:325
-#, python-format
-msgid "Unable to lookup user %s"
-msgstr ""
-
-#: keystone/auth/controllers.py:355
+#: keystone/auth/controllers.py:353
msgid "User not found"
msgstr ""
-#: keystone/auth/token_factory.py:79
-msgid "User have no access to project"
-msgstr ""
-
-#: keystone/auth/token_factory.py:94
-msgid "User have no access to domain"
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
msgstr ""
-#: keystone/auth/token_factory.py:311 keystone/token/controllers.py:119
-msgid "Unable to sign token."
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
msgstr ""
-#: keystone/auth/token_factory.py:314 keystone/token/controllers.py:122
-#, python-format
-msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
msgstr ""
#: keystone/catalog/core.py:38
@@ -170,32 +316,32 @@ msgstr ""
msgid "RBAC: Invalid token"
msgstr ""
-#: keystone/common/controller.py:35 keystone/common/controller.py:56
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
msgid "RBAC: Invalid user"
msgstr ""
-#: keystone/common/controller.py:41
+#: keystone/common/controller.py:45
msgid "RBAC: Proceeding without project"
msgstr ""
-#: keystone/common/controller.py:61
+#: keystone/common/controller.py:65
msgid "RBAC: Proceeding without tenant"
msgstr ""
-#: keystone/common/controller.py:91 keystone/common/controller.py:142
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
msgid "RBAC: Bypassing authorization"
msgstr ""
-#: keystone/common/controller.py:100 keystone/common/controller.py:140
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
msgid "RBAC: Authorization granted"
msgstr ""
-#: keystone/common/controller.py:130
+#: keystone/common/controller.py:134
#, python-format
msgid "RBAC: Adding query filter params (%s)"
msgstr ""
-#: keystone/common/controller.py:318
+#: keystone/common/controller.py:322
msgid "Invalid token in normalize_domain_id"
msgstr ""
@@ -206,17 +352,48 @@ msgid ""
"listening on that port."
msgstr ""
-#: keystone/common/wsgi.py:162
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
#, python-format
msgid "arg_dict: %s"
msgstr ""
-#: keystone/common/wsgi.py:188
+#: keystone/common/wsgi.py:243
#, python-format
msgid "Authorization failed. %(exception)s from %(remote_addr)s"
msgstr ""
-#: keystone/common/wsgi.py:431
+#: keystone/common/wsgi.py:487
msgid "The resource could not be found."
msgstr ""
@@ -457,11 +634,11 @@ msgstr ""
msgid "Search scope %s not implemented."
msgstr ""
-#: keystone/common/sql/core.py:126
+#: keystone/common/sql/core.py:119
msgid "Global engine callback raised."
msgstr ""
-#: keystone/common/sql/core.py:240
+#: keystone/common/sql/core.py:233
#, python-format
msgid "Got mysql server has gone away: %s"
msgstr ""
@@ -510,7 +687,7 @@ msgstr ""
msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
msgstr ""
-#: keystone/identity/controllers.py:878
+#: keystone/identity/controllers.py:952
#, python-format
msgid ""
"Group %(group)s not found for role-assignment - %(target)s with Role: "
@@ -521,18 +698,18 @@ msgstr ""
msgid "User not found in group"
msgstr ""
-#: keystone/identity/backends/ldap.py:192
+#: keystone/identity/backends/ldap.py:189
#, python-format
msgid ""
"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
"be removed from the group. The user will be ignored."
msgstr ""
-#: keystone/identity/backends/ldap.py:621
+#: keystone/identity/backends/ldap.py:334
msgid "Changing Name not supported by LDAP"
msgstr ""
-#: keystone/identity/backends/ldap.py:634
+#: keystone/identity/backends/ldap.py:347
#, python-format
msgid "User %(user_id)s is already a member of group %(group_id)s"
msgstr ""
@@ -552,26 +729,56 @@ msgstr ""
msgid "Failed to understand rule %(rule)r"
msgstr ""
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
#: keystone/policy/backends/rules.py:93
#, python-format
msgid "enforce %(action)s: %(credentials)s"
msgstr ""
-#: keystone/token/controllers.py:396
+#: keystone/token/controllers.py:378
#, python-format
msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
msgstr ""
-#: keystone/token/controllers.py:413 keystone/token/controllers.py:416
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
msgid "Token does not belong to specified tenant."
msgstr ""
-#: keystone/token/controllers.py:423
-msgid "Non-default domain is not supported"
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
msgstr ""
-#: keystone/token/controllers.py:431
-msgid "Domain scoped token is not supported"
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
msgstr ""
#: keystone/token/backends/memcache.py:144
@@ -596,3 +803,54 @@ msgstr ""
msgid "Unable to add token to revocation list."
msgstr ""
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
+#~ msgid "User have no access to project"
+#~ msgstr ""
+
+#~ msgid "User have no access to domain"
+#~ msgstr ""
+
+#~ msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#~ msgstr ""
+
diff --git a/keystone/locale/ro/LC_MESSAGES/keystone.po b/keystone/locale/ro/LC_MESSAGES/keystone.po
index e1b5889a..b55073b6 100644
--- a/keystone/locale/ro/LC_MESSAGES/keystone.po
+++ b/keystone/locale/ro/LC_MESSAGES/keystone.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Keystone\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
-"POT-Creation-Date: 2013-07-11 17:05+0000\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
"PO-Revision-Date: 2013-06-08 07:51+0000\n"
"Last-Translator: daisy.ycguo <daisy.ycguo@gmail.com>\n"
"Language-Team: Romanian "
@@ -17,7 +17,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 0.9.6\n"
+"Generated-By: Babel 1.3\n"
#: keystone/clean.py:23
#, python-format
@@ -39,78 +39,224 @@ msgstr ""
msgid "%(property_name)s is not a %(display_expected_type)s"
msgstr ""
-#: keystone/test.py:106
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
#, python-format
msgid "Failed to checkout %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:110
+#: keystone/assignment/core.py:529
#, python-format
msgid "Expected dict or list: %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:456
-#: keystone/identity/backends/ldap.py:433
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
#, python-format
-msgid "Role %s not found"
+msgid "Cannot remove role that has not been granted, %s"
msgstr ""
-#: keystone/assignment/backends/sql.py:244
+#: keystone/assignment/backends/ldap.py:418
#, python-format
-msgid "Cannot remove role that has not been granted, %s"
+msgid "Role %s not found"
msgstr ""
-#: keystone/auth/controllers.py:72
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
#, python-format
msgid "Project is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:78 keystone/auth/plugins/password.py:38
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
#, python-format
msgid "Domain is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:84 keystone/auth/plugins/password.py:44
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
#, python-format
msgid "User is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:259
+#: keystone/auth/controllers.py:262
msgid "Scoping to both domain and project is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:262
+#: keystone/auth/controllers.py:265
msgid "Scoping to both domain and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:265
+#: keystone/auth/controllers.py:268
msgid "Scoping to both project and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:325
-#, python-format
-msgid "Unable to lookup user %s"
-msgstr ""
-
-#: keystone/auth/controllers.py:355
+#: keystone/auth/controllers.py:353
msgid "User not found"
msgstr ""
-#: keystone/auth/token_factory.py:79
-msgid "User have no access to project"
-msgstr ""
-
-#: keystone/auth/token_factory.py:94
-msgid "User have no access to domain"
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
msgstr ""
-#: keystone/auth/token_factory.py:311 keystone/token/controllers.py:119
-msgid "Unable to sign token."
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
msgstr ""
-#: keystone/auth/token_factory.py:314 keystone/token/controllers.py:122
-#, python-format
-msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
msgstr ""
#: keystone/catalog/core.py:38
@@ -171,32 +317,32 @@ msgstr ""
msgid "RBAC: Invalid token"
msgstr ""
-#: keystone/common/controller.py:35 keystone/common/controller.py:56
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
msgid "RBAC: Invalid user"
msgstr ""
-#: keystone/common/controller.py:41
+#: keystone/common/controller.py:45
msgid "RBAC: Proceeding without project"
msgstr ""
-#: keystone/common/controller.py:61
+#: keystone/common/controller.py:65
msgid "RBAC: Proceeding without tenant"
msgstr ""
-#: keystone/common/controller.py:91 keystone/common/controller.py:142
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
msgid "RBAC: Bypassing authorization"
msgstr ""
-#: keystone/common/controller.py:100 keystone/common/controller.py:140
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
msgid "RBAC: Authorization granted"
msgstr ""
-#: keystone/common/controller.py:130
+#: keystone/common/controller.py:134
#, python-format
msgid "RBAC: Adding query filter params (%s)"
msgstr ""
-#: keystone/common/controller.py:318
+#: keystone/common/controller.py:322
msgid "Invalid token in normalize_domain_id"
msgstr ""
@@ -207,17 +353,48 @@ msgid ""
"listening on that port."
msgstr ""
-#: keystone/common/wsgi.py:162
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
#, python-format
msgid "arg_dict: %s"
msgstr ""
-#: keystone/common/wsgi.py:188
+#: keystone/common/wsgi.py:243
#, python-format
msgid "Authorization failed. %(exception)s from %(remote_addr)s"
msgstr ""
-#: keystone/common/wsgi.py:431
+#: keystone/common/wsgi.py:487
msgid "The resource could not be found."
msgstr ""
@@ -458,11 +635,11 @@ msgstr ""
msgid "Search scope %s not implemented."
msgstr ""
-#: keystone/common/sql/core.py:126
+#: keystone/common/sql/core.py:119
msgid "Global engine callback raised."
msgstr ""
-#: keystone/common/sql/core.py:240
+#: keystone/common/sql/core.py:233
#, python-format
msgid "Got mysql server has gone away: %s"
msgstr ""
@@ -511,7 +688,7 @@ msgstr ""
msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
msgstr ""
-#: keystone/identity/controllers.py:878
+#: keystone/identity/controllers.py:952
#, python-format
msgid ""
"Group %(group)s not found for role-assignment - %(target)s with Role: "
@@ -522,18 +699,18 @@ msgstr ""
msgid "User not found in group"
msgstr ""
-#: keystone/identity/backends/ldap.py:192
+#: keystone/identity/backends/ldap.py:189
#, python-format
msgid ""
"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
"be removed from the group. The user will be ignored."
msgstr ""
-#: keystone/identity/backends/ldap.py:621
+#: keystone/identity/backends/ldap.py:334
msgid "Changing Name not supported by LDAP"
msgstr ""
-#: keystone/identity/backends/ldap.py:634
+#: keystone/identity/backends/ldap.py:347
#, python-format
msgid "User %(user_id)s is already a member of group %(group_id)s"
msgstr ""
@@ -553,26 +730,56 @@ msgstr ""
msgid "Failed to understand rule %(rule)r"
msgstr ""
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
#: keystone/policy/backends/rules.py:93
#, python-format
msgid "enforce %(action)s: %(credentials)s"
msgstr ""
-#: keystone/token/controllers.py:396
+#: keystone/token/controllers.py:378
#, python-format
msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
msgstr ""
-#: keystone/token/controllers.py:413 keystone/token/controllers.py:416
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
msgid "Token does not belong to specified tenant."
msgstr ""
-#: keystone/token/controllers.py:423
-msgid "Non-default domain is not supported"
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
msgstr ""
-#: keystone/token/controllers.py:431
-msgid "Domain scoped token is not supported"
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
msgstr ""
#: keystone/token/backends/memcache.py:144
@@ -597,3 +804,54 @@ msgstr ""
msgid "Unable to add token to revocation list."
msgstr ""
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
+#~ msgid "User have no access to project"
+#~ msgstr ""
+
+#~ msgid "User have no access to domain"
+#~ msgstr ""
+
+#~ msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#~ msgstr ""
+
diff --git a/keystone/locale/ru/LC_MESSAGES/keystone.po b/keystone/locale/ru/LC_MESSAGES/keystone.po
index 5a1f5c36..db8fe633 100644
--- a/keystone/locale/ru/LC_MESSAGES/keystone.po
+++ b/keystone/locale/ru/LC_MESSAGES/keystone.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Keystone\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
-"POT-Creation-Date: 2013-07-11 17:05+0000\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
"PO-Revision-Date: 2013-05-17 16:06+0000\n"
"Last-Translator: openstackjenkins <jenkins@openstack.org>\n"
"Language-Team: Russian "
@@ -17,7 +17,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 0.9.6\n"
+"Generated-By: Babel 1.3\n"
#: keystone/clean.py:23
#, python-format
@@ -39,78 +39,224 @@ msgstr ""
msgid "%(property_name)s is not a %(display_expected_type)s"
msgstr ""
-#: keystone/test.py:106
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
#, python-format
msgid "Failed to checkout %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:110
+#: keystone/assignment/core.py:529
#, python-format
msgid "Expected dict or list: %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:456
-#: keystone/identity/backends/ldap.py:433
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
#, python-format
-msgid "Role %s not found"
+msgid "Cannot remove role that has not been granted, %s"
msgstr ""
-#: keystone/assignment/backends/sql.py:244
+#: keystone/assignment/backends/ldap.py:418
#, python-format
-msgid "Cannot remove role that has not been granted, %s"
+msgid "Role %s not found"
msgstr ""
-#: keystone/auth/controllers.py:72
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
#, python-format
msgid "Project is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:78 keystone/auth/plugins/password.py:38
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
#, python-format
msgid "Domain is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:84 keystone/auth/plugins/password.py:44
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
#, python-format
msgid "User is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:259
+#: keystone/auth/controllers.py:262
msgid "Scoping to both domain and project is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:262
+#: keystone/auth/controllers.py:265
msgid "Scoping to both domain and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:265
+#: keystone/auth/controllers.py:268
msgid "Scoping to both project and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:325
-#, python-format
-msgid "Unable to lookup user %s"
-msgstr ""
-
-#: keystone/auth/controllers.py:355
+#: keystone/auth/controllers.py:353
msgid "User not found"
msgstr ""
-#: keystone/auth/token_factory.py:79
-msgid "User have no access to project"
-msgstr ""
-
-#: keystone/auth/token_factory.py:94
-msgid "User have no access to domain"
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
msgstr ""
-#: keystone/auth/token_factory.py:311 keystone/token/controllers.py:119
-msgid "Unable to sign token."
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
msgstr ""
-#: keystone/auth/token_factory.py:314 keystone/token/controllers.py:122
-#, python-format
-msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
msgstr ""
#: keystone/catalog/core.py:38
@@ -171,32 +317,32 @@ msgstr ""
msgid "RBAC: Invalid token"
msgstr ""
-#: keystone/common/controller.py:35 keystone/common/controller.py:56
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
msgid "RBAC: Invalid user"
msgstr ""
-#: keystone/common/controller.py:41
+#: keystone/common/controller.py:45
msgid "RBAC: Proceeding without project"
msgstr ""
-#: keystone/common/controller.py:61
+#: keystone/common/controller.py:65
msgid "RBAC: Proceeding without tenant"
msgstr ""
-#: keystone/common/controller.py:91 keystone/common/controller.py:142
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
msgid "RBAC: Bypassing authorization"
msgstr ""
-#: keystone/common/controller.py:100 keystone/common/controller.py:140
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
msgid "RBAC: Authorization granted"
msgstr ""
-#: keystone/common/controller.py:130
+#: keystone/common/controller.py:134
#, python-format
msgid "RBAC: Adding query filter params (%s)"
msgstr ""
-#: keystone/common/controller.py:318
+#: keystone/common/controller.py:322
msgid "Invalid token in normalize_domain_id"
msgstr ""
@@ -207,17 +353,48 @@ msgid ""
"listening on that port."
msgstr ""
-#: keystone/common/wsgi.py:162
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
#, python-format
msgid "arg_dict: %s"
msgstr ""
-#: keystone/common/wsgi.py:188
+#: keystone/common/wsgi.py:243
#, python-format
msgid "Authorization failed. %(exception)s from %(remote_addr)s"
msgstr ""
-#: keystone/common/wsgi.py:431
+#: keystone/common/wsgi.py:487
msgid "The resource could not be found."
msgstr ""
@@ -458,11 +635,11 @@ msgstr ""
msgid "Search scope %s not implemented."
msgstr ""
-#: keystone/common/sql/core.py:126
+#: keystone/common/sql/core.py:119
msgid "Global engine callback raised."
msgstr ""
-#: keystone/common/sql/core.py:240
+#: keystone/common/sql/core.py:233
#, python-format
msgid "Got mysql server has gone away: %s"
msgstr ""
@@ -511,7 +688,7 @@ msgstr ""
msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
msgstr ""
-#: keystone/identity/controllers.py:878
+#: keystone/identity/controllers.py:952
#, python-format
msgid ""
"Group %(group)s not found for role-assignment - %(target)s with Role: "
@@ -522,18 +699,18 @@ msgstr ""
msgid "User not found in group"
msgstr ""
-#: keystone/identity/backends/ldap.py:192
+#: keystone/identity/backends/ldap.py:189
#, python-format
msgid ""
"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
"be removed from the group. The user will be ignored."
msgstr ""
-#: keystone/identity/backends/ldap.py:621
+#: keystone/identity/backends/ldap.py:334
msgid "Changing Name not supported by LDAP"
msgstr ""
-#: keystone/identity/backends/ldap.py:634
+#: keystone/identity/backends/ldap.py:347
#, python-format
msgid "User %(user_id)s is already a member of group %(group_id)s"
msgstr ""
@@ -553,26 +730,56 @@ msgstr ""
msgid "Failed to understand rule %(rule)r"
msgstr ""
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
#: keystone/policy/backends/rules.py:93
#, python-format
msgid "enforce %(action)s: %(credentials)s"
msgstr ""
-#: keystone/token/controllers.py:396
+#: keystone/token/controllers.py:378
#, python-format
msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
msgstr ""
-#: keystone/token/controllers.py:413 keystone/token/controllers.py:416
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
msgid "Token does not belong to specified tenant."
msgstr ""
-#: keystone/token/controllers.py:423
-msgid "Non-default domain is not supported"
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
msgstr ""
-#: keystone/token/controllers.py:431
-msgid "Domain scoped token is not supported"
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
msgstr ""
#: keystone/token/backends/memcache.py:144
@@ -597,3 +804,54 @@ msgstr ""
msgid "Unable to add token to revocation list."
msgstr ""
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
+#~ msgid "User have no access to project"
+#~ msgstr ""
+
+#~ msgid "User have no access to domain"
+#~ msgstr ""
+
+#~ msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#~ msgstr ""
+
diff --git a/keystone/locale/ru_RU/LC_MESSAGES/keystone.po b/keystone/locale/ru_RU/LC_MESSAGES/keystone.po
new file mode 100644
index 00000000..4782ae4a
--- /dev/null
+++ b/keystone/locale/ru_RU/LC_MESSAGES/keystone.po
@@ -0,0 +1,848 @@
+# Russian (Russia) translations for keystone.
+# Copyright (C) 2013 ORGANIZATION
+# This file is distributed under the same license as the keystone project.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Keystone\n"
+"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
+"PO-Revision-Date: 2013-07-29 22:01+0000\n"
+"Last-Translator: openstackjenkins <jenkins@openstack.org>\n"
+"Language-Team: Russian (Russia) "
+"(http://www.transifex.com/projects/p/openstack/language/ru_RU/)\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 1.3\n"
+
+#: keystone/clean.py:23
+#, python-format
+msgid "%s cannot be empty."
+msgstr ""
+
+#: keystone/clean.py:25
+#, python-format
+msgid "%(property_name)s cannot be less than %(min_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:29
+#, python-format
+msgid "%(property_name)s should not be greater than %(max_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:36
+#, python-format
+msgid "%(property_name)s is not a %(display_expected_type)s"
+msgstr ""
+
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
+#, python-format
+msgid "Failed to checkout %s"
+msgstr ""
+
+#: keystone/assignment/core.py:529
+#, python-format
+msgid "Expected dict or list: %s"
+msgstr ""
+
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
+#, python-format
+msgid "Cannot remove role that has not been granted, %s"
+msgstr ""
+
+#: keystone/assignment/backends/ldap.py:418
+#, python-format
+msgid "Role %s not found"
+msgstr ""
+
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
+#, python-format
+msgid "Project is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
+#, python-format
+msgid "Domain is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
+#, python-format
+msgid "User is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:262
+msgid "Scoping to both domain and project is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:265
+msgid "Scoping to both domain and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:268
+msgid "Scoping to both project and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:353
+msgid "User not found"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
+msgstr ""
+
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
+msgstr ""
+
+#: keystone/catalog/core.py:38
+#, python-format
+msgid "Malformed endpoint %(url)s - unknown key %(keyerror)s"
+msgstr ""
+
+#: keystone/catalog/core.py:43
+#, python-format
+msgid ""
+"Malformed endpoint %(url)s - unknown key %(keyerror)s(are you missing "
+"brackets ?)"
+msgstr ""
+
+#: keystone/catalog/core.py:49
+#, python-format
+msgid ""
+"Malformed endpoint %s - incomplete format (are you "
+"missing a type notifier ?)"
+msgstr ""
+
+#: keystone/catalog/backends/templated.py:109
+#, python-format
+msgid "Unable to open template file %s"
+msgstr ""
+
+#: keystone/common/cms.py:26
+#, python-format
+msgid "Verify error: %s"
+msgstr ""
+
+#: keystone/common/cms.py:118
+msgid ""
+"Signing error: Unable to load certificate - ensure you've configured PKI "
+"with 'keystone-manage pki_setup'"
+msgstr ""
+
+#: keystone/common/cms.py:122
+#, python-format
+msgid "Signing error: %s"
+msgstr ""
+
+#: keystone/common/config.py:89
+#, python-format
+msgid "Unable to locate specified logging config file: %s"
+msgstr ""
+
+#: keystone/common/config.py:107
+msgid "Invalid syslog facility"
+msgstr ""
+
+#: keystone/common/controller.py:18
+#, python-format
+msgid "RBAC: Authorizing %(action)s(%(kwargs)s)"
+msgstr ""
+
+#: keystone/common/controller.py:25
+msgid "RBAC: Invalid token"
+msgstr ""
+
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
+msgid "RBAC: Invalid user"
+msgstr ""
+
+#: keystone/common/controller.py:45
+msgid "RBAC: Proceeding without project"
+msgstr ""
+
+#: keystone/common/controller.py:65
+msgid "RBAC: Proceeding without tenant"
+msgstr ""
+
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
+msgid "RBAC: Bypassing authorization"
+msgstr ""
+
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
+msgid "RBAC: Authorization granted"
+msgstr ""
+
+#: keystone/common/controller.py:134
+#, python-format
+msgid "RBAC: Adding query filter params (%s)"
+msgstr ""
+
+#: keystone/common/controller.py:322
+msgid "Invalid token in normalize_domain_id"
+msgstr ""
+
+#: keystone/common/utils.py:233
+msgid ""
+"Error setting up the debug environment. Verify that the option --debug-"
+"url has the format <host>:<port> and that a debugger processes is "
+"listening on that port."
+msgstr ""
+
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
+#, python-format
+msgid "arg_dict: %s"
+msgstr ""
+
+#: keystone/common/wsgi.py:243
+#, python-format
+msgid "Authorization failed. %(exception)s from %(remote_addr)s"
+msgstr ""
+
+#: keystone/common/wsgi.py:487
+msgid "The resource could not be found."
+msgstr ""
+
+#: keystone/common/environment/__init__.py:37
+#, python-format
+msgid "Environment configured as: %s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:51
+#, python-format
+msgid "Starting %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:113
+msgid "Server error"
+msgstr ""
+
+#: keystone/common/ldap/core.py:79
+#, python-format
+msgid "Invalid LDAP deref option: %s. Choose one of: "
+msgstr ""
+
+#: keystone/common/ldap/core.py:87
+#, python-format
+msgid "Invalid LDAP TLS certs option: %(option). Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:99
+#, python-format
+msgid "Invalid LDAP scope: %(scope)s. Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:189
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%s\". Format must be "
+"<ldap_attribute>:<keystone_attribute>"
+msgstr ""
+
+#: keystone/common/ldap/core.py:195
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%(item)s\". Value "
+"\"%(attr_map)s\" must use one of %(keys)s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:279 keystone/identity/backends/kvs.py:177
+#: keystone/identity/backends/kvs.py:205
+#, python-format
+msgid "Duplicate name, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:289 keystone/identity/backends/kvs.py:170
+#, python-format
+msgid "Duplicate ID, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:294
+#, python-format
+msgid "LDAP %s create"
+msgstr ""
+
+#: keystone/common/ldap/core.py:372
+#, python-format
+msgid "LDAP %s update"
+msgstr ""
+
+#: keystone/common/ldap/core.py:405
+#, python-format
+msgid "LDAP %s delete"
+msgstr ""
+
+#: keystone/common/ldap/core.py:430
+#, python-format
+msgid "LDAP init: url=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:431
+#, python-format
+msgid ""
+"LDAP init: use_tls=%(use_tls)s\n"
+"tls_cacertfile=%(tls_cacertfile)s\n"
+"tls_cacertdir=%(tls_cacertdir)s\n"
+"tls_req_cert=%(tls_req_cert)s\n"
+"tls_avail=%(tls_avail)s\n"
+msgstr ""
+
+#: keystone/common/ldap/core.py:450
+msgid "Invalid TLS / LDAPS combination"
+msgstr ""
+
+#: keystone/common/ldap/core.py:454
+#, python-format
+msgid "Invalid LDAP TLS_AVAIL option: %s. TLS not available"
+msgstr ""
+
+#: keystone/common/ldap/core.py:464
+#, python-format
+msgid "tls_cacertfile %s not found or is not a file"
+msgstr ""
+
+#: keystone/common/ldap/core.py:476
+#, python-format
+msgid "tls_cacertdir %s not found or is not a directory"
+msgstr ""
+
+#: keystone/common/ldap/core.py:483
+#, python-format
+msgid "LDAP TLS: invalid TLS_REQUIRE_CERT Option=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:497
+#, python-format
+msgid "LDAP bind: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:508
+#, python-format
+msgid "LDAP add: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:514
+#, python-format
+msgid ""
+"LDAP search: dn=%(dn)s, scope=%(scope)s, query=%(query)s, "
+"attrs=%(attrlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:567
+msgid ""
+"LDAP Server does not support paging. Disable paging in keystone.conf to "
+"avoid this message."
+msgstr ""
+
+#: keystone/common/ldap/core.py:584
+#, python-format
+msgid "LDAP modify: dn=%(dn)s, modlist=%(modlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:590
+#, python-format
+msgid "LDAP delete: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:595
+#, python-format
+msgid "LDAP delete_ext: dn=%(dn)s, serverctrls=%(serverctrls)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:146
+#, python-format
+msgid "FakeLdap initialize url=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:156
+#, python-format
+msgid "FakeLdap bind dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:163
+#, python-format
+msgid "FakeLdap bind fail: dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:170
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:175
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s does not match"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:190
+#, python-format
+msgid "FakeLdap add item: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:193
+#, python-format
+msgid "FakeLdap add item failed: dn=%s is already in store."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:207 keystone/common/ldap/fakeldap.py:221
+#, python-format
+msgid "FakeLdap delete item: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:211 keystone/common/ldap/fakeldap.py:225
+#, python-format
+msgid "FakeLdap delete item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:240
+#, python-format
+msgid "FakeLdap modify item: dn=%(dn)s attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:245
+#, python-format
+msgid "FakeLdap modify item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:262
+#, python-format
+msgid "FakeLdap modify item failed: item has no attribute \"%s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:273
+#, python-format
+msgid ""
+"FakeLdap modify item failed: item has no attribute \"%(k)s\" with value "
+"\"%(v)s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:279
+#, python-format
+msgid "FakeLdap modify item failed: unknown command %s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:281
+#, python-format
+msgid "modify_s action %s not implemented"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:300
+#, python-format
+msgid "FakeLdap search at dn=%(dn)s scope=%(scope)s query=%(query)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:306
+msgid "FakeLdap search fail: dn not found for SCOPE_BASE"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:320
+#, python-format
+msgid "Search scope %s not implemented."
+msgstr ""
+
+#: keystone/common/sql/core.py:119
+msgid "Global engine callback raised."
+msgstr ""
+
+#: keystone/common/sql/core.py:233
+#, python-format
+msgid "Got mysql server has gone away: %s"
+msgstr ""
+
+#: keystone/common/sql/legacy.py:188
+#, python-format
+msgid "Cannot migrate EC2 credential: %s"
+msgstr ""
+
+#: keystone/common/sql/migration.py:47
+msgid "version should be an integer"
+msgstr ""
+
+#: keystone/common/sql/nova.py:65
+#, python-format
+msgid "Create tenant %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:82
+#, python-format
+msgid "Create user %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:91
+#, python-format
+msgid "Add user %(user_id)s to tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:100
+#, python-format
+msgid "Ignoring existing role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:107
+#, python-format
+msgid "Create role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:117
+#, python-format
+msgid "Assign role %(role_id)s to user %(user_id)s on tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:136
+#, python-format
+msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/identity/controllers.py:952
+#, python-format
+msgid ""
+"Group %(group)s not found for role-assignment - %(target)s with Role: "
+"%(role)s"
+msgstr ""
+
+#: keystone/identity/backends/kvs.py:126 keystone/identity/backends/kvs.py:135
+msgid "User not found in group"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:189
+#, python-format
+msgid ""
+"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
+"be removed from the group. The user will be ignored."
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:334
+msgid "Changing Name not supported by LDAP"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:347
+#, python-format
+msgid "User %(user_id)s is already a member of group %(group_id)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:394
+#, python-format
+msgid "Failed to understand rule %(rule)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:404
+#, python-format
+msgid "No handler for matches of kind %s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:679
+#, python-format
+msgid "Failed to understand rule %(rule)r"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
+#: keystone/policy/backends/rules.py:93
+#, python-format
+msgid "enforce %(action)s: %(credentials)s"
+msgstr ""
+
+#: keystone/token/controllers.py:378
+#, python-format
+msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
+msgstr ""
+
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
+msgid "Token does not belong to specified tenant."
+msgstr ""
+
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
+msgstr ""
+
+#: keystone/token/backends/memcache.py:144
+#, python-format
+msgid ""
+"Successful set of token-index-list for user-key \"%(user_key)s\", "
+"#%(count)d records"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:154
+#, python-format
+msgid ""
+"Failed to set token-index-list for user-key \"%(user_key)s\". Attempt "
+"%(cas_retry)d of %(cas_retry_max)d"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:163
+msgid "Unable to add token user list"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:172
+msgid "Unable to add token to revocation list."
+msgstr ""
+
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
diff --git a/keystone/locale/sl_SI/LC_MESSAGES/keystone.po b/keystone/locale/sl_SI/LC_MESSAGES/keystone.po
index 4066e381..8c044ca8 100644
--- a/keystone/locale/sl_SI/LC_MESSAGES/keystone.po
+++ b/keystone/locale/sl_SI/LC_MESSAGES/keystone.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Keystone\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
-"POT-Creation-Date: 2013-07-11 17:05+0000\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
"PO-Revision-Date: 2013-06-28 06:06+0000\n"
"Last-Translator: daisy.ycguo <daisy.ycguo@gmail.com>\n"
"Language-Team: Slovenian (Slovenia) "
@@ -17,7 +17,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 0.9.6\n"
+"Generated-By: Babel 1.3\n"
#: keystone/clean.py:23
#, python-format
@@ -39,78 +39,224 @@ msgstr ""
msgid "%(property_name)s is not a %(display_expected_type)s"
msgstr ""
-#: keystone/test.py:106
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
#, python-format
msgid "Failed to checkout %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:110
+#: keystone/assignment/core.py:529
#, python-format
msgid "Expected dict or list: %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:456
-#: keystone/identity/backends/ldap.py:433
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
#, python-format
-msgid "Role %s not found"
+msgid "Cannot remove role that has not been granted, %s"
msgstr ""
-#: keystone/assignment/backends/sql.py:244
+#: keystone/assignment/backends/ldap.py:418
#, python-format
-msgid "Cannot remove role that has not been granted, %s"
+msgid "Role %s not found"
msgstr ""
-#: keystone/auth/controllers.py:72
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
#, python-format
msgid "Project is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:78 keystone/auth/plugins/password.py:38
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
#, python-format
msgid "Domain is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:84 keystone/auth/plugins/password.py:44
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
#, python-format
msgid "User is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:259
+#: keystone/auth/controllers.py:262
msgid "Scoping to both domain and project is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:262
+#: keystone/auth/controllers.py:265
msgid "Scoping to both domain and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:265
+#: keystone/auth/controllers.py:268
msgid "Scoping to both project and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:325
-#, python-format
-msgid "Unable to lookup user %s"
-msgstr ""
-
-#: keystone/auth/controllers.py:355
+#: keystone/auth/controllers.py:353
msgid "User not found"
msgstr ""
-#: keystone/auth/token_factory.py:79
-msgid "User have no access to project"
-msgstr ""
-
-#: keystone/auth/token_factory.py:94
-msgid "User have no access to domain"
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
msgstr ""
-#: keystone/auth/token_factory.py:311 keystone/token/controllers.py:119
-msgid "Unable to sign token."
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
msgstr ""
-#: keystone/auth/token_factory.py:314 keystone/token/controllers.py:122
-#, python-format
-msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
msgstr ""
#: keystone/catalog/core.py:38
@@ -171,32 +317,32 @@ msgstr ""
msgid "RBAC: Invalid token"
msgstr ""
-#: keystone/common/controller.py:35 keystone/common/controller.py:56
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
msgid "RBAC: Invalid user"
msgstr ""
-#: keystone/common/controller.py:41
+#: keystone/common/controller.py:45
msgid "RBAC: Proceeding without project"
msgstr ""
-#: keystone/common/controller.py:61
+#: keystone/common/controller.py:65
msgid "RBAC: Proceeding without tenant"
msgstr ""
-#: keystone/common/controller.py:91 keystone/common/controller.py:142
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
msgid "RBAC: Bypassing authorization"
msgstr ""
-#: keystone/common/controller.py:100 keystone/common/controller.py:140
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
msgid "RBAC: Authorization granted"
msgstr ""
-#: keystone/common/controller.py:130
+#: keystone/common/controller.py:134
#, python-format
msgid "RBAC: Adding query filter params (%s)"
msgstr ""
-#: keystone/common/controller.py:318
+#: keystone/common/controller.py:322
msgid "Invalid token in normalize_domain_id"
msgstr ""
@@ -207,17 +353,48 @@ msgid ""
"listening on that port."
msgstr ""
-#: keystone/common/wsgi.py:162
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
#, python-format
msgid "arg_dict: %s"
msgstr ""
-#: keystone/common/wsgi.py:188
+#: keystone/common/wsgi.py:243
#, python-format
msgid "Authorization failed. %(exception)s from %(remote_addr)s"
msgstr ""
-#: keystone/common/wsgi.py:431
+#: keystone/common/wsgi.py:487
msgid "The resource could not be found."
msgstr ""
@@ -458,11 +635,11 @@ msgstr ""
msgid "Search scope %s not implemented."
msgstr ""
-#: keystone/common/sql/core.py:126
+#: keystone/common/sql/core.py:119
msgid "Global engine callback raised."
msgstr ""
-#: keystone/common/sql/core.py:240
+#: keystone/common/sql/core.py:233
#, python-format
msgid "Got mysql server has gone away: %s"
msgstr ""
@@ -511,7 +688,7 @@ msgstr ""
msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
msgstr ""
-#: keystone/identity/controllers.py:878
+#: keystone/identity/controllers.py:952
#, python-format
msgid ""
"Group %(group)s not found for role-assignment - %(target)s with Role: "
@@ -522,18 +699,18 @@ msgstr ""
msgid "User not found in group"
msgstr ""
-#: keystone/identity/backends/ldap.py:192
+#: keystone/identity/backends/ldap.py:189
#, python-format
msgid ""
"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
"be removed from the group. The user will be ignored."
msgstr ""
-#: keystone/identity/backends/ldap.py:621
+#: keystone/identity/backends/ldap.py:334
msgid "Changing Name not supported by LDAP"
msgstr ""
-#: keystone/identity/backends/ldap.py:634
+#: keystone/identity/backends/ldap.py:347
#, python-format
msgid "User %(user_id)s is already a member of group %(group_id)s"
msgstr ""
@@ -553,26 +730,56 @@ msgstr ""
msgid "Failed to understand rule %(rule)r"
msgstr ""
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
#: keystone/policy/backends/rules.py:93
#, python-format
msgid "enforce %(action)s: %(credentials)s"
msgstr ""
-#: keystone/token/controllers.py:396
+#: keystone/token/controllers.py:378
#, python-format
msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
msgstr ""
-#: keystone/token/controllers.py:413 keystone/token/controllers.py:416
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
msgid "Token does not belong to specified tenant."
msgstr ""
-#: keystone/token/controllers.py:423
-msgid "Non-default domain is not supported"
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
msgstr ""
-#: keystone/token/controllers.py:431
-msgid "Domain scoped token is not supported"
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
msgstr ""
#: keystone/token/backends/memcache.py:144
@@ -597,3 +804,54 @@ msgstr ""
msgid "Unable to add token to revocation list."
msgstr ""
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
+#~ msgid "User have no access to project"
+#~ msgstr ""
+
+#~ msgid "User have no access to domain"
+#~ msgstr ""
+
+#~ msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#~ msgstr ""
+
diff --git a/keystone/locale/sw_KE/LC_MESSAGES/keystone.po b/keystone/locale/sw_KE/LC_MESSAGES/keystone.po
new file mode 100644
index 00000000..f3a77803
--- /dev/null
+++ b/keystone/locale/sw_KE/LC_MESSAGES/keystone.po
@@ -0,0 +1,847 @@
+# Swahili (Kenya) translations for keystone.
+# Copyright (C) 2013 ORGANIZATION
+# This file is distributed under the same license as the keystone project.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Keystone\n"
+"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
+"PO-Revision-Date: 2013-07-29 22:01+0000\n"
+"Last-Translator: openstackjenkins <jenkins@openstack.org>\n"
+"Language-Team: Swahili (Kenya) "
+"(http://www.transifex.com/projects/p/openstack/language/sw_KE/)\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 1.3\n"
+
+#: keystone/clean.py:23
+#, python-format
+msgid "%s cannot be empty."
+msgstr ""
+
+#: keystone/clean.py:25
+#, python-format
+msgid "%(property_name)s cannot be less than %(min_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:29
+#, python-format
+msgid "%(property_name)s should not be greater than %(max_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:36
+#, python-format
+msgid "%(property_name)s is not a %(display_expected_type)s"
+msgstr ""
+
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
+#, python-format
+msgid "Failed to checkout %s"
+msgstr ""
+
+#: keystone/assignment/core.py:529
+#, python-format
+msgid "Expected dict or list: %s"
+msgstr ""
+
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
+#, python-format
+msgid "Cannot remove role that has not been granted, %s"
+msgstr ""
+
+#: keystone/assignment/backends/ldap.py:418
+#, python-format
+msgid "Role %s not found"
+msgstr ""
+
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
+#, python-format
+msgid "Project is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
+#, python-format
+msgid "Domain is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
+#, python-format
+msgid "User is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:262
+msgid "Scoping to both domain and project is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:265
+msgid "Scoping to both domain and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:268
+msgid "Scoping to both project and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:353
+msgid "User not found"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
+msgstr ""
+
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
+msgstr ""
+
+#: keystone/catalog/core.py:38
+#, python-format
+msgid "Malformed endpoint %(url)s - unknown key %(keyerror)s"
+msgstr ""
+
+#: keystone/catalog/core.py:43
+#, python-format
+msgid ""
+"Malformed endpoint %(url)s - unknown key %(keyerror)s(are you missing "
+"brackets ?)"
+msgstr ""
+
+#: keystone/catalog/core.py:49
+#, python-format
+msgid ""
+"Malformed endpoint %s - incomplete format (are you "
+"missing a type notifier ?)"
+msgstr ""
+
+#: keystone/catalog/backends/templated.py:109
+#, python-format
+msgid "Unable to open template file %s"
+msgstr ""
+
+#: keystone/common/cms.py:26
+#, python-format
+msgid "Verify error: %s"
+msgstr ""
+
+#: keystone/common/cms.py:118
+msgid ""
+"Signing error: Unable to load certificate - ensure you've configured PKI "
+"with 'keystone-manage pki_setup'"
+msgstr ""
+
+#: keystone/common/cms.py:122
+#, python-format
+msgid "Signing error: %s"
+msgstr ""
+
+#: keystone/common/config.py:89
+#, python-format
+msgid "Unable to locate specified logging config file: %s"
+msgstr ""
+
+#: keystone/common/config.py:107
+msgid "Invalid syslog facility"
+msgstr ""
+
+#: keystone/common/controller.py:18
+#, python-format
+msgid "RBAC: Authorizing %(action)s(%(kwargs)s)"
+msgstr ""
+
+#: keystone/common/controller.py:25
+msgid "RBAC: Invalid token"
+msgstr ""
+
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
+msgid "RBAC: Invalid user"
+msgstr ""
+
+#: keystone/common/controller.py:45
+msgid "RBAC: Proceeding without project"
+msgstr ""
+
+#: keystone/common/controller.py:65
+msgid "RBAC: Proceeding without tenant"
+msgstr ""
+
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
+msgid "RBAC: Bypassing authorization"
+msgstr ""
+
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
+msgid "RBAC: Authorization granted"
+msgstr ""
+
+#: keystone/common/controller.py:134
+#, python-format
+msgid "RBAC: Adding query filter params (%s)"
+msgstr ""
+
+#: keystone/common/controller.py:322
+msgid "Invalid token in normalize_domain_id"
+msgstr ""
+
+#: keystone/common/utils.py:233
+msgid ""
+"Error setting up the debug environment. Verify that the option --debug-"
+"url has the format <host>:<port> and that a debugger processes is "
+"listening on that port."
+msgstr ""
+
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
+#, python-format
+msgid "arg_dict: %s"
+msgstr ""
+
+#: keystone/common/wsgi.py:243
+#, python-format
+msgid "Authorization failed. %(exception)s from %(remote_addr)s"
+msgstr ""
+
+#: keystone/common/wsgi.py:487
+msgid "The resource could not be found."
+msgstr ""
+
+#: keystone/common/environment/__init__.py:37
+#, python-format
+msgid "Environment configured as: %s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:51
+#, python-format
+msgid "Starting %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:113
+msgid "Server error"
+msgstr ""
+
+#: keystone/common/ldap/core.py:79
+#, python-format
+msgid "Invalid LDAP deref option: %s. Choose one of: "
+msgstr ""
+
+#: keystone/common/ldap/core.py:87
+#, python-format
+msgid "Invalid LDAP TLS certs option: %(option). Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:99
+#, python-format
+msgid "Invalid LDAP scope: %(scope)s. Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:189
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%s\". Format must be "
+"<ldap_attribute>:<keystone_attribute>"
+msgstr ""
+
+#: keystone/common/ldap/core.py:195
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%(item)s\". Value "
+"\"%(attr_map)s\" must use one of %(keys)s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:279 keystone/identity/backends/kvs.py:177
+#: keystone/identity/backends/kvs.py:205
+#, python-format
+msgid "Duplicate name, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:289 keystone/identity/backends/kvs.py:170
+#, python-format
+msgid "Duplicate ID, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:294
+#, python-format
+msgid "LDAP %s create"
+msgstr ""
+
+#: keystone/common/ldap/core.py:372
+#, python-format
+msgid "LDAP %s update"
+msgstr ""
+
+#: keystone/common/ldap/core.py:405
+#, python-format
+msgid "LDAP %s delete"
+msgstr ""
+
+#: keystone/common/ldap/core.py:430
+#, python-format
+msgid "LDAP init: url=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:431
+#, python-format
+msgid ""
+"LDAP init: use_tls=%(use_tls)s\n"
+"tls_cacertfile=%(tls_cacertfile)s\n"
+"tls_cacertdir=%(tls_cacertdir)s\n"
+"tls_req_cert=%(tls_req_cert)s\n"
+"tls_avail=%(tls_avail)s\n"
+msgstr ""
+
+#: keystone/common/ldap/core.py:450
+msgid "Invalid TLS / LDAPS combination"
+msgstr ""
+
+#: keystone/common/ldap/core.py:454
+#, python-format
+msgid "Invalid LDAP TLS_AVAIL option: %s. TLS not available"
+msgstr ""
+
+#: keystone/common/ldap/core.py:464
+#, python-format
+msgid "tls_cacertfile %s not found or is not a file"
+msgstr ""
+
+#: keystone/common/ldap/core.py:476
+#, python-format
+msgid "tls_cacertdir %s not found or is not a directory"
+msgstr ""
+
+#: keystone/common/ldap/core.py:483
+#, python-format
+msgid "LDAP TLS: invalid TLS_REQUIRE_CERT Option=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:497
+#, python-format
+msgid "LDAP bind: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:508
+#, python-format
+msgid "LDAP add: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:514
+#, python-format
+msgid ""
+"LDAP search: dn=%(dn)s, scope=%(scope)s, query=%(query)s, "
+"attrs=%(attrlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:567
+msgid ""
+"LDAP Server does not support paging. Disable paging in keystone.conf to "
+"avoid this message."
+msgstr ""
+
+#: keystone/common/ldap/core.py:584
+#, python-format
+msgid "LDAP modify: dn=%(dn)s, modlist=%(modlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:590
+#, python-format
+msgid "LDAP delete: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:595
+#, python-format
+msgid "LDAP delete_ext: dn=%(dn)s, serverctrls=%(serverctrls)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:146
+#, python-format
+msgid "FakeLdap initialize url=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:156
+#, python-format
+msgid "FakeLdap bind dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:163
+#, python-format
+msgid "FakeLdap bind fail: dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:170
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:175
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s does not match"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:190
+#, python-format
+msgid "FakeLdap add item: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:193
+#, python-format
+msgid "FakeLdap add item failed: dn=%s is already in store."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:207 keystone/common/ldap/fakeldap.py:221
+#, python-format
+msgid "FakeLdap delete item: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:211 keystone/common/ldap/fakeldap.py:225
+#, python-format
+msgid "FakeLdap delete item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:240
+#, python-format
+msgid "FakeLdap modify item: dn=%(dn)s attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:245
+#, python-format
+msgid "FakeLdap modify item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:262
+#, python-format
+msgid "FakeLdap modify item failed: item has no attribute \"%s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:273
+#, python-format
+msgid ""
+"FakeLdap modify item failed: item has no attribute \"%(k)s\" with value "
+"\"%(v)s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:279
+#, python-format
+msgid "FakeLdap modify item failed: unknown command %s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:281
+#, python-format
+msgid "modify_s action %s not implemented"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:300
+#, python-format
+msgid "FakeLdap search at dn=%(dn)s scope=%(scope)s query=%(query)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:306
+msgid "FakeLdap search fail: dn not found for SCOPE_BASE"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:320
+#, python-format
+msgid "Search scope %s not implemented."
+msgstr ""
+
+#: keystone/common/sql/core.py:119
+msgid "Global engine callback raised."
+msgstr ""
+
+#: keystone/common/sql/core.py:233
+#, python-format
+msgid "Got mysql server has gone away: %s"
+msgstr ""
+
+#: keystone/common/sql/legacy.py:188
+#, python-format
+msgid "Cannot migrate EC2 credential: %s"
+msgstr ""
+
+#: keystone/common/sql/migration.py:47
+msgid "version should be an integer"
+msgstr ""
+
+#: keystone/common/sql/nova.py:65
+#, python-format
+msgid "Create tenant %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:82
+#, python-format
+msgid "Create user %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:91
+#, python-format
+msgid "Add user %(user_id)s to tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:100
+#, python-format
+msgid "Ignoring existing role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:107
+#, python-format
+msgid "Create role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:117
+#, python-format
+msgid "Assign role %(role_id)s to user %(user_id)s on tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:136
+#, python-format
+msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/identity/controllers.py:952
+#, python-format
+msgid ""
+"Group %(group)s not found for role-assignment - %(target)s with Role: "
+"%(role)s"
+msgstr ""
+
+#: keystone/identity/backends/kvs.py:126 keystone/identity/backends/kvs.py:135
+msgid "User not found in group"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:189
+#, python-format
+msgid ""
+"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
+"be removed from the group. The user will be ignored."
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:334
+msgid "Changing Name not supported by LDAP"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:347
+#, python-format
+msgid "User %(user_id)s is already a member of group %(group_id)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:394
+#, python-format
+msgid "Failed to understand rule %(rule)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:404
+#, python-format
+msgid "No handler for matches of kind %s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:679
+#, python-format
+msgid "Failed to understand rule %(rule)r"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
+#: keystone/policy/backends/rules.py:93
+#, python-format
+msgid "enforce %(action)s: %(credentials)s"
+msgstr ""
+
+#: keystone/token/controllers.py:378
+#, python-format
+msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
+msgstr ""
+
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
+msgid "Token does not belong to specified tenant."
+msgstr ""
+
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
+msgstr ""
+
+#: keystone/token/backends/memcache.py:144
+#, python-format
+msgid ""
+"Successful set of token-index-list for user-key \"%(user_key)s\", "
+"#%(count)d records"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:154
+#, python-format
+msgid ""
+"Failed to set token-index-list for user-key \"%(user_key)s\". Attempt "
+"%(cas_retry)d of %(cas_retry_max)d"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:163
+msgid "Unable to add token user list"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:172
+msgid "Unable to add token to revocation list."
+msgstr ""
+
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
diff --git a/keystone/locale/tl/LC_MESSAGES/keystone.po b/keystone/locale/tl/LC_MESSAGES/keystone.po
new file mode 100644
index 00000000..b1186d54
--- /dev/null
+++ b/keystone/locale/tl/LC_MESSAGES/keystone.po
@@ -0,0 +1,847 @@
+# Filipino (Philippines) translations for keystone.
+# Copyright (C) 2013 ORGANIZATION
+# This file is distributed under the same license as the keystone project.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Keystone\n"
+"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
+"PO-Revision-Date: 2013-07-29 22:01+0000\n"
+"Last-Translator: openstackjenkins <jenkins@openstack.org>\n"
+"Language-Team: Tagalog "
+"(http://www.transifex.com/projects/p/openstack/language/tl/)\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 1.3\n"
+
+#: keystone/clean.py:23
+#, python-format
+msgid "%s cannot be empty."
+msgstr ""
+
+#: keystone/clean.py:25
+#, python-format
+msgid "%(property_name)s cannot be less than %(min_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:29
+#, python-format
+msgid "%(property_name)s should not be greater than %(max_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:36
+#, python-format
+msgid "%(property_name)s is not a %(display_expected_type)s"
+msgstr ""
+
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
+#, python-format
+msgid "Failed to checkout %s"
+msgstr ""
+
+#: keystone/assignment/core.py:529
+#, python-format
+msgid "Expected dict or list: %s"
+msgstr ""
+
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
+#, python-format
+msgid "Cannot remove role that has not been granted, %s"
+msgstr ""
+
+#: keystone/assignment/backends/ldap.py:418
+#, python-format
+msgid "Role %s not found"
+msgstr ""
+
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
+#, python-format
+msgid "Project is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
+#, python-format
+msgid "Domain is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
+#, python-format
+msgid "User is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:262
+msgid "Scoping to both domain and project is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:265
+msgid "Scoping to both domain and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:268
+msgid "Scoping to both project and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:353
+msgid "User not found"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
+msgstr ""
+
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
+msgstr ""
+
+#: keystone/catalog/core.py:38
+#, python-format
+msgid "Malformed endpoint %(url)s - unknown key %(keyerror)s"
+msgstr ""
+
+#: keystone/catalog/core.py:43
+#, python-format
+msgid ""
+"Malformed endpoint %(url)s - unknown key %(keyerror)s(are you missing "
+"brackets ?)"
+msgstr ""
+
+#: keystone/catalog/core.py:49
+#, python-format
+msgid ""
+"Malformed endpoint %s - incomplete format (are you "
+"missing a type notifier ?)"
+msgstr ""
+
+#: keystone/catalog/backends/templated.py:109
+#, python-format
+msgid "Unable to open template file %s"
+msgstr ""
+
+#: keystone/common/cms.py:26
+#, python-format
+msgid "Verify error: %s"
+msgstr ""
+
+#: keystone/common/cms.py:118
+msgid ""
+"Signing error: Unable to load certificate - ensure you've configured PKI "
+"with 'keystone-manage pki_setup'"
+msgstr ""
+
+#: keystone/common/cms.py:122
+#, python-format
+msgid "Signing error: %s"
+msgstr ""
+
+#: keystone/common/config.py:89
+#, python-format
+msgid "Unable to locate specified logging config file: %s"
+msgstr ""
+
+#: keystone/common/config.py:107
+msgid "Invalid syslog facility"
+msgstr ""
+
+#: keystone/common/controller.py:18
+#, python-format
+msgid "RBAC: Authorizing %(action)s(%(kwargs)s)"
+msgstr ""
+
+#: keystone/common/controller.py:25
+msgid "RBAC: Invalid token"
+msgstr ""
+
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
+msgid "RBAC: Invalid user"
+msgstr ""
+
+#: keystone/common/controller.py:45
+msgid "RBAC: Proceeding without project"
+msgstr ""
+
+#: keystone/common/controller.py:65
+msgid "RBAC: Proceeding without tenant"
+msgstr ""
+
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
+msgid "RBAC: Bypassing authorization"
+msgstr ""
+
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
+msgid "RBAC: Authorization granted"
+msgstr ""
+
+#: keystone/common/controller.py:134
+#, python-format
+msgid "RBAC: Adding query filter params (%s)"
+msgstr ""
+
+#: keystone/common/controller.py:322
+msgid "Invalid token in normalize_domain_id"
+msgstr ""
+
+#: keystone/common/utils.py:233
+msgid ""
+"Error setting up the debug environment. Verify that the option --debug-"
+"url has the format <host>:<port> and that a debugger processes is "
+"listening on that port."
+msgstr ""
+
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
+#, python-format
+msgid "arg_dict: %s"
+msgstr ""
+
+#: keystone/common/wsgi.py:243
+#, python-format
+msgid "Authorization failed. %(exception)s from %(remote_addr)s"
+msgstr ""
+
+#: keystone/common/wsgi.py:487
+msgid "The resource could not be found."
+msgstr ""
+
+#: keystone/common/environment/__init__.py:37
+#, python-format
+msgid "Environment configured as: %s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:51
+#, python-format
+msgid "Starting %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:113
+msgid "Server error"
+msgstr ""
+
+#: keystone/common/ldap/core.py:79
+#, python-format
+msgid "Invalid LDAP deref option: %s. Choose one of: "
+msgstr ""
+
+#: keystone/common/ldap/core.py:87
+#, python-format
+msgid "Invalid LDAP TLS certs option: %(option). Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:99
+#, python-format
+msgid "Invalid LDAP scope: %(scope)s. Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:189
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%s\". Format must be "
+"<ldap_attribute>:<keystone_attribute>"
+msgstr ""
+
+#: keystone/common/ldap/core.py:195
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%(item)s\". Value "
+"\"%(attr_map)s\" must use one of %(keys)s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:279 keystone/identity/backends/kvs.py:177
+#: keystone/identity/backends/kvs.py:205
+#, python-format
+msgid "Duplicate name, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:289 keystone/identity/backends/kvs.py:170
+#, python-format
+msgid "Duplicate ID, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:294
+#, python-format
+msgid "LDAP %s create"
+msgstr ""
+
+#: keystone/common/ldap/core.py:372
+#, python-format
+msgid "LDAP %s update"
+msgstr ""
+
+#: keystone/common/ldap/core.py:405
+#, python-format
+msgid "LDAP %s delete"
+msgstr ""
+
+#: keystone/common/ldap/core.py:430
+#, python-format
+msgid "LDAP init: url=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:431
+#, python-format
+msgid ""
+"LDAP init: use_tls=%(use_tls)s\n"
+"tls_cacertfile=%(tls_cacertfile)s\n"
+"tls_cacertdir=%(tls_cacertdir)s\n"
+"tls_req_cert=%(tls_req_cert)s\n"
+"tls_avail=%(tls_avail)s\n"
+msgstr ""
+
+#: keystone/common/ldap/core.py:450
+msgid "Invalid TLS / LDAPS combination"
+msgstr ""
+
+#: keystone/common/ldap/core.py:454
+#, python-format
+msgid "Invalid LDAP TLS_AVAIL option: %s. TLS not available"
+msgstr ""
+
+#: keystone/common/ldap/core.py:464
+#, python-format
+msgid "tls_cacertfile %s not found or is not a file"
+msgstr ""
+
+#: keystone/common/ldap/core.py:476
+#, python-format
+msgid "tls_cacertdir %s not found or is not a directory"
+msgstr ""
+
+#: keystone/common/ldap/core.py:483
+#, python-format
+msgid "LDAP TLS: invalid TLS_REQUIRE_CERT Option=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:497
+#, python-format
+msgid "LDAP bind: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:508
+#, python-format
+msgid "LDAP add: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:514
+#, python-format
+msgid ""
+"LDAP search: dn=%(dn)s, scope=%(scope)s, query=%(query)s, "
+"attrs=%(attrlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:567
+msgid ""
+"LDAP Server does not support paging. Disable paging in keystone.conf to "
+"avoid this message."
+msgstr ""
+
+#: keystone/common/ldap/core.py:584
+#, python-format
+msgid "LDAP modify: dn=%(dn)s, modlist=%(modlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:590
+#, python-format
+msgid "LDAP delete: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:595
+#, python-format
+msgid "LDAP delete_ext: dn=%(dn)s, serverctrls=%(serverctrls)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:146
+#, python-format
+msgid "FakeLdap initialize url=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:156
+#, python-format
+msgid "FakeLdap bind dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:163
+#, python-format
+msgid "FakeLdap bind fail: dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:170
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:175
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s does not match"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:190
+#, python-format
+msgid "FakeLdap add item: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:193
+#, python-format
+msgid "FakeLdap add item failed: dn=%s is already in store."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:207 keystone/common/ldap/fakeldap.py:221
+#, python-format
+msgid "FakeLdap delete item: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:211 keystone/common/ldap/fakeldap.py:225
+#, python-format
+msgid "FakeLdap delete item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:240
+#, python-format
+msgid "FakeLdap modify item: dn=%(dn)s attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:245
+#, python-format
+msgid "FakeLdap modify item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:262
+#, python-format
+msgid "FakeLdap modify item failed: item has no attribute \"%s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:273
+#, python-format
+msgid ""
+"FakeLdap modify item failed: item has no attribute \"%(k)s\" with value "
+"\"%(v)s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:279
+#, python-format
+msgid "FakeLdap modify item failed: unknown command %s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:281
+#, python-format
+msgid "modify_s action %s not implemented"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:300
+#, python-format
+msgid "FakeLdap search at dn=%(dn)s scope=%(scope)s query=%(query)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:306
+msgid "FakeLdap search fail: dn not found for SCOPE_BASE"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:320
+#, python-format
+msgid "Search scope %s not implemented."
+msgstr ""
+
+#: keystone/common/sql/core.py:119
+msgid "Global engine callback raised."
+msgstr ""
+
+#: keystone/common/sql/core.py:233
+#, python-format
+msgid "Got mysql server has gone away: %s"
+msgstr ""
+
+#: keystone/common/sql/legacy.py:188
+#, python-format
+msgid "Cannot migrate EC2 credential: %s"
+msgstr ""
+
+#: keystone/common/sql/migration.py:47
+msgid "version should be an integer"
+msgstr ""
+
+#: keystone/common/sql/nova.py:65
+#, python-format
+msgid "Create tenant %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:82
+#, python-format
+msgid "Create user %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:91
+#, python-format
+msgid "Add user %(user_id)s to tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:100
+#, python-format
+msgid "Ignoring existing role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:107
+#, python-format
+msgid "Create role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:117
+#, python-format
+msgid "Assign role %(role_id)s to user %(user_id)s on tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:136
+#, python-format
+msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/identity/controllers.py:952
+#, python-format
+msgid ""
+"Group %(group)s not found for role-assignment - %(target)s with Role: "
+"%(role)s"
+msgstr ""
+
+#: keystone/identity/backends/kvs.py:126 keystone/identity/backends/kvs.py:135
+msgid "User not found in group"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:189
+#, python-format
+msgid ""
+"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
+"be removed from the group. The user will be ignored."
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:334
+msgid "Changing Name not supported by LDAP"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:347
+#, python-format
+msgid "User %(user_id)s is already a member of group %(group_id)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:394
+#, python-format
+msgid "Failed to understand rule %(rule)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:404
+#, python-format
+msgid "No handler for matches of kind %s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:679
+#, python-format
+msgid "Failed to understand rule %(rule)r"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
+#: keystone/policy/backends/rules.py:93
+#, python-format
+msgid "enforce %(action)s: %(credentials)s"
+msgstr ""
+
+#: keystone/token/controllers.py:378
+#, python-format
+msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
+msgstr ""
+
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
+msgid "Token does not belong to specified tenant."
+msgstr ""
+
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
+msgstr ""
+
+#: keystone/token/backends/memcache.py:144
+#, python-format
+msgid ""
+"Successful set of token-index-list for user-key \"%(user_key)s\", "
+"#%(count)d records"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:154
+#, python-format
+msgid ""
+"Failed to set token-index-list for user-key \"%(user_key)s\". Attempt "
+"%(cas_retry)d of %(cas_retry_max)d"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:163
+msgid "Unable to add token user list"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:172
+msgid "Unable to add token to revocation list."
+msgstr ""
+
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
diff --git a/keystone/locale/tr_TR/LC_MESSAGES/keystone.po b/keystone/locale/tr_TR/LC_MESSAGES/keystone.po
new file mode 100644
index 00000000..866c94eb
--- /dev/null
+++ b/keystone/locale/tr_TR/LC_MESSAGES/keystone.po
@@ -0,0 +1,847 @@
+# Turkish (Turkey) translations for keystone.
+# Copyright (C) 2013 ORGANIZATION
+# This file is distributed under the same license as the keystone project.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Keystone\n"
+"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
+"PO-Revision-Date: 2013-07-29 22:01+0000\n"
+"Last-Translator: openstackjenkins <jenkins@openstack.org>\n"
+"Language-Team: Turkish (Turkey) "
+"(http://www.transifex.com/projects/p/openstack/language/tr_TR/)\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 1.3\n"
+
+#: keystone/clean.py:23
+#, python-format
+msgid "%s cannot be empty."
+msgstr ""
+
+#: keystone/clean.py:25
+#, python-format
+msgid "%(property_name)s cannot be less than %(min_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:29
+#, python-format
+msgid "%(property_name)s should not be greater than %(max_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:36
+#, python-format
+msgid "%(property_name)s is not a %(display_expected_type)s"
+msgstr ""
+
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
+#, python-format
+msgid "Failed to checkout %s"
+msgstr ""
+
+#: keystone/assignment/core.py:529
+#, python-format
+msgid "Expected dict or list: %s"
+msgstr ""
+
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
+#, python-format
+msgid "Cannot remove role that has not been granted, %s"
+msgstr ""
+
+#: keystone/assignment/backends/ldap.py:418
+#, python-format
+msgid "Role %s not found"
+msgstr ""
+
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
+#, python-format
+msgid "Project is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
+#, python-format
+msgid "Domain is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
+#, python-format
+msgid "User is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:262
+msgid "Scoping to both domain and project is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:265
+msgid "Scoping to both domain and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:268
+msgid "Scoping to both project and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:353
+msgid "User not found"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
+msgstr ""
+
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
+msgstr ""
+
+#: keystone/catalog/core.py:38
+#, python-format
+msgid "Malformed endpoint %(url)s - unknown key %(keyerror)s"
+msgstr ""
+
+#: keystone/catalog/core.py:43
+#, python-format
+msgid ""
+"Malformed endpoint %(url)s - unknown key %(keyerror)s(are you missing "
+"brackets ?)"
+msgstr ""
+
+#: keystone/catalog/core.py:49
+#, python-format
+msgid ""
+"Malformed endpoint %s - incomplete format (are you "
+"missing a type notifier ?)"
+msgstr ""
+
+#: keystone/catalog/backends/templated.py:109
+#, python-format
+msgid "Unable to open template file %s"
+msgstr ""
+
+#: keystone/common/cms.py:26
+#, python-format
+msgid "Verify error: %s"
+msgstr ""
+
+#: keystone/common/cms.py:118
+msgid ""
+"Signing error: Unable to load certificate - ensure you've configured PKI "
+"with 'keystone-manage pki_setup'"
+msgstr ""
+
+#: keystone/common/cms.py:122
+#, python-format
+msgid "Signing error: %s"
+msgstr ""
+
+#: keystone/common/config.py:89
+#, python-format
+msgid "Unable to locate specified logging config file: %s"
+msgstr ""
+
+#: keystone/common/config.py:107
+msgid "Invalid syslog facility"
+msgstr ""
+
+#: keystone/common/controller.py:18
+#, python-format
+msgid "RBAC: Authorizing %(action)s(%(kwargs)s)"
+msgstr ""
+
+#: keystone/common/controller.py:25
+msgid "RBAC: Invalid token"
+msgstr ""
+
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
+msgid "RBAC: Invalid user"
+msgstr ""
+
+#: keystone/common/controller.py:45
+msgid "RBAC: Proceeding without project"
+msgstr ""
+
+#: keystone/common/controller.py:65
+msgid "RBAC: Proceeding without tenant"
+msgstr ""
+
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
+msgid "RBAC: Bypassing authorization"
+msgstr ""
+
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
+msgid "RBAC: Authorization granted"
+msgstr ""
+
+#: keystone/common/controller.py:134
+#, python-format
+msgid "RBAC: Adding query filter params (%s)"
+msgstr ""
+
+#: keystone/common/controller.py:322
+msgid "Invalid token in normalize_domain_id"
+msgstr ""
+
+#: keystone/common/utils.py:233
+msgid ""
+"Error setting up the debug environment. Verify that the option --debug-"
+"url has the format <host>:<port> and that a debugger processes is "
+"listening on that port."
+msgstr ""
+
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
+#, python-format
+msgid "arg_dict: %s"
+msgstr ""
+
+#: keystone/common/wsgi.py:243
+#, python-format
+msgid "Authorization failed. %(exception)s from %(remote_addr)s"
+msgstr ""
+
+#: keystone/common/wsgi.py:487
+msgid "The resource could not be found."
+msgstr ""
+
+#: keystone/common/environment/__init__.py:37
+#, python-format
+msgid "Environment configured as: %s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:51
+#, python-format
+msgid "Starting %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:113
+msgid "Server error"
+msgstr ""
+
+#: keystone/common/ldap/core.py:79
+#, python-format
+msgid "Invalid LDAP deref option: %s. Choose one of: "
+msgstr ""
+
+#: keystone/common/ldap/core.py:87
+#, python-format
+msgid "Invalid LDAP TLS certs option: %(option). Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:99
+#, python-format
+msgid "Invalid LDAP scope: %(scope)s. Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:189
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%s\". Format must be "
+"<ldap_attribute>:<keystone_attribute>"
+msgstr ""
+
+#: keystone/common/ldap/core.py:195
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%(item)s\". Value "
+"\"%(attr_map)s\" must use one of %(keys)s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:279 keystone/identity/backends/kvs.py:177
+#: keystone/identity/backends/kvs.py:205
+#, python-format
+msgid "Duplicate name, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:289 keystone/identity/backends/kvs.py:170
+#, python-format
+msgid "Duplicate ID, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:294
+#, python-format
+msgid "LDAP %s create"
+msgstr ""
+
+#: keystone/common/ldap/core.py:372
+#, python-format
+msgid "LDAP %s update"
+msgstr ""
+
+#: keystone/common/ldap/core.py:405
+#, python-format
+msgid "LDAP %s delete"
+msgstr ""
+
+#: keystone/common/ldap/core.py:430
+#, python-format
+msgid "LDAP init: url=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:431
+#, python-format
+msgid ""
+"LDAP init: use_tls=%(use_tls)s\n"
+"tls_cacertfile=%(tls_cacertfile)s\n"
+"tls_cacertdir=%(tls_cacertdir)s\n"
+"tls_req_cert=%(tls_req_cert)s\n"
+"tls_avail=%(tls_avail)s\n"
+msgstr ""
+
+#: keystone/common/ldap/core.py:450
+msgid "Invalid TLS / LDAPS combination"
+msgstr ""
+
+#: keystone/common/ldap/core.py:454
+#, python-format
+msgid "Invalid LDAP TLS_AVAIL option: %s. TLS not available"
+msgstr ""
+
+#: keystone/common/ldap/core.py:464
+#, python-format
+msgid "tls_cacertfile %s not found or is not a file"
+msgstr ""
+
+#: keystone/common/ldap/core.py:476
+#, python-format
+msgid "tls_cacertdir %s not found or is not a directory"
+msgstr ""
+
+#: keystone/common/ldap/core.py:483
+#, python-format
+msgid "LDAP TLS: invalid TLS_REQUIRE_CERT Option=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:497
+#, python-format
+msgid "LDAP bind: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:508
+#, python-format
+msgid "LDAP add: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:514
+#, python-format
+msgid ""
+"LDAP search: dn=%(dn)s, scope=%(scope)s, query=%(query)s, "
+"attrs=%(attrlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:567
+msgid ""
+"LDAP Server does not support paging. Disable paging in keystone.conf to "
+"avoid this message."
+msgstr ""
+
+#: keystone/common/ldap/core.py:584
+#, python-format
+msgid "LDAP modify: dn=%(dn)s, modlist=%(modlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:590
+#, python-format
+msgid "LDAP delete: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:595
+#, python-format
+msgid "LDAP delete_ext: dn=%(dn)s, serverctrls=%(serverctrls)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:146
+#, python-format
+msgid "FakeLdap initialize url=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:156
+#, python-format
+msgid "FakeLdap bind dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:163
+#, python-format
+msgid "FakeLdap bind fail: dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:170
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:175
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s does not match"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:190
+#, python-format
+msgid "FakeLdap add item: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:193
+#, python-format
+msgid "FakeLdap add item failed: dn=%s is already in store."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:207 keystone/common/ldap/fakeldap.py:221
+#, python-format
+msgid "FakeLdap delete item: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:211 keystone/common/ldap/fakeldap.py:225
+#, python-format
+msgid "FakeLdap delete item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:240
+#, python-format
+msgid "FakeLdap modify item: dn=%(dn)s attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:245
+#, python-format
+msgid "FakeLdap modify item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:262
+#, python-format
+msgid "FakeLdap modify item failed: item has no attribute \"%s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:273
+#, python-format
+msgid ""
+"FakeLdap modify item failed: item has no attribute \"%(k)s\" with value "
+"\"%(v)s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:279
+#, python-format
+msgid "FakeLdap modify item failed: unknown command %s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:281
+#, python-format
+msgid "modify_s action %s not implemented"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:300
+#, python-format
+msgid "FakeLdap search at dn=%(dn)s scope=%(scope)s query=%(query)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:306
+msgid "FakeLdap search fail: dn not found for SCOPE_BASE"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:320
+#, python-format
+msgid "Search scope %s not implemented."
+msgstr ""
+
+#: keystone/common/sql/core.py:119
+msgid "Global engine callback raised."
+msgstr ""
+
+#: keystone/common/sql/core.py:233
+#, python-format
+msgid "Got mysql server has gone away: %s"
+msgstr ""
+
+#: keystone/common/sql/legacy.py:188
+#, python-format
+msgid "Cannot migrate EC2 credential: %s"
+msgstr ""
+
+#: keystone/common/sql/migration.py:47
+msgid "version should be an integer"
+msgstr ""
+
+#: keystone/common/sql/nova.py:65
+#, python-format
+msgid "Create tenant %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:82
+#, python-format
+msgid "Create user %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:91
+#, python-format
+msgid "Add user %(user_id)s to tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:100
+#, python-format
+msgid "Ignoring existing role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:107
+#, python-format
+msgid "Create role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:117
+#, python-format
+msgid "Assign role %(role_id)s to user %(user_id)s on tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:136
+#, python-format
+msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/identity/controllers.py:952
+#, python-format
+msgid ""
+"Group %(group)s not found for role-assignment - %(target)s with Role: "
+"%(role)s"
+msgstr ""
+
+#: keystone/identity/backends/kvs.py:126 keystone/identity/backends/kvs.py:135
+msgid "User not found in group"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:189
+#, python-format
+msgid ""
+"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
+"be removed from the group. The user will be ignored."
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:334
+msgid "Changing Name not supported by LDAP"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:347
+#, python-format
+msgid "User %(user_id)s is already a member of group %(group_id)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:394
+#, python-format
+msgid "Failed to understand rule %(rule)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:404
+#, python-format
+msgid "No handler for matches of kind %s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:679
+#, python-format
+msgid "Failed to understand rule %(rule)r"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
+#: keystone/policy/backends/rules.py:93
+#, python-format
+msgid "enforce %(action)s: %(credentials)s"
+msgstr ""
+
+#: keystone/token/controllers.py:378
+#, python-format
+msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
+msgstr ""
+
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
+msgid "Token does not belong to specified tenant."
+msgstr ""
+
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
+msgstr ""
+
+#: keystone/token/backends/memcache.py:144
+#, python-format
+msgid ""
+"Successful set of token-index-list for user-key \"%(user_key)s\", "
+"#%(count)d records"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:154
+#, python-format
+msgid ""
+"Failed to set token-index-list for user-key \"%(user_key)s\". Attempt "
+"%(cas_retry)d of %(cas_retry_max)d"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:163
+msgid "Unable to add token user list"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:172
+msgid "Unable to add token to revocation list."
+msgstr ""
+
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
diff --git a/keystone/locale/uk/LC_MESSAGES/keystone.po b/keystone/locale/uk/LC_MESSAGES/keystone.po
new file mode 100644
index 00000000..4d8e5cef
--- /dev/null
+++ b/keystone/locale/uk/LC_MESSAGES/keystone.po
@@ -0,0 +1,848 @@
+# Ukrainian translations for keystone.
+# Copyright (C) 2013 ORGANIZATION
+# This file is distributed under the same license as the keystone project.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Keystone\n"
+"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
+"PO-Revision-Date: 2013-07-29 22:01+0000\n"
+"Last-Translator: openstackjenkins <jenkins@openstack.org>\n"
+"Language-Team: Ukrainian "
+"(http://www.transifex.com/projects/p/openstack/language/uk/)\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 1.3\n"
+
+#: keystone/clean.py:23
+#, python-format
+msgid "%s cannot be empty."
+msgstr ""
+
+#: keystone/clean.py:25
+#, python-format
+msgid "%(property_name)s cannot be less than %(min_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:29
+#, python-format
+msgid "%(property_name)s should not be greater than %(max_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:36
+#, python-format
+msgid "%(property_name)s is not a %(display_expected_type)s"
+msgstr ""
+
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
+#, python-format
+msgid "Failed to checkout %s"
+msgstr ""
+
+#: keystone/assignment/core.py:529
+#, python-format
+msgid "Expected dict or list: %s"
+msgstr ""
+
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
+#, python-format
+msgid "Cannot remove role that has not been granted, %s"
+msgstr ""
+
+#: keystone/assignment/backends/ldap.py:418
+#, python-format
+msgid "Role %s not found"
+msgstr ""
+
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
+#, python-format
+msgid "Project is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
+#, python-format
+msgid "Domain is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
+#, python-format
+msgid "User is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:262
+msgid "Scoping to both domain and project is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:265
+msgid "Scoping to both domain and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:268
+msgid "Scoping to both project and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:353
+msgid "User not found"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
+msgstr ""
+
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
+msgstr ""
+
+#: keystone/catalog/core.py:38
+#, python-format
+msgid "Malformed endpoint %(url)s - unknown key %(keyerror)s"
+msgstr ""
+
+#: keystone/catalog/core.py:43
+#, python-format
+msgid ""
+"Malformed endpoint %(url)s - unknown key %(keyerror)s(are you missing "
+"brackets ?)"
+msgstr ""
+
+#: keystone/catalog/core.py:49
+#, python-format
+msgid ""
+"Malformed endpoint %s - incomplete format (are you "
+"missing a type notifier ?)"
+msgstr ""
+
+#: keystone/catalog/backends/templated.py:109
+#, python-format
+msgid "Unable to open template file %s"
+msgstr ""
+
+#: keystone/common/cms.py:26
+#, python-format
+msgid "Verify error: %s"
+msgstr ""
+
+#: keystone/common/cms.py:118
+msgid ""
+"Signing error: Unable to load certificate - ensure you've configured PKI "
+"with 'keystone-manage pki_setup'"
+msgstr ""
+
+#: keystone/common/cms.py:122
+#, python-format
+msgid "Signing error: %s"
+msgstr ""
+
+#: keystone/common/config.py:89
+#, python-format
+msgid "Unable to locate specified logging config file: %s"
+msgstr ""
+
+#: keystone/common/config.py:107
+msgid "Invalid syslog facility"
+msgstr ""
+
+#: keystone/common/controller.py:18
+#, python-format
+msgid "RBAC: Authorizing %(action)s(%(kwargs)s)"
+msgstr ""
+
+#: keystone/common/controller.py:25
+msgid "RBAC: Invalid token"
+msgstr ""
+
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
+msgid "RBAC: Invalid user"
+msgstr ""
+
+#: keystone/common/controller.py:45
+msgid "RBAC: Proceeding without project"
+msgstr ""
+
+#: keystone/common/controller.py:65
+msgid "RBAC: Proceeding without tenant"
+msgstr ""
+
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
+msgid "RBAC: Bypassing authorization"
+msgstr ""
+
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
+msgid "RBAC: Authorization granted"
+msgstr ""
+
+#: keystone/common/controller.py:134
+#, python-format
+msgid "RBAC: Adding query filter params (%s)"
+msgstr ""
+
+#: keystone/common/controller.py:322
+msgid "Invalid token in normalize_domain_id"
+msgstr ""
+
+#: keystone/common/utils.py:233
+msgid ""
+"Error setting up the debug environment. Verify that the option --debug-"
+"url has the format <host>:<port> and that a debugger processes is "
+"listening on that port."
+msgstr ""
+
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
+#, python-format
+msgid "arg_dict: %s"
+msgstr ""
+
+#: keystone/common/wsgi.py:243
+#, python-format
+msgid "Authorization failed. %(exception)s from %(remote_addr)s"
+msgstr ""
+
+#: keystone/common/wsgi.py:487
+msgid "The resource could not be found."
+msgstr ""
+
+#: keystone/common/environment/__init__.py:37
+#, python-format
+msgid "Environment configured as: %s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:51
+#, python-format
+msgid "Starting %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:113
+msgid "Server error"
+msgstr ""
+
+#: keystone/common/ldap/core.py:79
+#, python-format
+msgid "Invalid LDAP deref option: %s. Choose one of: "
+msgstr ""
+
+#: keystone/common/ldap/core.py:87
+#, python-format
+msgid "Invalid LDAP TLS certs option: %(option). Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:99
+#, python-format
+msgid "Invalid LDAP scope: %(scope)s. Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:189
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%s\". Format must be "
+"<ldap_attribute>:<keystone_attribute>"
+msgstr ""
+
+#: keystone/common/ldap/core.py:195
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%(item)s\". Value "
+"\"%(attr_map)s\" must use one of %(keys)s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:279 keystone/identity/backends/kvs.py:177
+#: keystone/identity/backends/kvs.py:205
+#, python-format
+msgid "Duplicate name, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:289 keystone/identity/backends/kvs.py:170
+#, python-format
+msgid "Duplicate ID, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:294
+#, python-format
+msgid "LDAP %s create"
+msgstr ""
+
+#: keystone/common/ldap/core.py:372
+#, python-format
+msgid "LDAP %s update"
+msgstr ""
+
+#: keystone/common/ldap/core.py:405
+#, python-format
+msgid "LDAP %s delete"
+msgstr ""
+
+#: keystone/common/ldap/core.py:430
+#, python-format
+msgid "LDAP init: url=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:431
+#, python-format
+msgid ""
+"LDAP init: use_tls=%(use_tls)s\n"
+"tls_cacertfile=%(tls_cacertfile)s\n"
+"tls_cacertdir=%(tls_cacertdir)s\n"
+"tls_req_cert=%(tls_req_cert)s\n"
+"tls_avail=%(tls_avail)s\n"
+msgstr ""
+
+#: keystone/common/ldap/core.py:450
+msgid "Invalid TLS / LDAPS combination"
+msgstr ""
+
+#: keystone/common/ldap/core.py:454
+#, python-format
+msgid "Invalid LDAP TLS_AVAIL option: %s. TLS not available"
+msgstr ""
+
+#: keystone/common/ldap/core.py:464
+#, python-format
+msgid "tls_cacertfile %s not found or is not a file"
+msgstr ""
+
+#: keystone/common/ldap/core.py:476
+#, python-format
+msgid "tls_cacertdir %s not found or is not a directory"
+msgstr ""
+
+#: keystone/common/ldap/core.py:483
+#, python-format
+msgid "LDAP TLS: invalid TLS_REQUIRE_CERT Option=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:497
+#, python-format
+msgid "LDAP bind: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:508
+#, python-format
+msgid "LDAP add: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:514
+#, python-format
+msgid ""
+"LDAP search: dn=%(dn)s, scope=%(scope)s, query=%(query)s, "
+"attrs=%(attrlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:567
+msgid ""
+"LDAP Server does not support paging. Disable paging in keystone.conf to "
+"avoid this message."
+msgstr ""
+
+#: keystone/common/ldap/core.py:584
+#, python-format
+msgid "LDAP modify: dn=%(dn)s, modlist=%(modlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:590
+#, python-format
+msgid "LDAP delete: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:595
+#, python-format
+msgid "LDAP delete_ext: dn=%(dn)s, serverctrls=%(serverctrls)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:146
+#, python-format
+msgid "FakeLdap initialize url=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:156
+#, python-format
+msgid "FakeLdap bind dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:163
+#, python-format
+msgid "FakeLdap bind fail: dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:170
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:175
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s does not match"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:190
+#, python-format
+msgid "FakeLdap add item: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:193
+#, python-format
+msgid "FakeLdap add item failed: dn=%s is already in store."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:207 keystone/common/ldap/fakeldap.py:221
+#, python-format
+msgid "FakeLdap delete item: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:211 keystone/common/ldap/fakeldap.py:225
+#, python-format
+msgid "FakeLdap delete item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:240
+#, python-format
+msgid "FakeLdap modify item: dn=%(dn)s attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:245
+#, python-format
+msgid "FakeLdap modify item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:262
+#, python-format
+msgid "FakeLdap modify item failed: item has no attribute \"%s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:273
+#, python-format
+msgid ""
+"FakeLdap modify item failed: item has no attribute \"%(k)s\" with value "
+"\"%(v)s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:279
+#, python-format
+msgid "FakeLdap modify item failed: unknown command %s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:281
+#, python-format
+msgid "modify_s action %s not implemented"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:300
+#, python-format
+msgid "FakeLdap search at dn=%(dn)s scope=%(scope)s query=%(query)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:306
+msgid "FakeLdap search fail: dn not found for SCOPE_BASE"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:320
+#, python-format
+msgid "Search scope %s not implemented."
+msgstr ""
+
+#: keystone/common/sql/core.py:119
+msgid "Global engine callback raised."
+msgstr ""
+
+#: keystone/common/sql/core.py:233
+#, python-format
+msgid "Got mysql server has gone away: %s"
+msgstr ""
+
+#: keystone/common/sql/legacy.py:188
+#, python-format
+msgid "Cannot migrate EC2 credential: %s"
+msgstr ""
+
+#: keystone/common/sql/migration.py:47
+msgid "version should be an integer"
+msgstr ""
+
+#: keystone/common/sql/nova.py:65
+#, python-format
+msgid "Create tenant %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:82
+#, python-format
+msgid "Create user %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:91
+#, python-format
+msgid "Add user %(user_id)s to tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:100
+#, python-format
+msgid "Ignoring existing role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:107
+#, python-format
+msgid "Create role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:117
+#, python-format
+msgid "Assign role %(role_id)s to user %(user_id)s on tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:136
+#, python-format
+msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/identity/controllers.py:952
+#, python-format
+msgid ""
+"Group %(group)s not found for role-assignment - %(target)s with Role: "
+"%(role)s"
+msgstr ""
+
+#: keystone/identity/backends/kvs.py:126 keystone/identity/backends/kvs.py:135
+msgid "User not found in group"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:189
+#, python-format
+msgid ""
+"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
+"be removed from the group. The user will be ignored."
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:334
+msgid "Changing Name not supported by LDAP"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:347
+#, python-format
+msgid "User %(user_id)s is already a member of group %(group_id)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:394
+#, python-format
+msgid "Failed to understand rule %(rule)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:404
+#, python-format
+msgid "No handler for matches of kind %s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:679
+#, python-format
+msgid "Failed to understand rule %(rule)r"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
+#: keystone/policy/backends/rules.py:93
+#, python-format
+msgid "enforce %(action)s: %(credentials)s"
+msgstr ""
+
+#: keystone/token/controllers.py:378
+#, python-format
+msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
+msgstr ""
+
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
+msgid "Token does not belong to specified tenant."
+msgstr ""
+
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
+msgstr ""
+
+#: keystone/token/backends/memcache.py:144
+#, python-format
+msgid ""
+"Successful set of token-index-list for user-key \"%(user_key)s\", "
+"#%(count)d records"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:154
+#, python-format
+msgid ""
+"Failed to set token-index-list for user-key \"%(user_key)s\". Attempt "
+"%(cas_retry)d of %(cas_retry_max)d"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:163
+msgid "Unable to add token user list"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:172
+msgid "Unable to add token to revocation list."
+msgstr ""
+
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
diff --git a/keystone/locale/vi_VN/LC_MESSAGES/keystone.po b/keystone/locale/vi_VN/LC_MESSAGES/keystone.po
index 20fbd476..a7f3d30c 100644
--- a/keystone/locale/vi_VN/LC_MESSAGES/keystone.po
+++ b/keystone/locale/vi_VN/LC_MESSAGES/keystone.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Keystone\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
-"POT-Creation-Date: 2013-07-11 17:05+0000\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
"PO-Revision-Date: 2013-05-17 16:06+0000\n"
"Last-Translator: openstackjenkins <jenkins@openstack.org>\n"
"Language-Team: Vietnamese (Viet Nam) "
@@ -16,7 +16,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 0.9.6\n"
+"Generated-By: Babel 1.3\n"
#: keystone/clean.py:23
#, python-format
@@ -38,78 +38,224 @@ msgstr ""
msgid "%(property_name)s is not a %(display_expected_type)s"
msgstr ""
-#: keystone/test.py:106
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
#, python-format
msgid "Failed to checkout %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:110
+#: keystone/assignment/core.py:529
#, python-format
msgid "Expected dict or list: %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:456
-#: keystone/identity/backends/ldap.py:433
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
#, python-format
-msgid "Role %s not found"
+msgid "Cannot remove role that has not been granted, %s"
msgstr ""
-#: keystone/assignment/backends/sql.py:244
+#: keystone/assignment/backends/ldap.py:418
#, python-format
-msgid "Cannot remove role that has not been granted, %s"
+msgid "Role %s not found"
msgstr ""
-#: keystone/auth/controllers.py:72
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
#, python-format
msgid "Project is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:78 keystone/auth/plugins/password.py:38
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
#, python-format
msgid "Domain is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:84 keystone/auth/plugins/password.py:44
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
#, python-format
msgid "User is disabled: %s"
msgstr ""
-#: keystone/auth/controllers.py:259
+#: keystone/auth/controllers.py:262
msgid "Scoping to both domain and project is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:262
+#: keystone/auth/controllers.py:265
msgid "Scoping to both domain and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:265
+#: keystone/auth/controllers.py:268
msgid "Scoping to both project and trust is not allowed"
msgstr ""
-#: keystone/auth/controllers.py:325
-#, python-format
-msgid "Unable to lookup user %s"
-msgstr ""
-
-#: keystone/auth/controllers.py:355
+#: keystone/auth/controllers.py:353
msgid "User not found"
msgstr ""
-#: keystone/auth/token_factory.py:79
-msgid "User have no access to project"
-msgstr ""
-
-#: keystone/auth/token_factory.py:94
-msgid "User have no access to domain"
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
msgstr ""
-#: keystone/auth/token_factory.py:311 keystone/token/controllers.py:119
-msgid "Unable to sign token."
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
msgstr ""
-#: keystone/auth/token_factory.py:314 keystone/token/controllers.py:122
-#, python-format
-msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
msgstr ""
#: keystone/catalog/core.py:38
@@ -170,32 +316,32 @@ msgstr ""
msgid "RBAC: Invalid token"
msgstr ""
-#: keystone/common/controller.py:35 keystone/common/controller.py:56
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
msgid "RBAC: Invalid user"
msgstr ""
-#: keystone/common/controller.py:41
+#: keystone/common/controller.py:45
msgid "RBAC: Proceeding without project"
msgstr ""
-#: keystone/common/controller.py:61
+#: keystone/common/controller.py:65
msgid "RBAC: Proceeding without tenant"
msgstr ""
-#: keystone/common/controller.py:91 keystone/common/controller.py:142
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
msgid "RBAC: Bypassing authorization"
msgstr ""
-#: keystone/common/controller.py:100 keystone/common/controller.py:140
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
msgid "RBAC: Authorization granted"
msgstr ""
-#: keystone/common/controller.py:130
+#: keystone/common/controller.py:134
#, python-format
msgid "RBAC: Adding query filter params (%s)"
msgstr ""
-#: keystone/common/controller.py:318
+#: keystone/common/controller.py:322
msgid "Invalid token in normalize_domain_id"
msgstr ""
@@ -206,17 +352,48 @@ msgid ""
"listening on that port."
msgstr ""
-#: keystone/common/wsgi.py:162
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
#, python-format
msgid "arg_dict: %s"
msgstr ""
-#: keystone/common/wsgi.py:188
+#: keystone/common/wsgi.py:243
#, python-format
msgid "Authorization failed. %(exception)s from %(remote_addr)s"
msgstr ""
-#: keystone/common/wsgi.py:431
+#: keystone/common/wsgi.py:487
msgid "The resource could not be found."
msgstr ""
@@ -457,11 +634,11 @@ msgstr ""
msgid "Search scope %s not implemented."
msgstr ""
-#: keystone/common/sql/core.py:126
+#: keystone/common/sql/core.py:119
msgid "Global engine callback raised."
msgstr ""
-#: keystone/common/sql/core.py:240
+#: keystone/common/sql/core.py:233
#, python-format
msgid "Got mysql server has gone away: %s"
msgstr ""
@@ -510,7 +687,7 @@ msgstr ""
msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
msgstr ""
-#: keystone/identity/controllers.py:878
+#: keystone/identity/controllers.py:952
#, python-format
msgid ""
"Group %(group)s not found for role-assignment - %(target)s with Role: "
@@ -521,18 +698,18 @@ msgstr ""
msgid "User not found in group"
msgstr ""
-#: keystone/identity/backends/ldap.py:192
+#: keystone/identity/backends/ldap.py:189
#, python-format
msgid ""
"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
"be removed from the group. The user will be ignored."
msgstr ""
-#: keystone/identity/backends/ldap.py:621
+#: keystone/identity/backends/ldap.py:334
msgid "Changing Name not supported by LDAP"
msgstr ""
-#: keystone/identity/backends/ldap.py:634
+#: keystone/identity/backends/ldap.py:347
#, python-format
msgid "User %(user_id)s is already a member of group %(group_id)s"
msgstr ""
@@ -552,26 +729,56 @@ msgstr ""
msgid "Failed to understand rule %(rule)r"
msgstr ""
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
#: keystone/policy/backends/rules.py:93
#, python-format
msgid "enforce %(action)s: %(credentials)s"
msgstr ""
-#: keystone/token/controllers.py:396
+#: keystone/token/controllers.py:378
#, python-format
msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
msgstr ""
-#: keystone/token/controllers.py:413 keystone/token/controllers.py:416
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
msgid "Token does not belong to specified tenant."
msgstr ""
-#: keystone/token/controllers.py:423
-msgid "Non-default domain is not supported"
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
msgstr ""
-#: keystone/token/controllers.py:431
-msgid "Domain scoped token is not supported"
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
msgstr ""
#: keystone/token/backends/memcache.py:144
@@ -596,3 +803,54 @@ msgstr ""
msgid "Unable to add token to revocation list."
msgstr ""
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
+#~ msgid "User have no access to project"
+#~ msgstr ""
+
+#~ msgid "User have no access to domain"
+#~ msgstr ""
+
+#~ msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#~ msgstr ""
+
diff --git a/keystone/locale/zh_CN/LC_MESSAGES/keystone.po b/keystone/locale/zh_CN/LC_MESSAGES/keystone.po
index b3d557a1..8d69a376 100644
--- a/keystone/locale/zh_CN/LC_MESSAGES/keystone.po
+++ b/keystone/locale/zh_CN/LC_MESSAGES/keystone.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Keystone\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
-"POT-Creation-Date: 2013-07-11 17:05+0000\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
"PO-Revision-Date: 2013-05-21 06:08+0000\n"
"Last-Translator: daisy.ycguo <daisy.ycguo@gmail.com>\n"
"Language-Team: Chinese (China) "
@@ -16,7 +16,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 0.9.6\n"
+"Generated-By: Babel 1.3\n"
#: keystone/clean.py:23
#, python-format
@@ -38,79 +38,225 @@ msgstr "%(property_name)s 不应该超过 %(max_length)s 个字符。"
msgid "%(property_name)s is not a %(display_expected_type)s"
msgstr ""
-#: keystone/test.py:106
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
#, python-format
msgid "Failed to checkout %s"
msgstr "未能检出 %s"
-#: keystone/assignment/backends/ldap.py:110
+#: keystone/assignment/core.py:529
#, python-format
msgid "Expected dict or list: %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:456
-#: keystone/identity/backends/ldap.py:433
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
+#, python-format
+msgid "Cannot remove role that has not been granted, %s"
+msgstr "无法除去尚未授予的角色 %s"
+
+#: keystone/assignment/backends/ldap.py:418
#, python-format
msgid "Role %s not found"
msgstr "找不到角色 %s"
-#: keystone/assignment/backends/sql.py:244
-#, python-format
-msgid "Cannot remove role that has not been granted, %s"
-msgstr "无法除去尚未授予的角色 %s"
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
-#: keystone/auth/controllers.py:72
+#: keystone/auth/controllers.py:71
#, python-format
msgid "Project is disabled: %s"
msgstr "项目已禁用:%s"
-#: keystone/auth/controllers.py:78 keystone/auth/plugins/password.py:38
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
#, python-format
msgid "Domain is disabled: %s"
msgstr "域已禁用:%s"
-#: keystone/auth/controllers.py:84 keystone/auth/plugins/password.py:44
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
#, python-format
msgid "User is disabled: %s"
msgstr "用户已禁用:%s"
-#: keystone/auth/controllers.py:259
+#: keystone/auth/controllers.py:262
msgid "Scoping to both domain and project is not allowed"
msgstr "不允许同时将作用域限定到域和项目"
-#: keystone/auth/controllers.py:262
+#: keystone/auth/controllers.py:265
msgid "Scoping to both domain and trust is not allowed"
msgstr "不允许同时将作用域限定到域和信任"
-#: keystone/auth/controllers.py:265
+#: keystone/auth/controllers.py:268
msgid "Scoping to both project and trust is not allowed"
msgstr "不允许同时将作用域限定到项目和信任"
-#: keystone/auth/controllers.py:325
-#, python-format
-msgid "Unable to lookup user %s"
-msgstr "无法查找用户 %s"
-
-#: keystone/auth/controllers.py:355
+#: keystone/auth/controllers.py:353
msgid "User not found"
msgstr "找不到用户"
-#: keystone/auth/token_factory.py:79
-msgid "User have no access to project"
-msgstr "用户对项目没有任何访问权限"
-
-#: keystone/auth/token_factory.py:94
-msgid "User have no access to domain"
-msgstr "用户对域没有任何访问权限"
-
-#: keystone/auth/token_factory.py:311 keystone/token/controllers.py:119
-msgid "Unable to sign token."
-msgstr "无法对令牌进行签名。"
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
+msgstr ""
-#: keystone/auth/token_factory.py:314 keystone/token/controllers.py:122
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
#, python-format
-msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
-msgstr "token_format 的值 %s 无效。允许值是 PKI 或 UUID。"
+msgid "Unable to lookup user %s"
+msgstr "无法查找用户 %s"
+
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
+msgstr ""
#: keystone/catalog/core.py:38
#, python-format
@@ -170,32 +316,32 @@ msgstr ""
msgid "RBAC: Invalid token"
msgstr "RBAC:令牌无效"
-#: keystone/common/controller.py:35 keystone/common/controller.py:56
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
msgid "RBAC: Invalid user"
msgstr "RBAC:用户无效"
-#: keystone/common/controller.py:41
+#: keystone/common/controller.py:45
msgid "RBAC: Proceeding without project"
msgstr "RBAC:正在没有项目的情况下继续"
-#: keystone/common/controller.py:61
+#: keystone/common/controller.py:65
msgid "RBAC: Proceeding without tenant"
msgstr "RBAC:正在没有租户的情况下继续"
-#: keystone/common/controller.py:91 keystone/common/controller.py:142
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
msgid "RBAC: Bypassing authorization"
msgstr "RBAC:正在绕过授权"
-#: keystone/common/controller.py:100 keystone/common/controller.py:140
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
msgid "RBAC: Authorization granted"
msgstr "RBAC:已授予权限"
-#: keystone/common/controller.py:130
+#: keystone/common/controller.py:134
#, python-format
msgid "RBAC: Adding query filter params (%s)"
msgstr "RBAC:正在添加查询过滤器参数 (%s)"
-#: keystone/common/controller.py:318
+#: keystone/common/controller.py:322
msgid "Invalid token in normalize_domain_id"
msgstr "normalize_domain_id 中的令牌无效"
@@ -206,17 +352,48 @@ msgid ""
"listening on that port."
msgstr ""
-#: keystone/common/wsgi.py:162
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
#, python-format
msgid "arg_dict: %s"
msgstr "arg_dict:%s"
-#: keystone/common/wsgi.py:188
+#: keystone/common/wsgi.py:243
#, fuzzy, python-format
msgid "Authorization failed. %(exception)s from %(remote_addr)s"
msgstr "授权失败。%s 来自 %s"
-#: keystone/common/wsgi.py:431
+#: keystone/common/wsgi.py:487
msgid "The resource could not be found."
msgstr "找不到该资源。"
@@ -457,11 +634,11 @@ msgstr "FakeLdap search 失败:对于 SCOPE_BASE,找不到 dn"
msgid "Search scope %s not implemented."
msgstr "未实现搜索范围 %s。"
-#: keystone/common/sql/core.py:126
+#: keystone/common/sql/core.py:119
msgid "Global engine callback raised."
msgstr ""
-#: keystone/common/sql/core.py:240
+#: keystone/common/sql/core.py:233
#, python-format
msgid "Got mysql server has gone away: %s"
msgstr "mysql 服务器已不存在:%s"
@@ -510,7 +687,7 @@ msgstr "请将角色 %s 分配给用户 %s(在租户 %s 上)"
msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
msgstr "正在为用户 %s 和租户 %s 创建 ec2 凭证"
-#: keystone/identity/controllers.py:878
+#: keystone/identity/controllers.py:952
#, python-format
msgid ""
"Group %(group)s not found for role-assignment - %(target)s with Role: "
@@ -521,18 +698,18 @@ msgstr ""
msgid "User not found in group"
msgstr "在组中找不到用户"
-#: keystone/identity/backends/ldap.py:192
+#: keystone/identity/backends/ldap.py:189
#, python-format
msgid ""
"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
"be removed from the group. The user will be ignored."
msgstr ""
-#: keystone/identity/backends/ldap.py:621
+#: keystone/identity/backends/ldap.py:334
msgid "Changing Name not supported by LDAP"
msgstr "更改名称不受 LDAP 支持"
-#: keystone/identity/backends/ldap.py:634
+#: keystone/identity/backends/ldap.py:347
#, fuzzy, python-format
msgid "User %(user_id)s is already a member of group %(group_id)s"
msgstr "用户 %s 已是组 %s 的成员"
@@ -552,27 +729,57 @@ msgstr "对于类型为 %s 的匹配项,不存在任何处理程序"
msgid "Failed to understand rule %(rule)r"
msgstr "未能理解规则 %(rule)r"
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
#: keystone/policy/backends/rules.py:93
#, python-format
msgid "enforce %(action)s: %(credentials)s"
msgstr ""
-#: keystone/token/controllers.py:396
+#: keystone/token/controllers.py:378
#, python-format
msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
msgstr ""
-#: keystone/token/controllers.py:413 keystone/token/controllers.py:416
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
msgid "Token does not belong to specified tenant."
msgstr "令牌不属于指定的租户。"
-#: keystone/token/controllers.py:423
-msgid "Non-default domain is not supported"
-msgstr "非缺省域不受支持"
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
+msgstr ""
-#: keystone/token/controllers.py:431
-msgid "Domain scoped token is not supported"
-msgstr "作用域限定到域的令牌不受支持"
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
+msgstr ""
#: keystone/token/backends/memcache.py:144
#, python-format
@@ -596,3 +803,54 @@ msgstr ""
msgid "Unable to add token to revocation list."
msgstr "无法将令牌添加至撤销列表。"
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr "无法对令牌进行签名。"
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr "非缺省域不受支持"
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr "作用域限定到域的令牌不受支持"
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
+#~ msgid "User have no access to project"
+#~ msgstr "用户对项目没有任何访问权限"
+
+#~ msgid "User have no access to domain"
+#~ msgstr "用户对域没有任何访问权限"
+
+#~ msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#~ msgstr "token_format 的值 %s 无效。允许值是 PKI 或 UUID。"
+
diff --git a/keystone/locale/zh_HK/LC_MESSAGES/keystone.po b/keystone/locale/zh_HK/LC_MESSAGES/keystone.po
new file mode 100644
index 00000000..be48e5f5
--- /dev/null
+++ b/keystone/locale/zh_HK/LC_MESSAGES/keystone.po
@@ -0,0 +1,847 @@
+# Chinese (Traditional, Hong Kong SAR China) translations for keystone.
+# Copyright (C) 2013 ORGANIZATION
+# This file is distributed under the same license as the keystone project.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Keystone\n"
+"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
+"PO-Revision-Date: 2013-07-29 22:01+0000\n"
+"Last-Translator: openstackjenkins <jenkins@openstack.org>\n"
+"Language-Team: Chinese (Hong Kong) "
+"(http://www.transifex.com/projects/p/openstack/language/zh_HK/)\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 1.3\n"
+
+#: keystone/clean.py:23
+#, python-format
+msgid "%s cannot be empty."
+msgstr ""
+
+#: keystone/clean.py:25
+#, python-format
+msgid "%(property_name)s cannot be less than %(min_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:29
+#, python-format
+msgid "%(property_name)s should not be greater than %(max_length)s characters."
+msgstr ""
+
+#: keystone/clean.py:36
+#, python-format
+msgid "%(property_name)s is not a %(display_expected_type)s"
+msgstr ""
+
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
+#, python-format
+msgid "Failed to checkout %s"
+msgstr ""
+
+#: keystone/assignment/core.py:529
+#, python-format
+msgid "Expected dict or list: %s"
+msgstr ""
+
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
+#, python-format
+msgid "Cannot remove role that has not been granted, %s"
+msgstr ""
+
+#: keystone/assignment/backends/ldap.py:418
+#, python-format
+msgid "Role %s not found"
+msgstr ""
+
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
+
+#: keystone/auth/controllers.py:71
+#, python-format
+msgid "Project is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
+#, python-format
+msgid "Domain is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
+#, python-format
+msgid "User is disabled: %s"
+msgstr ""
+
+#: keystone/auth/controllers.py:262
+msgid "Scoping to both domain and project is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:265
+msgid "Scoping to both domain and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:268
+msgid "Scoping to both project and trust is not allowed"
+msgstr ""
+
+#: keystone/auth/controllers.py:353
+msgid "User not found"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
+msgstr ""
+
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
+#, python-format
+msgid "Unable to lookup user %s"
+msgstr ""
+
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
+msgstr ""
+
+#: keystone/catalog/core.py:38
+#, python-format
+msgid "Malformed endpoint %(url)s - unknown key %(keyerror)s"
+msgstr ""
+
+#: keystone/catalog/core.py:43
+#, python-format
+msgid ""
+"Malformed endpoint %(url)s - unknown key %(keyerror)s(are you missing "
+"brackets ?)"
+msgstr ""
+
+#: keystone/catalog/core.py:49
+#, python-format
+msgid ""
+"Malformed endpoint %s - incomplete format (are you "
+"missing a type notifier ?)"
+msgstr ""
+
+#: keystone/catalog/backends/templated.py:109
+#, python-format
+msgid "Unable to open template file %s"
+msgstr ""
+
+#: keystone/common/cms.py:26
+#, python-format
+msgid "Verify error: %s"
+msgstr ""
+
+#: keystone/common/cms.py:118
+msgid ""
+"Signing error: Unable to load certificate - ensure you've configured PKI "
+"with 'keystone-manage pki_setup'"
+msgstr ""
+
+#: keystone/common/cms.py:122
+#, python-format
+msgid "Signing error: %s"
+msgstr ""
+
+#: keystone/common/config.py:89
+#, python-format
+msgid "Unable to locate specified logging config file: %s"
+msgstr ""
+
+#: keystone/common/config.py:107
+msgid "Invalid syslog facility"
+msgstr ""
+
+#: keystone/common/controller.py:18
+#, python-format
+msgid "RBAC: Authorizing %(action)s(%(kwargs)s)"
+msgstr ""
+
+#: keystone/common/controller.py:25
+msgid "RBAC: Invalid token"
+msgstr ""
+
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
+msgid "RBAC: Invalid user"
+msgstr ""
+
+#: keystone/common/controller.py:45
+msgid "RBAC: Proceeding without project"
+msgstr ""
+
+#: keystone/common/controller.py:65
+msgid "RBAC: Proceeding without tenant"
+msgstr ""
+
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
+msgid "RBAC: Bypassing authorization"
+msgstr ""
+
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
+msgid "RBAC: Authorization granted"
+msgstr ""
+
+#: keystone/common/controller.py:134
+#, python-format
+msgid "RBAC: Adding query filter params (%s)"
+msgstr ""
+
+#: keystone/common/controller.py:322
+msgid "Invalid token in normalize_domain_id"
+msgstr ""
+
+#: keystone/common/utils.py:233
+msgid ""
+"Error setting up the debug environment. Verify that the option --debug-"
+"url has the format <host>:<port> and that a debugger processes is "
+"listening on that port."
+msgstr ""
+
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
+#, python-format
+msgid "arg_dict: %s"
+msgstr ""
+
+#: keystone/common/wsgi.py:243
+#, python-format
+msgid "Authorization failed. %(exception)s from %(remote_addr)s"
+msgstr ""
+
+#: keystone/common/wsgi.py:487
+msgid "The resource could not be found."
+msgstr ""
+
+#: keystone/common/environment/__init__.py:37
+#, python-format
+msgid "Environment configured as: %s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:51
+#, python-format
+msgid "Starting %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: keystone/common/environment/eventlet_server.py:113
+msgid "Server error"
+msgstr ""
+
+#: keystone/common/ldap/core.py:79
+#, python-format
+msgid "Invalid LDAP deref option: %s. Choose one of: "
+msgstr ""
+
+#: keystone/common/ldap/core.py:87
+#, python-format
+msgid "Invalid LDAP TLS certs option: %(option). Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:99
+#, python-format
+msgid "Invalid LDAP scope: %(scope)s. Choose one of: %(options)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:189
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%s\". Format must be "
+"<ldap_attribute>:<keystone_attribute>"
+msgstr ""
+
+#: keystone/common/ldap/core.py:195
+#, python-format
+msgid ""
+"Invalid additional attribute mapping: \"%(item)s\". Value "
+"\"%(attr_map)s\" must use one of %(keys)s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:279 keystone/identity/backends/kvs.py:177
+#: keystone/identity/backends/kvs.py:205
+#, python-format
+msgid "Duplicate name, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:289 keystone/identity/backends/kvs.py:170
+#, python-format
+msgid "Duplicate ID, %s."
+msgstr ""
+
+#: keystone/common/ldap/core.py:294
+#, python-format
+msgid "LDAP %s create"
+msgstr ""
+
+#: keystone/common/ldap/core.py:372
+#, python-format
+msgid "LDAP %s update"
+msgstr ""
+
+#: keystone/common/ldap/core.py:405
+#, python-format
+msgid "LDAP %s delete"
+msgstr ""
+
+#: keystone/common/ldap/core.py:430
+#, python-format
+msgid "LDAP init: url=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:431
+#, python-format
+msgid ""
+"LDAP init: use_tls=%(use_tls)s\n"
+"tls_cacertfile=%(tls_cacertfile)s\n"
+"tls_cacertdir=%(tls_cacertdir)s\n"
+"tls_req_cert=%(tls_req_cert)s\n"
+"tls_avail=%(tls_avail)s\n"
+msgstr ""
+
+#: keystone/common/ldap/core.py:450
+msgid "Invalid TLS / LDAPS combination"
+msgstr ""
+
+#: keystone/common/ldap/core.py:454
+#, python-format
+msgid "Invalid LDAP TLS_AVAIL option: %s. TLS not available"
+msgstr ""
+
+#: keystone/common/ldap/core.py:464
+#, python-format
+msgid "tls_cacertfile %s not found or is not a file"
+msgstr ""
+
+#: keystone/common/ldap/core.py:476
+#, python-format
+msgid "tls_cacertdir %s not found or is not a directory"
+msgstr ""
+
+#: keystone/common/ldap/core.py:483
+#, python-format
+msgid "LDAP TLS: invalid TLS_REQUIRE_CERT Option=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:497
+#, python-format
+msgid "LDAP bind: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:508
+#, python-format
+msgid "LDAP add: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:514
+#, python-format
+msgid ""
+"LDAP search: dn=%(dn)s, scope=%(scope)s, query=%(query)s, "
+"attrs=%(attrlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:567
+msgid ""
+"LDAP Server does not support paging. Disable paging in keystone.conf to "
+"avoid this message."
+msgstr ""
+
+#: keystone/common/ldap/core.py:584
+#, python-format
+msgid "LDAP modify: dn=%(dn)s, modlist=%(modlist)s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:590
+#, python-format
+msgid "LDAP delete: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/core.py:595
+#, python-format
+msgid "LDAP delete_ext: dn=%(dn)s, serverctrls=%(serverctrls)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:146
+#, python-format
+msgid "FakeLdap initialize url=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:156
+#, python-format
+msgid "FakeLdap bind dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:163
+#, python-format
+msgid "FakeLdap bind fail: dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:170
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s not found"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:175
+#, python-format
+msgid "FakeLdap bind fail: password for dn=%s does not match"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:190
+#, python-format
+msgid "FakeLdap add item: dn=%(dn)s, attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:193
+#, python-format
+msgid "FakeLdap add item failed: dn=%s is already in store."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:207 keystone/common/ldap/fakeldap.py:221
+#, python-format
+msgid "FakeLdap delete item: dn=%s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:211 keystone/common/ldap/fakeldap.py:225
+#, python-format
+msgid "FakeLdap delete item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:240
+#, python-format
+msgid "FakeLdap modify item: dn=%(dn)s attrs=%(attrs)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:245
+#, python-format
+msgid "FakeLdap modify item failed: dn=%s not found."
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:262
+#, python-format
+msgid "FakeLdap modify item failed: item has no attribute \"%s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:273
+#, python-format
+msgid ""
+"FakeLdap modify item failed: item has no attribute \"%(k)s\" with value "
+"\"%(v)s\" to delete"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:279
+#, python-format
+msgid "FakeLdap modify item failed: unknown command %s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:281
+#, python-format
+msgid "modify_s action %s not implemented"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:300
+#, python-format
+msgid "FakeLdap search at dn=%(dn)s scope=%(scope)s query=%(query)s"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:306
+msgid "FakeLdap search fail: dn not found for SCOPE_BASE"
+msgstr ""
+
+#: keystone/common/ldap/fakeldap.py:320
+#, python-format
+msgid "Search scope %s not implemented."
+msgstr ""
+
+#: keystone/common/sql/core.py:119
+msgid "Global engine callback raised."
+msgstr ""
+
+#: keystone/common/sql/core.py:233
+#, python-format
+msgid "Got mysql server has gone away: %s"
+msgstr ""
+
+#: keystone/common/sql/legacy.py:188
+#, python-format
+msgid "Cannot migrate EC2 credential: %s"
+msgstr ""
+
+#: keystone/common/sql/migration.py:47
+msgid "version should be an integer"
+msgstr ""
+
+#: keystone/common/sql/nova.py:65
+#, python-format
+msgid "Create tenant %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:82
+#, python-format
+msgid "Create user %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:91
+#, python-format
+msgid "Add user %(user_id)s to tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:100
+#, python-format
+msgid "Ignoring existing role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:107
+#, python-format
+msgid "Create role %s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:117
+#, python-format
+msgid "Assign role %(role_id)s to user %(user_id)s on tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/common/sql/nova.py:136
+#, python-format
+msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
+msgstr ""
+
+#: keystone/identity/controllers.py:952
+#, python-format
+msgid ""
+"Group %(group)s not found for role-assignment - %(target)s with Role: "
+"%(role)s"
+msgstr ""
+
+#: keystone/identity/backends/kvs.py:126 keystone/identity/backends/kvs.py:135
+msgid "User not found in group"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:189
+#, python-format
+msgid ""
+"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
+"be removed from the group. The user will be ignored."
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:334
+msgid "Changing Name not supported by LDAP"
+msgstr ""
+
+#: keystone/identity/backends/ldap.py:347
+#, python-format
+msgid "User %(user_id)s is already a member of group %(group_id)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:394
+#, python-format
+msgid "Failed to understand rule %(rule)s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:404
+#, python-format
+msgid "No handler for matches of kind %s"
+msgstr ""
+
+#: keystone/openstack/common/policy.py:679
+#, python-format
+msgid "Failed to understand rule %(rule)r"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
+#: keystone/policy/backends/rules.py:93
+#, python-format
+msgid "enforce %(action)s: %(credentials)s"
+msgstr ""
+
+#: keystone/token/controllers.py:378
+#, python-format
+msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
+msgstr ""
+
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
+msgid "Token does not belong to specified tenant."
+msgstr ""
+
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
+msgstr ""
+
+#: keystone/token/backends/memcache.py:144
+#, python-format
+msgid ""
+"Successful set of token-index-list for user-key \"%(user_key)s\", "
+"#%(count)d records"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:154
+#, python-format
+msgid ""
+"Failed to set token-index-list for user-key \"%(user_key)s\". Attempt "
+"%(cas_retry)d of %(cas_retry_max)d"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:163
+msgid "Unable to add token user list"
+msgstr ""
+
+#: keystone/token/backends/memcache.py:172
+msgid "Unable to add token to revocation list."
+msgstr ""
+
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
diff --git a/keystone/locale/zh_TW/LC_MESSAGES/keystone.po b/keystone/locale/zh_TW/LC_MESSAGES/keystone.po
index ae04c15a..45af1114 100644
--- a/keystone/locale/zh_TW/LC_MESSAGES/keystone.po
+++ b/keystone/locale/zh_TW/LC_MESSAGES/keystone.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Keystone\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/keystone\n"
-"POT-Creation-Date: 2013-07-11 17:05+0000\n"
+"POT-Creation-Date: 2013-08-02 17:05+0000\n"
"PO-Revision-Date: 2013-05-22 03:11+0000\n"
"Last-Translator: daisy.ycguo <daisy.ycguo@gmail.com>\n"
"Language-Team: Chinese (Taiwan) "
@@ -16,7 +16,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 0.9.6\n"
+"Generated-By: Babel 1.3\n"
#: keystone/clean.py:23
#, python-format
@@ -38,79 +38,225 @@ msgstr "%(property_name)s 不應超過 %(max_length)s 個字元。"
msgid "%(property_name)s is not a %(display_expected_type)s"
msgstr ""
-#: keystone/test.py:106
+#: keystone/exception.py:48
+msgid "missing exception kwargs (programmer error)"
+msgstr ""
+
+#: keystone/exception.py:65
+#, python-format
+msgid ""
+"Expecting to find %(attribute)s in %(target)s. The server could not "
+"comply with the request since it is either malformed or otherwise "
+"incorrect. The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:74
+#, python-format
+msgid ""
+"String length exceeded.The length of string '%(string)s' exceeded the "
+"limit of column %(type)s(CHAR(%(length)d))."
+msgstr ""
+
+#: keystone/exception.py:80
+#, python-format
+msgid ""
+"Request attribute %(attribute)s must be less than or equal to %(size)i. "
+"The server could not comply with the request because the attribute size "
+"is invalid (too large). The client is assumed to be in error."
+msgstr ""
+
+#: keystone/exception.py:101
+msgid "The request you have made requires authentication."
+msgstr ""
+
+#: keystone/exception.py:107
+msgid "Authentication plugin error."
+msgstr ""
+
+#: keystone/exception.py:115
+msgid "Attempted to authenticate with an unsupported method."
+msgstr ""
+
+#: keystone/exception.py:123
+msgid "Additional authentications steps required."
+msgstr ""
+
+#: keystone/exception.py:131
+msgid "You are not authorized to perform the requested action."
+msgstr ""
+
+#: keystone/exception.py:138
+#, python-format
+msgid "You are not authorized to perform the requested action, %(action)s."
+msgstr ""
+
+#: keystone/exception.py:143
+#, python-format
+msgid "Could not find, %(target)s."
+msgstr ""
+
+#: keystone/exception.py:149
+#, python-format
+msgid "Could not find endpoint, %(endpoint_id)s."
+msgstr ""
+
+#: keystone/exception.py:156
+msgid "An unhandled exception has occurred: Could not find metadata."
+msgstr ""
+
+#: keystone/exception.py:161
+#, python-format
+msgid "Could not find policy, %(policy_id)s."
+msgstr ""
+
+#: keystone/exception.py:165
+#, python-format
+msgid "Could not find role, %(role_id)s."
+msgstr ""
+
+#: keystone/exception.py:169
+#, python-format
+msgid "Could not find service, %(service_id)s."
+msgstr ""
+
+#: keystone/exception.py:173
+#, python-format
+msgid "Could not find domain, %(domain_id)s."
+msgstr ""
+
+#: keystone/exception.py:177
+#, python-format
+msgid "Could not find project, %(project_id)s."
+msgstr ""
+
+#: keystone/exception.py:181
+#, python-format
+msgid "Could not find token, %(token_id)s."
+msgstr ""
+
+#: keystone/exception.py:185
+#, python-format
+msgid "Could not find user, %(user_id)s."
+msgstr ""
+
+#: keystone/exception.py:189
+#, python-format
+msgid "Could not find group, %(group_id)s."
+msgstr ""
+
+#: keystone/exception.py:193
+#, python-format
+msgid "Could not find trust, %(trust_id)s."
+msgstr ""
+
+#: keystone/exception.py:197
+#, python-format
+msgid "Could not find credential, %(credential_id)s."
+msgstr ""
+
+#: keystone/exception.py:201
+#, python-format
+msgid "Could not find version, %(version)s."
+msgstr ""
+
+#: keystone/exception.py:205
+#, python-format
+msgid "Conflict occurred attempting to store %(type)s. %(details)s"
+msgstr ""
+
+#: keystone/exception.py:212
+msgid "Request is too large."
+msgstr ""
+
+#: keystone/exception.py:218
+#, python-format
+msgid ""
+"An unexpected error prevented the server from fulfilling your request. "
+"%(exception)s"
+msgstr ""
+
+#: keystone/exception.py:225
+#, python-format
+msgid "Malformed endpoint URL (%(endpoint)s), see ERROR log for details."
+msgstr ""
+
+#: keystone/exception.py:230
+msgid "The action you have requested has not been implemented."
+msgstr ""
+
+#: keystone/exception.py:237
+#, python-format
+msgid "The Keystone paste configuration file %(config_file)s could not be found."
+msgstr ""
+
+#: keystone/test.py:117
#, python-format
msgid "Failed to checkout %s"
msgstr "無法移出 %s"
-#: keystone/assignment/backends/ldap.py:110
+#: keystone/assignment/core.py:529
#, python-format
msgid "Expected dict or list: %s"
msgstr ""
-#: keystone/assignment/backends/ldap.py:456
-#: keystone/identity/backends/ldap.py:433
+#: keystone/assignment/backends/kvs.py:138
+#: keystone/assignment/backends/sql.py:285
+#, python-format
+msgid "Cannot remove role that has not been granted, %s"
+msgstr "無法移除尚未授權的角色,%s"
+
+#: keystone/assignment/backends/ldap.py:418
#, python-format
msgid "Role %s not found"
msgstr "找不到角色 %s"
-#: keystone/assignment/backends/sql.py:244
-#, python-format
-msgid "Cannot remove role that has not been granted, %s"
-msgstr "無法移除尚未授權的角色,%s"
+#: keystone/assignment/backends/sql.py:114
+msgid "Inherited roles can only be assigned to domains"
+msgstr ""
-#: keystone/auth/controllers.py:72
+#: keystone/auth/controllers.py:71
#, python-format
msgid "Project is disabled: %s"
msgstr "已停用專案:%s"
-#: keystone/auth/controllers.py:78 keystone/auth/plugins/password.py:38
+#: keystone/auth/controllers.py:77 keystone/auth/plugins/password.py:38
#, python-format
msgid "Domain is disabled: %s"
msgstr "已停用網域:%s"
-#: keystone/auth/controllers.py:84 keystone/auth/plugins/password.py:44
+#: keystone/auth/controllers.py:83 keystone/auth/plugins/password.py:44
#, python-format
msgid "User is disabled: %s"
msgstr "已停用使用者:%s"
-#: keystone/auth/controllers.py:259
+#: keystone/auth/controllers.py:262
msgid "Scoping to both domain and project is not allowed"
msgstr "不容許將範圍同時設定為網域及專案"
-#: keystone/auth/controllers.py:262
+#: keystone/auth/controllers.py:265
msgid "Scoping to both domain and trust is not allowed"
msgstr "不容許將範圍同時設定為網域及信任"
-#: keystone/auth/controllers.py:265
+#: keystone/auth/controllers.py:268
msgid "Scoping to both project and trust is not allowed"
msgstr "不容許將範圍同時設定為專案及信任"
-#: keystone/auth/controllers.py:325
-#, python-format
-msgid "Unable to lookup user %s"
-msgstr "無法查閱使用者 %s"
-
-#: keystone/auth/controllers.py:355
+#: keystone/auth/controllers.py:353
msgid "User not found"
msgstr "找不到使用者"
-#: keystone/auth/token_factory.py:79
-msgid "User have no access to project"
-msgstr "使用者無法存取專案"
-
-#: keystone/auth/token_factory.py:94
-msgid "User have no access to domain"
-msgstr "使用者無法存取網域"
-
-#: keystone/auth/token_factory.py:311 keystone/token/controllers.py:119
-msgid "Unable to sign token."
-msgstr "無法簽署記號。"
+#: keystone/auth/plugins/external.py:36 keystone/auth/plugins/external.py:66
+msgid "No authenticated user"
+msgstr ""
-#: keystone/auth/token_factory.py:314 keystone/token/controllers.py:122
+#: keystone/auth/plugins/external.py:49 keystone/auth/plugins/external.py:86
#, python-format
-msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
-msgstr "token_format 的值無效:%s。接受的值為 PKI 或 UUID。"
+msgid "Unable to lookup user %s"
+msgstr "無法查閱使用者 %s"
+
+#: keystone/auth/plugins/password.py:112
+msgid "Invalid username or password"
+msgstr ""
#: keystone/catalog/core.py:38
#, python-format
@@ -170,32 +316,32 @@ msgstr ""
msgid "RBAC: Invalid token"
msgstr "RBAC:無效的記號"
-#: keystone/common/controller.py:35 keystone/common/controller.py:56
+#: keystone/common/controller.py:39 keystone/common/controller.py:60
msgid "RBAC: Invalid user"
msgstr "RBAC:無效的使用者"
-#: keystone/common/controller.py:41
+#: keystone/common/controller.py:45
msgid "RBAC: Proceeding without project"
msgstr "RBAC:在沒有專案的情況下繼續作業"
-#: keystone/common/controller.py:61
+#: keystone/common/controller.py:65
msgid "RBAC: Proceeding without tenant"
msgstr "RBAC:在沒有 Tenant 的情況下繼續作業"
-#: keystone/common/controller.py:91 keystone/common/controller.py:142
+#: keystone/common/controller.py:95 keystone/common/controller.py:146
msgid "RBAC: Bypassing authorization"
msgstr "RBAC:正在略過授權"
-#: keystone/common/controller.py:100 keystone/common/controller.py:140
+#: keystone/common/controller.py:104 keystone/common/controller.py:144
msgid "RBAC: Authorization granted"
msgstr "RBAC:已授與權限"
-#: keystone/common/controller.py:130
+#: keystone/common/controller.py:134
#, python-format
msgid "RBAC: Adding query filter params (%s)"
msgstr "RBAC:正在新增查詢過濾器參數 (%s)"
-#: keystone/common/controller.py:318
+#: keystone/common/controller.py:322
msgid "Invalid token in normalize_domain_id"
msgstr "normalize_domain_id 中的記號無效"
@@ -206,17 +352,48 @@ msgid ""
"listening on that port."
msgstr ""
-#: keystone/common/wsgi.py:162
+#: keystone/common/wsgi.py:95
+msgid "No bind information present in token"
+msgstr ""
+
+#: keystone/common/wsgi.py:99
+#, python-format
+msgid "Named bind mode %s not in bind information"
+msgstr ""
+
+#: keystone/common/wsgi.py:105
+msgid "Kerberos credentials required and not present"
+msgstr ""
+
+#: keystone/common/wsgi.py:109
+msgid "Kerberos credentials do not match those in bind"
+msgstr ""
+
+#: keystone/common/wsgi.py:112
+msgid "Kerberos bind authentication successful"
+msgstr ""
+
+#: keystone/common/wsgi.py:115
+#, python-format
+msgid "Ignoring unknown bind for permissive mode: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:119
+#, python-format
+msgid "Couldn't verify unknown bind: {%(bind_type)s: %(identifier)s}"
+msgstr ""
+
+#: keystone/common/wsgi.py:211
#, python-format
msgid "arg_dict: %s"
msgstr "arg_dict:%s"
-#: keystone/common/wsgi.py:188
+#: keystone/common/wsgi.py:243
#, fuzzy, python-format
msgid "Authorization failed. %(exception)s from %(remote_addr)s"
msgstr "授權失敗。%s(自 %s)"
-#: keystone/common/wsgi.py:431
+#: keystone/common/wsgi.py:487
msgid "The resource could not be found."
msgstr "找不到資源。"
@@ -457,11 +634,11 @@ msgstr "FakeLdap 搜尋失敗:找不到 SCOPE_BASE 的 DN"
msgid "Search scope %s not implemented."
msgstr "未實作搜尋範圍 %s。"
-#: keystone/common/sql/core.py:126
+#: keystone/common/sql/core.py:119
msgid "Global engine callback raised."
msgstr ""
-#: keystone/common/sql/core.py:240
+#: keystone/common/sql/core.py:233
#, python-format
msgid "Got mysql server has gone away: %s"
msgstr "已取得 mysql 伺服器已斷線的訊息:%s"
@@ -510,7 +687,7 @@ msgstr "將角色 %s 指派給使用者 %s(在 Tenant %s 上)"
msgid "Creating ec2 cred for user %(user_id)s and tenant %(tenant_id)s"
msgstr "正在給使用者 %s 及 Tenant %s 建立 EC2 Cred"
-#: keystone/identity/controllers.py:878
+#: keystone/identity/controllers.py:952
#, python-format
msgid ""
"Group %(group)s not found for role-assignment - %(target)s with Role: "
@@ -521,18 +698,18 @@ msgstr ""
msgid "User not found in group"
msgstr "在群組中找不到使用者"
-#: keystone/identity/backends/ldap.py:192
+#: keystone/identity/backends/ldap.py:189
#, python-format
msgid ""
"Group member '%(user_dn)s' not found in '%(group_id)s'. The user should "
"be removed from the group. The user will be ignored."
msgstr ""
-#: keystone/identity/backends/ldap.py:621
+#: keystone/identity/backends/ldap.py:334
msgid "Changing Name not supported by LDAP"
msgstr "LDAP 不支援變更名稱"
-#: keystone/identity/backends/ldap.py:634
+#: keystone/identity/backends/ldap.py:347
#, fuzzy, python-format
msgid "User %(user_id)s is already a member of group %(group_id)s"
msgstr "使用者 %s 已是群組 %s 的成員"
@@ -552,27 +729,57 @@ msgstr "類型為 %s 的相符項沒有處理程式"
msgid "Failed to understand rule %(rule)r"
msgstr "無法理解規則 %(rule)r"
+#: keystone/openstack/common/crypto/utils.py:29
+msgid "An unknown error occurred in crypto utils."
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:36
+#, python-format
+msgid "Block size of %(given)d is too big, max = %(maximum)d"
+msgstr ""
+
+#: keystone/openstack/common/crypto/utils.py:45
+#, python-format
+msgid "Length of %(given)d is too long, max = %(maximum)d"
+msgstr ""
+
#: keystone/policy/backends/rules.py:93
#, python-format
msgid "enforce %(action)s: %(credentials)s"
msgstr ""
-#: keystone/token/controllers.py:396
+#: keystone/token/controllers.py:378
#, python-format
msgid "User %(u_id)s is unauthorized for tenant %(t_id)s"
msgstr ""
-#: keystone/token/controllers.py:413 keystone/token/controllers.py:416
+#: keystone/token/controllers.py:395 keystone/token/controllers.py:398
msgid "Token does not belong to specified tenant."
msgstr "記號不屬於所指定的 Tenant。"
-#: keystone/token/controllers.py:423
-msgid "Non-default domain is not supported"
-msgstr "不支援非預設網域"
+#: keystone/token/provider.py:76
+msgid ""
+"keystone.conf [signing] token_format (deprecated) conflicts with "
+"keystone.conf [token] provider"
+msgstr ""
-#: keystone/token/controllers.py:431
-msgid "Domain scoped token is not supported"
-msgstr "不支援網域範圍的記號"
+#: keystone/token/provider.py:84
+msgid ""
+"keystone.conf [signing] token_format is deprecated in favor of "
+"keystone.conf [token] provider"
+msgstr ""
+
+#: keystone/token/provider.py:94
+msgid ""
+"Unrecognized keystone.conf [signing] token_format: expected either 'UUID'"
+" or 'PKI'"
+msgstr ""
+
+#: keystone/token/backends/kvs.py:37
+msgid ""
+"kvs token backend is DEPRECATED. Use keystone.token.backends.sql or "
+"keystone.token.backend.memcache instead."
+msgstr ""
#: keystone/token/backends/memcache.py:144
#, python-format
@@ -596,3 +803,54 @@ msgstr ""
msgid "Unable to add token to revocation list."
msgstr "無法將記號新增至撤銷清冊。"
+#: keystone/token/providers/pki.py:43
+msgid "Unable to sign token."
+msgstr "無法簽署記號。"
+
+#: keystone/token/providers/uuid.py:193
+msgid "Trustor is disabled."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:238
+msgid "Trustee has no delegated roles."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:247
+#, python-format
+msgid "User %(user_id)s has no access to project %(project_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:252
+#, python-format
+msgid "User %(user_id)s has no access to domain %(domain_id)s"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:303
+msgid "User is not a trustee."
+msgstr ""
+
+#: keystone/token/providers/uuid.py:457
+msgid "Non-default domain is not supported"
+msgstr "不支援非預設網域"
+
+#: keystone/token/providers/uuid.py:465
+msgid "Domain scoped token is not supported"
+msgstr "不支援網域範圍的記號"
+
+#: keystone/token/providers/uuid.py:528
+msgid "Failed to validate token"
+msgstr ""
+
+#: keystone/token/providers/uuid.py:566 keystone/token/providers/uuid.py:576
+msgid "Failed to verify token"
+msgstr ""
+
+#~ msgid "User have no access to project"
+#~ msgstr "使用者無法存取專案"
+
+#~ msgid "User have no access to domain"
+#~ msgstr "使用者無法存取網域"
+
+#~ msgid "Invalid value for token_format: %s. Allowed values are PKI or UUID."
+#~ msgstr "token_format 的值無效:%s。接受的值為 PKI 或 UUID。"
+
diff --git a/keystone/middleware/s3_token.py b/keystone/middleware/s3_token.py
index 2b7f99a0..b346893b 100644
--- a/keystone/middleware/s3_token.py
+++ b/keystone/middleware/s3_token.py
@@ -34,14 +34,62 @@ This WSGI component:
"""
import httplib
+import urllib
import webob
-from swift.common import utils as swift_utils
-
+from keystone.common import logging
from keystone.openstack.common import jsonutils
PROTOCOL_NAME = 'S3 Token Authentication'
+LOG = logging.getLogger(__name__)
+
+
+# TODO(kun): remove it after oslo merge this.
+def split_path(path, minsegs=1, maxsegs=None, rest_with_last=False):
+ """Validate and split the given HTTP request path.
+
+ **Examples**::
+
+ ['a'] = split_path('/a')
+ ['a', None] = split_path('/a', 1, 2)
+ ['a', 'c'] = split_path('/a/c', 1, 2)
+ ['a', 'c', 'o/r'] = split_path('/a/c/o/r', 1, 3, True)
+
+ :param path: HTTP Request path to be split
+ :param minsegs: Minimum number of segments to be extracted
+ :param maxsegs: Maximum number of segments to be extracted
+ :param rest_with_last: If True, trailing data will be returned as part
+ of last segment. If False, and there is
+ trailing data, raises ValueError.
+ :returns: list of segments with a length of maxsegs (non-existant
+ segments will return as None)
+ :raises: ValueError if given an invalid path
+ """
+ if not maxsegs:
+ maxsegs = minsegs
+ if minsegs > maxsegs:
+ raise ValueError('minsegs > maxsegs: %d > %d' % (minsegs, maxsegs))
+ if rest_with_last:
+ segs = path.split('/', maxsegs)
+ minsegs += 1
+ maxsegs += 1
+ count = len(segs)
+ if (segs[0] or count < minsegs or count > maxsegs or
+ '' in segs[1:minsegs]):
+ raise ValueError('Invalid path: %s' % urllib.quote(path))
+ else:
+ minsegs += 1
+ maxsegs += 1
+ segs = path.split('/', maxsegs)
+ count = len(segs)
+ if (segs[0] or count < minsegs or count > maxsegs + 1 or
+ '' in segs[1:minsegs] or
+ (count == maxsegs + 1 and segs[maxsegs])):
+ raise ValueError('Invalid path: %s' % urllib.quote(path))
+ segs = segs[1:maxsegs]
+ segs.extend([None] * (maxsegs - 1 - len(segs)))
+ return segs
class ServiceError(Exception):
@@ -54,7 +102,7 @@ class S3Token(object):
def __init__(self, app, conf):
"""Common initialization code."""
self.app = app
- self.logger = swift_utils.get_logger(conf, log_route='s3token')
+ self.logger = LOG
self.logger.debug('Starting the %s component' % PROTOCOL_NAME)
self.reseller_prefix = conf.get('reseller_prefix', 'AUTH_')
# where to find the auth service (we use this to validate tokens)
@@ -119,7 +167,7 @@ class S3Token(object):
self.logger.debug('Calling S3Token middleware.')
try:
- parts = swift_utils.split_path(req.path, 1, 4, True)
+ parts = split_path(req.path, 1, 4, True)
version, account, container, obj = parts
except ValueError:
msg = 'Not a path query, skipping.'
diff --git a/keystone/openstack/common/gettextutils.py b/keystone/openstack/common/gettextutils.py
index 55ba3387..ed085370 100644
--- a/keystone/openstack/common/gettextutils.py
+++ b/keystone/openstack/common/gettextutils.py
@@ -1,6 +1,7 @@
# vim: tabstop=4 shiftwidth=4 softtabstop=4
# Copyright 2012 Red Hat, Inc.
+# Copyright 2013 IBM Corp.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
@@ -23,18 +24,27 @@ Usual usage in an openstack.common module:
from keystone.openstack.common.gettextutils import _
"""
+import copy
import gettext
+import logging.handlers
import os
+import re
+import UserString
+
+from babel import localedata
+import six
_localedir = os.environ.get('keystone'.upper() + '_LOCALEDIR')
_t = gettext.translation('keystone', localedir=_localedir, fallback=True)
+_AVAILABLE_LANGUAGES = []
+
def _(msg):
return _t.ugettext(msg)
-def install(domain):
+def install(domain, lazy=False):
"""Install a _() function using the given translation domain.
Given a translation domain, install a _() function using gettext's
@@ -44,7 +54,252 @@ def install(domain):
overriding the default localedir (e.g. /usr/share/locale) using
a translation-domain-specific environment variable (e.g.
NOVA_LOCALEDIR).
+
+ :param domain: the translation domain
+ :param lazy: indicates whether or not to install the lazy _() function.
+ The lazy _() introduces a way to do deferred translation
+ of messages by installing a _ that builds Message objects,
+ instead of strings, which can then be lazily translated into
+ any available locale.
+ """
+ if lazy:
+ # NOTE(mrodden): Lazy gettext functionality.
+ #
+ # The following introduces a deferred way to do translations on
+ # messages in OpenStack. We override the standard _() function
+ # and % (format string) operation to build Message objects that can
+ # later be translated when we have more information.
+ #
+ # Also included below is an example LocaleHandler that translates
+ # Messages to an associated locale, effectively allowing many logs,
+ # each with their own locale.
+
+ def _lazy_gettext(msg):
+ """Create and return a Message object.
+
+ Lazy gettext function for a given domain, it is a factory method
+ for a project/module to get a lazy gettext function for its own
+ translation domain (i.e. nova, glance, cinder, etc.)
+
+ Message encapsulates a string so that we can translate
+ it later when needed.
+ """
+ return Message(msg, domain)
+
+ import __builtin__
+ __builtin__.__dict__['_'] = _lazy_gettext
+ else:
+ localedir = '%s_LOCALEDIR' % domain.upper()
+ gettext.install(domain,
+ localedir=os.environ.get(localedir),
+ unicode=True)
+
+
+class Message(UserString.UserString, object):
+ """Class used to encapsulate translatable messages."""
+ def __init__(self, msg, domain):
+ # _msg is the gettext msgid and should never change
+ self._msg = msg
+ self._left_extra_msg = ''
+ self._right_extra_msg = ''
+ self.params = None
+ self.locale = None
+ self.domain = domain
+
+ @property
+ def data(self):
+ # NOTE(mrodden): this should always resolve to a unicode string
+ # that best represents the state of the message currently
+
+ localedir = os.environ.get(self.domain.upper() + '_LOCALEDIR')
+ if self.locale:
+ lang = gettext.translation(self.domain,
+ localedir=localedir,
+ languages=[self.locale],
+ fallback=True)
+ else:
+ # use system locale for translations
+ lang = gettext.translation(self.domain,
+ localedir=localedir,
+ fallback=True)
+
+ full_msg = (self._left_extra_msg +
+ lang.ugettext(self._msg) +
+ self._right_extra_msg)
+
+ if self.params is not None:
+ full_msg = full_msg % self.params
+
+ return six.text_type(full_msg)
+
+ def _save_dictionary_parameter(self, dict_param):
+ full_msg = self.data
+ # look for %(blah) fields in string;
+ # ignore %% and deal with the
+ # case where % is first character on the line
+ keys = re.findall('(?:[^%]|^)%\((\w*)\)[a-z]', full_msg)
+
+ # if we don't find any %(blah) blocks but have a %s
+ if not keys and re.findall('(?:[^%]|^)%[a-z]', full_msg):
+ # apparently the full dictionary is the parameter
+ params = copy.deepcopy(dict_param)
+ else:
+ params = {}
+ for key in keys:
+ try:
+ params[key] = copy.deepcopy(dict_param[key])
+ except TypeError:
+ # cast uncopyable thing to unicode string
+ params[key] = unicode(dict_param[key])
+
+ return params
+
+ def _save_parameters(self, other):
+ # we check for None later to see if
+ # we actually have parameters to inject,
+ # so encapsulate if our parameter is actually None
+ if other is None:
+ self.params = (other, )
+ elif isinstance(other, dict):
+ self.params = self._save_dictionary_parameter(other)
+ else:
+ # fallback to casting to unicode,
+ # this will handle the problematic python code-like
+ # objects that cannot be deep-copied
+ try:
+ self.params = copy.deepcopy(other)
+ except TypeError:
+ self.params = unicode(other)
+
+ return self
+
+ # overrides to be more string-like
+ def __unicode__(self):
+ return self.data
+
+ def __str__(self):
+ return self.data.encode('utf-8')
+
+ def __getstate__(self):
+ to_copy = ['_msg', '_right_extra_msg', '_left_extra_msg',
+ 'domain', 'params', 'locale']
+ new_dict = self.__dict__.fromkeys(to_copy)
+ for attr in to_copy:
+ new_dict[attr] = copy.deepcopy(self.__dict__[attr])
+
+ return new_dict
+
+ def __setstate__(self, state):
+ for (k, v) in state.items():
+ setattr(self, k, v)
+
+ # operator overloads
+ def __add__(self, other):
+ copied = copy.deepcopy(self)
+ copied._right_extra_msg += other.__str__()
+ return copied
+
+ def __radd__(self, other):
+ copied = copy.deepcopy(self)
+ copied._left_extra_msg += other.__str__()
+ return copied
+
+ def __mod__(self, other):
+ # do a format string to catch and raise
+ # any possible KeyErrors from missing parameters
+ self.data % other
+ copied = copy.deepcopy(self)
+ return copied._save_parameters(other)
+
+ def __mul__(self, other):
+ return self.data * other
+
+ def __rmul__(self, other):
+ return other * self.data
+
+ def __getitem__(self, key):
+ return self.data[key]
+
+ def __getslice__(self, start, end):
+ return self.data.__getslice__(start, end)
+
+ def __getattribute__(self, name):
+ # NOTE(mrodden): handle lossy operations that we can't deal with yet
+ # These override the UserString implementation, since UserString
+ # uses our __class__ attribute to try and build a new message
+ # after running the inner data string through the operation.
+ # At that point, we have lost the gettext message id and can just
+ # safely resolve to a string instead.
+ ops = ['capitalize', 'center', 'decode', 'encode',
+ 'expandtabs', 'ljust', 'lstrip', 'replace', 'rjust', 'rstrip',
+ 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
+ if name in ops:
+ return getattr(self.data, name)
+ else:
+ return UserString.UserString.__getattribute__(self, name)
+
+
+def get_available_languages(domain):
+ """Lists the available languages for the given translation domain.
+
+ :param domain: the domain to get languages for
"""
- gettext.install(domain,
- localedir=os.environ.get(domain.upper() + '_LOCALEDIR'),
- unicode=True)
+ if _AVAILABLE_LANGUAGES:
+ return _AVAILABLE_LANGUAGES
+
+ localedir = '%s_LOCALEDIR' % domain.upper()
+ find = lambda x: gettext.find(domain,
+ localedir=os.environ.get(localedir),
+ languages=[x])
+
+ # NOTE(mrodden): en_US should always be available (and first in case
+ # order matters) since our in-line message strings are en_US
+ _AVAILABLE_LANGUAGES.append('en_US')
+ # NOTE(luisg): Babel <1.0 used a function called list(), which was
+ # renamed to locale_identifiers() in >=1.0, the requirements master list
+ # requires >=0.9.6, uncapped, so defensively work with both. We can remove
+ # this check when the master list updates to >=1.0, and all projects udpate
+ list_identifiers = (getattr(localedata, 'list', None) or
+ getattr(localedata, 'locale_identifiers'))
+ locale_identifiers = list_identifiers()
+ for i in locale_identifiers:
+ if find(i) is not None:
+ _AVAILABLE_LANGUAGES.append(i)
+ return _AVAILABLE_LANGUAGES
+
+
+def get_localized_message(message, user_locale):
+ """Gets a localized version of the given message in the given locale."""
+ if (isinstance(message, Message)):
+ if user_locale:
+ message.locale = user_locale
+ return unicode(message)
+ else:
+ return message
+
+
+class LocaleHandler(logging.Handler):
+ """Handler that can have a locale associated to translate Messages.
+
+ A quick example of how to utilize the Message class above.
+ LocaleHandler takes a locale and a target logging.Handler object
+ to forward LogRecord objects to after translating the internal Message.
+ """
+
+ def __init__(self, locale, target):
+ """Initialize a LocaleHandler
+
+ :param locale: locale to use for translating messages
+ :param target: logging.Handler object to forward
+ LogRecord objects to after translation
+ """
+ logging.Handler.__init__(self)
+ self.locale = locale
+ self.target = target
+
+ def emit(self, record):
+ if isinstance(record.msg, Message):
+ # set the locale and resolve to a string
+ record.msg.locale = self.locale
+
+ self.target.emit(record)
diff --git a/keystone/openstack/common/importutils.py b/keystone/openstack/common/importutils.py
index 3bd277f4..7a303f93 100644
--- a/keystone/openstack/common/importutils.py
+++ b/keystone/openstack/common/importutils.py
@@ -24,7 +24,7 @@ import traceback
def import_class(import_str):
- """Returns a class from a string including module and class"""
+ """Returns a class from a string including module and class."""
mod_str, _sep, class_str = import_str.rpartition('.')
try:
__import__(mod_str)
@@ -41,8 +41,9 @@ def import_object(import_str, *args, **kwargs):
def import_object_ns(name_space, import_str, *args, **kwargs):
- """
- Import a class and return an instance of it, first by trying
+ """Tries to import object from default namespace.
+
+ Imports a class and return an instance of it, first by trying
to find the class in a default namespace, then failing back to
a full path if not found in the default namespace.
"""
diff --git a/keystone/openstack/common/jsonutils.py b/keystone/openstack/common/jsonutils.py
index d73e4c26..ecea09bb 100644
--- a/keystone/openstack/common/jsonutils.py
+++ b/keystone/openstack/common/jsonutils.py
@@ -38,11 +38,24 @@ import functools
import inspect
import itertools
import json
+import types
import xmlrpclib
+import netaddr
+import six
+
from keystone.openstack.common import timeutils
+_nasty_type_tests = [inspect.ismodule, inspect.isclass, inspect.ismethod,
+ inspect.isfunction, inspect.isgeneratorfunction,
+ inspect.isgenerator, inspect.istraceback, inspect.isframe,
+ inspect.iscode, inspect.isbuiltin, inspect.isroutine,
+ inspect.isabstract]
+
+_simple_types = (types.NoneType, int, basestring, bool, float, long)
+
+
def to_primitive(value, convert_instances=False, convert_datetime=True,
level=0, max_depth=3):
"""Convert a complex object into primitives.
@@ -58,19 +71,32 @@ def to_primitive(value, convert_instances=False, convert_datetime=True,
Therefore, convert_instances=True is lossy ... be aware.
"""
- nasty = [inspect.ismodule, inspect.isclass, inspect.ismethod,
- inspect.isfunction, inspect.isgeneratorfunction,
- inspect.isgenerator, inspect.istraceback, inspect.isframe,
- inspect.iscode, inspect.isbuiltin, inspect.isroutine,
- inspect.isabstract]
- for test in nasty:
- if test(value):
- return unicode(value)
-
- # value of itertools.count doesn't get caught by inspects
- # above and results in infinite loop when list(value) is called.
+ # handle obvious types first - order of basic types determined by running
+ # full tests on nova project, resulting in the following counts:
+ # 572754 <type 'NoneType'>
+ # 460353 <type 'int'>
+ # 379632 <type 'unicode'>
+ # 274610 <type 'str'>
+ # 199918 <type 'dict'>
+ # 114200 <type 'datetime.datetime'>
+ # 51817 <type 'bool'>
+ # 26164 <type 'list'>
+ # 6491 <type 'float'>
+ # 283 <type 'tuple'>
+ # 19 <type 'long'>
+ if isinstance(value, _simple_types):
+ return value
+
+ if isinstance(value, datetime.datetime):
+ if convert_datetime:
+ return timeutils.strtime(value)
+ else:
+ return value
+
+ # value of itertools.count doesn't get caught by nasty_type_tests
+ # and results in infinite loop when list(value) is called.
if type(value) == itertools.count:
- return unicode(value)
+ return six.text_type(value)
# FIXME(vish): Workaround for LP bug 852095. Without this workaround,
# tests that raise an exception in a mocked method that
@@ -91,17 +117,18 @@ def to_primitive(value, convert_instances=False, convert_datetime=True,
convert_datetime=convert_datetime,
level=level,
max_depth=max_depth)
+ if isinstance(value, dict):
+ return dict((k, recursive(v)) for k, v in value.iteritems())
+ elif isinstance(value, (list, tuple)):
+ return [recursive(lv) for lv in value]
+
# It's not clear why xmlrpclib created their own DateTime type, but
# for our purposes, make it a datetime type which is explicitly
# handled
if isinstance(value, xmlrpclib.DateTime):
value = datetime.datetime(*tuple(value.timetuple())[:6])
- if isinstance(value, (list, tuple)):
- return [recursive(v) for v in value]
- elif isinstance(value, dict):
- return dict((k, recursive(v)) for k, v in value.iteritems())
- elif convert_datetime and isinstance(value, datetime.datetime):
+ if convert_datetime and isinstance(value, datetime.datetime):
return timeutils.strtime(value)
elif hasattr(value, 'iteritems'):
return recursive(dict(value.iteritems()), level=level + 1)
@@ -111,12 +138,16 @@ def to_primitive(value, convert_instances=False, convert_datetime=True,
# Likely an instance of something. Watch for cycles.
# Ignore class member vars.
return recursive(value.__dict__, level=level + 1)
+ elif isinstance(value, netaddr.IPAddress):
+ return six.text_type(value)
else:
+ if any(test(value) for test in _nasty_type_tests):
+ return six.text_type(value)
return value
except TypeError:
# Class objects are tricky since they may define something like
# __iter__ defined but it isn't callable as list().
- return unicode(value)
+ return six.text_type(value)
def dumps(value, default=to_primitive, **kwargs):
diff --git a/keystone/openstack/common/local.py b/keystone/openstack/common/local.py
new file mode 100644
index 00000000..e82f17d0
--- /dev/null
+++ b/keystone/openstack/common/local.py
@@ -0,0 +1,47 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack Foundation.
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+"""Local storage of variables using weak references"""
+
+import threading
+import weakref
+
+
+class WeakLocal(threading.local):
+ def __getattribute__(self, attr):
+ rval = super(WeakLocal, self).__getattribute__(attr)
+ if rval:
+ # NOTE(mikal): this bit is confusing. What is stored is a weak
+ # reference, not the value itself. We therefore need to lookup
+ # the weak reference and return the inner value here.
+ rval = rval()
+ return rval
+
+ def __setattr__(self, attr, value):
+ value = weakref.ref(value)
+ return super(WeakLocal, self).__setattr__(attr, value)
+
+
+# NOTE(mikal): the name "store" should be deprecated in the future
+store = WeakLocal()
+
+# A "weak" store uses weak references and allows an object to fall out of scope
+# when it falls out of scope in the code that uses the thread local storage. A
+# "strong" store will hold a reference to the object so that it never falls out
+# of scope.
+weak_store = WeakLocal()
+strong_store = threading.local()
diff --git a/keystone/openstack/common/log.py b/keystone/openstack/common/log.py
new file mode 100644
index 00000000..5a43c326
--- /dev/null
+++ b/keystone/openstack/common/log.py
@@ -0,0 +1,559 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack Foundation.
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+"""Openstack logging handler.
+
+This module adds to logging functionality by adding the option to specify
+a context object when calling the various log methods. If the context object
+is not specified, default formatting is used. Additionally, an instance uuid
+may be passed as part of the log message, which is intended to make it easier
+for admins to find messages related to a specific instance.
+
+It also allows setting of formatting information through conf.
+
+"""
+
+import inspect
+import itertools
+import logging
+import logging.config
+import logging.handlers
+import os
+import sys
+import traceback
+
+from oslo.config import cfg
+from six import moves
+
+from keystone.openstack.common.gettextutils import _ # noqa
+from keystone.openstack.common import importutils
+from keystone.openstack.common import jsonutils
+from keystone.openstack.common import local
+
+
+_DEFAULT_LOG_DATE_FORMAT = "%Y-%m-%d %H:%M:%S"
+
+common_cli_opts = [
+ cfg.BoolOpt('debug',
+ short='d',
+ default=False,
+ help='Print debugging output (set logging level to '
+ 'DEBUG instead of default WARNING level).'),
+ cfg.BoolOpt('verbose',
+ short='v',
+ default=False,
+ help='Print more verbose output (set logging level to '
+ 'INFO instead of default WARNING level).'),
+]
+
+logging_cli_opts = [
+ cfg.StrOpt('log-config',
+ metavar='PATH',
+ help='If this option is specified, the logging configuration '
+ 'file specified is used and overrides any other logging '
+ 'options specified. Please see the Python logging module '
+ 'documentation for details on logging configuration '
+ 'files.'),
+ cfg.StrOpt('log-format',
+ default=None,
+ metavar='FORMAT',
+ help='DEPRECATED. '
+ 'A logging.Formatter log message format string which may '
+ 'use any of the available logging.LogRecord attributes. '
+ 'This option is deprecated. Please use '
+ 'logging_context_format_string and '
+ 'logging_default_format_string instead.'),
+ cfg.StrOpt('log-date-format',
+ default=_DEFAULT_LOG_DATE_FORMAT,
+ metavar='DATE_FORMAT',
+ help='Format string for %%(asctime)s in log records. '
+ 'Default: %(default)s'),
+ cfg.StrOpt('log-file',
+ metavar='PATH',
+ deprecated_name='logfile',
+ help='(Optional) Name of log file to output to. '
+ 'If no default is set, logging will go to stdout.'),
+ cfg.StrOpt('log-dir',
+ deprecated_name='logdir',
+ help='(Optional) The base directory used for relative '
+ '--log-file paths'),
+ cfg.BoolOpt('use-syslog',
+ default=False,
+ help='Use syslog for logging.'),
+ cfg.StrOpt('syslog-log-facility',
+ default='LOG_USER',
+ help='syslog facility to receive log lines')
+]
+
+generic_log_opts = [
+ cfg.BoolOpt('use_stderr',
+ default=True,
+ help='Log output to standard error')
+]
+
+log_opts = [
+ cfg.StrOpt('logging_context_format_string',
+ default='%(asctime)s.%(msecs)03d %(process)d %(levelname)s '
+ '%(name)s [%(request_id)s %(user)s %(tenant)s] '
+ '%(instance)s%(message)s',
+ help='format string to use for log messages with context'),
+ cfg.StrOpt('logging_default_format_string',
+ default='%(asctime)s.%(msecs)03d %(process)d %(levelname)s '
+ '%(name)s [-] %(instance)s%(message)s',
+ help='format string to use for log messages without context'),
+ cfg.StrOpt('logging_debug_format_suffix',
+ default='%(funcName)s %(pathname)s:%(lineno)d',
+ help='data to append to log format when level is DEBUG'),
+ cfg.StrOpt('logging_exception_prefix',
+ default='%(asctime)s.%(msecs)03d %(process)d TRACE %(name)s '
+ '%(instance)s',
+ help='prefix each line of exception output with this format'),
+ cfg.ListOpt('default_log_levels',
+ default=[
+ 'amqplib=WARN',
+ 'sqlalchemy=WARN',
+ 'boto=WARN',
+ 'suds=INFO',
+ 'keystone=INFO',
+ 'eventlet.wsgi.server=WARN'
+ ],
+ help='list of logger=LEVEL pairs'),
+ cfg.BoolOpt('publish_errors',
+ default=False,
+ help='publish error events'),
+ cfg.BoolOpt('fatal_deprecations',
+ default=False,
+ help='make deprecations fatal'),
+
+ # NOTE(mikal): there are two options here because sometimes we are handed
+ # a full instance (and could include more information), and other times we
+ # are just handed a UUID for the instance.
+ cfg.StrOpt('instance_format',
+ default='[instance: %(uuid)s] ',
+ help='If an instance is passed with the log message, format '
+ 'it like this'),
+ cfg.StrOpt('instance_uuid_format',
+ default='[instance: %(uuid)s] ',
+ help='If an instance UUID is passed with the log message, '
+ 'format it like this'),
+]
+
+CONF = cfg.CONF
+CONF.register_cli_opts(common_cli_opts)
+CONF.register_cli_opts(logging_cli_opts)
+CONF.register_opts(generic_log_opts)
+CONF.register_opts(log_opts)
+
+# our new audit level
+# NOTE(jkoelker) Since we synthesized an audit level, make the logging
+# module aware of it so it acts like other levels.
+logging.AUDIT = logging.INFO + 1
+logging.addLevelName(logging.AUDIT, 'AUDIT')
+
+
+try:
+ NullHandler = logging.NullHandler
+except AttributeError: # NOTE(jkoelker) NullHandler added in Python 2.7
+ class NullHandler(logging.Handler):
+ def handle(self, record):
+ pass
+
+ def emit(self, record):
+ pass
+
+ def createLock(self):
+ self.lock = None
+
+
+def _dictify_context(context):
+ if context is None:
+ return None
+ if not isinstance(context, dict) and getattr(context, 'to_dict', None):
+ context = context.to_dict()
+ return context
+
+
+def _get_binary_name():
+ return os.path.basename(inspect.stack()[-1][1])
+
+
+def _get_log_file_path(binary=None):
+ logfile = CONF.log_file
+ logdir = CONF.log_dir
+
+ if logfile and not logdir:
+ return logfile
+
+ if logfile and logdir:
+ return os.path.join(logdir, logfile)
+
+ if logdir:
+ binary = binary or _get_binary_name()
+ return '%s.log' % (os.path.join(logdir, binary),)
+
+
+class BaseLoggerAdapter(logging.LoggerAdapter):
+
+ def audit(self, msg, *args, **kwargs):
+ self.log(logging.AUDIT, msg, *args, **kwargs)
+
+
+class LazyAdapter(BaseLoggerAdapter):
+ def __init__(self, name='unknown', version='unknown'):
+ self._logger = None
+ self.extra = {}
+ self.name = name
+ self.version = version
+
+ @property
+ def logger(self):
+ if not self._logger:
+ self._logger = getLogger(self.name, self.version)
+ return self._logger
+
+
+class ContextAdapter(BaseLoggerAdapter):
+ warn = logging.LoggerAdapter.warning
+
+ def __init__(self, logger, project_name, version_string):
+ self.logger = logger
+ self.project = project_name
+ self.version = version_string
+
+ @property
+ def handlers(self):
+ return self.logger.handlers
+
+ def deprecated(self, msg, *args, **kwargs):
+ stdmsg = _("Deprecated: %s") % msg
+ if CONF.fatal_deprecations:
+ self.critical(stdmsg, *args, **kwargs)
+ raise DeprecatedConfig(msg=stdmsg)
+ else:
+ self.warn(stdmsg, *args, **kwargs)
+
+ def process(self, msg, kwargs):
+ if 'extra' not in kwargs:
+ kwargs['extra'] = {}
+ extra = kwargs['extra']
+
+ context = kwargs.pop('context', None)
+ if not context:
+ context = getattr(local.store, 'context', None)
+ if context:
+ extra.update(_dictify_context(context))
+
+ instance = kwargs.pop('instance', None)
+ instance_extra = ''
+ if instance:
+ instance_extra = CONF.instance_format % instance
+ else:
+ instance_uuid = kwargs.pop('instance_uuid', None)
+ if instance_uuid:
+ instance_extra = (CONF.instance_uuid_format
+ % {'uuid': instance_uuid})
+ extra.update({'instance': instance_extra})
+
+ extra.update({"project": self.project})
+ extra.update({"version": self.version})
+ extra['extra'] = extra.copy()
+ return msg, kwargs
+
+
+class JSONFormatter(logging.Formatter):
+ def __init__(self, fmt=None, datefmt=None):
+ # NOTE(jkoelker) we ignore the fmt argument, but its still there
+ # since logging.config.fileConfig passes it.
+ self.datefmt = datefmt
+
+ def formatException(self, ei, strip_newlines=True):
+ lines = traceback.format_exception(*ei)
+ if strip_newlines:
+ lines = [itertools.ifilter(
+ lambda x: x,
+ line.rstrip().splitlines()) for line in lines]
+ lines = list(itertools.chain(*lines))
+ return lines
+
+ def format(self, record):
+ message = {'message': record.getMessage(),
+ 'asctime': self.formatTime(record, self.datefmt),
+ 'name': record.name,
+ 'msg': record.msg,
+ 'args': record.args,
+ 'levelname': record.levelname,
+ 'levelno': record.levelno,
+ 'pathname': record.pathname,
+ 'filename': record.filename,
+ 'module': record.module,
+ 'lineno': record.lineno,
+ 'funcname': record.funcName,
+ 'created': record.created,
+ 'msecs': record.msecs,
+ 'relative_created': record.relativeCreated,
+ 'thread': record.thread,
+ 'thread_name': record.threadName,
+ 'process_name': record.processName,
+ 'process': record.process,
+ 'traceback': None}
+
+ if hasattr(record, 'extra'):
+ message['extra'] = record.extra
+
+ if record.exc_info:
+ message['traceback'] = self.formatException(record.exc_info)
+
+ return jsonutils.dumps(message)
+
+
+def _create_logging_excepthook(product_name):
+ def logging_excepthook(type, value, tb):
+ extra = {}
+ if CONF.verbose:
+ extra['exc_info'] = (type, value, tb)
+ getLogger(product_name).critical(str(value), **extra)
+ return logging_excepthook
+
+
+class LogConfigError(Exception):
+
+ message = _('Error loading logging config %(log_config)s: %(err_msg)s')
+
+ def __init__(self, log_config, err_msg):
+ self.log_config = log_config
+ self.err_msg = err_msg
+
+ def __str__(self):
+ return self.message % dict(log_config=self.log_config,
+ err_msg=self.err_msg)
+
+
+def _load_log_config(log_config):
+ try:
+ logging.config.fileConfig(log_config)
+ except moves.configparser.Error as exc:
+ raise LogConfigError(log_config, str(exc))
+
+
+def setup(product_name):
+ """Setup logging."""
+ if CONF.log_config:
+ _load_log_config(CONF.log_config)
+ else:
+ _setup_logging_from_conf()
+ sys.excepthook = _create_logging_excepthook(product_name)
+
+
+def set_defaults(logging_context_format_string):
+ cfg.set_defaults(log_opts,
+ logging_context_format_string=
+ logging_context_format_string)
+
+
+def _find_facility_from_conf():
+ facility_names = logging.handlers.SysLogHandler.facility_names
+ facility = getattr(logging.handlers.SysLogHandler,
+ CONF.syslog_log_facility,
+ None)
+
+ if facility is None and CONF.syslog_log_facility in facility_names:
+ facility = facility_names.get(CONF.syslog_log_facility)
+
+ if facility is None:
+ valid_facilities = facility_names.keys()
+ consts = ['LOG_AUTH', 'LOG_AUTHPRIV', 'LOG_CRON', 'LOG_DAEMON',
+ 'LOG_FTP', 'LOG_KERN', 'LOG_LPR', 'LOG_MAIL', 'LOG_NEWS',
+ 'LOG_AUTH', 'LOG_SYSLOG', 'LOG_USER', 'LOG_UUCP',
+ 'LOG_LOCAL0', 'LOG_LOCAL1', 'LOG_LOCAL2', 'LOG_LOCAL3',
+ 'LOG_LOCAL4', 'LOG_LOCAL5', 'LOG_LOCAL6', 'LOG_LOCAL7']
+ valid_facilities.extend(consts)
+ raise TypeError(_('syslog facility must be one of: %s') %
+ ', '.join("'%s'" % fac
+ for fac in valid_facilities))
+
+ return facility
+
+
+def _setup_logging_from_conf():
+ log_root = getLogger(None).logger
+ for handler in log_root.handlers:
+ log_root.removeHandler(handler)
+
+ if CONF.use_syslog:
+ facility = _find_facility_from_conf()
+ syslog = logging.handlers.SysLogHandler(address='/dev/log',
+ facility=facility)
+ log_root.addHandler(syslog)
+
+ logpath = _get_log_file_path()
+ if logpath:
+ filelog = logging.handlers.WatchedFileHandler(logpath)
+ log_root.addHandler(filelog)
+
+ if CONF.use_stderr:
+ streamlog = ColorHandler()
+ log_root.addHandler(streamlog)
+
+ elif not CONF.log_file:
+ # pass sys.stdout as a positional argument
+ # python2.6 calls the argument strm, in 2.7 it's stream
+ streamlog = logging.StreamHandler(sys.stdout)
+ log_root.addHandler(streamlog)
+
+ if CONF.publish_errors:
+ handler = importutils.import_object(
+ "keystone.openstack.common.log_handler.PublishErrorsHandler",
+ logging.ERROR)
+ log_root.addHandler(handler)
+
+ datefmt = CONF.log_date_format
+ for handler in log_root.handlers:
+ # NOTE(alaski): CONF.log_format overrides everything currently. This
+ # should be deprecated in favor of context aware formatting.
+ if CONF.log_format:
+ handler.setFormatter(logging.Formatter(fmt=CONF.log_format,
+ datefmt=datefmt))
+ log_root.info('Deprecated: log_format is now deprecated and will '
+ 'be removed in the next release')
+ else:
+ handler.setFormatter(ContextFormatter(datefmt=datefmt))
+
+ if CONF.debug:
+ log_root.setLevel(logging.DEBUG)
+ elif CONF.verbose:
+ log_root.setLevel(logging.INFO)
+ else:
+ log_root.setLevel(logging.WARNING)
+
+ for pair in CONF.default_log_levels:
+ mod, _sep, level_name = pair.partition('=')
+ level = logging.getLevelName(level_name)
+ logger = logging.getLogger(mod)
+ logger.setLevel(level)
+
+_loggers = {}
+
+
+def getLogger(name='unknown', version='unknown'):
+ if name not in _loggers:
+ _loggers[name] = ContextAdapter(logging.getLogger(name),
+ name,
+ version)
+ return _loggers[name]
+
+
+def getLazyLogger(name='unknown', version='unknown'):
+ """Returns lazy logger.
+
+ Creates a pass-through logger that does not create the real logger
+ until it is really needed and delegates all calls to the real logger
+ once it is created.
+ """
+ return LazyAdapter(name, version)
+
+
+class WritableLogger(object):
+ """A thin wrapper that responds to `write` and logs."""
+
+ def __init__(self, logger, level=logging.INFO):
+ self.logger = logger
+ self.level = level
+
+ def write(self, msg):
+ self.logger.log(self.level, msg)
+
+
+class ContextFormatter(logging.Formatter):
+ """A context.RequestContext aware formatter configured through flags.
+
+ The flags used to set format strings are: logging_context_format_string
+ and logging_default_format_string. You can also specify
+ logging_debug_format_suffix to append extra formatting if the log level is
+ debug.
+
+ For information about what variables are available for the formatter see:
+ http://docs.python.org/library/logging.html#formatter
+
+ """
+
+ def format(self, record):
+ """Uses contextstring if request_id is set, otherwise default."""
+ # NOTE(sdague): default the fancier formating params
+ # to an empty string so we don't throw an exception if
+ # they get used
+ for key in ('instance', 'color'):
+ if key not in record.__dict__:
+ record.__dict__[key] = ''
+
+ if record.__dict__.get('request_id', None):
+ self._fmt = CONF.logging_context_format_string
+ else:
+ self._fmt = CONF.logging_default_format_string
+
+ if (record.levelno == logging.DEBUG and
+ CONF.logging_debug_format_suffix):
+ self._fmt += " " + CONF.logging_debug_format_suffix
+
+ # Cache this on the record, Logger will respect our formated copy
+ if record.exc_info:
+ record.exc_text = self.formatException(record.exc_info, record)
+ return logging.Formatter.format(self, record)
+
+ def formatException(self, exc_info, record=None):
+ """Format exception output with CONF.logging_exception_prefix."""
+ if not record:
+ return logging.Formatter.formatException(self, exc_info)
+
+ stringbuffer = moves.StringIO()
+ traceback.print_exception(exc_info[0], exc_info[1], exc_info[2],
+ None, stringbuffer)
+ lines = stringbuffer.getvalue().split('\n')
+ stringbuffer.close()
+
+ if CONF.logging_exception_prefix.find('%(asctime)') != -1:
+ record.asctime = self.formatTime(record, self.datefmt)
+
+ formatted_lines = []
+ for line in lines:
+ pl = CONF.logging_exception_prefix % record.__dict__
+ fl = '%s%s' % (pl, line)
+ formatted_lines.append(fl)
+ return '\n'.join(formatted_lines)
+
+
+class ColorHandler(logging.StreamHandler):
+ LEVEL_COLORS = {
+ logging.DEBUG: '\033[00;32m', # GREEN
+ logging.INFO: '\033[00;36m', # CYAN
+ logging.AUDIT: '\033[01;36m', # BOLD CYAN
+ logging.WARN: '\033[01;33m', # BOLD YELLOW
+ logging.ERROR: '\033[01;31m', # BOLD RED
+ logging.CRITICAL: '\033[01;31m', # BOLD RED
+ }
+
+ def format(self, record):
+ record.color = self.LEVEL_COLORS[record.levelno]
+ return logging.StreamHandler.format(self, record)
+
+
+class DeprecatedConfig(Exception):
+ message = _("Fatal call to deprecated config: %(msg)s")
+
+ def __init__(self, msg):
+ super(Exception, self).__init__(self.message % dict(msg=msg))
diff --git a/keystone/openstack/common/timeutils.py b/keystone/openstack/common/timeutils.py
index 60943659..aa9f7080 100644
--- a/keystone/openstack/common/timeutils.py
+++ b/keystone/openstack/common/timeutils.py
@@ -23,6 +23,7 @@ import calendar
import datetime
import iso8601
+import six
# ISO 8601 extended time format with microseconds
@@ -32,7 +33,7 @@ PERFECT_TIME_FORMAT = _ISO8601_TIME_FORMAT_SUBSECOND
def isotime(at=None, subsecond=False):
- """Stringify time in ISO 8601 format"""
+ """Stringify time in ISO 8601 format."""
if not at:
at = utcnow()
st = at.strftime(_ISO8601_TIME_FORMAT
@@ -44,13 +45,13 @@ def isotime(at=None, subsecond=False):
def parse_isotime(timestr):
- """Parse time from ISO 8601 format"""
+ """Parse time from ISO 8601 format."""
try:
return iso8601.parse_date(timestr)
except iso8601.ParseError as e:
- raise ValueError(e.message)
+ raise ValueError(unicode(e))
except TypeError as e:
- raise ValueError(e.message)
+ raise ValueError(unicode(e))
def strtime(at=None, fmt=PERFECT_TIME_FORMAT):
@@ -66,7 +67,7 @@ def parse_strtime(timestr, fmt=PERFECT_TIME_FORMAT):
def normalize_time(timestamp):
- """Normalize time in arbitrary timezone to UTC naive object"""
+ """Normalize time in arbitrary timezone to UTC naive object."""
offset = timestamp.utcoffset()
if offset is None:
return timestamp
@@ -75,14 +76,14 @@ def normalize_time(timestamp):
def is_older_than(before, seconds):
"""Return True if before is older than seconds."""
- if isinstance(before, basestring):
+ if isinstance(before, six.string_types):
before = parse_strtime(before).replace(tzinfo=None)
return utcnow() - before > datetime.timedelta(seconds=seconds)
def is_newer_than(after, seconds):
"""Return True if after is newer than seconds."""
- if isinstance(after, basestring):
+ if isinstance(after, six.string_types):
after = parse_strtime(after).replace(tzinfo=None)
return after - utcnow() > datetime.timedelta(seconds=seconds)
@@ -103,7 +104,7 @@ def utcnow():
def iso8601_from_timestamp(timestamp):
- """Returns a iso8601 formated date from timestamp"""
+ """Returns a iso8601 formated date from timestamp."""
return isotime(datetime.datetime.utcfromtimestamp(timestamp))
@@ -111,9 +112,9 @@ utcnow.override_time = None
def set_time_override(override_time=datetime.datetime.utcnow()):
- """
- Override utils.utcnow to return a constant time or a list thereof,
- one at a time.
+ """Overrides utils.utcnow.
+
+ Make it return a constant time or a list thereof, one at a time.
"""
utcnow.override_time = override_time
@@ -141,7 +142,8 @@ def clear_time_override():
def marshall_now(now=None):
"""Make an rpc-safe datetime with microseconds.
- Note: tzinfo is stripped, but not required for relative times."""
+ Note: tzinfo is stripped, but not required for relative times.
+ """
if not now:
now = utcnow()
return dict(day=now.day, month=now.month, year=now.year, hour=now.hour,
@@ -161,7 +163,8 @@ def unmarshall_time(tyme):
def delta_seconds(before, after):
- """
+ """Return the difference between two timing objects.
+
Compute the difference in seconds between two date, time, or
datetime objects (as a float, to microsecond resolution).
"""
@@ -174,8 +177,7 @@ def delta_seconds(before, after):
def is_soon(dt, window):
- """
- Determines if time is going to happen in the next window seconds.
+ """Determines if time is going to happen in the next window seconds.
:params dt: the time
:params window: minimum seconds to remain to consider the time not soon
diff --git a/keystone/service.py b/keystone/service.py
index 6b0c3708..ce64aba8 100644
--- a/keystone/service.py
+++ b/keystone/service.py
@@ -16,8 +16,10 @@
import routes
+from keystone import assignment
from keystone import auth
from keystone import catalog
+from keystone.common import dependency
from keystone.common import logging
from keystone.common import wsgi
from keystone import config
@@ -34,16 +36,25 @@ from keystone import trust
CONF = config.CONF
LOG = logging.getLogger(__name__)
+
+# Ensure that the identity driver is created before the assignment manager.
+# The default assignment driver is determined by the identity driver, so the
+# identity driver must be available to the assignment manager.
+_IDENTITY_API = identity.Manager()
+
DRIVERS = dict(
+ assignment_api=assignment.Manager(),
catalog_api=catalog.Manager(),
credentials_api=credential.Manager(),
ec2_api=ec2.Manager(),
- identity_api=identity.Manager(),
+ identity_api=_IDENTITY_API,
policy_api=policy.Manager(),
token_api=token.Manager(),
trust_api=trust.Manager(),
token_provider_api=token.provider.Manager())
+dependency.resolve_future_dependencies()
+
@logging.fail_gracefully
def public_app_factory(global_conf, **local_conf):
diff --git a/keystone/test.py b/keystone/test.py
index 0c51d76d..9118b2ea 100644
--- a/keystone/test.py
+++ b/keystone/test.py
@@ -38,18 +38,21 @@ environment.use_eventlet()
from keystone import assignment
from keystone import catalog
+from keystone.common import dependency
from keystone.common import kvs
from keystone.common import logging
from keystone.common import sql
from keystone.common import utils
from keystone.common import wsgi
from keystone import config
+from keystone.contrib import ec2
from keystone import credential
from keystone import exception
from keystone import identity
from keystone.openstack.common import timeutils
from keystone import policy
from keystone import token
+from keystone.token import provider as token_provider
from keystone import trust
@@ -239,6 +242,11 @@ class TestCase(NoModule, unittest.TestCase):
for path in self._paths:
if path in sys.path:
sys.path.remove(path)
+
+ # Clear the registry of providers so that providers from previous
+ # tests aren't used.
+ dependency.reset()
+
kvs.INMEMDB.clear()
CONF.reset()
@@ -252,11 +260,28 @@ class TestCase(NoModule, unittest.TestCase):
def load_backends(self):
"""Initializes each manager and assigns them to an attribute."""
- for manager in [assignment, catalog, credential, identity, policy,
- token, trust]:
- manager_name = '%s_api' % manager.__name__.split('.')[-1]
+
+ # TODO(blk-u): Shouldn't need to clear the registry here, but some
+ # tests call load_backends multiple times. These should be fixed to
+ # only call load_backends once.
+ dependency.reset()
+
+ # NOTE(blk-u): identity must be before assignment to ensure that the
+ # identity driver is available to the assignment manager because the
+ # assignment manager gets the default assignment driver from the
+ # identity driver.
+ for manager in [identity, assignment, catalog, credential, ec2, policy,
+ token, token_provider, trust]:
+ # manager.__name__ is like keystone.xxx[.yyy],
+ # converted to xxx[_yyy]
+ manager_name = ('%s_api' %
+ manager.__name__.replace('keystone.', '').
+ replace('.', '_'))
+
setattr(self, manager_name, manager.Manager())
+ dependency.resolve_future_dependencies()
+
def load_fixtures(self, fixtures):
"""Hacky basic and naive fixture loading based on a python module.
diff --git a/keystone/token/controllers.py b/keystone/token/controllers.py
index d2b7d9fd..91514493 100644
--- a/keystone/token/controllers.py
+++ b/keystone/token/controllers.py
@@ -4,7 +4,6 @@ from keystone.common import cms
from keystone.common import controller
from keystone.common import dependency
from keystone.common import logging
-from keystone.common import utils
from keystone.common import wsgi
from keystone import config
from keystone import exception
@@ -91,9 +90,7 @@ class Auth(controller.V2Controller):
if tenant_ref:
catalog_ref = self.catalog_api.get_catalog(
- user_id=user_ref['id'],
- tenant_id=tenant_ref['id'],
- metadata=metadata_ref)
+ user_ref['id'], tenant_ref['id'], metadata_ref)
else:
catalog_ref = {}
@@ -217,10 +214,9 @@ class Auth(controller.V2Controller):
attribute='password', target='passwordCredentials')
password = auth['passwordCredentials']['password']
- max_pw_size = utils.MAX_PASSWORD_LENGTH
- if password and len(password) > max_pw_size:
- raise exception.ValidationSizeError(attribute='password',
- size=max_pw_size)
+ if password and len(password) > CONF.identity.max_password_length:
+ raise exception.ValidationSizeError(
+ attribute='password', size=CONF.identity.max_password_length)
if ("userId" not in auth['passwordCredentials'] and
"username" not in auth['passwordCredentials']):
@@ -457,9 +453,9 @@ class Auth(controller.V2Controller):
catalog_ref = None
if token_ref.get('tenant'):
catalog_ref = self.catalog_api.get_catalog(
- user_id=token_ref['user']['id'],
- tenant_id=token_ref['tenant']['id'],
- metadata=token_ref['metadata'])
+ token_ref['user']['id'],
+ token_ref['tenant']['id'],
+ token_ref['metadata'])
return Auth.format_endpoint_list(catalog_ref)
diff --git a/keystone/token/providers/uuid.py b/keystone/token/providers/uuid.py
index 94896920..acfa9372 100644
--- a/keystone/token/providers/uuid.py
+++ b/keystone/token/providers/uuid.py
@@ -438,7 +438,7 @@ class Provider(token.provider.Provider):
def _verify_token(self, token_id, belongs_to=None):
"""Verify the given token and return the token_ref."""
- token_ref = self.token_api.get_token(token_id=token_id)
+ token_ref = self.token_api.get_token(token_id)
assert token_ref
if belongs_to:
assert (token_ref['tenant'] and
@@ -518,7 +518,7 @@ class Provider(token.provider.Provider):
catalog_ref = self.catalog_api.get_catalog(
token_ref['user']['id'],
token_ref['tenant']['id'],
- metadata=metadata_ref)
+ metadata_ref)
token_data = self.v2_token_data_helper.get_token_data(
token_ref=token_ref,
roles_ref=role_refs,
diff --git a/keystone/trust/controllers.py b/keystone/trust/controllers.py
index 7be6e8fd..7a94fe29 100644
--- a/keystone/trust/controllers.py
+++ b/keystone/trust/controllers.py
@@ -35,6 +35,21 @@ class TrustV3(controller.V3Controller):
collection_name = "trusts"
member_name = "trust"
+ @classmethod
+ def base_url(cls, path=None):
+ endpoint = CONF.public_endpoint % CONF
+
+ # allow a missing trailing slash in the config
+ if endpoint[-1] != '/':
+ endpoint += '/'
+
+ url = endpoint + 'v3/OS-TRUST'
+
+ if path:
+ return url + path
+ else:
+ return url + '/' + cls.collection_name
+
def _get_user_id(self, context):
if 'token_id' in context:
token_id = context['token_id']
@@ -78,8 +93,7 @@ class TrustV3(controller.V3Controller):
trust_full_roles.append(full_role)
trust['roles'] = trust_full_roles
trust['roles_links'] = {
- 'self': (CONF.public_endpoint % CONF +
- "trusts/%s/roles" % trust['id']),
+ 'self': (self.base_url() + "/%s/roles" % trust['id']),
'next': None,
'previous': None}
diff --git a/requirements.txt b/requirements.txt
index e54bb6a0..f7161d2c 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -5,6 +5,7 @@ pam>=0.1.4
WebOb>=1.0.8
eventlet
greenlet
+netaddr
PasteDeploy
paste
routes
diff --git a/test-requirements.txt b/test-requirements.txt
index 4ecd2c62..48ac1280 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -38,9 +38,10 @@ httplib2
requests>=1.0.0
keyring
-# swift_auth test dependencies
-http://tarballs.openstack.org/swift/swift-master.tar.gz#egg=swift
netifaces
# For translations processing
Babel
+
+# For documentation
+oslo.sphinx
diff --git a/tests/test_auth.py b/tests/test_auth.py
index 1416269b..e8e6c7a9 100644
--- a/tests/test_auth.py
+++ b/tests/test_auth.py
@@ -179,7 +179,8 @@ class AuthBadRequests(AuthTest):
def test_authenticate_password_too_large(self):
"""Verify sending large 'password' raises the right exception."""
- body_dict = _build_user_auth(username='FOO', password='0' * 8193)
+ length = CONF.identity.max_password_length + 1
+ body_dict = _build_user_auth(username='FOO', password='0' * length)
self.assertRaises(exception.ValidationSizeError,
self.controller.authenticate,
{}, body_dict)
@@ -618,6 +619,10 @@ class AuthWithTrust(AuthTest):
role_ids = [self.role_browser['id'], self.role_member['id']]
self.assertTrue(timeutils.parse_strtime(self.new_trust['expires_at'],
fmt=TIME_FORMAT))
+ self.assertIn('http://localhost:5000/v3/OS-TRUST/',
+ self.new_trust['links']['self'])
+ self.assertIn('http://localhost:5000/v3/OS-TRUST/',
+ self.new_trust['roles_links']['self'])
for role in self.new_trust['roles']:
self.assertIn(role['id'], role_ids)
diff --git a/tests/test_backend.py b/tests/test_backend.py
index a43e92ae..75a94773 100644
--- a/tests/test_backend.py
+++ b/tests/test_backend.py
@@ -118,26 +118,25 @@ class IdentityTests(object):
self.assertEqual(unicode_name, ref['name'])
def test_get_project(self):
- tenant_ref = self.identity_api.get_project(
- tenant_id=self.tenant_bar['id'])
+ tenant_ref = self.identity_api.get_project(self.tenant_bar['id'])
self.assertDictEqual(tenant_ref, self.tenant_bar)
def test_get_project_404(self):
self.assertRaises(exception.ProjectNotFound,
self.identity_api.get_project,
- tenant_id=uuid.uuid4().hex)
+ uuid.uuid4().hex)
def test_get_project_by_name(self):
tenant_ref = self.identity_api.get_project_by_name(
- tenant_name=self.tenant_bar['name'],
- domain_id=DEFAULT_DOMAIN_ID)
+ self.tenant_bar['name'],
+ DEFAULT_DOMAIN_ID)
self.assertDictEqual(tenant_ref, self.tenant_bar)
def test_get_project_by_name_404(self):
self.assertRaises(exception.ProjectNotFound,
self.identity_api.get_project_by_name,
- tenant_name=uuid.uuid4().hex,
- domain_id=DEFAULT_DOMAIN_ID)
+ uuid.uuid4().hex,
+ DEFAULT_DOMAIN_ID)
def test_get_project_users(self):
tenant_ref = self.identity_api.get_project_users(self.tenant_baz['id'])
@@ -152,10 +151,10 @@ class IdentityTests(object):
def test_get_project_users_404(self):
self.assertRaises(exception.ProjectNotFound,
self.identity_api.get_project_users,
- tenant_id=uuid.uuid4().hex)
+ uuid.uuid4().hex)
def test_get_user(self):
- user_ref = self.identity_api.get_user(user_id=self.user_foo['id'])
+ user_ref = self.identity_api.get_user(self.user_foo['id'])
# NOTE(termie): the password field is left in user_foo to make
# it easier to authenticate in tests, but should
# not be returned by the api
@@ -165,12 +164,12 @@ class IdentityTests(object):
def test_get_user_404(self):
self.assertRaises(exception.UserNotFound,
self.identity_api.get_user,
- user_id=uuid.uuid4().hex)
+ uuid.uuid4().hex)
def test_get_user_by_name(self):
user_ref = self.identity_api.get_user_by_name(
- user_name=self.user_foo['name'],
- domain_id=DEFAULT_DOMAIN_ID)
+ self.user_foo['name'], DEFAULT_DOMAIN_ID)
+
# NOTE(termie): the password field is left in user_foo to make
# it easier to authenticate in tests, but should
# not be returned by the api
@@ -180,19 +179,18 @@ class IdentityTests(object):
def test_get_user_by_name_404(self):
self.assertRaises(exception.UserNotFound,
self.identity_api.get_user_by_name,
- user_name=uuid.uuid4().hex,
- domain_id=DEFAULT_DOMAIN_ID)
+ uuid.uuid4().hex,
+ DEFAULT_DOMAIN_ID)
def test_get_role(self):
- role_ref = self.identity_api.get_role(
- role_id=self.role_admin['id'])
+ role_ref = self.identity_api.get_role(self.role_admin['id'])
role_ref_dict = dict((x, role_ref[x]) for x in role_ref)
self.assertDictEqual(role_ref_dict, self.role_admin)
def test_get_role_404(self):
self.assertRaises(exception.RoleNotFound,
self.identity_api.get_role,
- role_id=uuid.uuid4().hex)
+ uuid.uuid4().hex)
def test_create_duplicate_role_name_fails(self):
role = {'id': 'fake1',
@@ -1455,6 +1453,18 @@ class IdentityTests(object):
tenants = self.identity_api.get_projects_for_user(self.user_foo['id'])
self.assertIn(self.tenant_baz['id'], tenants)
+ def test_add_user_to_project_missing_default_role(self):
+ self.assignment_api.delete_role(CONF.member_role_id)
+ self.assertRaises(exception.RoleNotFound,
+ self.assignment_api.get_role,
+ CONF.member_role_id)
+ self.identity_api.add_user_to_project(self.tenant_baz['id'],
+ self.user_foo['id'])
+ tenants = self.identity_api.get_projects_for_user(self.user_foo['id'])
+ self.assertIn(self.tenant_baz['id'], tenants)
+ default_role = self.assignment_api.get_role(CONF.member_role_id)
+ self.assertIsNotNone(default_role)
+
def test_add_user_to_project_404(self):
self.assertRaises(exception.ProjectNotFound,
self.identity_api.add_user_to_project,
diff --git a/tests/test_backend_sql.py b/tests/test_backend_sql.py
index 38eddaa4..89276e86 100644
--- a/tests/test_backend_sql.py
+++ b/tests/test_backend_sql.py
@@ -114,7 +114,7 @@ class SqlModels(SqlTests):
def test_role_model(self):
cols = (('id', sql.String, 64),
- ('name', sql.String, 64))
+ ('name', sql.String, 255))
self.assertExpectedSchema('role', cols)
def test_user_project_metadata_model(self):
diff --git a/tests/test_injection.py b/tests/test_injection.py
index 4b6fc8ba..36cd0126 100644
--- a/tests/test_injection.py
+++ b/tests/test_injection.py
@@ -21,6 +21,10 @@ from keystone.common import dependency
class TestDependencyInjection(unittest.TestCase):
+ def tearDown(self):
+ dependency.reset()
+ super(TestDependencyInjection, self).tearDown()
+
def test_dependency_injection(self):
class Interface(object):
def do_work(self):
@@ -165,3 +169,43 @@ class TestDependencyInjection(unittest.TestCase):
with self.assertRaises(dependency.UnresolvableDependencyException):
Consumer()
+ dependency.resolve_future_dependencies()
+
+ def test_circular_dependency(self):
+ p1_name = uuid.uuid4().hex
+ p2_name = uuid.uuid4().hex
+
+ @dependency.provider(p1_name)
+ @dependency.requires(p2_name)
+ class P1(object):
+ pass
+
+ @dependency.provider(p2_name)
+ @dependency.requires(p1_name)
+ class P2(object):
+ pass
+
+ p1 = P1()
+ p2 = P2()
+
+ dependency.resolve_future_dependencies()
+
+ self.assertIs(getattr(p1, p2_name), p2)
+ self.assertIs(getattr(p2, p1_name), p1)
+
+ def test_reset(self):
+ # Can reset the registry of providers.
+
+ p_id = uuid.uuid4().hex
+
+ @dependency.provider(p_id)
+ class P(object):
+ pass
+
+ p_inst = P()
+
+ self.assertIs(dependency.REGISTRY[p_id], p_inst)
+
+ dependency.reset()
+
+ self.assertFalse(dependency.REGISTRY)
diff --git a/tests/test_keystoneclient.py b/tests/test_keystoneclient.py
index ecab6a01..38062d4b 100644
--- a/tests/test_keystoneclient.py
+++ b/tests/test_keystoneclient.py
@@ -18,7 +18,6 @@ import uuid
import webob
from keystone import test
-from keystone import token
from keystone import config
from keystone.openstack.common import jsonutils
@@ -36,15 +35,10 @@ class CompatTestCase(test.TestCase):
def setUp(self):
super(CompatTestCase, self).setUp()
- self.public_server = self.serveapp('keystone', name='main')
- self.admin_server = self.serveapp('keystone', name='admin')
-
- revdir = test.checkout_vendor(*self.get_checkout())
- self.add_path(revdir)
- self.clear_module('keystoneclient')
+ # The backends should be loaded and initialized before the servers are
+ # started because the servers use the backends.
self.load_backends()
- self.token_provider_api = token.provider.Manager()
self.load_fixtures(default_fixtures)
# TODO(termie): add an admin user to the fixtures and use that user
@@ -54,6 +48,13 @@ class CompatTestCase(test.TestCase):
self.tenant_bar['id'],
self.role_admin['id'])
+ self.public_server = self.serveapp('keystone', name='main')
+ self.admin_server = self.serveapp('keystone', name='admin')
+
+ revdir = test.checkout_vendor(*self.get_checkout())
+ self.add_path(revdir)
+ self.clear_module('keystoneclient')
+
def tearDown(self):
self.public_server.kill()
self.admin_server.kill()
diff --git a/tests/test_s3_token_middleware.py b/tests/test_s3_token_middleware.py
index c4d56dc9..ec31f2ac 100644
--- a/tests/test_s3_token_middleware.py
+++ b/tests/test_s3_token_middleware.py
@@ -14,32 +14,13 @@
# License for the specific language governing permissions and limitations
# under the License.
-import logging
-
-import stubout
import unittest2 as unittest
import webob
-from swift.common import utils as swift_utils
-
from keystone.middleware import s3_token
from keystone.openstack.common import jsonutils
-def setUpModule(self):
- self.stubs = stubout.StubOutForTesting()
- # Stub out swift_utils.get_logger. get_logger tries to configure
- # syslogging to '/dev/log', which will fail on OS X.
-
- def fake_get_logger(config, log_route=None):
- return logging.getLogger(log_route)
- self.stubs.Set(swift_utils, 'get_logger', fake_get_logger)
-
-
-def tearDownModule(self):
- self.stubs.UnsetAll()
-
-
class FakeHTTPResponse(object):
def __init__(self, status, body):
self.status = status
@@ -211,3 +192,42 @@ class S3TokenMiddlewareTestBad(S3TokenMiddlewareTestBase):
s3_invalid_req = self.middleware.deny_request('InvalidURI')
self.assertEqual(resp.body, s3_invalid_req.body)
self.assertEqual(resp.status_int, s3_invalid_req.status_int)
+
+
+class S3TokenMiddlewareTestUtil(unittest.TestCase):
+ def test_split_path_failed(self):
+ self.assertRaises(ValueError, s3_token.split_path, '')
+ self.assertRaises(ValueError, s3_token.split_path, '/')
+ self.assertRaises(ValueError, s3_token.split_path, '//')
+ self.assertRaises(ValueError, s3_token.split_path, '//a')
+ self.assertRaises(ValueError, s3_token.split_path, '/a/c')
+ self.assertRaises(ValueError, s3_token.split_path, '//c')
+ self.assertRaises(ValueError, s3_token.split_path, '/a/c/')
+ self.assertRaises(ValueError, s3_token.split_path, '/a//')
+ self.assertRaises(ValueError, s3_token.split_path, '/a', 2)
+ self.assertRaises(ValueError, s3_token.split_path, '/a', 2, 3)
+ self.assertRaises(ValueError, s3_token.split_path, '/a', 2, 3, True)
+ self.assertRaises(ValueError, s3_token.split_path, '/a/c/o/r', 3, 3)
+ self.assertRaises(ValueError, s3_token.split_path, '/a', 5, 4)
+
+ def test_split_path_success(self):
+ self.assertEquals(s3_token.split_path('/a'), ['a'])
+ self.assertEquals(s3_token.split_path('/a/'), ['a'])
+ self.assertEquals(s3_token.split_path('/a/c', 2), ['a', 'c'])
+ self.assertEquals(s3_token.split_path('/a/c/o', 3), ['a', 'c', 'o'])
+ self.assertEquals(s3_token.split_path('/a/c/o/r', 3, 3, True),
+ ['a', 'c', 'o/r'])
+ self.assertEquals(s3_token.split_path('/a/c', 2, 3, True),
+ ['a', 'c', None])
+ self.assertEquals(s3_token.split_path('/a/c/', 2), ['a', 'c'])
+ self.assertEquals(s3_token.split_path('/a/c/', 2, 3), ['a', 'c', ''])
+
+ def test_split_path_invalid_path(self):
+ try:
+ s3_token.split_path('o\nn e', 2)
+ except ValueError, err:
+ self.assertEquals(str(err), 'Invalid path: o%0An%20e')
+ try:
+ s3_token.split_path('o\nn e', 2, 3, True)
+ except ValueError, err:
+ self.assertEquals(str(err), 'Invalid path: o%0An%20e')
diff --git a/tests/test_sql_migrate_extensions.py b/tests/test_sql_migrate_extensions.py
new file mode 100644
index 00000000..4a529559
--- /dev/null
+++ b/tests/test_sql_migrate_extensions.py
@@ -0,0 +1,47 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2012 OpenStack LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+"""
+To run these tests against a live database:
+1. Modify the file `tests/backend_sql.conf` to use the connection for your
+ live database
+2. Set up a blank, live database.
+3. run the tests using
+ ./run_tests.sh -N test_sql_upgrade
+ WARNING::
+ Your database will be wiped.
+ Do not do this against a Database with valuable data as
+ all data will be lost.
+"""
+
+from keystone.contrib import example
+
+import test_sql_upgrade
+
+
+class SqlUpgradeExampleExtension(test_sql_upgrade.SqlMigrateBase):
+ def repo_package(self):
+ return example
+
+ def test_upgrade(self):
+ self.assertTableDoesNotExist('example')
+ self.upgrade(1, repository=self.repo_path)
+ self.assertTableColumns('example', ['id', 'type', 'extra'])
+
+ def test_downgrade(self):
+ self.upgrade(1, repository=self.repo_path)
+ self.assertTableColumns('example', ['id', 'type', 'extra'])
+ self.downgrade(0, repository=self.repo_path)
+ self.assertTableDoesNotExist('example')
diff --git a/tests/test_sql_upgrade.py b/tests/test_sql_upgrade.py
index e6d6162b..9540c4cd 100644
--- a/tests/test_sql_upgrade.py
+++ b/tests/test_sql_upgrade.py
@@ -45,8 +45,7 @@ CONF = config.CONF
DEFAULT_DOMAIN_ID = CONF.identity.default_domain_id
-class SqlUpgradeTests(test.TestCase):
-
+class SqlMigrateBase(test.TestCase):
def initialize_sql(self):
self.metadata = sqlalchemy.MetaData()
self.metadata.bind = self.engine
@@ -55,12 +54,15 @@ class SqlUpgradeTests(test.TestCase):
test.testsdir('test_overrides.conf'),
test.testsdir('backend_sql.conf')]
- #override this to sepcify the complete list of configuration files
+ #override this to specify the complete list of configuration files
def config_files(self):
return self._config_file_list
+ def repo_package(self):
+ return None
+
def setUp(self):
- super(SqlUpgradeTests, self).setUp()
+ super(SqlMigrateBase, self).setUp()
self.config(self.config_files())
self.base = sql.Base()
@@ -71,7 +73,7 @@ class SqlUpgradeTests(test.TestCase):
autocommit=False)
self.initialize_sql()
- self.repo_path = migration._find_migrate_repo()
+ self.repo_path = migration.find_migrate_repo(self.repo_package())
self.schema = versioning_api.ControlledSchema.create(
self.engine,
self.repo_path, 0)
@@ -85,7 +87,64 @@ class SqlUpgradeTests(test.TestCase):
autoload=True)
self.downgrade(0)
table.drop(self.engine, checkfirst=True)
- super(SqlUpgradeTests, self).tearDown()
+ super(SqlMigrateBase, self).tearDown()
+
+ def select_table(self, name):
+ table = sqlalchemy.Table(name,
+ self.metadata,
+ autoload=True)
+ s = sqlalchemy.select([table])
+ return s
+
+ def assertTableExists(self, table_name):
+ try:
+ self.select_table(table_name)
+ except sqlalchemy.exc.NoSuchTableError:
+ raise AssertionError('Table "%s" does not exist' % table_name)
+
+ def assertTableDoesNotExist(self, table_name):
+ """Asserts that a given table exists cannot be selected by name."""
+ # Switch to a different metadata otherwise you might still
+ # detect renamed or dropped tables
+ try:
+ temp_metadata = sqlalchemy.MetaData()
+ temp_metadata.bind = self.engine
+ sqlalchemy.Table(table_name, temp_metadata, autoload=True)
+ except sqlalchemy.exc.NoSuchTableError:
+ pass
+ else:
+ raise AssertionError('Table "%s" already exists' % table_name)
+
+ def upgrade(self, *args, **kwargs):
+ self._migrate(*args, **kwargs)
+
+ def downgrade(self, *args, **kwargs):
+ self._migrate(*args, downgrade=True, **kwargs)
+
+ def _migrate(self, version, repository=None, downgrade=False,
+ current_schema=None):
+ repository = repository or self.repo_path
+ err = ''
+ version = versioning_api._migrate_version(self.schema,
+ version,
+ not downgrade,
+ err)
+ if not current_schema:
+ current_schema = self.schema
+ changeset = current_schema.changeset(version)
+ for ver, change in changeset:
+ self.schema.runchange(ver, change, changeset.step)
+ self.assertEqual(self.schema.version, version)
+
+ def assertTableColumns(self, table_name, expected_cols):
+ """Asserts that the table contains the expected set of columns."""
+ self.initialize_sql()
+ table = self.select_table(table_name)
+ actual_cols = [col.name for col in table.columns]
+ self.assertEqual(expected_cols, actual_cols, '%s table' % table_name)
+
+
+class SqlUpgradeTests(SqlMigrateBase):
def test_blank_db_to_start(self):
self.assertTableDoesNotExist('user')
@@ -108,13 +167,6 @@ class SqlUpgradeTests(test.TestCase):
self.downgrade(x - 1)
self.upgrade(x)
- def assertTableColumns(self, table_name, expected_cols):
- """Asserts that the table contains the expected set of columns."""
- self.initialize_sql()
- table = self.select_table(table_name)
- actual_cols = [col.name for col in table.columns]
- self.assertEqual(expected_cols, actual_cols, '%s table' % table_name)
-
def test_upgrade_add_initial_tables(self):
self.upgrade(1)
self.assertTableColumns("user", ["id", "name", "extra"])
@@ -594,6 +646,22 @@ class SqlUpgradeTests(test.TestCase):
'data': json.dumps({"roles": [role2['id']]})}
session.execute(metadata_table.insert().values(role_grant))
+ # Create another user to test the case where member_role_id is already
+ # assigned.
+ user2 = {'id': uuid.uuid4().hex,
+ 'name': uuid.uuid4().hex,
+ 'domain_id': domain['id'],
+ 'password': uuid.uuid4().hex,
+ 'enabled': True,
+ 'extra': json.dumps({})}
+ session.execute(user_table.insert().values(user2))
+
+ # Grant CONF.member_role_id to User2
+ role_grant = {'user_id': user2['id'],
+ 'tenant_id': project['id'],
+ 'data': json.dumps({"roles": [CONF.member_role_id]})}
+ session.execute(metadata_table.insert().values(role_grant))
+
session.commit()
self.upgrade(17)
@@ -635,6 +703,14 @@ class SqlUpgradeTests(test.TestCase):
'data': data}
cmd = user_project_metadata_table.insert().values(role_grant)
self.engine.execute(cmd)
+
+ # Create another conflicting user-project for User2
+ data = json.dumps({"roles": [role2['id']]})
+ role_grant = {'user_id': user2['id'],
+ 'project_id': project['id'],
+ 'data': data}
+ cmd = user_project_metadata_table.insert().values(role_grant)
+ self.engine.execute(cmd)
# End Scaffolding
session.commit()
@@ -1278,50 +1354,6 @@ class SqlUpgradeTests(test.TestCase):
'extra': json.dumps(extra)})
self.engine.execute(ins)
- def select_table(self, name):
- table = sqlalchemy.Table(name,
- self.metadata,
- autoload=True)
- s = sqlalchemy.select([table])
- return s
-
- def assertTableExists(self, table_name):
- try:
- self.select_table(table_name)
- except sqlalchemy.exc.NoSuchTableError:
- raise AssertionError('Table "%s" does not exist' % table_name)
-
- def assertTableDoesNotExist(self, table_name):
- """Asserts that a given table exists cannot be selected by name."""
- # Switch to a different metadata otherwise you might still
- # detect renamed or dropped tables
- try:
- temp_metadata = sqlalchemy.MetaData()
- temp_metadata.bind = self.engine
- sqlalchemy.Table(table_name, temp_metadata, autoload=True)
- except sqlalchemy.exc.NoSuchTableError:
- pass
- else:
- raise AssertionError('Table "%s" already exists' % table_name)
-
- def upgrade(self, *args, **kwargs):
- self._migrate(*args, **kwargs)
-
- def downgrade(self, *args, **kwargs):
- self._migrate(*args, downgrade=True, **kwargs)
-
- def _migrate(self, version, repository=None, downgrade=False):
- repository = repository or self.repo_path
- err = ''
- version = versioning_api._migrate_version(self.schema,
- version,
- not downgrade,
- err)
- changeset = self.schema.changeset(version)
- for ver, change in changeset:
- self.schema.runchange(ver, change, changeset.step)
- self.assertEqual(self.schema.version, version)
-
def _mysql_check_all_tables_innodb(self):
database = self.engine.url.database
diff --git a/tests/test_token_provider.py b/tests/test_token_provider.py
index ac0b0d6b..a7e92717 100644
--- a/tests/test_token_provider.py
+++ b/tests/test_token_provider.py
@@ -333,7 +333,6 @@ class TestTokenProvider(test.TestCase):
def setUp(self):
super(TestTokenProvider, self).setUp()
self.load_backends()
- self.token_provider_api = token.provider.Manager()
def test_get_token_version(self):
self.assertEqual(
diff --git a/tests/test_v3.py b/tests/test_v3.py
index 60a52d69..4f00de7d 100644
--- a/tests/test_v3.py
+++ b/tests/test_v3.py
@@ -5,7 +5,6 @@ from lxml import etree
import webtest
from keystone import test
-from keystone import token
from keystone import auth
from keystone.common import serializer
@@ -45,8 +44,6 @@ class RestfulTestCase(test_content_types.RestfulTestCase):
test.setup_test_database()
self.load_backends()
- self.token_provider_api = token.provider.Manager()
-
self.public_app = webtest.TestApp(
self.loadapp('keystone', name='main'))
self.admin_app = webtest.TestApp(
diff --git a/tests/test_v3_identity.py b/tests/test_v3_identity.py
index 5eaf9085..f1e19c42 100644
--- a/tests/test_v3_identity.py
+++ b/tests/test_v3_identity.py
@@ -105,6 +105,10 @@ class IdentityTestCase(test_v3.RestfulTestCase):
body={'domain': ref})
return self.assertValidDomainResponse(r, ref)
+ def test_create_domain_400(self):
+ """Call ``POST /domains``."""
+ self.post('/domains', body={'domain': {}}, expected_status=400)
+
def test_list_domains(self):
"""Call ``GET /domains``."""
r = self.get('/domains')
@@ -266,19 +270,19 @@ class IdentityTestCase(test_v3.RestfulTestCase):
# Check all the domain2 relevant entities are gone
self.assertRaises(exception.DomainNotFound,
self.identity_api.get_domain,
- domain_id=self.domain2['id'])
+ self.domain2['id'])
self.assertRaises(exception.ProjectNotFound,
self.identity_api.get_project,
- tenant_id=self.project2['id'])
+ self.project2['id'])
self.assertRaises(exception.GroupNotFound,
self.identity_api.get_group,
- group_id=self.group2['id'])
+ self.group2['id'])
self.assertRaises(exception.UserNotFound,
self.identity_api.get_user,
- user_id=self.user2['id'])
+ self.user2['id'])
self.assertRaises(exception.CredentialNotFound,
self.credential_api.get_credential,
- credential_id=self.credential2['id'])
+ self.credential2['id'])
# ...and that all self.domain entities are still here
r = self.identity_api.get_domain(self.domain['id'])
@@ -313,6 +317,10 @@ class IdentityTestCase(test_v3.RestfulTestCase):
body={'project': ref})
self.assertValidProjectResponse(r, ref)
+ def test_create_project_400(self):
+ """Call ``POST /projects``."""
+ self.post('/projects', body={'project': {}}, expected_status=400)
+
def test_get_project(self):
"""Call ``GET /projects/{project_id}``."""
r = self.get(
@@ -376,6 +384,10 @@ class IdentityTestCase(test_v3.RestfulTestCase):
body={'user': ref})
return self.assertValidUserResponse(r, ref)
+ def test_create_user_400(self):
+ """Call ``POST /users``."""
+ self.post('/users', body={'user': {}}, expected_status=400)
+
def test_list_users(self):
"""Call ``GET /users``."""
r = self.get('/users')
@@ -511,7 +523,7 @@ class IdentityTestCase(test_v3.RestfulTestCase):
# that reference this project
self.assertRaises(exception.CredentialNotFound,
self.credential_api.get_credential,
- credential_id=self.credential['id'])
+ self.credential['id'])
# And the no tokens we remain valid
tokens = self.token_api.list_tokens(self.user['id'])
self.assertEquals(len(tokens), 0)
@@ -529,6 +541,10 @@ class IdentityTestCase(test_v3.RestfulTestCase):
body={'group': ref})
return self.assertValidGroupResponse(r, ref)
+ def test_create_group_400(self):
+ """Call ``POST /groups``."""
+ self.post('/groups', body={'group': {}}, expected_status=400)
+
def test_list_groups(self):
"""Call ``GET /groups``."""
r = self.get('/groups')
@@ -569,6 +585,10 @@ class IdentityTestCase(test_v3.RestfulTestCase):
body={'role': ref})
return self.assertValidRoleResponse(r, ref)
+ def test_create_role_400(self):
+ """Call ``POST /roles``."""
+ self.post('/roles', body={'role': {}}, expected_status=400)
+
def test_list_roles(self):
"""Call ``GET /roles``."""
r = self.get('/roles')
diff --git a/tests/test_wsgi.py b/tests/test_wsgi.py
index 369dd952..362df922 100644
--- a/tests/test_wsgi.py
+++ b/tests/test_wsgi.py
@@ -14,8 +14,6 @@
# License for the specific language governing permissions and limitations
# under the License.
-import webob
-
from keystone import test
from keystone.common import wsgi
@@ -34,42 +32,11 @@ class BaseWSGITest(test.TestCase):
super(BaseWSGITest, self).setUp()
def _make_request(self, url='/'):
- req = webob.Request.blank(url)
+ req = wsgi.Request.blank(url)
args = {'action': 'index', 'controller': None}
req.environ['wsgiorg.routing_args'] = [None, args]
return req
- def test_mask_password(self):
- message = ("test = 'password': 'aaaaaa', 'param1': 'value1', "
- "\"new_password\": 'bbbbbb'")
- self.assertEqual(wsgi.mask_password(message, True),
- u"test = 'password': '***', 'param1': 'value1', "
- "\"new_password\": '***'")
-
- message = "test = 'password' : 'aaaaaa'"
- self.assertEqual(wsgi.mask_password(message, False, '111'),
- "test = 'password' : '111'")
-
- message = u"test = u'password' : u'aaaaaa'"
- self.assertEqual(wsgi.mask_password(message, True),
- u"test = u'password' : u'***'")
-
- message = 'test = "password" : "aaaaaaaaa"'
- self.assertEqual(wsgi.mask_password(message),
- 'test = "password" : "***"')
-
- message = 'test = "original_password" : "aaaaaaaaa"'
- self.assertEqual(wsgi.mask_password(message),
- 'test = "original_password" : "***"')
-
- message = 'test = "original_password" : ""'
- self.assertEqual(wsgi.mask_password(message),
- 'test = "original_password" : "***"')
-
- message = 'test = "param1" : "value"'
- self.assertEqual(wsgi.mask_password(message),
- 'test = "param1" : "value"')
-
class ApplicationTest(BaseWSGITest):
def test_response_content_type(self):
@@ -212,3 +179,36 @@ class MiddlewareTest(BaseWSGITest):
app = factory(self.app)
self.assertIn("testkey", app.kwargs)
self.assertEquals("test", app.kwargs["testkey"])
+
+
+class WSGIFunctionTest(test.TestCase):
+ def test_mask_password(self):
+ message = ("test = 'password': 'aaaaaa', 'param1': 'value1', "
+ "\"new_password\": 'bbbbbb'")
+ self.assertEqual(wsgi.mask_password(message, True),
+ u"test = 'password': '***', 'param1': 'value1', "
+ "\"new_password\": '***'")
+
+ message = "test = 'password' : 'aaaaaa'"
+ self.assertEqual(wsgi.mask_password(message, False, '111'),
+ "test = 'password' : '111'")
+
+ message = u"test = u'password' : u'aaaaaa'"
+ self.assertEqual(wsgi.mask_password(message, True),
+ u"test = u'password' : u'***'")
+
+ message = 'test = "password" : "aaaaaaaaa"'
+ self.assertEqual(wsgi.mask_password(message),
+ 'test = "password" : "***"')
+
+ message = 'test = "original_password" : "aaaaaaaaa"'
+ self.assertEqual(wsgi.mask_password(message),
+ 'test = "original_password" : "***"')
+
+ message = 'test = "original_password" : ""'
+ self.assertEqual(wsgi.mask_password(message),
+ 'test = "original_password" : "***"')
+
+ message = 'test = "param1" : "value"'
+ self.assertEqual(wsgi.mask_password(message),
+ 'test = "param1" : "value"')