(gss_accept_sec_context): Set KRB5_AUTH_CONTEXT_DO_SEQUENCE. Verify
8003 checksum. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@1914 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -22,6 +22,7 @@ OM_uint32 gss_accept_sec_context
|
|||||||
krb5_flags ap_options;
|
krb5_flags ap_options;
|
||||||
OM_uint32 flags;
|
OM_uint32 flags;
|
||||||
krb5_ticket *ticket;
|
krb5_ticket *ticket;
|
||||||
|
Checksum cksum;
|
||||||
|
|
||||||
gssapi_krb5_init ();
|
gssapi_krb5_init ();
|
||||||
|
|
||||||
@@ -42,6 +43,18 @@ OM_uint32 gss_accept_sec_context
|
|||||||
goto failure;
|
goto failure;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
int32_t tmp;
|
||||||
|
|
||||||
|
krb5_auth_con_getflags(gssapi_krb5_context,
|
||||||
|
&(*context_handle)->auth_context,
|
||||||
|
&tmp);
|
||||||
|
tmp |= KRB5_AUTH_CONTEXT_DO_SEQUENCE;
|
||||||
|
krb5_auth_con_setflags(gssapi_krb5_context,
|
||||||
|
&(*context_handle)->auth_context,
|
||||||
|
tmp);
|
||||||
|
}
|
||||||
|
|
||||||
ret = gssapi_krb5_decapsulate (input_token_buffer,
|
ret = gssapi_krb5_decapsulate (input_token_buffer,
|
||||||
&indata,
|
&indata,
|
||||||
"\x01\x00");
|
"\x01\x00");
|
||||||
@@ -84,6 +97,27 @@ OM_uint32 gss_accept_sec_context
|
|||||||
flags |= GSS_C_CONF_FLAG;
|
flags |= GSS_C_CONF_FLAG;
|
||||||
flags |= GSS_C_INTEG_FLAG;
|
flags |= GSS_C_INTEG_FLAG;
|
||||||
|
|
||||||
|
kret = gssapi_krb5_create_8003_checksum (input_chan_bindings,
|
||||||
|
flags,
|
||||||
|
&cksum);
|
||||||
|
|
||||||
|
if (kret) {
|
||||||
|
ret = GSS_S_FAILURE;
|
||||||
|
goto failure;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
Checksum *c2 = &(*context_handle)->auth_context->authenticator->cksum;
|
||||||
|
if (cksum.cksumtype != c2->cksumtype ||
|
||||||
|
cksum.checksum.length != c2->checksum.length ||
|
||||||
|
memcmp(cksum.checksum.data,
|
||||||
|
c2->checksum.data,
|
||||||
|
cksum.checksum.length)) {
|
||||||
|
ret = GSS_S_FAILURE;
|
||||||
|
goto failure;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (ret_flags)
|
if (ret_flags)
|
||||||
*ret_flags = flags;
|
*ret_flags = flags;
|
||||||
(*context_handle)->flags = flags;
|
(*context_handle)->flags = flags;
|
||||||
|
@@ -22,6 +22,7 @@ OM_uint32 gss_accept_sec_context
|
|||||||
krb5_flags ap_options;
|
krb5_flags ap_options;
|
||||||
OM_uint32 flags;
|
OM_uint32 flags;
|
||||||
krb5_ticket *ticket;
|
krb5_ticket *ticket;
|
||||||
|
Checksum cksum;
|
||||||
|
|
||||||
gssapi_krb5_init ();
|
gssapi_krb5_init ();
|
||||||
|
|
||||||
@@ -42,6 +43,18 @@ OM_uint32 gss_accept_sec_context
|
|||||||
goto failure;
|
goto failure;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
int32_t tmp;
|
||||||
|
|
||||||
|
krb5_auth_con_getflags(gssapi_krb5_context,
|
||||||
|
&(*context_handle)->auth_context,
|
||||||
|
&tmp);
|
||||||
|
tmp |= KRB5_AUTH_CONTEXT_DO_SEQUENCE;
|
||||||
|
krb5_auth_con_setflags(gssapi_krb5_context,
|
||||||
|
&(*context_handle)->auth_context,
|
||||||
|
tmp);
|
||||||
|
}
|
||||||
|
|
||||||
ret = gssapi_krb5_decapsulate (input_token_buffer,
|
ret = gssapi_krb5_decapsulate (input_token_buffer,
|
||||||
&indata,
|
&indata,
|
||||||
"\x01\x00");
|
"\x01\x00");
|
||||||
@@ -84,6 +97,27 @@ OM_uint32 gss_accept_sec_context
|
|||||||
flags |= GSS_C_CONF_FLAG;
|
flags |= GSS_C_CONF_FLAG;
|
||||||
flags |= GSS_C_INTEG_FLAG;
|
flags |= GSS_C_INTEG_FLAG;
|
||||||
|
|
||||||
|
kret = gssapi_krb5_create_8003_checksum (input_chan_bindings,
|
||||||
|
flags,
|
||||||
|
&cksum);
|
||||||
|
|
||||||
|
if (kret) {
|
||||||
|
ret = GSS_S_FAILURE;
|
||||||
|
goto failure;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
Checksum *c2 = &(*context_handle)->auth_context->authenticator->cksum;
|
||||||
|
if (cksum.cksumtype != c2->cksumtype ||
|
||||||
|
cksum.checksum.length != c2->checksum.length ||
|
||||||
|
memcmp(cksum.checksum.data,
|
||||||
|
c2->checksum.data,
|
||||||
|
cksum.checksum.length)) {
|
||||||
|
ret = GSS_S_FAILURE;
|
||||||
|
goto failure;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (ret_flags)
|
if (ret_flags)
|
||||||
*ret_flags = flags;
|
*ret_flags = flags;
|
||||||
(*context_handle)->flags = flags;
|
(*context_handle)->flags = flags;
|
||||||
|
Reference in New Issue
Block a user