Ignore:
Timestamp:
Mar 11, 2009, 9:14:55 AM (16 years ago)
Author:
Paul Smedley
Message:

Add 'missing' 3.0.34 diffs

File:
1 edited

Legend:

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

    r140 r165  
    539539#define BASE_SESSSETUP_BLOB_PACKET_SIZE (35 + 24 + 22)
    540540
    541 static BOOL cli_session_setup_blob(struct cli_state *cli, DATA_BLOB blob, DATA_BLOB session_key_krb5)
     541static BOOL cli_session_setup_blob(struct cli_state *cli, DATA_BLOB blob)
    542542{
    543543        int32 remaining = blob.length;
     
    563563                        remaining -= max_blob_size;
    564564                } else {
    565                         DATA_BLOB null_blob = data_blob(NULL, 0);
    566 
    567565                        send_blob.length = remaining;
    568566                        remaining = 0;
    569 
    570                         /* This is the last packet in the sequence - turn signing on. */
    571                         cli_simple_set_signing(cli, session_key_krb5, null_blob);
    572567                }
    573568
     
    617612        DATA_BLOB negTokenTarg;
    618613        DATA_BLOB session_key_krb5;
     614        DATA_BLOB null_blob = data_blob(NULL, 0);
     615        NTSTATUS nt_status;
     616        BOOL res;
    619617        int rc;
     618
     619        cli_temp_set_signing(cli);
    620620
    621621        DEBUG(2,("Doing kerberos session setup\n"));
     
    634634#endif
    635635
    636         if (!cli_session_setup_blob(cli, negTokenTarg, session_key_krb5)) {
    637                 data_blob_free(&negTokenTarg);
    638                 data_blob_free(&session_key_krb5);
    639                 return ADS_ERROR_NT(cli_nt_error(cli));
     636        if (!cli_session_setup_blob(cli, negTokenTarg)) {
     637                nt_status = cli_nt_error(cli);
     638                goto nt_error;
     639        }
     640
     641        if (cli_is_error(cli)) {
     642                nt_status = cli_nt_error(cli);
     643                if (NT_STATUS_IS_OK(nt_status)) {
     644                        nt_status = NT_STATUS_UNSUCCESSFUL;
     645                }
     646                goto nt_error;
    640647        }
    641648
    642649        cli_set_session_key(cli, session_key_krb5);
     650
     651        res = cli_simple_set_signing(cli, session_key_krb5, null_blob);
     652        if (res) {
     653                /* 'resign' the last message, so we get the right sequence numbers
     654                   for checking the first reply from the server */
     655                cli_calculate_sign_mac(cli);
     656
     657                if (!cli_check_sign_mac(cli)) {
     658                        nt_status = NT_STATUS_ACCESS_DENIED;
     659                        goto nt_error;
     660                }
     661        }
    643662
    644663        data_blob_free(&negTokenTarg);
    645664        data_blob_free(&session_key_krb5);
    646665
    647         if (cli_is_error(cli)) {
    648                 if (NT_STATUS_IS_OK(cli_nt_error(cli))) {
    649                         return ADS_ERROR_NT(NT_STATUS_UNSUCCESSFUL);
    650                 }
    651         }
    652         return ADS_ERROR_NT(cli_nt_error(cli));
     666        return ADS_ERROR_NT(NT_STATUS_OK);
     667
     668nt_error:
     669        data_blob_free(&negTokenTarg);
     670        data_blob_free(&session_key_krb5);
     671        cli->vuid = 0;
     672        return ADS_ERROR_NT(nt_status);
    653673}
    654674#endif  /* HAVE_KRB5 */
Note: See TracChangeset for help on using the changeset viewer.