File: exceptions.pyx

package info (click to toggle)
python-gssapi 1.10.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 876 kB
  • sloc: python: 3,707; sh: 198; makefile: 154; ansic: 60
file content (195 lines) | stat: -rw-r--r-- 4,675 bytes parent folder | download | duplicates (6)
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