Skip to content

Commit e9f5a97

Browse files
committed
Don't clobber minor status codes in sec contexts
In `init_sec_contexts` and `accept_sec_contexts`, when we moved to attaching the token to the error, we ended up clobbering minor status codes due to the way the call to `gss_release_buffer` done. This commit fixes that, so that minor status codes persist.
1 parent b1a7e39 commit e9f5a97

File tree

1 file changed

+15
-15
lines changed

1 file changed

+15
-15
lines changed

gssapi/raw/sec_contexts.pyx

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -221,20 +221,20 @@ def init_sec_context(Name target_name not None, Creds creds=None,
221221
output_token = None
222222
if output_token_buffer.length:
223223
output_token = output_token_buffer.value[:output_token_buffer.length]
224-
gss_release_buffer(&min_stat, &output_token_buffer)
224+
cdef OM_uint32 tmp_min_stat
225+
gss_release_buffer(&tmp_min_stat, &output_token_buffer)
225226

226227
if channel_bindings is not None:
227228
free(bdng)
228229

229230
cdef OID output_mech_type = OID()
230231
if maj_stat == GSS_S_COMPLETE or maj_stat == GSS_S_CONTINUE_NEEDED:
231232
output_mech_type.raw_oid = actual_mech_type[0]
232-
res = InitSecContextResult(output_context, output_mech_type,
233-
IntEnumFlagSet(RequirementFlag, ret_flags),
234-
output_token,
235-
c_c_ttl_to_py(output_ttl),
236-
maj_stat == GSS_S_CONTINUE_NEEDED)
237-
return res
233+
return InitSecContextResult(output_context, output_mech_type,
234+
IntEnumFlagSet(RequirementFlag, ret_flags),
235+
output_token,
236+
c_c_ttl_to_py(output_ttl),
237+
maj_stat == GSS_S_CONTINUE_NEEDED)
238238
else:
239239
raise GSSError(maj_stat, min_stat, token=output_token)
240240

@@ -324,7 +324,8 @@ def accept_sec_context(input_token not None, Creds acceptor_creds=None,
324324
output_token = None
325325
if output_token_buffer.length:
326326
output_token = output_token_buffer.value[:output_token_buffer.length]
327-
gss_release_buffer(&min_stat, &output_token_buffer)
327+
cdef OM_uint32 tmp_min_stat
328+
gss_release_buffer(&tmp_min_stat, &output_token_buffer)
328329

329330
if channel_bindings is not None:
330331
free(bdng)
@@ -350,13 +351,12 @@ def accept_sec_context(input_token not None, Creds acceptor_creds=None,
350351
else:
351352
py_mech_type = None
352353

353-
res = AcceptSecContextResult(output_context, on, py_mech_type,
354-
output_token,
355-
IntEnumFlagSet(RequirementFlag,
356-
ret_flags),
357-
output_ttl_py, oc,
358-
maj_stat == GSS_S_CONTINUE_NEEDED)
359-
gss_release_buffer(&min_stat, &output_token_buffer)
354+
return AcceptSecContextResult(output_context, on, py_mech_type,
355+
output_token,
356+
IntEnumFlagSet(RequirementFlag,
357+
ret_flags),
358+
output_ttl_py, oc,
359+
maj_stat == GSS_S_CONTINUE_NEEDED)
360360
return res
361361
else:
362362
raise GSSError(maj_stat, min_stat, token=output_token)

0 commit comments

Comments
 (0)