Ignore:
Timestamp:
Nov 27, 2012, 4:43:17 PM (13 years ago)
Author:
Silvan Scherrer
Message:

Samba Server: updated trunk to 3.6.0

Location:
trunk/server
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/server

  • trunk/server/source4/torture/auth/ntlmssp.c

    r414 r745  
    2020#include "includes.h"
    2121#include "auth/gensec/gensec.h"
    22 #include "auth/gensec/gensec_proto.h"
    2322#include "auth/ntlmssp/ntlmssp.h"
    2423#include "lib/cmdline/popt_common.h"
     
    2928{
    3029        struct gensec_security *gensec_security;
    31         struct gensec_ntlmssp_state *gensec_ntlmssp_state;
     30        struct gensec_ntlmssp_context *gensec_ntlmssp;
     31        struct ntlmssp_state *ntlmssp_state;
    3232        DATA_BLOB data;
    3333        DATA_BLOB sig, expected_sig;
     
    3636        torture_assert_ntstatus_ok(tctx,
    3737                gensec_client_start(mem_ctx, &gensec_security,
    38                                     tctx->ev, lp_gensec_settings(tctx, tctx->lp_ctx)),
     38                                    tctx->ev, lpcfg_gensec_settings(tctx, tctx->lp_ctx)),
    3939                "gensec client start");
    4040
     
    4848                        "Failed to start GENSEC for NTLMSSP");
    4949
    50         gensec_ntlmssp_state = (struct gensec_ntlmssp_state *)gensec_security->private_data;
     50        gensec_ntlmssp = talloc_get_type_abort(gensec_security->private_data,
     51                                               struct gensec_ntlmssp_context);
     52        ntlmssp_state = gensec_ntlmssp->ntlmssp_state;
    5153
    52         gensec_ntlmssp_state->session_key = strhex_to_data_blob(tctx, "0102030405060708090a0b0c0d0e0f00");
     54        ntlmssp_state->session_key = strhex_to_data_blob(tctx, "0102030405060708090a0b0c0d0e0f00");
    5355        dump_data_pw("NTLMSSP session key: \n",
    54                      gensec_ntlmssp_state->session_key.data, 
    55                      gensec_ntlmssp_state->session_key.length);
     56                     ntlmssp_state->session_key.data,
     57                     ntlmssp_state->session_key.length);
    5658
    57         gensec_ntlmssp_state->neg_flags = NTLMSSP_NEGOTIATE_SIGN | NTLMSSP_NEGOTIATE_UNICODE | NTLMSSP_NEGOTIATE_128 | NTLMSSP_NEGOTIATE_KEY_EXCH | NTLMSSP_NEGOTIATE_NTLM2;
     59        ntlmssp_state->neg_flags = NTLMSSP_NEGOTIATE_SIGN | NTLMSSP_NEGOTIATE_UNICODE | NTLMSSP_NEGOTIATE_128 | NTLMSSP_NEGOTIATE_KEY_EXCH | NTLMSSP_NEGOTIATE_NTLM2;
    5860
    5961        torture_assert_ntstatus_ok(tctx, 
    60                 ntlmssp_sign_init(gensec_ntlmssp_state),
     62                ntlmssp_sign_init(ntlmssp_state),
    6163                "Failed to sign_init");
    6264
     
    8082                                      NT_STATUS_ACCESS_DENIED, "Check of just signed packet (should fail, wrong end)");
    8183
    82         gensec_ntlmssp_state->session_key = data_blob(NULL, 0);
     84        ntlmssp_state->session_key = data_blob(NULL, 0);
    8385
    8486        torture_assert_ntstatus_equal(tctx,
     
    9193        torture_assert_ntstatus_ok(tctx,
    9294                gensec_client_start(mem_ctx, &gensec_security,
    93                                     tctx->ev, lp_gensec_settings(tctx, tctx->lp_ctx)),
     95                                    tctx->ev, lpcfg_gensec_settings(tctx, tctx->lp_ctx)),
    9496                "Failed to start GENSEC for NTLMSSP");
    9597
     
    103105                "GENSEC start mech by oid");
    104106
    105         gensec_ntlmssp_state = (struct gensec_ntlmssp_state *)gensec_security->private_data;
     107        gensec_ntlmssp = talloc_get_type_abort(gensec_security->private_data,
     108                                               struct gensec_ntlmssp_context);
     109        ntlmssp_state = gensec_ntlmssp->ntlmssp_state;
    106110
    107         gensec_ntlmssp_state->session_key = strhex_to_data_blob(tctx, "0102030405e538b0");
     111        ntlmssp_state->session_key = strhex_to_data_blob(tctx, "0102030405e538b0");
    108112        dump_data_pw("NTLMSSP session key: \n",
    109                      gensec_ntlmssp_state->session_key.data, 
    110                      gensec_ntlmssp_state->session_key.length);
     113                     ntlmssp_state->session_key.data,
     114                     ntlmssp_state->session_key.length);
    111115
    112         gensec_ntlmssp_state->neg_flags = NTLMSSP_NEGOTIATE_SIGN | NTLMSSP_NEGOTIATE_UNICODE | NTLMSSP_NEGOTIATE_KEY_EXCH;
     116        ntlmssp_state->neg_flags = NTLMSSP_NEGOTIATE_SIGN | NTLMSSP_NEGOTIATE_UNICODE | NTLMSSP_NEGOTIATE_KEY_EXCH;
    113117
    114118        torture_assert_ntstatus_ok(tctx, 
    115                 ntlmssp_sign_init(gensec_ntlmssp_state),
     119                ntlmssp_sign_init(ntlmssp_state),
    116120                "Failed to sign_init");
    117121
     
    148152struct torture_suite *torture_ntlmssp(TALLOC_CTX *mem_ctx)
    149153{
    150         struct torture_suite *suite = torture_suite_create(mem_ctx,
    151                                                                                                            "NTLMSSP");
     154        struct torture_suite *suite = torture_suite_create(mem_ctx, "ntlmssp");
    152155
    153156        torture_suite_add_simple_test(suite, "NTLMSSP self check",
  • trunk/server/source4/torture/auth/pac.c

    r414 r745  
    2525#include "auth/auth.h"
    2626#include "auth/kerberos/kerberos.h"
    27 #include "librpc/gen_ndr/ndr_krb5pac.h"
    2827#include "samba3/samba3.h"
    2928#include "libcli/security/security.h"
     
    3130#include "auth/auth_sam_reply.h"
    3231#include "param/param.h"
     32#include "librpc/gen_ndr/ndr_krb5pac.h"
    3333
    3434static bool torture_pac_self_check(struct torture_context *tctx)
     
    5050        struct smb_krb5_context *smb_krb5_context;
    5151
    52         struct auth_serversupplied_info *server_info;
    53         struct auth_serversupplied_info *server_info_out;
     52        struct auth_user_info_dc *user_info_dc;
     53        struct auth_user_info_dc *user_info_dc_out;
    5454
    5555        krb5_principal client_principal;
     
    9292
    9393        /* We need an input, and this one requires no underlying database */
    94         nt_status = auth_anonymous_server_info(mem_ctx, lp_netbios_name(tctx->lp_ctx), &server_info);
     94        nt_status = auth_anonymous_user_info_dc(mem_ctx, lpcfg_netbios_name(tctx->lp_ctx), &user_info_dc);
    9595
    9696        if (!NT_STATUS_IS_OK(nt_status)) {
     
    9999                krb5_free_keyblock_contents(smb_krb5_context->krb5_context,
    100100                                            &krbtgt_keyblock);
    101                 torture_fail(tctx, "auth_anonymous_server_info");
     101                torture_fail(tctx, "auth_anonymous_user_info_dc");
    102102        }
    103103
    104104        ret = krb5_parse_name_flags(smb_krb5_context->krb5_context,
    105                                     server_info->account_name,
     105                                    user_info_dc->info->account_name,
    106106                                    KRB5_PRINCIPAL_PARSE_NO_REALM,
    107107                                    &client_principal);
     
    116116        /* OK, go ahead and make a PAC */
    117117        ret = kerberos_create_pac(mem_ctx,
    118                                   lp_iconv_convenience(tctx->lp_ctx),
    119                                   server_info,
     118                                  user_info_dc,
    120119                                  smb_krb5_context->krb5_context, 
    121120                                  &krbtgt_keyblock,
     
    143142        /* Now check that we can read it back (using full decode and validate) */
    144143        nt_status = kerberos_decode_pac(mem_ctx,
    145                                         lp_iconv_convenience(tctx->lp_ctx),
    146144                                        &pac_data,
    147145                                        tmp_blob,
     
    166164
    167165        /* Now check we can read it back (using Heimdal's pac parsing) */
    168         nt_status = kerberos_pac_blob_to_server_info(mem_ctx,
    169                                                      lp_iconv_convenience(tctx->lp_ctx),
     166        nt_status = kerberos_pac_blob_to_user_info_dc(mem_ctx,
    170167                                                     tmp_blob,
    171168                                                     smb_krb5_context->krb5_context,
    172                                                      &server_info_out);
    173 
    174         if (!dom_sid_equal(server_info->account_sid,
    175                            server_info_out->account_sid)) {
     169                                                      &user_info_dc_out, NULL, NULL);
     170
     171        /* The user's SID is the first element in the list */
     172        if (!dom_sid_equal(user_info_dc->sids,
     173                           user_info_dc_out->sids)) {
    176174                krb5_free_keyblock_contents(smb_krb5_context->krb5_context,
    177175                                            &krbtgt_keyblock);
     
    184182                             talloc_asprintf(tctx,
    185183                                             "(self test) PAC Decode resulted in *different* domain SID: %s != %s",
    186                                              dom_sid_string(mem_ctx, server_info->account_sid),
    187                                              dom_sid_string(mem_ctx, server_info_out->account_sid)));
    188         }
    189         talloc_free(server_info_out);
     184                                             dom_sid_string(mem_ctx, user_info_dc->sids),
     185                                             dom_sid_string(mem_ctx, user_info_dc_out->sids)));
     186        }
     187        talloc_free(user_info_dc_out);
    190188
    191189        /* Now check that we can read it back (yet again) */
    192190        nt_status = kerberos_pac_logon_info(mem_ctx,
    193                                             lp_iconv_convenience(tctx->lp_ctx),
    194191                                            &logon_info,
    195192                                            tmp_blob,
     
    224221        /* And make a server info from the samba-parsed PAC */
    225222        validation.sam3 = &logon_info->info3;
    226         nt_status = make_server_info_netlogon_validation(mem_ctx,
     223        nt_status = make_user_info_dc_netlogon_validation(mem_ctx,
    227224                                                         "",
    228225                                                         3, &validation,
    229                                                          &server_info_out);
     226                                                         &user_info_dc_out);
    230227        if (!NT_STATUS_IS_OK(nt_status)) {
    231228                torture_fail(tctx,
     
    235232        }
    236233       
    237         if (!dom_sid_equal(server_info->account_sid,
    238                            server_info_out->account_sid)) {
     234        if (!dom_sid_equal(user_info_dc->sids,
     235                           user_info_dc_out->sids)) {
    239236                torture_fail(tctx, 
    240237                             talloc_asprintf(tctx,
    241238                                             "(self test) PAC Decode resulted in *different* domain SID: %s != %s",
    242                                              dom_sid_string(mem_ctx, server_info->account_sid),
    243                                              dom_sid_string(mem_ctx, server_info_out->account_sid)));
     239                                             dom_sid_string(mem_ctx, user_info_dc->sids),
     240                                             dom_sid_string(mem_ctx, user_info_dc_out->sids)));
    244241        }
    245242        return true;
     
    303300        union netr_Validation validation;
    304301        const char *pac_file, *pac_kdc_key, *pac_member_key;
    305         struct auth_serversupplied_info *server_info_out;
     302        struct auth_user_info_dc *user_info_dc_out;
    306303
    307304        krb5_keyblock server_keyblock;
     
    411408        /* Decode and verify the signaure on the PAC */
    412409        nt_status = kerberos_decode_pac(mem_ctx,
    413                                         lp_iconv_convenience(tctx->lp_ctx),
    414410                                        &pac_data,
    415411                                        tmp_blob,
     
    431427
    432428        /* Now check we can read it back (using Heimdal's pac parsing) */
    433         nt_status = kerberos_pac_blob_to_server_info(mem_ctx,
    434                                                      lp_iconv_convenience(tctx->lp_ctx),
     429        nt_status = kerberos_pac_blob_to_user_info_dc(mem_ctx,
    435430                                                     tmp_blob,
    436431                                                     smb_krb5_context->krb5_context,
    437                                                      &server_info_out);
     432                                                      &user_info_dc_out,
     433                                                      NULL, NULL);
    438434
    439435        if (!NT_STATUS_IS_OK(nt_status)) {
     
    452448            !dom_sid_equal(dom_sid_parse_talloc(mem_ctx,
    453449                                                "S-1-5-21-3048156945-3961193616-3706469200-1005"),
    454                            server_info_out->account_sid)) {
     450                           user_info_dc_out->sids)) {
    455451                krb5_free_keyblock_contents(smb_krb5_context->krb5_context,
    456452                                            krbtgt_keyblock_p);
     
    463459                                             "(saved test) Heimdal PAC Decode resulted in *different* domain SID: %s != %s",
    464460                                             "S-1-5-21-3048156945-3961193616-3706469200-1005",
    465                                              dom_sid_string(mem_ctx, server_info_out->account_sid)));
    466         }
    467 
    468         talloc_free(server_info_out);
     461                                             dom_sid_string(mem_ctx, user_info_dc_out->sids)));
     462        }
     463
     464        talloc_free(user_info_dc_out);
    469465
    470466        /* Parse the PAC again, for the logon info this time (using Samba4's parsing) */
    471467        nt_status = kerberos_pac_logon_info(mem_ctx,
    472                                             lp_iconv_convenience(tctx->lp_ctx),
    473468                                            &logon_info,
    474469                                            tmp_blob,
     
    492487
    493488        validation.sam3 = &logon_info->info3;
    494         nt_status = make_server_info_netlogon_validation(mem_ctx,
     489        nt_status = make_user_info_dc_netlogon_validation(mem_ctx,
    495490                                                         "",
    496491                                                         3, &validation,
    497                                                          &server_info_out);
     492                                                         &user_info_dc_out);
    498493        if (!NT_STATUS_IS_OK(nt_status)) {
    499494                krb5_free_keyblock_contents(smb_krb5_context->krb5_context,
     
    512507            !dom_sid_equal(dom_sid_parse_talloc(mem_ctx,
    513508                                                "S-1-5-21-3048156945-3961193616-3706469200-1005"),
    514                            server_info_out->account_sid)) {
     509                           user_info_dc_out->sids)) {
    515510                krb5_free_keyblock_contents(smb_krb5_context->krb5_context,
    516511                                            krbtgt_keyblock_p);
     
    523518                                             "(saved test) PAC Decode resulted in *different* domain SID: %s != %s",
    524519                                             "S-1-5-21-3048156945-3961193616-3706469200-1005",
    525                                              dom_sid_string(mem_ctx, server_info_out->account_sid)));
     520                                             dom_sid_string(mem_ctx, user_info_dc_out->sids)));
    526521        }
    527522
     
    535530
    536531        ret = kerberos_encode_pac(mem_ctx,
    537                                   lp_iconv_convenience(tctx->lp_ctx),
    538532                                  pac_data,
    539533                                  smb_krb5_context->krb5_context,
     
    587581
    588582        ret = kerberos_create_pac(mem_ctx,
    589                                   lp_iconv_convenience(tctx->lp_ctx),
    590                                   server_info_out,
     583                                  user_info_dc_out,
    591584                                  smb_krb5_context->krb5_context,
    592585                                  krbtgt_keyblock_p,
     
    613606        if (tmp_blob.length != validate_blob.length) {
    614607                ndr_err = ndr_pull_struct_blob(&validate_blob, mem_ctx,
    615                                                lp_iconv_convenience(tctx->lp_ctx), &pac_data2,
     608                                               &pac_data2,
    616609                                               (ndr_pull_flags_fn_t)ndr_pull_PAC_DATA);
    617610                nt_status = ndr_map_error2ntstatus(ndr_err);
     
    635628        if (memcmp(tmp_blob.data, validate_blob.data, tmp_blob.length) != 0) {
    636629                ndr_err = ndr_pull_struct_blob(&validate_blob, mem_ctx,
    637                                                lp_iconv_convenience(tctx->lp_ctx), &pac_data2,
     630                                               &pac_data2,
    638631                                               (ndr_pull_flags_fn_t)ndr_pull_PAC_DATA);
    639632                nt_status = ndr_map_error2ntstatus(ndr_err);
     
    661654        /* Break the auth time, to ensure we check this vital detail (not setting this caused all the pain in the first place... */
    662655        nt_status = kerberos_decode_pac(mem_ctx,
    663                                         lp_iconv_convenience(tctx->lp_ctx),
    664656                                        &pac_data,
    665657                                        tmp_blob,
     
    699691
    700692        nt_status = kerberos_decode_pac(mem_ctx,
    701                                         lp_iconv_convenience(tctx->lp_ctx),
    702693                                        &pac_data,
    703694                                        tmp_blob,
     
    719710
    720711        nt_status = kerberos_decode_pac(mem_ctx,
    721                                         lp_iconv_convenience(tctx->lp_ctx),
    722712                                        &pac_data,
    723713                                        tmp_blob,
     
    744734struct torture_suite *torture_pac(TALLOC_CTX *mem_ctx)
    745735{
    746         struct torture_suite *suite = torture_suite_create(mem_ctx, "PAC");
     736        struct torture_suite *suite = torture_suite_create(mem_ctx, "pac");
    747737
    748738        torture_suite_add_simple_test(suite, "self check",
Note: See TracChangeset for help on using the changeset viewer.