This is needed for Ubuntu 14.04, 16.04, 16.10, and zesty.

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to krb5 in Ubuntu.
https://bugs.launchpad.net/bugs/1653278

Title:
  Update gss-ntlmssp to 0.7.0 to correct sequence numbering mismatch

Status in krb5 package in Ubuntu:
  New

Bug description:
  gss-ntlmmssp sequence numbers are incorrect in 0.6.0. In 0.7.0 the
  following patch (which is most of the difference between the two
  versions) fixes sequence numbers. We discovered this testing OMI from
  Linux to Windows, but don't have a simpler test case we can provide.

  ./ntlm_crypto.c
  564a565,592
  > int ntlm_reset_rc4_state(uint32_t flags, bool recv,
  >                          struct ntlm_key *session_key,
  >                          struct ntlm_signseal_state *state)
  > {
  >     struct ntlm_buffer rc4_key;
  >     int ret;
  >
  >     if (!(flags & NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY)) {
  >         return no_ext_sec_handle(flags, session_key,
  >                                  &state->send.seal_handle);
  >     }
  >
  >     if (recv) {
  >         RC4_FREE(&state->recv.seal_handle);
  >         rc4_key.data = state->recv.seal_key.data;
  >         rc4_key.length = state->recv.seal_key.length;
  >         ret = RC4_INIT(&rc4_key, NTLM_CIPHER_DECRYPT,
  >                        &state->recv.seal_handle);
  >     } else {
  >         RC4_FREE(&state->send.seal_handle);
  >         rc4_key.data = state->send.seal_key.data;
  >         rc4_key.length = state->send.seal_key.length;
  >         ret = RC4_INIT(&rc4_key, NTLM_CIPHER_ENCRYPT,
  >                        &state->send.seal_handle);
  >     }
  >     return ret;
  > }./gss_sec_ctx.c
  432a433
  >         if (actual_mech_type) *actual_mech_type = 
discard_const(&gssntlm_oid);
  992a994
  >         if (mech_type) *mech_type = discard_const(&gssntlm_oid);
  1093a1096,1153
  > uint32_t gssntlm_set_seq_num(uint32_t *minor_status,
  >                              struct gssntlm_ctx *ctx,
  >                              const gss_buffer_t value)
  > {
  >     uint32_t retmin;
  >     uint32_t retmaj;
  >
  >     if (ctx->gss_flags & GSS_C_DATAGRAM_FLAG) {
  >         if (value->length != 4) {
  >             return GSSERRS(ERR_BADARG, GSS_S_FAILURE);
  >         }
  >         memcpy(&ctx->crypto_state.recv.seq_num,
  >                value->value, value->length);
  >         ctx->crypto_state.send.seq_num = ctx->crypto_state.recv.seq_num;
  >     } else {
  >         return GSSERRS(ERR_WRONGCTX, GSS_S_FAILURE);
  >     }
  >
  >     return GSSERRS(0, GSS_S_COMPLETE);
  > }
  >
  > gss_OID_desc reset_crypto_oid = {
  >     GSS_NTLMSSP_RESET_CRYPTO_OID_LENGTH,
  >     discard_const(GSS_NTLMSSP_RESET_CRYPTO_OID_STRING)
  > };
  >
  > uint32_t gssntlm_reset_crypto(uint32_t *minor_status,
  >                               struct gssntlm_ctx *ctx,
  >                               const gss_buffer_t value)
  > {
  >     uint32_t retmin;
  >     uint32_t retmaj;
  >
  >     if (value->length != 4) {
  >         return GSSERRS(ERR_BADARG, GSS_S_FAILURE);
  >     }
  >
  >     /* reset crypto state */
  >     if (ctx->neg_flags & (NTLMSSP_NEGOTIATE_SIGN |
  >                             NTLMSSP_NEGOTIATE_SEAL)) {
  >         uint32_t val;
  >
  >         memcpy(&val, value->value, value->length);
  >
  >         /* A val of 1 means we want to reset the verifier handle,
  >          * which is the receive handle for NTLM, otherwise we reset
  >          * the send handle. */
  >         retmin = ntlm_reset_rc4_state(ctx->neg_flags, (val == 1),
  >                                       &ctx->exported_session_key,

  >                                       &ctx->crypto_state);
  >         if (retmin) {
  >             return GSSERRS(retmin, GSS_S_FAILURE);
  >         }
  >     }
  >
  >     return GSSERRS(0, GSS_S_COMPLETE);
  > }
  >
  1114,1129c1174,1176
  <         if (ctx->gss_flags & GSS_C_DATAGRAM_FLAG) {
  <
  <             if (value->length != 4) {
  <                 set_GSSERR(ERR_BADARG);
  <                 goto done;
  <             }
  <
  <             memcpy(&ctx->crypto_state.recv.seq_num,
  <                    value->value, value->length);
  <             ctx->crypto_state.send.seq_num = ctx->crypto_state.recv.seq_num;
  <             set_GSSERRS(0, GSS_S_COMPLETE);
  <             goto done;
  <         } else {
  <             set_GSSERRS(ERR_WRONGCTX, GSS_S_FAILURE);
  <             goto done;
  <         }
  ---
  >         return gssntlm_set_seq_num(minor_status, ctx, value);
  >     } else if (gss_oid_equal(desired_object, &reset_crypto_oid)) {
  >         return gssntlm_reset_crypto(minor_status, ctx, value);
  1132,1135c1179
  <     set_GSSERRS(ERR_BADARG, GSS_S_UNAVAILABLE);
  <

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/krb5/+bug/1653278/+subscriptions

-- 
Mailing list: https://launchpad.net/~touch-packages
Post to     : touch-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~touch-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to