1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195
|
from gssapi.raw.cython_types cimport OM_uint32
from gssapi.raw.misc import GSSError
"""Specific exceptions for GSSAPI errors"""
cdef extern from "python_gssapi.h":
# calling errors
OM_uint32 GSS_S_CALL_INACCESSIBLE_READ
OM_uint32 GSS_S_CALL_INACCESSIBLE_WRITE
OM_uint32 GSS_S_CALL_BAD_STRUCTURE
# routine errors
OM_uint32 GSS_S_BAD_MECH
OM_uint32 GSS_S_BAD_NAME
OM_uint32 GSS_S_BAD_NAMETYPE
OM_uint32 GSS_S_BAD_BINDINGS
OM_uint32 GSS_S_BAD_STATUS
OM_uint32 GSS_S_BAD_SIG
# NB(directxman12): BAD_MIC == BAD_SIG, so skip it
OM_uint32 GSS_S_NO_CRED
OM_uint32 GSS_S_NO_CONTEXT
OM_uint32 GSS_S_DEFECTIVE_TOKEN
OM_uint32 GSS_S_DEFECTIVE_CREDENTIAL
OM_uint32 GSS_S_CREDENTIALS_EXPIRED
OM_uint32 GSS_S_CONTEXT_EXPIRED
# OM_uint32 GSS_S_FAILURE
OM_uint32 GSS_S_BAD_QOP
OM_uint32 GSS_S_UNAUTHORIZED
OM_uint32 GSS_S_UNAVAILABLE
OM_uint32 GSS_S_DUPLICATE_ELEMENT
OM_uint32 GSS_S_NAME_NOT_MN
# supplementary bits
# OM_uint32 GSS_S_CONTINUE_NEEDED
OM_uint32 GSS_S_DUPLICATE_TOKEN
OM_uint32 GSS_S_OLD_TOKEN
OM_uint32 GSS_S_UNSEQ_TOKEN
OM_uint32 GSS_S_GAP_TOKEN
# Generic calling code errors
class ParameterReadError(GSSError):
CALLING_CODE = GSS_S_CALL_INACCESSIBLE_READ
class ParameterWriteError(GSSError):
CALLING_CODE = GSS_S_CALL_INACCESSIBLE_WRITE
class MalformedParameterError(GSSError):
CALLING_CODE = GSS_S_CALL_BAD_STRUCTURE
# generic routine errors
class BadMechanismError(GSSError):
ROUTINE_CODE = GSS_S_BAD_MECH
class BadNameError(GSSError):
ROUTINE_CODE = GSS_S_BAD_NAME
class BadNameTypeError(GSSError):
ROUTINE_CODE = GSS_S_BAD_NAMETYPE
class BadChannelBindingsError(GSSError):
ROUTINE_CODE = GSS_S_BAD_BINDINGS
class BadStatusError(GSSError):
ROUTINE_CODE = GSS_S_BAD_STATUS
class BadMICError(GSSError):
ROUTINE_CODE = GSS_S_BAD_SIG
class MissingCredentialsError(GSSError):
ROUTINE_CODE = GSS_S_NO_CRED
class MissingContextError(GSSError):
ROUTINE_CODE = GSS_S_NO_CONTEXT
class InvalidTokenError(GSSError):
ROUTINE_CODE = GSS_S_DEFECTIVE_TOKEN
class InvalidCredentialsError(GSSError):
ROUTINE_CODE = GSS_S_DEFECTIVE_CREDENTIAL
class ExpiredCredentialsError(GSSError):
ROUTINE_CODE = GSS_S_CREDENTIALS_EXPIRED
class ExpiredContextError(GSSError):
ROUTINE_CODE = GSS_S_CONTEXT_EXPIRED
# NB(directxman12): since GSS_S_FAILURE is generic,
# we just use GSSError for it
class BadQoPError(GSSError):
ROUTINE_CODE = GSS_S_BAD_QOP
class UnauthorizedError(GSSError):
ROUTINE_CODE = GSS_S_UNAUTHORIZED
class OperationUnavailableError(GSSError):
ROUTINE_CODE = GSS_S_UNAVAILABLE
class DuplicateCredentialsElementError(GSSError):
ROUTINE_CODE = GSS_S_DUPLICATE_ELEMENT
class MechanismNameRequiredError(GSSError):
ROUTINE_CODE = GSS_S_NAME_NOT_MN
# specific calling | routine errors
class NameReadError(ParameterReadError, BadNameError):
# CALLING_CODE = GSS_S_CALL_INACCESSIBLE_READ
# ROUTINE_CODE = GSS_S_BAD_NAME
pass
class NameTypeReadError(ParameterReadError, BadNameTypeError):
# CALLING_CODE = GSS_S_CALL_INACCESSIBLE_READ
# ROUTINE_CODE = GSS_S_BAD_NAMETYPE
pass
class TokenReadError(ParameterReadError, InvalidTokenError):
# CALLING_CODE = GSS_S_CALL_INACCESSIBLE_READ
# ROUTINE_CODE = GSS_S_DEFECTIVE_TOKEN
pass
class ContextReadError(ParameterReadError, MissingContextError):
# CALLING_CODE = GSS_S_CALL_INACCESSIBLE_READ
# ROUTINE_CODE = GSS_S_NO_CONTEXT
pass
class CredentialsReadError(ParameterReadError, MissingCredentialsError):
# CALLING_CODE = GSS_S_CALL_INACCESSIBLE_READ
# ROUTINE_CODE = GSS_S_NO_CRED
pass
class ContextWriteError(ParameterWriteError, MissingContextError):
# CALLING_CODE = GSS_S_CALL_INACCESSIBLE_WRITE
# ROUTINE_CODE = GSS_S_NO_CONTEXT
pass
class CredentialsWriteError(ParameterWriteError, MissingCredentialsError):
# CALLING_CODE = GSS_S_CALL_INACCESSIBLE_WRITE
# ROUTINE_CODE = GSS_S_NO_CRED
pass
# generic supplementary bits errors
class SupplementaryError(GSSError):
# to make it easy for people to catch all supplementary errors
pass
class DuplicateTokenError(SupplementaryError):
SUPPLEMENTARY_CODE = GSS_S_DUPLICATE_TOKEN
class ExpiredTokenError(SupplementaryError):
SUPPLEMENTARY_CODE = GSS_S_OLD_TOKEN
class TokenOutOfSequenceError(SupplementaryError):
pass
class TokenTooLateError(TokenOutOfSequenceError):
SUPPLEMENTARY_CODE = GSS_S_UNSEQ_TOKEN
class TokenTooEarlyError(TokenOutOfSequenceError):
SUPPLEMENTARY_CODE = GSS_S_GAP_TOKEN
|