Ignore:
Timestamp:
Apr 9, 2010, 3:51:41 PM (15 years ago)
Author:
Silvan Scherrer
Message:

Samba 3.5.x: trunk update to 3.5.2

Location:
trunk/server
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/server

  • trunk/server/source4/torture/rpc/spoolss.c

    r414 r429  
    2929#include "librpc/gen_ndr/ndr_spoolss_c.h"
    3030#include "param/param.h"
     31#include "lib/registry/registry.h"
    3132
    3233#define TORTURE_WELLKNOWN_PRINTER       "torture_wkn_printer"
     
    119120
    120121#define CHECK_NEEDED_SIZE_ENUM_LEVEL(fn, info, level, count, ic, needed, align) do { \
     122        if (torture_setting_bool(tctx, "spoolss_check_size", false)) {\
    121123        uint32_t size = ndr_size_##fn##_info(tctx, ic, level, count, info);\
    122124        uint32_t round_size = DO_ROUND(size, align);\
     
    125127                CHECK_ALIGN(size, align);\
    126128        }\
     129        }\
    127130} while(0)
    128131
    129132#define CHECK_NEEDED_SIZE_ENUM(fn, info, count, ic, needed, align) do { \
     133        if (torture_setting_bool(tctx, "spoolss_check_size", false)) {\
    130134        uint32_t size = ndr_size_##fn##_info(tctx, ic, count, info);\
    131135        uint32_t round_size = DO_ROUND(size, align);\
     
    134138                CHECK_ALIGN(size, align);\
    135139        }\
     140        }\
    136141} while(0)
    137142
    138143#define CHECK_NEEDED_SIZE_LEVEL(fn, info, level, ic, needed, align) do { \
     144        if (torture_setting_bool(tctx, "spoolss_check_size", false)) {\
    139145        uint32_t size = ndr_size_##fn(info, level, ic, 0);\
    140146        uint32_t round_size = DO_ROUND(size, align);\
     
    142148                torture_warning(tctx, __location__": "#fn" level %d got unexpected needed size: %d, we calculated: %d", level, needed, round_size);\
    143149                CHECK_ALIGN(size, align);\
     150        }\
    144151        }\
    145152} while(0)
     
    21862193                                const char *value_name,
    21872194                                enum winreg_Type *type_p,
    2188                                 union spoolss_PrinterData *data_p)
     2195                                uint8_t **data_p,
     2196                                uint32_t *needed_p)
    21892197{
    21902198        NTSTATUS status;
     
    21992207        r.out.needed = &needed;
    22002208        r.out.type = &type;
    2201         r.out.data = &data;
     2209        r.out.data = talloc_zero_array(tctx, uint8_t, r.in.offered);
    22022210
    22032211        torture_comment(tctx, "Testing GetPrinterData(%s)\n", r.in.value_name);
     
    22082216        if (W_ERROR_EQUAL(r.out.result, WERR_MORE_DATA)) {
    22092217                r.in.offered = needed;
    2210 
     2218                r.out.data = talloc_zero_array(tctx, uint8_t, r.in.offered);
    22112219                status = dcerpc_spoolss_GetPrinterData(p, tctx, &r);
    22122220                torture_assert_ntstatus_ok(tctx, status, "GetPrinterData failed");
     
    22232231
    22242232        if (data_p) {
    2225                 *data_p = data;
     2233                *data_p = r.out.data;
     2234        }
     2235
     2236        if (needed_p) {
     2237                *needed_p = needed;
    22262238        }
    22272239
     
    22352247                                  const char *value_name,
    22362248                                  enum winreg_Type *type_p,
    2237                                   union spoolss_PrinterData *data_p)
     2249                                  uint8_t **data_p,
     2250                                  uint32_t *needed_p)
    22382251{
    22392252        NTSTATUS status;
     
    22492262        r.out.type = &type;
    22502263        r.out.needed = &needed;
    2251         r.out.data = &data;
     2264        r.out.data = talloc_zero_array(tctx, uint8_t, r.in.offered);
    22522265
    22532266        torture_comment(tctx, "Testing GetPrinterDataEx(%s - %s)\n",
     
    22652278        if (W_ERROR_EQUAL(r.out.result, WERR_MORE_DATA)) {
    22662279                r.in.offered = needed;
     2280                r.out.data = talloc_zero_array(tctx, uint8_t, r.in.offered);
    22672281                status = dcerpc_spoolss_GetPrinterDataEx(p, tctx, &r);
    22682282                torture_assert_ntstatus_ok(tctx, status, "GetPrinterDataEx failed");
     
    22792293
    22802294        if (data_p) {
    2281                 *data_p = data;
     2295                *data_p = r.out.data;
     2296        }
     2297
     2298        if (needed_p) {
     2299                *needed_p = needed;
    22822300        }
    22832301
     
    23082326        for (i=0; i < ARRAY_SIZE(list); i++) {
    23092327                enum winreg_Type type, type_ex;
    2310                 union spoolss_PrinterData data, data_ex;
    2311 
    2312                 torture_assert(tctx, test_GetPrinterData(tctx, p, handle, list[i], &type, &data),
     2328                uint8_t *data, *data_ex;
     2329                uint32_t needed, needed_ex;
     2330
     2331                torture_assert(tctx, test_GetPrinterData(tctx, p, handle, list[i], &type, &data, &needed),
    23132332                        talloc_asprintf(tctx, "GetPrinterData failed on %s\n", list[i]));
    2314                 torture_assert(tctx, test_GetPrinterDataEx(tctx, p, handle, "random_string", list[i], &type_ex, &data_ex),
     2333                torture_assert(tctx, test_GetPrinterDataEx(tctx, p, handle, "random_string", list[i], &type_ex, &data_ex, &needed_ex),
    23152334                        talloc_asprintf(tctx, "GetPrinterDataEx failed on %s\n", list[i]));
    23162335                torture_assert_int_equal(tctx, type, type_ex, "type mismatch");
    2317                 switch (type) {
    2318                 case REG_SZ:
    2319                         torture_assert_str_equal(tctx, data.string, data_ex.string, "REG_SZ mismatch");
    2320                         break;
    2321                 case REG_DWORD:
    2322                         torture_assert_int_equal(tctx, data.value, data_ex.value, "REG_DWORD mismatch");
    2323                         break;
    2324                 case REG_BINARY:
    2325                         torture_assert_data_blob_equal(tctx, data.binary, data_ex.binary, "REG_BINARY mismatch");
    2326                         break;
    2327                 default:
    2328                         break;
    2329                 }
     2336                torture_assert_int_equal(tctx, needed, needed_ex, "needed mismatch");
     2337                torture_assert_mem_equal(tctx, data, data_ex, needed, "data mismatch");
    23302338        }
    23312339
     
    23802388                torture_assert_werr_ok(tctx, r.out.result, "EnumPrinterData failed");
    23812389
    2382                 torture_assert(tctx, test_GetPrinterData(tctx, p, handle, r.out.value_name, NULL, NULL),
     2390                torture_assert(tctx, test_GetPrinterData(tctx, p, handle, r.out.value_name, NULL, NULL, NULL),
    23832391                        talloc_asprintf(tctx, "failed to call GetPrinterData for %s\n", r.out.value_name));
    23842392
    2385                 torture_assert(tctx, test_GetPrinterDataEx(tctx, p, handle, "PrinterDriverData", r.out.value_name, NULL, NULL),
     2393                torture_assert(tctx, test_GetPrinterDataEx(tctx, p, handle, "PrinterDriverData", r.out.value_name, NULL, NULL, NULL),
    23862394                        talloc_asprintf(tctx, "failed to call GetPrinterDataEx on PrinterDriverData for %s\n", r.out.value_name));
    23872395
     
    25262534
    25272535                enum winreg_Type type;
    2528                 union spoolss_PrinterData data;
     2536                uint8_t *data;
     2537                DATA_BLOB blob;
     2538                uint32_t needed;
     2539
     2540                torture_assert(tctx,
     2541                        reg_string_to_val(tctx, lp_iconv_convenience(tctx->lp_ctx),
     2542                                          "REG_SZ", "dog", &r.in.type, &blob), "");
    25292543
    25302544                r.in.handle = handle;
    25312545                r.in.value_name = values[i];
    25322546                r.in.type = REG_SZ;
    2533                 r.in.data.string = "dog";
     2547                r.in.data = blob.data;
     2548                r.in.offered = blob.length;
    25342549
    25352550                torture_comment(tctx, "Testing SetPrinterData(%s)\n",
     
    25412556                torture_assert_werr_ok(tctx, r.out.result, "SetPrinterData failed");
    25422557
    2543                 if (!test_GetPrinterData(tctx, p, handle, r.in.value_name, &type, &data)) {
     2558                if (!test_GetPrinterData(tctx, p, handle, r.in.value_name, &type, &data, &needed)) {
    25442559                        return false;
    25452560                }
    25462561
    25472562                torture_assert_int_equal(tctx, r.in.type, type, "type mismatch");
    2548                 torture_assert_str_equal(tctx, r.in.data.string, data.string, "data mismatch");
     2563                torture_assert_int_equal(tctx, r.in.offered, needed, "size mismatch");
     2564                torture_assert_mem_equal(tctx, blob.data, data, needed, "buffer mismatch");
    25492565
    25502566                if (!test_DeletePrinterData(tctx, p, handle, r.in.value_name)) {
     
    26002616                enum winreg_Type type;
    26012617                const char **subkeys;
    2602                 union spoolss_PrinterData data;
     2618                uint8_t *data_out;
     2619                uint32_t needed;
    26032620
    26042621                r.in.handle = handle;
     
    26062623                r.in.value_name = value_name;
    26072624                r.in.type = REG_BINARY;
    2608                 r.in.data.binary = blob;
     2625                r.in.data = blob.data;
     2626                r.in.offered = blob.length;
    26092627
    26102628                torture_comment(tctx, "Testing SetPrinterDataEx(%s - %s)\n", r.in.key_name, value_name);
     
    26152633                torture_assert_werr_ok(tctx, r.out.result, "SetPrinterDataEx failed");
    26162634
    2617                 key = talloc_strdup(tctx, r.in.key_name);
    2618 
    2619                 if (!test_GetPrinterDataEx(tctx, p, handle, r.in.key_name, value_name, &type, &data)) {
     2635                if (!test_GetPrinterDataEx(tctx, p, handle, keys[i], value_name, &type, &data_out, &needed)) {
    26202636                        return false;
    26212637                }
    26222638
    2623                 torture_assert_int_equal(tctx, r.in.type, type, "type mismatch");
    2624                 torture_assert_data_blob_equal(tctx, blob, data.binary, "data mismatch");
     2639                torture_assert_int_equal(tctx, type, REG_BINARY, "type mismatch");
     2640                torture_assert_int_equal(tctx, needed, blob.length, "size mismatch");
     2641                torture_assert_mem_equal(tctx, data_out, blob.data, blob.length, "buffer mismatch");
     2642
     2643                key = talloc_strdup(tctx, keys[i]);
    26252644
    26262645                if (!test_EnumPrinterDataEx(tctx, p, handle, r.in.key_name)) {
     
    26732692{
    26742693        enum winreg_Type type;
    2675         union spoolss_PrinterData data;
     2694        uint8_t *data;
     2695        uint32_t needed;
    26762696
    26772697        torture_assert(tctx,
    2678                 test_GetPrinterData(tctx, p, handle, "ChangeID", &type, &data),
     2698                test_GetPrinterData(tctx, p, handle, "ChangeID", &type, &data, &needed),
    26792699                "failed to call GetPrinterData");
    26802700
    26812701        torture_assert(tctx, type == REG_DWORD, "unexpected type");
    2682 
    2683         *change_id = data.value;
     2702        torture_assert_int_equal(tctx, needed, 4, "unexpected size");
     2703
     2704        *change_id = IVAL(data, 0);
    26842705
    26852706        return true;
     
    26922713{
    26932714        enum winreg_Type type;
    2694         union spoolss_PrinterData data;
     2715        uint8_t *data;
     2716        uint32_t needed;
    26952717
    26962718        torture_assert(tctx,
    2697                 test_GetPrinterDataEx(tctx, p, handle, "PrinterDriverData", "ChangeID", &type, &data),
     2719                test_GetPrinterDataEx(tctx, p, handle, "PrinterDriverData", "ChangeID", &type, &data, &needed),
    26982720                "failed to call GetPrinterData");
    26992721
    27002722        torture_assert(tctx, type == REG_DWORD, "unexpected type");
    2701 
    2702         *change_id = data.value;
     2723        torture_assert_int_equal(tctx, needed, 4, "unexpected size");
     2724
     2725        *change_id = IVAL(data, 0);
    27032726
    27042727        return true;
  • trunk/server/source4/torture/rpc/spoolss_win.c

    r414 r429  
    161161        uint32_t needed;
    162162        enum winreg_Type type;
    163         union spoolss_PrinterData data;
     163        uint8_t *data = talloc_zero_array(tctx, uint8_t, 4);
    164164
    165165        torture_comment(tctx, "Testing GetPrinterData(%s).\n", value_name);
     
    169169        gpd.out.needed = &needed;
    170170        gpd.out.type = &type;
    171         gpd.out.data = &data;
     171        gpd.out.data = data;
    172172
    173173        status = dcerpc_spoolss_GetPrinterData(p, tctx, &gpd);
     
    177177
    178178        if (W_ERROR_IS_OK(expected_werr)) {
    179                 torture_assert_int_equal(tctx, data.value,
     179                uint32_t value = IVAL(data, 0);
     180                torture_assert_int_equal(tctx, value,
    180181                        expected_value,
    181182                        talloc_asprintf(tctx, "GetPrinterData for %s did not return expected value.", value_name));
Note: See TracChangeset for help on using the changeset viewer.