diff options
Diffstat (limited to 'source4/librpc')
-rw-r--r-- | source4/librpc/config.mk | 36 | ||||
-rw-r--r-- | source4/librpc/ndr/ndr_spoolss_buf.c | 532 | ||||
-rw-r--r-- | source4/librpc/ndr/ndr_string.c | 23 | ||||
-rw-r--r-- | source4/librpc/ndr/py_security.c | 18 | ||||
-rw-r--r-- | source4/librpc/rpc/dcerpc.c | 4 | ||||
-rw-r--r-- | source4/librpc/rpc/dcerpc_connect.c | 4 | ||||
-rw-r--r-- | source4/librpc/rpc/dcerpc_smb.c | 16 | ||||
-rw-r--r-- | source4/librpc/rpc/dcerpc_sock.c | 14 | ||||
-rwxr-xr-x | source4/librpc/tests/test_ndrdump.sh | 4 |
9 files changed, 70 insertions, 581 deletions
diff --git a/source4/librpc/config.mk b/source4/librpc/config.mk index 5bbdfaf4d8..3e6ea313e7 100644 --- a/source4/librpc/config.mk +++ b/source4/librpc/config.mk @@ -180,9 +180,7 @@ NDR_SPOOLSS_OBJ_FILES = ../librpc/gen_ndr/ndr_spoolss.o [SUBSYSTEM::NDR_SPOOLSS_BUF] -NDR_SPOOLSS_BUF_OBJ_FILES = $(ndrsrcdir)/ndr_spoolss_buf.o - -$(eval $(call proto_header_template,$(ndrsrcdir)/ndr_spoolss_buf.h,$(NDR_SPOOLSS_BUF_OBJ_FILES:.o=.c))) +NDR_SPOOLSS_BUF_OBJ_FILES = ../librpc/ndr/ndr_spoolss_buf.o [SUBSYSTEM::NDR_WKSSVC] PUBLIC_DEPENDENCIES = LIBNDR NDR_SRVSVC NDR_SECURITY @@ -633,7 +631,7 @@ PUBLIC_HEADERS += $(addprefix $(librpcsrcdir)/, rpc/dcerpc.h) \ [PYTHON::python_dcerpc] LIBRARY_REALNAME = samba/dcerpc/base.$(SHLIBEXT) -PUBLIC_DEPENDENCIES = LIBCLI_SMB LIBSAMBA-UTIL LIBSAMBA-HOSTCONFIG dcerpc_samr RPC_NDR_LSA DYNCONFIG swig_credentials param +PUBLIC_DEPENDENCIES = LIBCLI_SMB LIBSAMBA-UTIL LIBSAMBA-HOSTCONFIG dcerpc_samr RPC_NDR_LSA DYNCONFIG pycredentials param python_dcerpc_OBJ_FILES = $(dcerpcsrcdir)/pyrpc.o @@ -642,13 +640,13 @@ $(eval $(call python_py_module_template,samba/dcerpc/__init__.py,$(dcerpcsrcdir) [PYTHON::python_echo] LIBRARY_REALNAME = samba/dcerpc/echo.$(SHLIBEXT) -PRIVATE_DEPENDENCIES = RPC_NDR_ECHO PYTALLOC param swig_credentials python_dcerpc +PRIVATE_DEPENDENCIES = RPC_NDR_ECHO PYTALLOC param pycredentials python_dcerpc python_echo_OBJ_FILES = ../librpc/gen_ndr/py_echo.o [PYTHON::python_winreg] LIBRARY_REALNAME = samba/dcerpc/winreg.$(SHLIBEXT) -PRIVATE_DEPENDENCIES = RPC_NDR_WINREG PYTALLOC param swig_credentials python_dcerpc +PRIVATE_DEPENDENCIES = RPC_NDR_WINREG PYTALLOC param pycredentials python_dcerpc python_winreg_OBJ_FILES = ../librpc/gen_ndr/py_winreg.o @@ -660,79 +658,79 @@ python_dcerpc_misc_OBJ_FILES = ../librpc/gen_ndr/py_misc.o [PYTHON::python_initshutdown] LIBRARY_REALNAME = samba/dcerpc/initshutdown.$(SHLIBEXT) -PRIVATE_DEPENDENCIES = RPC_NDR_INITSHUTDOWN PYTALLOC param swig_credentials python_dcerpc +PRIVATE_DEPENDENCIES = RPC_NDR_INITSHUTDOWN PYTALLOC param pycredentials python_dcerpc python_initshutdown_OBJ_FILES = ../librpc/gen_ndr/py_initshutdown.o [PYTHON::python_epmapper] LIBRARY_REALNAME = samba/dcerpc/epmapper.$(SHLIBEXT) -PRIVATE_DEPENDENCIES = dcerpc PYTALLOC param swig_credentials python_dcerpc +PRIVATE_DEPENDENCIES = dcerpc PYTALLOC param pycredentials python_dcerpc python_epmapper_OBJ_FILES = ../librpc/gen_ndr/py_epmapper.o [PYTHON::python_mgmt] LIBRARY_REALNAME = samba/dcerpc/mgmt.$(SHLIBEXT) -PRIVATE_DEPENDENCIES = PYTALLOC param swig_credentials dcerpc python_dcerpc +PRIVATE_DEPENDENCIES = PYTALLOC param pycredentials dcerpc python_dcerpc python_mgmt_OBJ_FILES = ../librpc/gen_ndr/py_mgmt.o [PYTHON::python_atsvc] LIBRARY_REALNAME = samba/dcerpc/atsvc.$(SHLIBEXT) -PRIVATE_DEPENDENCIES = dcerpc_atsvc PYTALLOC param swig_credentials python_dcerpc +PRIVATE_DEPENDENCIES = dcerpc_atsvc PYTALLOC param pycredentials python_dcerpc python_atsvc_OBJ_FILES = ../librpc/gen_ndr/py_atsvc.o [PYTHON::python_dcerpc_nbt] LIBRARY_REALNAME = samba/dcerpc/nbt.$(SHLIBEXT) -PRIVATE_DEPENDENCIES = NDR_NBT PYTALLOC param swig_credentials python_dcerpc +PRIVATE_DEPENDENCIES = NDR_NBT PYTALLOC param pycredentials python_dcerpc python_dcerpc_nbt_OBJ_FILES = ../librpc/gen_ndr/py_nbt.o [PYTHON::python_samr] LIBRARY_REALNAME = samba/dcerpc/samr.$(SHLIBEXT) -PRIVATE_DEPENDENCIES = dcerpc_samr PYTALLOC swig_credentials param python_dcerpc +PRIVATE_DEPENDENCIES = dcerpc_samr PYTALLOC pycredentials param python_dcerpc python_samr_OBJ_FILES = ../librpc/gen_ndr/py_samr.o [PYTHON::python_svcctl] LIBRARY_REALNAME = samba/dcerpc/svcctl.$(SHLIBEXT) -PRIVATE_DEPENDENCIES = RPC_NDR_SVCCTL PYTALLOC param swig_credentials python_dcerpc +PRIVATE_DEPENDENCIES = RPC_NDR_SVCCTL PYTALLOC param pycredentials python_dcerpc python_svcctl_OBJ_FILES = ../librpc/gen_ndr/py_svcctl.o [PYTHON::python_lsa] LIBRARY_REALNAME = samba/dcerpc/lsa.$(SHLIBEXT) -PRIVATE_DEPENDENCIES = RPC_NDR_LSA PYTALLOC param swig_credentials python_dcerpc +PRIVATE_DEPENDENCIES = RPC_NDR_LSA PYTALLOC param pycredentials python_dcerpc python_lsa_OBJ_FILES = ../librpc/gen_ndr/py_lsa.o [PYTHON::python_wkssvc] LIBRARY_REALNAME = samba/dcerpc/wkssvc.$(SHLIBEXT) -PRIVATE_DEPENDENCIES = RPC_NDR_WKSSVC PYTALLOC param swig_credentials python_dcerpc +PRIVATE_DEPENDENCIES = RPC_NDR_WKSSVC PYTALLOC param pycredentials python_dcerpc python_wkssvc_OBJ_FILES = ../librpc/gen_ndr/py_wkssvc.o [PYTHON::python_dfs] LIBRARY_REALNAME = samba/dcerpc/dfs.$(SHLIBEXT) -PRIVATE_DEPENDENCIES = RPC_NDR_DFS PYTALLOC param swig_credentials python_dcerpc +PRIVATE_DEPENDENCIES = RPC_NDR_DFS PYTALLOC param pycredentials python_dcerpc python_dfs_OBJ_FILES = ../librpc/gen_ndr/py_dfs.o [PYTHON::python_unixinfo] LIBRARY_REALNAME = samba/dcerpc/unixinfo.$(SHLIBEXT) -PRIVATE_DEPENDENCIES = RPC_NDR_UNIXINFO PYTALLOC param swig_credentials python_dcerpc +PRIVATE_DEPENDENCIES = RPC_NDR_UNIXINFO PYTALLOC param pycredentials python_dcerpc python_unixinfo_OBJ_FILES = ../librpc/gen_ndr/py_unixinfo.o [PYTHON::python_irpc] LIBRARY_REALNAME = samba/dcerpc/irpc.$(SHLIBEXT) -PRIVATE_DEPENDENCIES = RPC_NDR_IRPC PYTALLOC param swig_credentials python_dcerpc +PRIVATE_DEPENDENCIES = RPC_NDR_IRPC PYTALLOC param pycredentials python_dcerpc python_irpc_OBJ_FILES = $(gen_ndrsrcdir)/py_irpc.o [PYTHON::python_drsuapi] LIBRARY_REALNAME = samba/dcerpc/drsuapi.$(SHLIBEXT) -PRIVATE_DEPENDENCIES = RPC_NDR_DRSUAPI PYTALLOC param swig_credentials python_dcerpc +PRIVATE_DEPENDENCIES = RPC_NDR_DRSUAPI PYTALLOC param pycredentials python_dcerpc python_drsuapi_OBJ_FILES = ../librpc/gen_ndr/py_drsuapi.o diff --git a/source4/librpc/ndr/ndr_spoolss_buf.c b/source4/librpc/ndr/ndr_spoolss_buf.c deleted file mode 100644 index 335275f680..0000000000 --- a/source4/librpc/ndr/ndr_spoolss_buf.c +++ /dev/null @@ -1,532 +0,0 @@ -/* - Unix SMB/CIFS implementation. - - routines for marshalling/unmarshalling spoolss subcontext buffer structures - - Copyright (C) Andrew Tridgell 2003 - Copyright (C) Tim Potter 2003 - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. -*/ - - -#include "includes.h" -#include "librpc/gen_ndr/ndr_spoolss.h" -#include "param/param.h" - -#define NDR_SPOOLSS_PUSH_ENUM_IN(fn) do { \ - if (!r->in.buffer && r->in.offered != 0) {\ - return ndr_push_error(ndr, NDR_ERR_BUFSIZE,\ - "SPOOLSS Buffer: r->in.offered[%u] but there's no buffer",\ - (unsigned)r->in.offered);\ - } else if (r->in.buffer && r->in.buffer->length != r->in.offered) {\ - return ndr_push_error(ndr, NDR_ERR_BUFSIZE,\ - "SPOOLSS Buffer: r->in.offered[%u] doesn't match length of r->in.buffer[%u]",\ - (unsigned)r->in.offered, (unsigned)r->in.buffer->length);\ - }\ - _r.in.level = r->in.level;\ - _r.in.buffer = r->in.buffer;\ - _r.in.offered = r->in.offered;\ - NDR_CHECK(ndr_push__##fn(ndr, flags, &_r));\ -} while(0) - -#define NDR_SPOOLSS_PUSH_ENUM_OUT(fn) do { \ - struct ndr_push *_ndr_info;\ - _r.in.level = r->in.level;\ - _r.in.buffer = r->in.buffer;\ - _r.in.offered = r->in.offered;\ - _r.out.info = NULL;\ - _r.out.needed = r->out.needed;\ - _r.out.count = r->out.count;\ - _r.out.result = r->out.result;\ - if (r->out.info && !r->in.buffer) {\ - return ndr_push_error(ndr, NDR_ERR_BUFSIZE,\ - "SPOOLSS Buffer: r->out.info but there's no r->in.buffer");\ - }\ - if (r->in.buffer) {\ - DATA_BLOB _data_blob_info;\ - _ndr_info = ndr_push_init_ctx(ndr, ndr->iconv_convenience);\ - NDR_ERR_HAVE_NO_MEMORY(_ndr_info);\ - _ndr_info->flags= ndr->flags;\ - if (r->out.info) {\ - struct __##fn __r;\ - __r.in.level = r->in.level;\ - __r.in.count = r->out.count;\ - __r.out.info = r->out.info;\ - NDR_CHECK(ndr_push___##fn(_ndr_info, flags, &__r)); \ - }\ - if (r->in.offered > _ndr_info->offset) {\ - uint32_t _padding_len = r->in.offered - _ndr_info->offset;\ - NDR_CHECK(ndr_push_zero(_ndr_info, _padding_len));\ - } else if (r->in.offered < _ndr_info->offset) {\ - return ndr_push_error(ndr, NDR_ERR_BUFSIZE,\ - "SPOOLSS Buffer: r->in.offered[%u] doesn't match length of out buffer[%u]!",\ - (unsigned)r->in.offered, (unsigned)_ndr_info->offset);\ - }\ - _data_blob_info = ndr_push_blob(_ndr_info);\ - _r.out.info = &_data_blob_info;\ - }\ - NDR_CHECK(ndr_push__##fn(ndr, flags, &_r));\ -} while(0) - -#define NDR_SPOOLSS_PUSH_ENUM(fn,in,out) do { \ - struct _##fn _r;\ - if (flags & NDR_IN) {\ - in;\ - NDR_SPOOLSS_PUSH_ENUM_IN(fn);\ - }\ - if (flags & NDR_OUT) {\ - out;\ - NDR_SPOOLSS_PUSH_ENUM_OUT(fn);\ - }\ -} while(0) - -#define NDR_SPOOLSS_PULL_ENUM_IN(fn) do { \ - ZERO_STRUCT(r->out);\ - NDR_CHECK(ndr_pull__##fn(ndr, flags, &_r));\ - r->in.level = _r.in.level;\ - r->in.buffer = _r.in.buffer;\ - r->in.offered = _r.in.offered;\ - r->out.needed = _r.out.needed;\ - if (!r->in.buffer && r->in.offered != 0) {\ - return ndr_pull_error(ndr, NDR_ERR_BUFSIZE,\ - "SPOOLSS Buffer: r->in.offered[%u] but there's no buffer",\ - (unsigned)r->in.offered);\ - } else if (r->in.buffer && r->in.buffer->length != r->in.offered) {\ - return ndr_pull_error(ndr, NDR_ERR_BUFSIZE,\ - "SPOOLSS Buffer: r->in.offered[%u] doesn't match length of r->in.buffer[%u]",\ - (unsigned)r->in.offered, (unsigned)r->in.buffer->length);\ - }\ -} while(0) - -#define NDR_SPOOLSS_PULL_ENUM_OUT(fn) do { \ - _r.in.level = r->in.level;\ - _r.in.buffer = r->in.buffer;\ - _r.in.offered = r->in.offered;\ - _r.out.needed = r->out.needed;\ - NDR_CHECK(ndr_pull__##fn(ndr, flags, &_r));\ - r->out.info = NULL;\ - r->out.needed = _r.out.needed;\ - r->out.count = _r.out.count;\ - r->out.result = _r.out.result;\ - if (_r.out.info) {\ - struct ndr_pull *_ndr_info = ndr_pull_init_blob(_r.out.info, ndr, ndr->iconv_convenience);\ - NDR_ERR_HAVE_NO_MEMORY(_ndr_info);\ - _ndr_info->flags= ndr->flags;\ - if (r->in.offered != _ndr_info->data_size) {\ - return ndr_pull_error(ndr, NDR_ERR_BUFSIZE,\ - "SPOOLSS Buffer: offered[%u] doesn't match length of buffer[%u]",\ - (unsigned)r->in.offered, (unsigned)_ndr_info->data_size);\ - }\ - if (r->out.needed <= _ndr_info->data_size) {\ - struct __##fn __r;\ - __r.in.level = r->in.level;\ - __r.in.count = r->out.count;\ - __r.out.info = NULL;\ - NDR_CHECK(ndr_pull___##fn(_ndr_info, flags, &__r));\ - r->out.info = __r.out.info;\ - }\ - }\ -} while(0) - -#define NDR_SPOOLSS_PULL_ENUM(fn,in,out) do { \ - struct _##fn _r;\ - if (flags & NDR_IN) {\ - out;\ - NDR_SPOOLSS_PULL_ENUM_IN(fn);\ - in;\ - }\ - if (flags & NDR_OUT) {\ - out;\ - NDR_SPOOLSS_PULL_ENUM_OUT(fn);\ - }\ -} while(0) - -#define _NDR_CHECK_UINT32(call) do {\ - enum ndr_err_code _ndr_err; \ - _ndr_err = call; \ - if (!NDR_ERR_CODE_IS_SUCCESS(_ndr_err)) { \ - return 0; \ - }\ -} while (0) - -/* TODO: set _ndr_info->flags correct */ -#define NDR_SPOOLSS_SIZE_ENUM(fn) do { \ - struct __##fn __r;\ - DATA_BLOB _data_blob_info;\ - struct ndr_push *_ndr_info = ndr_push_init_ctx(mem_ctx, iconv_convenience);\ - if (!_ndr_info) return 0;\ - _ndr_info->flags|=0;\ - __r.in.level = level;\ - __r.in.count = count;\ - __r.out.info = info;\ - _NDR_CHECK_UINT32(ndr_push___##fn(_ndr_info, NDR_OUT, &__r)); \ - _data_blob_info = ndr_push_blob(_ndr_info);\ - return _data_blob_info.length;\ -} while(0) - -/* - spoolss_EnumPrinters -*/ -enum ndr_err_code ndr_push_spoolss_EnumPrinters(struct ndr_push *ndr, int flags, const struct spoolss_EnumPrinters *r) -{ - NDR_SPOOLSS_PUSH_ENUM(spoolss_EnumPrinters,{ - _r.in.flags = r->in.flags; - _r.in.server = r->in.server; - },{ - _r.in.flags = r->in.flags; - _r.in.server = r->in.server; - }); - return NDR_ERR_SUCCESS; -} - -enum ndr_err_code ndr_pull_spoolss_EnumPrinters(struct ndr_pull *ndr, int flags, struct spoolss_EnumPrinters *r) -{ - NDR_SPOOLSS_PULL_ENUM(spoolss_EnumPrinters,{ - r->in.flags = _r.in.flags; - r->in.server = _r.in.server; - },{ - _r.in.flags = r->in.flags; - _r.in.server = r->in.server; - }); - return NDR_ERR_SUCCESS; -} - -uint32_t ndr_size_spoolss_EnumPrinters_info(TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *iconv_convenience, uint32_t level, uint32_t count, union spoolss_PrinterInfo *info) -{ - NDR_SPOOLSS_SIZE_ENUM(spoolss_EnumPrinters); -} - -/* - spoolss_EnumJobs -*/ -enum ndr_err_code ndr_push_spoolss_EnumJobs(struct ndr_push *ndr, int flags, const struct spoolss_EnumJobs *r) -{ - NDR_SPOOLSS_PUSH_ENUM(spoolss_EnumJobs,{ - _r.in.handle = r->in.handle; - _r.in.firstjob = r->in.firstjob; - _r.in.numjobs = r->in.numjobs; - },{ - _r.in.handle = r->in.handle; - _r.in.firstjob = r->in.firstjob; - _r.in.numjobs = r->in.numjobs; - }); - return NDR_ERR_SUCCESS; -} - -enum ndr_err_code ndr_pull_spoolss_EnumJobs(struct ndr_pull *ndr, int flags, struct spoolss_EnumJobs *r) -{ - NDR_SPOOLSS_PULL_ENUM(spoolss_EnumJobs,{ - r->in.handle = _r.in.handle; - r->in.firstjob = _r.in.firstjob; - r->in.numjobs = _r.in.numjobs; - },{ - _r.in.handle = r->in.handle; - _r.in.firstjob = r->in.firstjob; - _r.in.numjobs = r->in.numjobs; - }); - return NDR_ERR_SUCCESS; -} - -uint32_t ndr_size_spoolss_EnumJobss_info(TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *iconv_convenience, uint32_t level, uint32_t count, union spoolss_JobInfo *info) -{ - NDR_SPOOLSS_SIZE_ENUM(spoolss_EnumJobs); -} - -/* - spoolss_EnumPrinterDrivers -*/ -enum ndr_err_code ndr_push_spoolss_EnumPrinterDrivers(struct ndr_push *ndr, int flags, const struct spoolss_EnumPrinterDrivers *r) -{ - NDR_SPOOLSS_PUSH_ENUM(spoolss_EnumPrinterDrivers,{ - _r.in.server = r->in.server; - _r.in.environment = r->in.environment; - },{ - _r.in.server = r->in.server; - _r.in.environment = r->in.environment; - }); - return NDR_ERR_SUCCESS; -} - -enum ndr_err_code ndr_pull_spoolss_EnumPrinterDrivers(struct ndr_pull *ndr, int flags, struct spoolss_EnumPrinterDrivers *r) -{ - NDR_SPOOLSS_PULL_ENUM(spoolss_EnumPrinterDrivers,{ - r->in.server = _r.in.server; - r->in.environment = _r.in.environment; - },{ - _r.in.server = r->in.server; - _r.in.environment = r->in.environment; - }); - return NDR_ERR_SUCCESS; -} - -uint32_t ndr_size_spoolss_EnumPrinterDrivers_info(TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *iconv_convenience, uint32_t level, uint32_t count, union spoolss_DriverInfo *info) -{ - NDR_SPOOLSS_SIZE_ENUM(spoolss_EnumPrinterDrivers); -} - -/* - spoolss_EnumForms -*/ -enum ndr_err_code ndr_push_spoolss_EnumForms(struct ndr_push *ndr, int flags, const struct spoolss_EnumForms *r) -{ - NDR_SPOOLSS_PUSH_ENUM(spoolss_EnumForms,{ - _r.in.handle = r->in.handle; - },{ - _r.in.handle = r->in.handle; - }); - return NDR_ERR_SUCCESS; -} - -enum ndr_err_code ndr_pull_spoolss_EnumForms(struct ndr_pull *ndr, int flags, struct spoolss_EnumForms *r) -{ - NDR_SPOOLSS_PULL_ENUM(spoolss_EnumForms,{ - r->in.handle = _r.in.handle; - },{ - _r.in.handle = r->in.handle; - }); - return NDR_ERR_SUCCESS; -} - -uint32_t ndr_size_spoolss_EnumForms_info(TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *iconv_convenience, uint32_t level, uint32_t count, union spoolss_FormInfo *info) -{ - NDR_SPOOLSS_SIZE_ENUM(spoolss_EnumForms); -} - -/* - spoolss_EnumPorts -*/ -enum ndr_err_code ndr_push_spoolss_EnumPorts(struct ndr_push *ndr, int flags, const struct spoolss_EnumPorts *r) -{ - NDR_SPOOLSS_PUSH_ENUM(spoolss_EnumPorts,{ - _r.in.servername= r->in.servername; - },{ - _r.in.servername= r->in.servername; - }); - return NDR_ERR_SUCCESS; -} - -enum ndr_err_code ndr_pull_spoolss_EnumPorts(struct ndr_pull *ndr, int flags, struct spoolss_EnumPorts *r) -{ - NDR_SPOOLSS_PULL_ENUM(spoolss_EnumPorts,{ - r->in.servername= _r.in.servername; - },{ - _r.in.servername= r->in.servername; - }); - return NDR_ERR_SUCCESS; -} - -uint32_t ndr_size_spoolss_EnumPorts_info(TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *iconv_convenience, uint32_t level, uint32_t count, union spoolss_PortInfo *info) -{ - NDR_SPOOLSS_SIZE_ENUM(spoolss_EnumPorts); -} - -/* - spoolss_EnumMonitors -*/ -enum ndr_err_code ndr_push_spoolss_EnumMonitors(struct ndr_push *ndr, int flags, const struct spoolss_EnumMonitors *r) -{ - NDR_SPOOLSS_PUSH_ENUM(spoolss_EnumMonitors,{ - _r.in.servername= r->in.servername; - },{ - _r.in.servername= r->in.servername; - }); - return NDR_ERR_SUCCESS; -} - -enum ndr_err_code ndr_pull_spoolss_EnumMonitors(struct ndr_pull *ndr, int flags, struct spoolss_EnumMonitors *r) -{ - NDR_SPOOLSS_PULL_ENUM(spoolss_EnumMonitors,{ - r->in.servername= _r.in.servername; - },{ - _r.in.servername= r->in.servername; - }); - return NDR_ERR_SUCCESS; -} - -uint32_t ndr_size_spoolss_EnumMonitors_info(TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *iconv_convenience, uint32_t level, uint32_t count, union spoolss_MonitorInfo *info) -{ - NDR_SPOOLSS_SIZE_ENUM(spoolss_EnumMonitors); -} - -/* - spoolss_EnumPrintProcessors -*/ -enum ndr_err_code ndr_push_spoolss_EnumPrintProcessors(struct ndr_push *ndr, int flags, const struct spoolss_EnumPrintProcessors *r) -{ - NDR_SPOOLSS_PUSH_ENUM(spoolss_EnumPrintProcessors,{ - _r.in.servername = r->in.servername; - _r.in.environment = r->in.environment; - },{ - _r.in.servername = r->in.servername; - _r.in.environment = r->in.environment; - }); - return NDR_ERR_SUCCESS; -} - -enum ndr_err_code ndr_pull_spoolss_EnumPrintProcessors(struct ndr_pull *ndr, int flags, struct spoolss_EnumPrintProcessors *r) -{ - NDR_SPOOLSS_PULL_ENUM(spoolss_EnumPrintProcessors,{ - r->in.servername = _r.in.servername; - r->in.environment = _r.in.environment; - },{ - _r.in.servername = r->in.servername; - _r.in.environment = r->in.environment; - }); - return NDR_ERR_SUCCESS; -} - -uint32_t ndr_size_spoolss_EnumPrinterProcessors_info(TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *iconv_convenience, - uint32_t level, uint32_t count, union spoolss_PrintProcessorInfo *info) -{ - NDR_SPOOLSS_SIZE_ENUM(spoolss_EnumPrintProcessors); -} - -/* - spoolss_GetPrinterData -*/ -enum ndr_err_code ndr_push_spoolss_GetPrinterData(struct ndr_push *ndr, int flags, const struct spoolss_GetPrinterData *r) -{ - struct _spoolss_GetPrinterData _r; - if (flags & NDR_IN) { - _r.in.handle = r->in.handle; - _r.in.value_name= r->in.value_name; - _r.in.offered = r->in.offered; - NDR_CHECK(ndr_push__spoolss_GetPrinterData(ndr, flags, &_r)); - } - if (flags & NDR_OUT) { - struct ndr_push *_ndr_info; - _r.in.handle = r->in.handle; - _r.in.value_name= r->in.value_name; - _r.in.offered = r->in.offered; - _r.out.type = r->out.type; - _r.out.data = data_blob(NULL, 0); - _r.out.needed = r->out.needed; - _r.out.result = r->out.result; - { - struct __spoolss_GetPrinterData __r; - _ndr_info = ndr_push_init_ctx(ndr, ndr->iconv_convenience); - NDR_ERR_HAVE_NO_MEMORY(_ndr_info); - _ndr_info->flags= ndr->flags; - __r.in.type = r->out.type; - __r.out.data = r->out.data; - NDR_CHECK(ndr_push___spoolss_GetPrinterData(_ndr_info, flags, &__r)); - if (r->in.offered > _ndr_info->offset) { - uint32_t _padding_len = r->in.offered - _ndr_info->offset; - NDR_CHECK(ndr_push_zero(_ndr_info, _padding_len)); - } - _r.out.data = ndr_push_blob(_ndr_info); - } - NDR_CHECK(ndr_push__spoolss_GetPrinterData(ndr, flags, &_r)); - } - return NDR_ERR_SUCCESS; -} - -enum ndr_err_code ndr_pull_spoolss_GetPrinterData(struct ndr_pull *ndr, int flags, struct spoolss_GetPrinterData *r) -{ - struct _spoolss_GetPrinterData _r; - if (flags & NDR_IN) { - ZERO_STRUCT(r->out); - - _r.in.handle = r->in.handle; - _r.in.value_name= r->in.value_name; - _r.in.offered = r->in.offered; - _r.out.type = r->out.type; - _r.out.data = data_blob(NULL,0), - _r.out.needed = r->out.needed; - NDR_CHECK(ndr_pull__spoolss_GetPrinterData(ndr, flags, &_r)); - r->in.handle = _r.in.handle; - r->in.value_name= _r.in.value_name; - r->in.offered = _r.in.offered; - r->out.needed = _r.out.needed; - } - if (flags & NDR_OUT) { - _r.in.handle = r->in.handle; - _r.in.value_name= r->in.value_name; - _r.in.offered = r->in.offered; - _r.out.type = r->out.type; - _r.out.data = data_blob(NULL,0), - _r.out.needed = r->out.needed; - _r.out.result = r->out.result; - NDR_CHECK(ndr_pull__spoolss_GetPrinterData(ndr, flags, &_r)); - r->out.type = _r.out.type; - ZERO_STRUCT(r->out.data); - r->out.needed = _r.out.needed; - r->out.result = _r.out.result; - if (_r.out.data.length != r->in.offered) { - return ndr_pull_error(ndr, NDR_ERR_BUFSIZE, - "SPOOLSS Buffer: r->in.offered[%u] doesn't match length of out buffer[%u]", - (unsigned)r->in.offered, (unsigned)_r.out.data.length); - } - if (_r.out.data.length > 0 && r->out.needed <= _r.out.data.length) { - struct __spoolss_GetPrinterData __r; - struct ndr_pull *_ndr_data = ndr_pull_init_blob(&_r.out.data, ndr, ndr->iconv_convenience); - NDR_ERR_HAVE_NO_MEMORY(_ndr_data); - _ndr_data->flags= ndr->flags; - __r.in.type = r->out.type; - __r.out.data = r->out.data; - NDR_CHECK(ndr_pull___spoolss_GetPrinterData(_ndr_data, flags, &__r)); - r->out.data = __r.out.data; - } else { - r->out.type = SPOOLSS_PRINTER_DATA_TYPE_NULL; - } - } - return NDR_ERR_SUCCESS; -} - -/* - spoolss_SetPrinterData -*/ -enum ndr_err_code ndr_push_spoolss_SetPrinterData(struct ndr_push *ndr, int flags, const struct spoolss_SetPrinterData *r) -{ - struct _spoolss_SetPrinterData _r; - if (flags & NDR_IN) { - struct ndr_push *_ndr_data; - struct __spoolss_SetPrinterData __r; - DATA_BLOB _data_blob_data; - - _ndr_data = ndr_push_init_ctx(ndr, ndr->iconv_convenience); - NDR_ERR_HAVE_NO_MEMORY(_ndr_data); - _ndr_data->flags= ndr->flags; - - __r.in.type = r->in.type; - __r.out.data = r->in.data; - NDR_CHECK(ndr_push___spoolss_SetPrinterData(_ndr_data, NDR_OUT, &__r)); - _data_blob_data = ndr_push_blob(_ndr_data); - - _r.in.handle = r->in.handle; - _r.in.value_name= r->in.value_name; - _r.in.type = r->in.type; - _r.in.data = _data_blob_data; - _r.in._offered = _data_blob_data.length; - _r.out.result = r->out.result; - NDR_CHECK(ndr_push__spoolss_SetPrinterData(ndr, flags, &_r)); - } - if (flags & NDR_OUT) { - _r.in.handle = r->in.handle; - _r.in.value_name= r->in.value_name; - _r.in.type = r->in.type; - _r.in.data = data_blob(NULL,0), - _r.in._offered = r->in._offered; - _r.out.result = r->out.result; - NDR_CHECK(ndr_push__spoolss_SetPrinterData(ndr, flags, &_r)); - } - return NDR_ERR_SUCCESS; -} - -uint32_t _ndr_size_spoolss_DeviceMode(struct spoolss_DeviceMode *devmode, struct smb_iconv_convenience *ic, uint32_t flags) -{ - if (!devmode) return 0; - return ndr_size_spoolss_DeviceMode(devmode,ic,flags); -} diff --git a/source4/librpc/ndr/ndr_string.c b/source4/librpc/ndr/ndr_string.c index 265fa68b48..a2fcdeae29 100644 --- a/source4/librpc/ndr/ndr_string.c +++ b/source4/librpc/ndr/ndr_string.c @@ -595,6 +595,29 @@ _PUBLIC_ void ndr_print_string_array(struct ndr_print *ndr, const char *name, co ndr->depth--; } +_PUBLIC_ size_t ndr_size_string_array(const char **a, uint32_t count, int flags) +{ + uint32_t i; + size_t size = 0; + + switch (flags & LIBNDR_STRING_FLAGS) { + case LIBNDR_FLAG_STR_NULLTERM: + for (i = 0; i < count; i++) { + size += strlen_m_term(a[i]); + } + break; + case LIBNDR_FLAG_STR_NOTERM: + for (i = 0; i < count; i++) { + size += strlen_m(a[i]); + } + break; + default: + return 0; + } + + return size; +} + /** * Return number of elements in a string including the last (zeroed) element */ diff --git a/source4/librpc/ndr/py_security.c b/source4/librpc/ndr/py_security.c index 93e4a093f3..f89263bba3 100644 --- a/source4/librpc/ndr/py_security.c +++ b/source4/librpc/ndr/py_security.c @@ -41,29 +41,29 @@ static void PyType_AddMethods(PyTypeObject *type, PyMethodDef *methods) } } -static int py_dom_sid_cmp(PyObject *self, PyObject *py_other) +static int py_dom_sid_cmp(PyObject *py_self, PyObject *py_other) { - struct dom_sid *this = py_talloc_get_ptr(self), *other; + struct dom_sid *self = py_talloc_get_ptr(py_self), *other; other = py_talloc_get_ptr(py_other); if (other == NULL) return -1; - return dom_sid_compare(this, other); + return dom_sid_compare(self, other); } -static PyObject *py_dom_sid_str(PyObject *self) +static PyObject *py_dom_sid_str(PyObject *py_self) { - struct dom_sid *this = py_talloc_get_ptr(self); - char *str = dom_sid_string(NULL, this); + struct dom_sid *self = py_talloc_get_ptr(py_self); + char *str = dom_sid_string(NULL, self); PyObject *ret = PyString_FromString(str); talloc_free(str); return ret; } -static PyObject *py_dom_sid_repr(PyObject *self) +static PyObject *py_dom_sid_repr(PyObject *py_self) { - struct dom_sid *this = py_talloc_get_ptr(self); - char *str = dom_sid_string(NULL, this); + struct dom_sid *self = py_talloc_get_ptr(py_self); + char *str = dom_sid_string(NULL, self); PyObject *ret = PyString_FromFormat("dom_sid('%s')", str); talloc_free(str); return ret; diff --git a/source4/librpc/rpc/dcerpc.c b/source4/librpc/rpc/dcerpc.c index 45c4e78cf1..7a568d3c9e 100644 --- a/source4/librpc/rpc/dcerpc.c +++ b/source4/librpc/rpc/dcerpc.c @@ -653,9 +653,9 @@ static void dcerpc_bind_recv_handler(struct rpc_request *req, handle timeouts of individual dcerpc requests */ static void dcerpc_timeout_handler(struct tevent_context *ev, struct tevent_timer *te, - struct timeval t, void *private) + struct timeval t, void *private_data) { - struct rpc_request *req = talloc_get_type(private, struct rpc_request); + struct rpc_request *req = talloc_get_type(private_data, struct rpc_request); if (req->ignore_timeout) { dcerpc_req_dequeue(req); diff --git a/source4/librpc/rpc/dcerpc_connect.c b/source4/librpc/rpc/dcerpc_connect.c index 9b8503c04b..0f9fbe0abc 100644 --- a/source4/librpc/rpc/dcerpc_connect.c +++ b/source4/librpc/rpc/dcerpc_connect.c @@ -709,9 +709,9 @@ static void continue_pipe_auth(struct composite_context *ctx) handle timeouts of a dcerpc connect */ static void dcerpc_connect_timeout_handler(struct tevent_context *ev, struct tevent_timer *te, - struct timeval t, void *private) + struct timeval t, void *private_data) { - struct composite_context *c = talloc_get_type(private, struct composite_context); + struct composite_context *c = talloc_get_type(private_data, struct composite_context); composite_error(c, NT_STATUS_IO_TIMEOUT); } diff --git a/source4/librpc/rpc/dcerpc_smb.c b/source4/librpc/rpc/dcerpc_smb.c index 312a44a5f0..013a8578e6 100644 --- a/source4/librpc/rpc/dcerpc_smb.c +++ b/source4/librpc/rpc/dcerpc_smb.c @@ -84,7 +84,7 @@ static void smb_read_callback(struct smbcli_request *req) uint16_t frag_length; NTSTATUS status; - state = talloc_get_type(req->async.private, struct smb_read_state); + state = talloc_get_type(req->async.private_data, struct smb_read_state); smb = talloc_get_type(state->c->transport.private_data, struct smb_private); io = state->io; @@ -133,7 +133,7 @@ static void smb_read_callback(struct smbcli_request *req) } state->req->async.fn = smb_read_callback; - state->req->async.private = state; + state->req->async.private_data = state; } /* @@ -185,7 +185,7 @@ static NTSTATUS send_read_request_continue(struct dcerpc_connection *c, DATA_BLO } req->async.fn = smb_read_callback; - req->async.private = state; + req->async.private_data = state; state->req = req; @@ -221,7 +221,7 @@ struct smb_trans_state { */ static void smb_trans_callback(struct smbcli_request *req) { - struct smb_trans_state *state = (struct smb_trans_state *)req->async.private; + struct smb_trans_state *state = (struct smb_trans_state *)req->async.private_data; struct dcerpc_connection *c = state->c; NTSTATUS status; @@ -293,7 +293,7 @@ static NTSTATUS smb_send_trans_request(struct dcerpc_connection *c, DATA_BLOB *b } state->req->async.fn = smb_trans_callback; - state->req->async.private = state; + state->req->async.private_data = state; talloc_steal(state, state->req); @@ -305,7 +305,7 @@ static NTSTATUS smb_send_trans_request(struct dcerpc_connection *c, DATA_BLOB *b */ static void smb_write_callback(struct smbcli_request *req) { - struct dcerpc_connection *c = (struct dcerpc_connection *)req->async.private; + struct dcerpc_connection *c = (struct dcerpc_connection *)req->async.private_data; if (!NT_STATUS_IS_OK(req->status)) { DEBUG(0,("dcerpc_smb: write callback error\n")); @@ -351,7 +351,7 @@ static NTSTATUS smb_send_request(struct dcerpc_connection *c, DATA_BLOB *blob, } req->async.fn = smb_write_callback; - req->async.private = c; + req->async.private_data = c; if (trigger_read) { send_read_request(c); @@ -501,7 +501,7 @@ struct composite_context *dcerpc_pipe_open_smb_send(struct dcerpc_pipe *p, static void pipe_open_recv(struct smbcli_request *req) { - struct pipe_open_smb_state *state = talloc_get_type(req->async.private, + struct pipe_open_smb_state *state = talloc_get_type(req->async.private_data, struct pipe_open_smb_state); struct composite_context *ctx = state->ctx; struct dcerpc_connection *c = state->c; diff --git a/source4/librpc/rpc/dcerpc_sock.c b/source4/librpc/rpc/dcerpc_sock.c index 689249288f..64a5b92e90 100644 --- a/source4/librpc/rpc/dcerpc_sock.c +++ b/source4/librpc/rpc/dcerpc_sock.c @@ -85,9 +85,9 @@ static void sock_dead(struct dcerpc_connection *p, NTSTATUS status) /* handle socket recv errors */ -static void sock_error_handler(void *private, NTSTATUS status) +static void sock_error_handler(void *private_data, NTSTATUS status) { - struct dcerpc_connection *p = talloc_get_type(private, + struct dcerpc_connection *p = talloc_get_type(private_data, struct dcerpc_connection); sock_dead(p, status); } @@ -95,7 +95,7 @@ static void sock_error_handler(void *private, NTSTATUS status) /* check if a blob is a complete packet */ -static NTSTATUS sock_complete_packet(void *private, DATA_BLOB blob, size_t *size) +static NTSTATUS sock_complete_packet(void *private_data, DATA_BLOB blob, size_t *size) { if (blob.length < DCERPC_FRAG_LEN_OFFSET+2) { return STATUS_MORE_ENTRIES; @@ -110,9 +110,9 @@ static NTSTATUS sock_complete_packet(void *private, DATA_BLOB blob, size_t *size /* process recv requests */ -static NTSTATUS sock_process_recv(void *private, DATA_BLOB blob) +static NTSTATUS sock_process_recv(void *private_data, DATA_BLOB blob) { - struct dcerpc_connection *p = talloc_get_type(private, + struct dcerpc_connection *p = talloc_get_type(private_data, struct dcerpc_connection); struct sock_private *sock = (struct sock_private *)p->transport.private_data; sock->pending_reads--; @@ -127,9 +127,9 @@ static NTSTATUS sock_process_recv(void *private, DATA_BLOB blob) called when a IO is triggered by the events system */ static void sock_io_handler(struct tevent_context *ev, struct tevent_fd *fde, - uint16_t flags, void *private) + uint16_t flags, void *private_data) { - struct dcerpc_connection *p = talloc_get_type(private, + struct dcerpc_connection *p = talloc_get_type(private_data, struct dcerpc_connection); struct sock_private *sock = (struct sock_private *)p->transport.private_data; diff --git a/source4/librpc/tests/test_ndrdump.sh b/source4/librpc/tests/test_ndrdump.sh index 511856061c..dccf86df88 100755 --- a/source4/librpc/tests/test_ndrdump.sh +++ b/source4/librpc/tests/test_ndrdump.sh @@ -8,8 +8,8 @@ failed=0 -samba4bindir=`dirname $0`/../../bin -ndrdump=$samba4bindir/ndrdump +samba4bindir="$BUILDDIR/bin" +ndrdump="$samba4bindir/ndrdump$EXEEXT" files=`dirname $0`/ testit "ndrdump with in" $VALGRIND $ndrdump samr samr_CreateUser in $files/samr-CreateUser-in.dat $@ || failed=`expr $failed + 1` |