# MessagesBundle.properties -- English GSS messages.
# Copyright (C) 2004  Free Software Foundation, Inc.
#
# This file is a part of GNU Classpath.
#
# GNU Classpath is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of the
# License, or (at your option) any later version.
#
# GNU Classpath is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNU Classpath; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
# USA
#
# Linking this library statically or dynamically with other modules is
# making a combined work based on this library.  Thus, the terms and
# conditions of the GNU General Public License cover the whole
# combination.
#
# As a special exception, the copyright holders of this library give
# you permission to link this library with independent modules to
# produce an executable, regardless of the license terms of these
# independent modules, and to copy and distribute the resulting
# executable under terms of your choice, provided that you also meet,
# for each linked independent module, the terms and conditions of the
# license of that module.  An independent module is a module which is
# not derived from or based on this library.  If you modify this
# library, you may extend this exception to your version of the
# library, but you are not obligated to do so.  If you do not wish to
# do so, delete this exception statement from your version.

GSSException.BAD_MECH=An unsupported mechanism was requested.
GSSException.BAD_NAME=An invalid name was supplied.
GSSException.BAD_NAMETYPE=A supplied name was of an unsupported type.
GSSException.BAD_BINDINGS=Incorrect channel bindings were supplied.
GSSException.BAD_STATUS=An invalid status code was supplied.
GSSException.BAD_MIC=A token had an invalid MIC.
GSSException.NO_CRED=No credentials were supplied, or the credentials were unavailable or inaccessible.
GSSException.NO_CONTEXT=Invalid context has been supplied.
GSSException.DEFECTIVE_TOKEN=A supplied token was invalid.
GSSException.DEFECTIVE_CREDENTIAL=A supplied credential was invalid.
GSSException.CREDENTIALS_EXPIRED=The referenced credentials have expired.
GSSException.CONTEXT_EXPIRED=The context has expired.
GSSException.FAILURE=Miscellaneous failure.
GSSException.BAD_QOP=The quality-of-protection requested could not be provided.
GSSException.UNAUTHORIZED=The operation is forbidden by local security policy.
GSSException.UNAVAILABLE=The operation or option is unavailable.
GSSException.DUPLICATE_ELEMENT=The requested credential element already exists.
GSSException.NAME_NOT_MN=The provided name was not a mechanism name.
GSSException.OLD_TOKEN=The token\'s validity period has expired.
GSSException.DUPLICATE_TOKEN=The token was a duplicate of an earlier version.
GSSException.UNSEQ_TOKEN=A later token has already been processed.
GSSException.GAP_TOKEN=An expected per-message token was not received.

