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/librpc/ndr/ndr_spoolss_buf.c

    r414 r429  
    558558}
    559559
    560 /*
    561   spoolss_GetPrinterData
    562 */
    563 enum ndr_err_code ndr_push_spoolss_GetPrinterData(struct ndr_push *ndr, int flags, const struct spoolss_GetPrinterData *r)
    564 {
    565         struct _spoolss_GetPrinterData _r;
    566         if (flags & NDR_IN) {
    567                 _r.in.handle    = r->in.handle;
    568                 _r.in.value_name= r->in.value_name;
    569                 _r.in.offered   = r->in.offered;
    570                 NDR_CHECK(ndr_push__spoolss_GetPrinterData(ndr, flags, &_r));
    571         }
    572         if (flags & NDR_OUT) {
    573                 struct ndr_push *_ndr_info;
    574                 DATA_BLOB blob = data_blob(NULL, 0);
    575                 _r.in.handle    = r->in.handle;
    576                 _r.in.value_name= r->in.value_name;
    577                 _r.in.offered   = r->in.offered;
    578                 _r.out.type     = r->out.type;
    579                 _r.out.data     = &blob;
    580                 _r.out.needed   = r->out.needed;
    581                 _r.out.result   = r->out.result;
    582                 {
    583                         struct __spoolss_GetPrinterData __r;
    584                         DATA_BLOB _blob;
    585                         _ndr_info = ndr_push_init_ctx(ndr, ndr->iconv_convenience);
    586                         NDR_ERR_HAVE_NO_MEMORY(_ndr_info);
    587                         _ndr_info->flags= ndr->flags;
    588                         __r.in.type     = *r->out.type;
    589                         __r.out.data    = r->out.data;
    590                         NDR_CHECK(ndr_push___spoolss_GetPrinterData(_ndr_info, flags, &__r));
    591                         if (r->in.offered > _ndr_info->offset) {
    592                                 uint32_t _padding_len = r->in.offered - _ndr_info->offset;
    593                                 NDR_CHECK(ndr_push_zero(_ndr_info, _padding_len));
    594                         }
    595                         _blob = ndr_push_blob(_ndr_info);
    596                         _r.out.data = &_blob;
    597                 }
    598                 NDR_CHECK(ndr_push__spoolss_GetPrinterData(ndr, flags, &_r));
    599         }
    600         return NDR_ERR_SUCCESS;
    601 }
    602 
    603 enum ndr_err_code ndr_pull_spoolss_GetPrinterData(struct ndr_pull *ndr, int flags, struct spoolss_GetPrinterData *r)
    604 {
    605         struct _spoolss_GetPrinterData _r;
    606         if (flags & NDR_IN) {
    607                 DATA_BLOB blob = data_blob(NULL,0);
    608                 ZERO_STRUCT(r->out);
    609 
    610                 _r.in.handle    = r->in.handle;
    611                 _r.in.value_name= r->in.value_name;
    612                 _r.in.offered   = r->in.offered;
    613                 _r.out.type     = r->out.type;
    614                 _r.out.data     = &blob;
    615                 _r.out.needed   = r->out.needed;
    616                 NDR_CHECK(ndr_pull__spoolss_GetPrinterData(ndr, flags, &_r));
    617                 r->in.handle    = _r.in.handle;
    618                 r->in.value_name= _r.in.value_name;
    619                 r->in.offered   = _r.in.offered;
    620                 r->out.needed   = _r.out.needed;
    621         }
    622         if (flags & NDR_OUT) {
    623                 DATA_BLOB blob = data_blob_talloc(ndr,NULL,0);
    624                 _r.in.handle    = r->in.handle;
    625                 _r.in.value_name= r->in.value_name;
    626                 _r.in.offered   = r->in.offered;
    627                 _r.out.type     = r->out.type;
    628                 _r.out.data     = &blob;
    629                 _r.out.needed   = r->out.needed;
    630                 _r.out.result   = r->out.result;
    631                 NDR_CHECK(ndr_pull__spoolss_GetPrinterData(ndr, flags, &_r));
    632                 r->out.type     = _r.out.type;
    633                 if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
    634                         NDR_PULL_ALLOC(ndr, r->out.data);
    635                 }
    636                 ZERO_STRUCTP(r->out.data);
    637                 r->out.needed   = _r.out.needed;
    638                 r->out.result   = _r.out.result;
    639                 if (_r.out.data && _r.out.data->length != r->in.offered) {
    640                         return ndr_pull_error(ndr, NDR_ERR_BUFSIZE,
    641                                 "SPOOLSS Buffer: r->in.offered[%u] doesn't match length of out buffer[%u]",
    642                                 (unsigned)r->in.offered, (unsigned)_r.out.data->length);
    643                 }
    644                 if (_r.out.data && _r.out.data->length > 0 && *r->out.needed <= _r.out.data->length) {
    645                         struct __spoolss_GetPrinterData __r;
    646                         struct ndr_pull *_ndr_data = ndr_pull_init_blob(_r.out.data, ndr, ndr->iconv_convenience);
    647                         NDR_ERR_HAVE_NO_MEMORY(_ndr_data);
    648                         _ndr_data->flags= ndr->flags;
    649                         __r.in.type     = *r->out.type;
    650                         __r.out.data    = r->out.data;
    651                         NDR_CHECK(ndr_pull___spoolss_GetPrinterData(_ndr_data, flags, &__r));
    652                         r->out.data     = __r.out.data;
    653                 } else {
    654                         *r->out.type    = REG_NONE;
    655                 }
    656         }
    657         return NDR_ERR_SUCCESS;
    658 }
    659 
    660 /*
    661   spoolss_SetPrinterData
    662 */
    663 enum ndr_err_code ndr_push_spoolss_SetPrinterData(struct ndr_push *ndr, int flags, const struct spoolss_SetPrinterData *r)
    664 {
    665         struct _spoolss_SetPrinterData _r;
    666         if (flags & NDR_IN) {
    667                 struct ndr_push *_ndr_data;
    668                 struct __spoolss_SetPrinterData __r;
    669                 DATA_BLOB _data_blob_data;
    670 
    671                 _ndr_data = ndr_push_init_ctx(ndr, ndr->iconv_convenience);
    672                 NDR_ERR_HAVE_NO_MEMORY(_ndr_data);
    673                 _ndr_data->flags= ndr->flags;
    674 
    675                 __r.in.type     = r->in.type;
    676                 __r.out.data    = discard_const_p(union spoolss_PrinterData, &r->in.data);
    677                 NDR_CHECK(ndr_push___spoolss_SetPrinterData(_ndr_data, NDR_OUT, &__r));
    678                 _data_blob_data = ndr_push_blob(_ndr_data);
    679 
    680                 _r.in.handle    = r->in.handle;
    681                 _r.in.value_name= r->in.value_name;
    682                 _r.in.type      = r->in.type;
    683                 _r.in.data      = _data_blob_data;
    684                 _r.in._offered  = _data_blob_data.length;
    685                 _r.out.result   = r->out.result;
    686                 NDR_CHECK(ndr_push__spoolss_SetPrinterData(ndr, flags, &_r));
    687         }
    688         if (flags & NDR_OUT) {
    689                 _r.in.handle    = r->in.handle;
    690                 _r.in.value_name= r->in.value_name;
    691                 _r.in.type      = r->in.type;
    692                 _r.in.data      = data_blob(NULL,0),
    693                 _r.in._offered  = r->in._offered;
    694                 _r.out.result   = r->out.result;
    695                 NDR_CHECK(ndr_push__spoolss_SetPrinterData(ndr, flags, &_r));
    696         }
    697         return NDR_ERR_SUCCESS;
    698 }
    699 
    700 /*
    701   spoolss_GetPrinterDataEx
    702 */
    703 enum ndr_err_code ndr_push_spoolss_GetPrinterDataEx(struct ndr_push *ndr, int flags, const struct spoolss_GetPrinterDataEx *r)
    704 {
    705         struct _spoolss_GetPrinterDataEx _r;
    706         if (flags & NDR_IN) {
    707                 _r.in.handle    = r->in.handle;
    708                 _r.in.key_name  = r->in.key_name;
    709                 _r.in.value_name= r->in.value_name;
    710                 _r.in.offered   = r->in.offered;
    711                 NDR_CHECK(ndr_push__spoolss_GetPrinterDataEx(ndr, flags, &_r));
    712         }
    713         if (flags & NDR_OUT) {
    714                 struct ndr_push *_ndr_info;
    715                 DATA_BLOB blob = data_blob(NULL, 0);
    716                 _r.in.handle    = r->in.handle;
    717                 _r.in.key_name  = r->in.key_name;
    718                 _r.in.value_name= r->in.value_name;
    719                 _r.in.offered   = r->in.offered;
    720                 _r.out.type     = r->out.type;
    721                 _r.out.data     = &blob;
    722                 _r.out.needed   = r->out.needed;
    723                 _r.out.result   = r->out.result;
    724                 {
    725                         struct __spoolss_GetPrinterDataEx __r;
    726                         DATA_BLOB _blob;
    727                         _ndr_info = ndr_push_init_ctx(ndr, ndr->iconv_convenience);
    728                         NDR_ERR_HAVE_NO_MEMORY(_ndr_info);
    729                         _ndr_info->flags= ndr->flags;
    730                         __r.in.type     = *r->out.type;
    731                         __r.out.data    = r->out.data;
    732                         NDR_CHECK(ndr_push___spoolss_GetPrinterDataEx(_ndr_info, flags, &__r));
    733                         if (r->in.offered > _ndr_info->offset) {
    734                                 uint32_t _padding_len = r->in.offered - _ndr_info->offset;
    735                                 NDR_CHECK(ndr_push_zero(_ndr_info, _padding_len));
    736                         }
    737                         _blob = ndr_push_blob(_ndr_info);
    738                         _r.out.data = &_blob;
    739                 }
    740                 NDR_CHECK(ndr_push__spoolss_GetPrinterDataEx(ndr, flags, &_r));
    741         }
    742         return NDR_ERR_SUCCESS;
    743 }
    744 
    745 enum ndr_err_code ndr_pull_spoolss_GetPrinterDataEx(struct ndr_pull *ndr, int flags, struct spoolss_GetPrinterDataEx *r)
    746 {
    747         struct _spoolss_GetPrinterDataEx _r;
    748         if (flags & NDR_IN) {
    749                 DATA_BLOB blob = data_blob(NULL,0);
    750                 ZERO_STRUCT(r->out);
    751 
    752                 _r.in.handle    = r->in.handle;
    753                 _r.in.key_name  = r->in.key_name;
    754                 _r.in.value_name= r->in.value_name;
    755                 _r.in.offered   = r->in.offered;
    756                 _r.out.type     = r->out.type;
    757                 _r.out.data     = &blob;
    758                 _r.out.needed   = r->out.needed;
    759                 NDR_CHECK(ndr_pull__spoolss_GetPrinterDataEx(ndr, flags, &_r));
    760                 r->in.handle    = _r.in.handle;
    761                 r->in.key_name  = _r.in.key_name;
    762                 r->in.value_name= _r.in.value_name;
    763                 r->in.offered   = _r.in.offered;
    764                 r->out.needed   = _r.out.needed;
    765         }
    766         if (flags & NDR_OUT) {
    767                 DATA_BLOB blob = data_blob_talloc(ndr,NULL,0);
    768                 _r.in.handle    = r->in.handle;
    769                 _r.in.key_name  = r->in.key_name;
    770                 _r.in.value_name= r->in.value_name;
    771                 _r.in.offered   = r->in.offered;
    772                 _r.out.type     = r->out.type;
    773                 _r.out.data     = &blob;
    774                 _r.out.needed   = r->out.needed;
    775                 _r.out.result   = r->out.result;
    776                 NDR_CHECK(ndr_pull__spoolss_GetPrinterDataEx(ndr, flags, &_r));
    777                 r->out.type     = _r.out.type;
    778                 if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
    779                         NDR_PULL_ALLOC(ndr, r->out.data);
    780                 }
    781                 ZERO_STRUCTP(r->out.data);
    782                 r->out.needed   = _r.out.needed;
    783                 r->out.result   = _r.out.result;
    784                 if (_r.out.data && _r.out.data->length != r->in.offered) {
    785                         return ndr_pull_error(ndr, NDR_ERR_BUFSIZE,
    786                                 "SPOOLSS Buffer: r->in.offered[%u] doesn't match length of out buffer[%u]",
    787                                 (unsigned)r->in.offered, (unsigned)_r.out.data->length);
    788                 }
    789                 if (_r.out.data && _r.out.data->length > 0 && *r->out.needed <= _r.out.data->length) {
    790                         struct __spoolss_GetPrinterDataEx __r;
    791                         struct ndr_pull *_ndr_data = ndr_pull_init_blob(_r.out.data, ndr, ndr->iconv_convenience);
    792                         NDR_ERR_HAVE_NO_MEMORY(_ndr_data);
    793                         _ndr_data->flags= ndr->flags;
    794                         __r.in.type     = *r->out.type;
    795                         __r.out.data    = r->out.data;
    796                         NDR_CHECK(ndr_pull___spoolss_GetPrinterDataEx(_ndr_data, flags, &__r));
    797                         r->out.data     = __r.out.data;
    798                 } else {
    799                         *r->out.type    = REG_NONE;
    800                 }
    801         }
    802         return NDR_ERR_SUCCESS;
    803 }
    804 
    805 /*
    806   spoolss_SetPrinterDataEx
    807 */
    808 enum ndr_err_code ndr_push_spoolss_SetPrinterDataEx(struct ndr_push *ndr, int flags, const struct spoolss_SetPrinterDataEx *r)
    809 {
    810         struct _spoolss_SetPrinterDataEx _r;
    811         if (flags & NDR_IN) {
    812                 struct ndr_push *_ndr_data;
    813                 struct __spoolss_SetPrinterDataEx __r;
    814                 DATA_BLOB _data_blob_data;
    815 
    816                 _ndr_data = ndr_push_init_ctx(ndr, ndr->iconv_convenience);
    817                 NDR_ERR_HAVE_NO_MEMORY(_ndr_data);
    818                 _ndr_data->flags= ndr->flags;
    819 
    820                 __r.in.type     = r->in.type;
    821                 __r.out.data    = discard_const_p(union spoolss_PrinterData, &r->in.data);
    822                 NDR_CHECK(ndr_push___spoolss_SetPrinterDataEx(_ndr_data, NDR_OUT, &__r));
    823                 _data_blob_data = ndr_push_blob(_ndr_data);
    824 
    825                 _r.in.handle    = r->in.handle;
    826                 _r.in.key_name  = r->in.key_name;
    827                 _r.in.value_name= r->in.value_name;
    828                 _r.in.type      = r->in.type;
    829                 _r.in.data      = _data_blob_data;
    830                 _r.in._offered  = _data_blob_data.length;
    831                 _r.out.result   = r->out.result;
    832                 NDR_CHECK(ndr_push__spoolss_SetPrinterDataEx(ndr, flags, &_r));
    833         }
    834         if (flags & NDR_OUT) {
    835                 _r.in.handle    = r->in.handle;
    836                 _r.in.key_name  = r->in.key_name;
    837                 _r.in.value_name= r->in.value_name;
    838                 _r.in.type      = r->in.type;
    839                 _r.in.data      = data_blob(NULL,0),
    840                 _r.in._offered  = r->in._offered;
    841                 _r.out.result   = r->out.result;
    842                 NDR_CHECK(ndr_push__spoolss_SetPrinterDataEx(ndr, flags, &_r));
    843         }
    844         return NDR_ERR_SUCCESS;
    845 }
    846 
    847560uint32_t _ndr_size_spoolss_DeviceMode(struct spoolss_DeviceMode *devmode, struct smb_iconv_convenience *ic, uint32_t flags)
    848561{
  • trunk/server/librpc/ndr/ndr_spoolss_buf.h

    r414 r429  
    4343uint32_t ndr_size_spoolss_EnumPrinterDataEx_info(TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *iconv_convenience,
    4444                                                 uint32_t count, struct spoolss_PrinterEnumValues *info);
    45 enum ndr_err_code ndr_push_spoolss_GetPrinterData(struct ndr_push *ndr, int flags, const struct spoolss_GetPrinterData *r);
    46 enum ndr_err_code ndr_pull_spoolss_GetPrinterData(struct ndr_pull *ndr, int flags, struct spoolss_GetPrinterData *r);
    47 enum ndr_err_code ndr_push_spoolss_SetPrinterData(struct ndr_push *ndr, int flags, const struct spoolss_SetPrinterData *r);
    48 enum ndr_err_code ndr_push_spoolss_GetPrinterDataEx(struct ndr_push *ndr, int flags, const struct spoolss_GetPrinterDataEx *r);
    49 enum ndr_err_code ndr_pull_spoolss_GetPrinterDataEx(struct ndr_pull *ndr, int flags, struct spoolss_GetPrinterDataEx *r);
    50 enum ndr_err_code ndr_push_spoolss_SetPrinterDataEx(struct ndr_push *ndr, int flags, const struct spoolss_SetPrinterDataEx *r);
    5145uint32_t _ndr_size_spoolss_DeviceMode(struct spoolss_DeviceMode *devmode, struct smb_iconv_convenience *ic, uint32_t flags);
    5246size_t ndr_size_spoolss_StringArray(const struct spoolss_StringArray *r, struct smb_iconv_convenience *ic, int flags);
Note: See TracChangeset for help on using the changeset viewer.