Ignore:
Timestamp:
May 27, 2009, 9:09:42 AM (16 years ago)
Author:
Herwig Bauernfeind
Message:

Update 3.2 branch to 3.2.8

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/samba-3.2.x/source/libsmb/cliconnect.c

    r228 r232  
    537537#define BASE_SESSSETUP_BLOB_PACKET_SIZE (35 + 24 + 22)
    538538
    539 static bool cli_session_setup_blob(struct cli_state *cli, DATA_BLOB blob, DATA_BLOB session_key_krb5)
     539static bool cli_session_setup_blob(struct cli_state *cli, DATA_BLOB blob)
    540540{
    541541        int32 remaining = blob.length;
     
    561561                        remaining -= max_blob_size;
    562562                } else {
    563                         DATA_BLOB null_blob = data_blob_null;
    564 
    565563                        send_blob.length = remaining;
    566564                        remaining = 0;
    567 
    568                         /* This is the last packet in the sequence - turn signing on. */
    569                         cli_simple_set_signing(cli, session_key_krb5, null_blob);
    570565                }
    571566
     
    615610        DATA_BLOB negTokenTarg;
    616611        DATA_BLOB session_key_krb5;
     612        NTSTATUS nt_status;
    617613        int rc;
     614
     615        cli_temp_set_signing(cli);
    618616
    619617        DEBUG(2,("Doing kerberos session setup\n"));
     
    632630#endif
    633631
    634         if (!cli_session_setup_blob(cli, negTokenTarg, session_key_krb5)) {
    635                 data_blob_free(&negTokenTarg);
    636                 data_blob_free(&session_key_krb5);
    637                 return ADS_ERROR_NT(cli_nt_error(cli));
     632        if (!cli_session_setup_blob(cli, negTokenTarg)) {
     633                nt_status = cli_nt_error(cli);
     634                goto nt_error;
     635        }
     636
     637        if (cli_is_error(cli)) {
     638                nt_status = cli_nt_error(cli);
     639                if (NT_STATUS_IS_OK(nt_status)) {
     640                        nt_status = NT_STATUS_UNSUCCESSFUL;
     641                }
     642                goto nt_error;
    638643        }
    639644
    640645        cli_set_session_key(cli, session_key_krb5);
     646
     647        if (cli_simple_set_signing(
     648                    cli, session_key_krb5, data_blob_null)) {
     649
     650                /* 'resign' the last message, so we get the right sequence numbers
     651                   for checking the first reply from the server */
     652                cli_calculate_sign_mac(cli, cli->outbuf);
     653
     654                if (!cli_check_sign_mac(cli, cli->inbuf)) {
     655                        nt_status = NT_STATUS_ACCESS_DENIED;
     656                        goto nt_error;
     657                }
     658        }
    641659
    642660        data_blob_free(&negTokenTarg);
    643661        data_blob_free(&session_key_krb5);
    644662
    645         if (cli_is_error(cli)) {
    646                 if (NT_STATUS_IS_OK(cli_nt_error(cli))) {
    647                         return ADS_ERROR_NT(NT_STATUS_UNSUCCESSFUL);
    648                 }
    649         }
    650         return ADS_ERROR_NT(cli_nt_error(cli));
     663        return ADS_ERROR_NT(NT_STATUS_OK);
     664
     665nt_error:
     666        data_blob_free(&negTokenTarg);
     667        data_blob_free(&session_key_krb5);
     668        cli->vuid = 0;
     669        return ADS_ERROR_NT(nt_status);
    651670}
    652671#endif  /* HAVE_KRB5 */
Note: See TracChangeset for help on using the changeset viewer.