Ignore:
Timestamp:
Jun 9, 2016, 2:23:12 PM (9 years ago)
Author:
Silvan Scherrer
Message:

Samba Server: apply latest security patches to trunk

Location:
trunk/server
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/server

  • trunk/server/source4/torture/ndr/dfsblob.c

    r918 r920  
    7575        struct torture_suite *suite = torture_suite_create(ctx, "dfsblob");
    7676
    77         torture_suite_add_ndr_pull_fn_test(suite, dfs_GetDFSReferral_in, dfs_get_ref_in, NDR_IN, NULL);
     77        torture_suite_add_ndr_pull_test(suite, dfs_GetDFSReferral_in, dfs_get_ref_in, NULL);
    7878
    79         torture_suite_add_ndr_pull_fn_test(suite, dfs_referral_resp, dfs_get_ref_out2, NDR_BUFFERS|NDR_SCALARS, NULL);
     79        torture_suite_add_ndr_pull_test(suite, dfs_referral_resp, dfs_get_ref_out2, NULL);
    8080
    81         torture_suite_add_ndr_pull_fn_test(suite, dfs_referral_resp, dfs_get_ref_out, NDR_BUFFERS|NDR_SCALARS,dfs_referral_out_check);
     81        torture_suite_add_ndr_pull_test(suite, dfs_referral_resp, dfs_get_ref_out,dfs_referral_out_check);
    8282
    8383        return suite;
  • trunk/server/source4/torture/ndr/drsblobs.c

    r918 r920  
    116116};
    117117
     118/* these are taken from the trust objects of a w2k8r2 forest, with a
     119 * trust relationship between the forest parent and a child domain
     120 */
     121static const char *trustAuthIncoming =
     122"AQAAAAwAAAAcAQAASuQ+RXJdzAECAAAAAAEAAMOWL6UVfVKiJOUsGcT03H"
     123"jHxr2ACsMMOV5ynM617Tp7idNC+c4egdqk4S9YEpvR2YvHmdZdymL6F7QKm8OkXazYZF2r/gZ/bI+"
     124"jkWbsn4O8qyAc3OUKQRZwBbf+lxBW+vM4O3ZpUjz5BSKCcFQgM+MY91yVU8Nji3HNnvGnDquobFAZ"
     125"hxjL+S1l5+QZgkfyfv5mQScGRbU1Lar1xg9G3JznUb7S6pvrBO2nwK8g+KZBfJy5UeULigDH4IWo/"
     126"JmtaEGkKE2uiKIjdsEQd/uwnkouW26XzRc0ulfJnPFftGnT9KIcShPf7DLj/tstmQAAceRMFHJTY3"
     127"PmxoowoK8HUyBK5D5Fcl3MAQIAAAAAAQAAw5YvpRV9UqIk5SwZxPTceMfGvYAKwww5XnKczrXtOnu"
     128"J00L5zh6B2qThL1gSm9HZi8eZ1l3KYvoXtAqbw6RdrNhkXav+Bn9sj6ORZuyfg7yrIBzc5QpBFnAF"
     129"t/6XEFb68zg7dmlSPPkFIoJwVCAz4xj3XJVTw2OLcc2e8acOq6hsUBmHGMv5LWXn5BmCR/J+/mZBJ"
     130"wZFtTUtqvXGD0bcnOdRvtLqm+sE7afAryD4pkF8nLlR5QuKAMfghaj8ma1oQaQoTa6IoiN2wRB3+7"
     131"CeSi5bbpfNFzS6V8mc8V+0adP0ohxKE9/sMuP+2y2ZAABx5EwUclNjc+bGijCgrwdTIA==";
     132
     133static const char *trustAuthOutgoing =
     134"AQAAAAwAAAAcAQAASuQ+RXJdzAECAAAAAAEAAMOWL6UVfVKiJOUsGcT03H"
     135"jHxr2ACsMMOV5ynM617Tp7idNC+c4egdqk4S9YEpvR2YvHmdZdymL6F7QKm8OkXazYZF2r/gZ/bI+"
     136"jkWbsn4O8qyAc3OUKQRZwBbf+lxBW+vM4O3ZpUjz5BSKCcFQgM+MY91yVU8Nji3HNnvGnDquobFAZ"
     137"hxjL+S1l5+QZgkfyfv5mQScGRbU1Lar1xg9G3JznUb7S6pvrBO2nwK8g+KZBfJy5UeULigDH4IWo/"
     138"JmtaEGkKE2uiKIjdsEQd/uwnkouW26XzRc0ulfJnPFftGnT9KIcShPf7DLj/tstmQAAceRMFHJTY3"
     139"PmxoowoK8HUyBK5D5Fcl3MAQIAAAAAAQAAw5YvpRV9UqIk5SwZxPTceMfGvYAKwww5XnKczrXtOnu"
     140"J00L5zh6B2qThL1gSm9HZi8eZ1l3KYvoXtAqbw6RdrNhkXav+Bn9sj6ORZuyfg7yrIBzc5QpBFnAF"
     141"t/6XEFb68zg7dmlSPPkFIoJwVCAz4xj3XJVTw2OLcc2e8acOq6hsUBmHGMv5LWXn5BmCR/J+/mZBJ"
     142"wZFtTUtqvXGD0bcnOdRvtLqm+sE7afAryD4pkF8nLlR5QuKAMfghaj8ma1oQaQoTa6IoiN2wRB3+7"
     143"CeSi5bbpfNFzS6V8mc8V+0adP0ohxKE9/sMuP+2y2ZAABx5EwUclNjc+bGijCgrwdTIA==";
     144
     145
    118146static bool trust_domain_passwords_check_in(struct torture_context *tctx,
    119147                                            struct trustDomainPasswords *r)
     
    155183        struct torture_suite *suite = torture_suite_create(ctx, "drsblobs");
    156184
    157         torture_suite_add_ndr_pull_fn_test(suite, ForestTrustInfo, forest_trust_info_data_out, NDR_IN, forest_trust_info_check_out);
    158         torture_suite_add_ndr_pull_fn_test(suite, trustDomainPasswords, trust_domain_passwords_in, NDR_IN, trust_domain_passwords_check_in);
     185        torture_suite_add_ndr_pull_test(suite, ForestTrustInfo, forest_trust_info_data_out, forest_trust_info_check_out);
     186        torture_suite_add_ndr_pull_test(suite, trustDomainPasswords, trust_domain_passwords_in, trust_domain_passwords_check_in);
     187
     188#if 0
     189        torture_suite_add_ndr_pullpush_test(suite,
     190                                            trustAuthInOutBlob,
     191                                            base64_decode_data_blob_talloc(suite, trustAuthIncoming),
     192                                            NULL);
     193
     194        torture_suite_add_ndr_pullpush_test(suite,
     195                                            trustAuthInOutBlob,
     196                                            base64_decode_data_blob_talloc(suite, trustAuthOutgoing),
     197                                            NULL);
     198#endif
    159199
    160200        return suite;
  • trunk/server/source4/torture/ndr/nbt.c

    r918 r920  
    6363        struct torture_suite *suite = torture_suite_create(ctx, "nbt");
    6464
    65         torture_suite_add_ndr_pull_fn_test(suite, nbt_netlogon_packet, netlogon_logon_request_req_data, NDR_IN, netlogon_logon_request_req_check);
     65        torture_suite_add_ndr_pull_test(suite, nbt_netlogon_packet, netlogon_logon_request_req_data, netlogon_logon_request_req_check);
    6666
    67         torture_suite_add_ndr_pull_fn_test(suite, nbt_netlogon_response2, netlogon_logon_request_resp_data, NDR_IN, netlogon_logon_request_resp_check);
     67        torture_suite_add_ndr_pull_test(suite, nbt_netlogon_response2, netlogon_logon_request_resp_data, netlogon_logon_request_resp_check);
    6868
    6969        return suite;
  • trunk/server/source4/torture/ndr/ndr.c

    r918 r920  
    3030        size_t struct_size;
    3131        ndr_pull_flags_fn_t pull_fn;
     32        ndr_push_flags_fn_t push_fn;
    3233        int ndr_flags;
     34        int flags;
    3335};
    3436
    35 static bool wrap_ndr_pull_test(struct torture_context *tctx,
    36                                struct torture_tcase *tcase,
    37                                struct torture_test *test)
     37static bool wrap_ndr_pullpush_test(struct torture_context *tctx,
     38                                   struct torture_tcase *tcase,
     39                                   struct torture_test *test)
    3840{
    3941        bool (*check_fn) (struct torture_context *ctx, void *data) = test->fn;
    4042        const struct ndr_pull_test_data *data = (const struct ndr_pull_test_data *)test->data;
    41         void *ds = talloc_zero_size(tctx, data->struct_size);
    4243        struct ndr_pull *ndr = ndr_pull_init_blob(&(data->data), tctx);
     44        void *ds = talloc_zero_size(ndr, data->struct_size);
     45        bool ret;
     46        uint32_t highest_ofs;
     47
     48        ndr->flags |= data->flags;
    4349
    4450        ndr->flags |= LIBNDR_FLAG_REF_ALLOC;
     
    4753                                   "pulling");
    4854
    49         torture_assert(tctx, ndr->offset == ndr->data_size,
     55        if (ndr->offset > ndr->relative_highest_offset) {
     56                highest_ofs = ndr->offset;
     57        } else {
     58                highest_ofs = ndr->relative_highest_offset;
     59        }
     60
     61        torture_assert(tctx, highest_ofs == ndr->data_size,
    5062                                   talloc_asprintf(tctx,
    51                                            "%d unread bytes", ndr->data_size - ndr->offset));
    52 
    53         if (check_fn != NULL)
    54                 return check_fn(tctx, ds);
    55         else
    56                 return true;
    57 }
    58 
    59 _PUBLIC_ struct torture_test *_torture_suite_add_ndr_pull_test(
    60                                         struct torture_suite *suite,
    61                                         const char *name, ndr_pull_flags_fn_t pull_fn,
    62                                         DATA_BLOB db,
    63                                         size_t struct_size,
    64                                         int ndr_flags,
    65                                         bool (*check_fn) (struct torture_context *ctx, void *data))
     63                                           "%d unread bytes", ndr->data_size - highest_ofs));
     64
     65        if (check_fn != NULL) {
     66                ret = check_fn(tctx, ds);
     67        } else {
     68                ret = true;
     69        }
     70
     71        if (data->push_fn != NULL) {
     72                DATA_BLOB outblob;
     73                torture_assert_ndr_success(tctx, ndr_push_struct_blob(&outblob, ndr, ds, data->push_fn), "pushing");
     74                torture_assert_data_blob_equal(tctx, outblob, data->data, "ndr push compare");
     75        }
     76
     77        talloc_free(ndr);
     78        return ret;
     79}
     80
     81_PUBLIC_ struct torture_test *_torture_suite_add_ndr_pullpush_test(
     82        struct torture_suite *suite,
     83        const char *name,
     84        ndr_pull_flags_fn_t pull_fn,
     85        ndr_push_flags_fn_t push_fn,
     86        DATA_BLOB db,
     87        size_t struct_size,
     88        int ndr_flags,
     89        int flags,
     90        bool (*check_fn) (struct torture_context *ctx, void *data))
    6691{
    6792        struct torture_test *test;
     
    75100        test->name = talloc_strdup(test, name);
    76101        test->description = NULL;
    77         test->run = wrap_ndr_pull_test;
     102        test->run = wrap_ndr_pullpush_test;
     103
    78104        data = talloc(test, struct ndr_pull_test_data);
    79105        data->data = db;
    80106        data->ndr_flags = ndr_flags;
     107        data->flags = flags;
    81108        data->struct_size = struct_size;
    82109        data->pull_fn = pull_fn;
     110        data->push_fn = push_fn;
     111
    83112        test->data = data;
    84113        test->fn = check_fn;
     
    89118        return test;
    90119}
     120
    91121
    92122static bool wrap_ndr_inout_pull_test(struct torture_context *tctx,
     
    98128        void *ds = talloc_zero_size(tctx, data->struct_size);
    99129        struct ndr_pull *ndr;
     130        uint32_t highest_ofs;
    100131
    101132        /* handle NDR_IN context */
     
    110141                "ndr pull of context failed");
    111142
    112         torture_assert(tctx, ndr->offset == ndr->data_size,
    113                 talloc_asprintf(tctx, "%d unread bytes", ndr->data_size - ndr->offset));
     143        if (ndr->offset > ndr->relative_highest_offset) {
     144                highest_ofs = ndr->offset;
     145        } else {
     146                highest_ofs = ndr->relative_highest_offset;
     147        }
     148
     149        torture_assert(tctx, highest_ofs == ndr->data_size,
     150                talloc_asprintf(tctx, "%d unread bytes", ndr->data_size - highest_ofs));
    114151
    115152        talloc_free(ndr);
     
    126163                "ndr pull failed");
    127164
    128         torture_assert(tctx, ndr->offset == ndr->data_size,
    129                 talloc_asprintf(tctx, "%d unread bytes", ndr->data_size - ndr->offset));
     165        if (ndr->offset > ndr->relative_highest_offset) {
     166                highest_ofs = ndr->offset;
     167        } else {
     168                highest_ofs = ndr->relative_highest_offset;
     169        }
     170
     171        torture_assert(tctx, highest_ofs == ndr->data_size,
     172                talloc_asprintf(tctx, "%d unread bytes", ndr->data_size - highest_ofs));
    130173
    131174        talloc_free(ndr);
  • trunk/server/source4/torture/ndr/ndr.h

    r918 r920  
    2525#include "libcli/security/security.h"
    2626
    27 _PUBLIC_ struct torture_test *_torture_suite_add_ndr_pull_test(
     27_PUBLIC_ struct torture_test *_torture_suite_add_ndr_pullpush_test(
    2828                                        struct torture_suite *suite,
    29                                         const char *name, ndr_pull_flags_fn_t fn,
     29                                        const char *name,
     30                                        ndr_pull_flags_fn_t pull_fn,
     31                                        ndr_push_flags_fn_t push_fn,
    3032                                        DATA_BLOB db,
    3133                                        size_t struct_size,
    3234                                        int ndr_flags,
     35                                        int flags,
    3336                                        bool (*check_fn) (struct torture_context *, void *data));
    3437
     
    4245
    4346#define torture_suite_add_ndr_pull_test(suite,name,data,check_fn) \
    44                 _torture_suite_add_ndr_pull_test(suite, #name, \
    45                          (ndr_pull_flags_fn_t)ndr_pull_ ## name, data_blob_talloc(suite, data, sizeof(data)), \
    46                          sizeof(struct name), NDR_SCALARS|NDR_BUFFERS, (bool (*) (struct torture_context *, void *)) check_fn);
     47                _torture_suite_add_ndr_pullpush_test(suite, #name, \
     48                         (ndr_pull_flags_fn_t)ndr_pull_ ## name, NULL, data_blob_const(data, sizeof(data)), \
     49                         sizeof(struct name), NDR_SCALARS|NDR_BUFFERS, 0, (bool (*) (struct torture_context *, void *)) check_fn);
    4750
    4851#define torture_suite_add_ndr_pull_fn_test(suite,name,data,flags,check_fn) \
    49                 _torture_suite_add_ndr_pull_test(suite, #name "_" #flags, \
    50                          (ndr_pull_flags_fn_t)ndr_pull_ ## name, data_blob_talloc(suite, data, sizeof(data)), \
    51                          sizeof(struct name), flags, (bool (*) (struct torture_context *, void *)) check_fn);
     52                _torture_suite_add_ndr_pullpush_test(suite, #name "_" #flags, \
     53                         (ndr_pull_flags_fn_t)ndr_pull_ ## name, NULL, data_blob_const(data, sizeof(data)), \
     54                         sizeof(struct name), flags, 0, (bool (*) (struct torture_context *, void *)) check_fn);
     55
     56#define torture_suite_add_ndr_pull_fn_test_flags(suite,name,data,flags,flags2,check_fn) \
     57                _torture_suite_add_ndr_pullpush_test(suite, #name "_" #flags "_" #flags2, \
     58                         (ndr_pull_flags_fn_t)ndr_pull_ ## name, NULL, data_blob_const(data, sizeof(data)), \
     59                         sizeof(struct name), flags, flags2, (bool (*) (struct torture_context *, void *)) check_fn);
     60
     61#define torture_suite_add_ndr_pullpush_test(suite,name,data_blob,check_fn) \
     62                _torture_suite_add_ndr_pullpush_test(suite, #name, \
     63                         (ndr_pull_flags_fn_t)ndr_pull_ ## name, \
     64                         (ndr_push_flags_fn_t)ndr_push_ ## name, \
     65                         data_blob, \
     66                         sizeof(struct name), NDR_SCALARS|NDR_BUFFERS, 0, (bool (*) (struct torture_context *, void *)) check_fn);
    5267
    5368#define torture_suite_add_ndr_pull_io_test(suite,name,data_in,data_out,check_fn_out) \
    5469                _torture_suite_add_ndr_pull_inout_test(suite, #name "_INOUT", \
    5570                         (ndr_pull_flags_fn_t)ndr_pull_ ## name, \
    56                          data_blob_talloc(suite, data_in, sizeof(data_in)), \
    57                          data_blob_talloc(suite, data_out, sizeof(data_out)), \
     71                         data_blob_const(data_in, sizeof(data_in)), \
     72                         data_blob_const(data_out, sizeof(data_out)), \
    5873                         sizeof(struct name), \
    5974                         (bool (*) (struct torture_context *, void *)) check_fn_out);
  • trunk/server/source4/torture/ndr/ntlmssp.c

    r918 r920  
    112112        struct torture_suite *suite = torture_suite_create(ctx, "ntlmssp");
    113113
    114         torture_suite_add_ndr_pull_fn_test(suite, NEGOTIATE_MESSAGE, ntlmssp_NEGOTIATE_MESSAGE_data, NDR_IN, ntlmssp_NEGOTIATE_MESSAGE_check);
    115         /* torture_suite_add_ndr_pull_fn_test(suite, CHALLENGE_MESSAGE, ntlmssp_CHALLENGE_MESSAGE_data, NDR_IN, ntlmssp_CHALLENGE_MESSAGE_check);
    116         torture_suite_add_ndr_pull_fn_test(suite, AUTHENTICATE_MESSAGE, ntlmssp_AUTHENTICATE_MESSAGE_data, NDR_IN, ntlmssp_AUTHENTICATE_MESSAGE_check); */
    117 
     114        torture_suite_add_ndr_pull_test(suite, NEGOTIATE_MESSAGE, ntlmssp_NEGOTIATE_MESSAGE_data, ntlmssp_NEGOTIATE_MESSAGE_check);
     115#if 0
     116        torture_suite_add_ndr_pull_test(suite, CHALLENGE_MESSAGE, ntlmssp_CHALLENGE_MESSAGE_data, ntlmssp_CHALLENGE_MESSAGE_check);
     117        torture_suite_add_ndr_pull_test(suite, AUTHENTICATE_MESSAGE, ntlmssp_AUTHENTICATE_MESSAGE_data, ntlmssp_AUTHENTICATE_MESSAGE_check);
     118#endif
    118119        return suite;
    119120}
Note: See TracChangeset for help on using the changeset viewer.