[default] ;
} srvsvc_NetCharDevCtr;
+ typedef struct {
+ uint32 level;
+ [switch_is(level)] srvsvc_NetCharDevCtr ctr;
+ } srvsvc_NetCharDevInfoCtr;
+
/******************/
/* Function: 0x00 */
WERROR srvsvc_NetCharDevEnum(
[in,unique] [string,charset(UTF16)] uint16 *server_unc,
- [in,out,ref] uint32 *level,
- [in,out,ref,switch_is(*level)] srvsvc_NetCharDevCtr *ctr,
+ [in,out,ref] srvsvc_NetCharDevInfoCtr *info_ctr,
[in] uint32 max_buffer,
[out,ref] uint32 *totalentries,
[in,out,unique] uint32 *resume_handle
[default] ;
} srvsvc_NetCharDevQCtr;
+ typedef struct {
+ uint32 level;
+ [switch_is(level)] srvsvc_NetCharDevQCtr ctr;
+ } srvsvc_NetCharDevQInfoCtr;
+
/******************/
/* Function: 0x03 */
WERROR srvsvc_NetCharDevQEnum(
[in,unique] [string,charset(UTF16)] uint16 *server_unc,
[in,unique] [string,charset(UTF16)] uint16 *user,
- [in,out,ref] uint32 *level,
- [in,out,switch_is(*level),ref] srvsvc_NetCharDevQCtr *ctr,
+ [in,out,ref] srvsvc_NetCharDevQInfoCtr *info_ctr,
[in] uint32 max_buffer,
[out,ref] uint32 *totalentries,
[in,out,unique] uint32 *resume_handle
/* Function: 0x0b */
WERROR srvsvc_NetFileClose(
[in,unique] [string,charset(UTF16)] uint16 *server_unc,
- [in] uint32 fid
+ [in] uint32 fid
);
/**************************/
SHARE_1005_IN_DFS = 0x00000001,
SHARE_1005_DFS_ROOT = 0x00000002
} NetShareInfo1005Flags;
-
+
const uint32 SHARE_1005_CSC_POLICY_MASK = 0x00000030;
const uint32 SHARE_1005_CSC_POLICY_SHIFT = 4;
[in] [string,charset(UTF16)] uint16 share_name[],
[in] uint32 reserved
);
-
+
/******************/
/* Function: 0x14 */
WERROR srvsvc_NetShareCheck(
uint32 sessreqs;
uint32 opensearch;
uint32 activelocks;
+ uint32 numreqbufs;
uint32 sizereqbufs;
uint32 numbigbufs;
uint32 numfiletasks;
uint32 sessreqs;
uint32 opensearch;
uint32 activelocks;
+ uint32 numreqbufs;
uint32 sizereqbufs;
uint32 numbigbufs;
uint32 numfiletasks;
/* srvsvc_NetDisk */
/**************************/
typedef struct {
- [flag(STR_LEN4)] string disk;
+ /*
+ * In theory this should be:
+ * [charset(UTF16),string] uint16 annotation[3]
+ * But midl treats this as:
+ * [charset(UTF16),string] uint16 annotation[]
+ * and pidl doesn't support this yet
+ */
+ [value(0)] uint32 __disk_offset;
+ [value(strlen(disk)+1)] uint32 __disk_length;
+ [charset(UTF16)] uint16 disk[__disk_length];
} srvsvc_NetDiskInfo0;
typedef struct {
[in,unique] [string,charset(UTF16)] uint16 *service,
[in] uint32 level,
[in] uint32 options,
- [out,ref] srvsvc_Statistics *stats
+ [out,ref] srvsvc_Statistics **stats
);
/**************************/
[default];
} srvsvc_NetTransportCtr;
+ typedef struct {
+ uint32 level;
+ [switch_is(level)] srvsvc_NetTransportCtr ctr;
+ } srvsvc_NetTransportInfoCtr;
+
/******************/
/* Function: 0x1a */
WERROR srvsvc_NetTransportEnum(
[in,unique] [string,charset(UTF16)] uint16 *server_unc,
- [in,out,ref] uint32 *level,
- [in,out,ref,switch_is(*level)] srvsvc_NetTransportCtr *transports,
+ [in,out,ref] srvsvc_NetTransportInfoCtr *transports,
[in] uint32 max_buffer,
[out,ref] uint32 *totalentries,
[in,out,unique] uint32 *resume_handle
/* Function: 0x1b */
WERROR srvsvc_NetTransportDel(
[in,unique] [string,charset(UTF16)] uint16 *server_unc,
- [in] uint32 unknown,
- [in] srvsvc_NetTransportInfo0 transport
+ [in] uint32 level,
+ [in] srvsvc_NetTransportInfo0 *info0
);
/**************************/
/**************************/
/******************/
/* Function: 0x24 */
- /* Note, there must be some way to return entries read vs
+ /* Note, there must be some way to return entries read vs
total entries ... */
WERROR srvsvc_NetShareEnum(
[in,unique] [string,charset(UTF16)] uint16 *server_unc,
@PIDL_ARGS="$(PIDL_ARGS)" CPP="$(CPP)" PIDL="../pidl/pidl" \
srcdir="$(srcdir)" $(srcdir)/script/build_idl.sh ../librpc/idl/lsa.idl \
../librpc/idl/dfs.idl ../librpc/idl/echo.idl ../librpc/idl/winreg.idl \
- ../librpc/idl/initshutdown.idl librpc/idl/srvsvc.idl ../librpc/idl/svcctl.idl \
+ ../librpc/idl/initshutdown.idl ../librpc/idl/srvsvc.idl ../librpc/idl/svcctl.idl \
../librpc/idl/eventlog.idl ../librpc/idl/wkssvc.idl ../librpc/idl/netlogon.idl \
../librpc/idl/notify.idl ../librpc/idl/epmapper.idl librpc/idl/messaging.idl \
../librpc/idl/xattr.idl ../librpc/idl/misc.idl librpc/idl/samr.idl \
NTSTATUS rpccli_srvsvc_NetCharDevEnum(struct rpc_pipe_client *cli,
TALLOC_CTX *mem_ctx,
const char *server_unc /* [in] [unique,charset(UTF16)] */,
- uint32_t *level /* [in,out] [ref] */,
- union srvsvc_NetCharDevCtr *ctr /* [in,out] [ref,switch_is(*level)] */,
+ struct srvsvc_NetCharDevInfoCtr *info_ctr /* [in,out] [ref] */,
uint32_t max_buffer /* [in] */,
uint32_t *totalentries /* [out] [ref] */,
uint32_t *resume_handle /* [in,out] [unique] */,
/* In parameters */
r.in.server_unc = server_unc;
- r.in.level = level;
- r.in.ctr = ctr;
+ r.in.info_ctr = info_ctr;
r.in.max_buffer = max_buffer;
r.in.resume_handle = resume_handle;
}
/* Return variables */
- *level = *r.out.level;
- *ctr = *r.out.ctr;
+ *info_ctr = *r.out.info_ctr;
*totalentries = *r.out.totalentries;
if (resume_handle && r.out.resume_handle) {
*resume_handle = *r.out.resume_handle;
TALLOC_CTX *mem_ctx,
const char *server_unc /* [in] [unique,charset(UTF16)] */,
const char *user /* [in] [unique,charset(UTF16)] */,
- uint32_t *level /* [in,out] [ref] */,
- union srvsvc_NetCharDevQCtr *ctr /* [in,out] [ref,switch_is(*level)] */,
+ struct srvsvc_NetCharDevQInfoCtr *info_ctr /* [in,out] [ref] */,
uint32_t max_buffer /* [in] */,
uint32_t *totalentries /* [out] [ref] */,
uint32_t *resume_handle /* [in,out] [unique] */,
/* In parameters */
r.in.server_unc = server_unc;
r.in.user = user;
- r.in.level = level;
- r.in.ctr = ctr;
+ r.in.info_ctr = info_ctr;
r.in.max_buffer = max_buffer;
r.in.resume_handle = resume_handle;
}
/* Return variables */
- *level = *r.out.level;
- *ctr = *r.out.ctr;
+ *info_ctr = *r.out.info_ctr;
*totalentries = *r.out.totalentries;
if (resume_handle && r.out.resume_handle) {
*resume_handle = *r.out.resume_handle;
const char *service /* [in] [unique,charset(UTF16)] */,
uint32_t level /* [in] */,
uint32_t options /* [in] */,
- struct srvsvc_Statistics *stats /* [out] [ref] */,
+ struct srvsvc_Statistics **stats /* [out] [ref] */,
WERROR *werror)
{
struct srvsvc_NetServerStatisticsGet r;
NTSTATUS rpccli_srvsvc_NetTransportEnum(struct rpc_pipe_client *cli,
TALLOC_CTX *mem_ctx,
const char *server_unc /* [in] [unique,charset(UTF16)] */,
- uint32_t *level /* [in,out] [ref] */,
- union srvsvc_NetTransportCtr *transports /* [in,out] [ref,switch_is(*level)] */,
+ struct srvsvc_NetTransportInfoCtr *transports /* [in,out] [ref] */,
uint32_t max_buffer /* [in] */,
uint32_t *totalentries /* [out] [ref] */,
uint32_t *resume_handle /* [in,out] [unique] */,
/* In parameters */
r.in.server_unc = server_unc;
- r.in.level = level;
r.in.transports = transports;
r.in.max_buffer = max_buffer;
r.in.resume_handle = resume_handle;
}
/* Return variables */
- *level = *r.out.level;
*transports = *r.out.transports;
*totalentries = *r.out.totalentries;
if (resume_handle && r.out.resume_handle) {
NTSTATUS rpccli_srvsvc_NetTransportDel(struct rpc_pipe_client *cli,
TALLOC_CTX *mem_ctx,
const char *server_unc /* [in] [unique,charset(UTF16)] */,
- uint32_t unknown /* [in] */,
- struct srvsvc_NetTransportInfo0 transport /* [in] */,
+ uint32_t level /* [in] */,
+ struct srvsvc_NetTransportInfo0 *info0 /* [in] [ref] */,
WERROR *werror)
{
struct srvsvc_NetTransportDel r;
/* In parameters */
r.in.server_unc = server_unc;
- r.in.unknown = unknown;
- r.in.transport = transport;
+ r.in.level = level;
+ r.in.info0 = info0;
if (DEBUGLEVEL >= 10) {
NDR_PRINT_IN_DEBUG(srvsvc_NetTransportDel, &r);
NTSTATUS rpccli_srvsvc_NetCharDevEnum(struct rpc_pipe_client *cli,
TALLOC_CTX *mem_ctx,
const char *server_unc /* [in] [unique,charset(UTF16)] */,
- uint32_t *level /* [in,out] [ref] */,
- union srvsvc_NetCharDevCtr *ctr /* [in,out] [ref,switch_is(*level)] */,
+ struct srvsvc_NetCharDevInfoCtr *info_ctr /* [in,out] [ref] */,
uint32_t max_buffer /* [in] */,
uint32_t *totalentries /* [out] [ref] */,
uint32_t *resume_handle /* [in,out] [unique] */,
TALLOC_CTX *mem_ctx,
const char *server_unc /* [in] [unique,charset(UTF16)] */,
const char *user /* [in] [unique,charset(UTF16)] */,
- uint32_t *level /* [in,out] [ref] */,
- union srvsvc_NetCharDevQCtr *ctr /* [in,out] [ref,switch_is(*level)] */,
+ struct srvsvc_NetCharDevQInfoCtr *info_ctr /* [in,out] [ref] */,
uint32_t max_buffer /* [in] */,
uint32_t *totalentries /* [out] [ref] */,
uint32_t *resume_handle /* [in,out] [unique] */,
const char *service /* [in] [unique,charset(UTF16)] */,
uint32_t level /* [in] */,
uint32_t options /* [in] */,
- struct srvsvc_Statistics *stats /* [out] [ref] */,
+ struct srvsvc_Statistics **stats /* [out] [ref] */,
WERROR *werror);
NTSTATUS rpccli_srvsvc_NetTransportAdd(struct rpc_pipe_client *cli,
TALLOC_CTX *mem_ctx,
NTSTATUS rpccli_srvsvc_NetTransportEnum(struct rpc_pipe_client *cli,
TALLOC_CTX *mem_ctx,
const char *server_unc /* [in] [unique,charset(UTF16)] */,
- uint32_t *level /* [in,out] [ref] */,
- union srvsvc_NetTransportCtr *transports /* [in,out] [ref,switch_is(*level)] */,
+ struct srvsvc_NetTransportInfoCtr *transports /* [in,out] [ref] */,
uint32_t max_buffer /* [in] */,
uint32_t *totalentries /* [out] [ref] */,
uint32_t *resume_handle /* [in,out] [unique] */,
NTSTATUS rpccli_srvsvc_NetTransportDel(struct rpc_pipe_client *cli,
TALLOC_CTX *mem_ctx,
const char *server_unc /* [in] [unique,charset(UTF16)] */,
- uint32_t unknown /* [in] */,
- struct srvsvc_NetTransportInfo0 transport /* [in] */,
+ uint32_t level /* [in] */,
+ struct srvsvc_NetTransportInfo0 *info0 /* [in] [ref] */,
WERROR *werror);
NTSTATUS rpccli_srvsvc_NetRemoteTOD(struct rpc_pipe_client *cli,
TALLOC_CTX *mem_ctx,
}
}
+static enum ndr_err_code ndr_push_srvsvc_NetCharDevInfoCtr(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetCharDevInfoCtr *r)
+{
+ if (ndr_flags & NDR_SCALARS) {
+ NDR_CHECK(ndr_push_align(ndr, 4));
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->level));
+ NDR_CHECK(ndr_push_set_switch_value(ndr, &r->ctr, r->level));
+ NDR_CHECK(ndr_push_srvsvc_NetCharDevCtr(ndr, NDR_SCALARS, &r->ctr));
+ }
+ if (ndr_flags & NDR_BUFFERS) {
+ NDR_CHECK(ndr_push_srvsvc_NetCharDevCtr(ndr, NDR_BUFFERS, &r->ctr));
+ }
+ return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_srvsvc_NetCharDevInfoCtr(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetCharDevInfoCtr *r)
+{
+ if (ndr_flags & NDR_SCALARS) {
+ NDR_CHECK(ndr_pull_align(ndr, 4));
+ NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->level));
+ NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->ctr, r->level));
+ NDR_CHECK(ndr_pull_srvsvc_NetCharDevCtr(ndr, NDR_SCALARS, &r->ctr));
+ }
+ if (ndr_flags & NDR_BUFFERS) {
+ NDR_CHECK(ndr_pull_srvsvc_NetCharDevCtr(ndr, NDR_BUFFERS, &r->ctr));
+ }
+ return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_srvsvc_NetCharDevInfoCtr(struct ndr_print *ndr, const char *name, const struct srvsvc_NetCharDevInfoCtr *r)
+{
+ ndr_print_struct(ndr, name, "srvsvc_NetCharDevInfoCtr");
+ ndr->depth++;
+ ndr_print_uint32(ndr, "level", r->level);
+ ndr_print_set_switch_value(ndr, &r->ctr, r->level);
+ ndr_print_srvsvc_NetCharDevCtr(ndr, "ctr", &r->ctr);
+ ndr->depth--;
+}
+
static enum ndr_err_code ndr_push_srvsvc_NetCharDevQInfo0(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetCharDevQInfo0 *r)
{
if (ndr_flags & NDR_SCALARS) {
}
}
+static enum ndr_err_code ndr_push_srvsvc_NetCharDevQInfoCtr(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetCharDevQInfoCtr *r)
+{
+ if (ndr_flags & NDR_SCALARS) {
+ NDR_CHECK(ndr_push_align(ndr, 4));
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->level));
+ NDR_CHECK(ndr_push_set_switch_value(ndr, &r->ctr, r->level));
+ NDR_CHECK(ndr_push_srvsvc_NetCharDevQCtr(ndr, NDR_SCALARS, &r->ctr));
+ }
+ if (ndr_flags & NDR_BUFFERS) {
+ NDR_CHECK(ndr_push_srvsvc_NetCharDevQCtr(ndr, NDR_BUFFERS, &r->ctr));
+ }
+ return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_srvsvc_NetCharDevQInfoCtr(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetCharDevQInfoCtr *r)
+{
+ if (ndr_flags & NDR_SCALARS) {
+ NDR_CHECK(ndr_pull_align(ndr, 4));
+ NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->level));
+ NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->ctr, r->level));
+ NDR_CHECK(ndr_pull_srvsvc_NetCharDevQCtr(ndr, NDR_SCALARS, &r->ctr));
+ }
+ if (ndr_flags & NDR_BUFFERS) {
+ NDR_CHECK(ndr_pull_srvsvc_NetCharDevQCtr(ndr, NDR_BUFFERS, &r->ctr));
+ }
+ return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_srvsvc_NetCharDevQInfoCtr(struct ndr_print *ndr, const char *name, const struct srvsvc_NetCharDevQInfoCtr *r)
+{
+ ndr_print_struct(ndr, name, "srvsvc_NetCharDevQInfoCtr");
+ ndr->depth++;
+ ndr_print_uint32(ndr, "level", r->level);
+ ndr_print_set_switch_value(ndr, &r->ctr, r->level);
+ ndr_print_srvsvc_NetCharDevQCtr(ndr, "ctr", &r->ctr);
+ ndr->depth--;
+}
+
static enum ndr_err_code ndr_push_srvsvc_NetConnInfo0(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetConnInfo0 *r)
{
if (ndr_flags & NDR_SCALARS) {
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sessreqs));
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->opensearch));
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->activelocks));
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->numreqbufs));
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sizereqbufs));
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->numbigbufs));
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->numfiletasks));
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sessreqs));
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->opensearch));
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->activelocks));
+ NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->numreqbufs));
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sizereqbufs));
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->numbigbufs));
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->numfiletasks));
ndr_print_uint32(ndr, "sessreqs", r->sessreqs);
ndr_print_uint32(ndr, "opensearch", r->opensearch);
ndr_print_uint32(ndr, "activelocks", r->activelocks);
+ ndr_print_uint32(ndr, "numreqbufs", r->numreqbufs);
ndr_print_uint32(ndr, "sizereqbufs", r->sizereqbufs);
ndr_print_uint32(ndr, "numbigbufs", r->numbigbufs);
ndr_print_uint32(ndr, "numfiletasks", r->numfiletasks);
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sessreqs));
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->opensearch));
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->activelocks));
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->numreqbufs));
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sizereqbufs));
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->numbigbufs));
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->numfiletasks));
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sessreqs));
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->opensearch));
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->activelocks));
+ NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->numreqbufs));
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sizereqbufs));
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->numbigbufs));
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->numfiletasks));
ndr_print_uint32(ndr, "sessreqs", r->sessreqs);
ndr_print_uint32(ndr, "opensearch", r->opensearch);
ndr_print_uint32(ndr, "activelocks", r->activelocks);
+ ndr_print_uint32(ndr, "numreqbufs", r->numreqbufs);
ndr_print_uint32(ndr, "sizereqbufs", r->sizereqbufs);
ndr_print_uint32(ndr, "numbigbufs", r->numbigbufs);
ndr_print_uint32(ndr, "numfiletasks", r->numfiletasks);
{
if (ndr_flags & NDR_SCALARS) {
NDR_CHECK(ndr_push_align(ndr, 4));
- {
- uint32_t _flags_save_string = ndr->flags;
- ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_LEN4);
- NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->disk));
- ndr->flags = _flags_save_string;
- }
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, strlen(r->disk) + 1));
+ NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->disk, strlen(r->disk) + 1, sizeof(uint16_t), CH_UTF16));
}
if (ndr_flags & NDR_BUFFERS) {
}
{
if (ndr_flags & NDR_SCALARS) {
NDR_CHECK(ndr_pull_align(ndr, 4));
- {
- uint32_t _flags_save_string = ndr->flags;
- ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_LEN4);
- NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->disk));
- ndr->flags = _flags_save_string;
- }
+ NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->__disk_offset));
+ NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->__disk_length));
+ NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->disk, r->__disk_length, sizeof(uint16_t), CH_UTF16));
}
if (ndr_flags & NDR_BUFFERS) {
}
{
ndr_print_struct(ndr, name, "srvsvc_NetDiskInfo0");
ndr->depth++;
+ ndr_print_uint32(ndr, "__disk_offset", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?0:r->__disk_offset);
+ ndr_print_uint32(ndr, "__disk_length", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?strlen(r->disk) + 1:r->__disk_length);
ndr_print_string(ndr, "disk", r->disk);
ndr->depth--;
}
}
}
+static enum ndr_err_code ndr_push_srvsvc_NetTransportInfoCtr(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetTransportInfoCtr *r)
+{
+ if (ndr_flags & NDR_SCALARS) {
+ NDR_CHECK(ndr_push_align(ndr, 4));
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->level));
+ NDR_CHECK(ndr_push_set_switch_value(ndr, &r->ctr, r->level));
+ NDR_CHECK(ndr_push_srvsvc_NetTransportCtr(ndr, NDR_SCALARS, &r->ctr));
+ }
+ if (ndr_flags & NDR_BUFFERS) {
+ NDR_CHECK(ndr_push_srvsvc_NetTransportCtr(ndr, NDR_BUFFERS, &r->ctr));
+ }
+ return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_srvsvc_NetTransportInfoCtr(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetTransportInfoCtr *r)
+{
+ if (ndr_flags & NDR_SCALARS) {
+ NDR_CHECK(ndr_pull_align(ndr, 4));
+ NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->level));
+ NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->ctr, r->level));
+ NDR_CHECK(ndr_pull_srvsvc_NetTransportCtr(ndr, NDR_SCALARS, &r->ctr));
+ }
+ if (ndr_flags & NDR_BUFFERS) {
+ NDR_CHECK(ndr_pull_srvsvc_NetTransportCtr(ndr, NDR_BUFFERS, &r->ctr));
+ }
+ return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_srvsvc_NetTransportInfoCtr(struct ndr_print *ndr, const char *name, const struct srvsvc_NetTransportInfoCtr *r)
+{
+ ndr_print_struct(ndr, name, "srvsvc_NetTransportInfoCtr");
+ ndr->depth++;
+ ndr_print_uint32(ndr, "level", r->level);
+ ndr_print_set_switch_value(ndr, &r->ctr, r->level);
+ ndr_print_srvsvc_NetTransportCtr(ndr, "ctr", &r->ctr);
+ ndr->depth--;
+}
+
static enum ndr_err_code ndr_push_srvsvc_NetRemoteTODInfo(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetRemoteTODInfo *r)
{
if (ndr_flags & NDR_SCALARS) {
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
}
- if (r->in.level == NULL) {
- return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
- }
- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.level));
- if (r->in.ctr == NULL) {
+ if (r->in.info_ctr == NULL) {
return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
}
- NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.ctr, *r->in.level));
- NDR_CHECK(ndr_push_srvsvc_NetCharDevCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.ctr));
+ NDR_CHECK(ndr_push_srvsvc_NetCharDevInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info_ctr));
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.max_buffer));
NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.resume_handle));
if (r->in.resume_handle) {
}
}
if (flags & NDR_OUT) {
- if (r->out.level == NULL) {
- return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
- }
- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.level));
- if (r->out.ctr == NULL) {
+ if (r->out.info_ctr == NULL) {
return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
}
- NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.ctr, *r->out.level));
- NDR_CHECK(ndr_push_srvsvc_NetCharDevCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.ctr));
+ NDR_CHECK(ndr_push_srvsvc_NetCharDevInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info_ctr));
if (r->out.totalentries == NULL) {
return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
}
uint32_t _ptr_server_unc;
uint32_t _ptr_resume_handle;
TALLOC_CTX *_mem_save_server_unc_0;
- TALLOC_CTX *_mem_save_level_0;
- TALLOC_CTX *_mem_save_ctr_0;
+ TALLOC_CTX *_mem_save_info_ctr_0;
TALLOC_CTX *_mem_save_totalentries_0;
TALLOC_CTX *_mem_save_resume_handle_0;
if (flags & NDR_IN) {
NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
}
if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
- NDR_PULL_ALLOC(ndr, r->in.level);
- }
- _mem_save_level_0 = NDR_PULL_GET_MEM_CTX(ndr);
- NDR_PULL_SET_MEM_CTX(ndr, r->in.level, LIBNDR_FLAG_REF_ALLOC);
- NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.level));
- NDR_PULL_SET_MEM_CTX(ndr, _mem_save_level_0, LIBNDR_FLAG_REF_ALLOC);
- if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
- NDR_PULL_ALLOC(ndr, r->in.ctr);
+ NDR_PULL_ALLOC(ndr, r->in.info_ctr);
}
- _mem_save_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
- NDR_PULL_SET_MEM_CTX(ndr, r->in.ctr, LIBNDR_FLAG_REF_ALLOC);
- NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.ctr, *r->in.level));
- NDR_CHECK(ndr_pull_srvsvc_NetCharDevCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.ctr));
- NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr_0, LIBNDR_FLAG_REF_ALLOC);
+ _mem_save_info_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
+ NDR_PULL_SET_MEM_CTX(ndr, r->in.info_ctr, LIBNDR_FLAG_REF_ALLOC);
+ NDR_CHECK(ndr_pull_srvsvc_NetCharDevInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info_ctr));
+ NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_ctr_0, LIBNDR_FLAG_REF_ALLOC);
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.max_buffer));
NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
if (_ptr_resume_handle) {
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.resume_handle));
NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
}
- NDR_PULL_ALLOC(ndr, r->out.level);
- *r->out.level = *r->in.level;
- NDR_PULL_ALLOC(ndr, r->out.ctr);
- *r->out.ctr = *r->in.ctr;
+ NDR_PULL_ALLOC(ndr, r->out.info_ctr);
+ *r->out.info_ctr = *r->in.info_ctr;
NDR_PULL_ALLOC(ndr, r->out.totalentries);
ZERO_STRUCTP(r->out.totalentries);
}
if (flags & NDR_OUT) {
if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
- NDR_PULL_ALLOC(ndr, r->out.level);
- }
- _mem_save_level_0 = NDR_PULL_GET_MEM_CTX(ndr);
- NDR_PULL_SET_MEM_CTX(ndr, r->out.level, LIBNDR_FLAG_REF_ALLOC);
- NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.level));
- NDR_PULL_SET_MEM_CTX(ndr, _mem_save_level_0, LIBNDR_FLAG_REF_ALLOC);
- if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
- NDR_PULL_ALLOC(ndr, r->out.ctr);
+ NDR_PULL_ALLOC(ndr, r->out.info_ctr);
}
- _mem_save_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
- NDR_PULL_SET_MEM_CTX(ndr, r->out.ctr, LIBNDR_FLAG_REF_ALLOC);
- NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.ctr, *r->out.level));
- NDR_CHECK(ndr_pull_srvsvc_NetCharDevCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.ctr));
- NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr_0, LIBNDR_FLAG_REF_ALLOC);
+ _mem_save_info_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
+ NDR_PULL_SET_MEM_CTX(ndr, r->out.info_ctr, LIBNDR_FLAG_REF_ALLOC);
+ NDR_CHECK(ndr_pull_srvsvc_NetCharDevInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info_ctr));
+ NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_ctr_0, LIBNDR_FLAG_REF_ALLOC);
if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
NDR_PULL_ALLOC(ndr, r->out.totalentries);
}
ndr_print_string(ndr, "server_unc", r->in.server_unc);
}
ndr->depth--;
- ndr_print_ptr(ndr, "level", r->in.level);
- ndr->depth++;
- ndr_print_uint32(ndr, "level", *r->in.level);
- ndr->depth--;
- ndr_print_ptr(ndr, "ctr", r->in.ctr);
+ ndr_print_ptr(ndr, "info_ctr", r->in.info_ctr);
ndr->depth++;
- ndr_print_set_switch_value(ndr, r->in.ctr, *r->in.level);
- ndr_print_srvsvc_NetCharDevCtr(ndr, "ctr", r->in.ctr);
+ ndr_print_srvsvc_NetCharDevInfoCtr(ndr, "info_ctr", r->in.info_ctr);
ndr->depth--;
ndr_print_uint32(ndr, "max_buffer", r->in.max_buffer);
ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
if (flags & NDR_OUT) {
ndr_print_struct(ndr, "out", "srvsvc_NetCharDevEnum");
ndr->depth++;
- ndr_print_ptr(ndr, "level", r->out.level);
- ndr->depth++;
- ndr_print_uint32(ndr, "level", *r->out.level);
- ndr->depth--;
- ndr_print_ptr(ndr, "ctr", r->out.ctr);
+ ndr_print_ptr(ndr, "info_ctr", r->out.info_ctr);
ndr->depth++;
- ndr_print_set_switch_value(ndr, r->out.ctr, *r->out.level);
- ndr_print_srvsvc_NetCharDevCtr(ndr, "ctr", r->out.ctr);
+ ndr_print_srvsvc_NetCharDevInfoCtr(ndr, "info_ctr", r->out.info_ctr);
ndr->depth--;
ndr_print_ptr(ndr, "totalentries", r->out.totalentries);
ndr->depth++;
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.user, CH_UTF16)));
NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.user, ndr_charset_length(r->in.user, CH_UTF16), sizeof(uint16_t), CH_UTF16));
}
- if (r->in.level == NULL) {
- return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
- }
- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.level));
- if (r->in.ctr == NULL) {
+ if (r->in.info_ctr == NULL) {
return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
}
- NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.ctr, *r->in.level));
- NDR_CHECK(ndr_push_srvsvc_NetCharDevQCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.ctr));
+ NDR_CHECK(ndr_push_srvsvc_NetCharDevQInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info_ctr));
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.max_buffer));
NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.resume_handle));
if (r->in.resume_handle) {
}
}
if (flags & NDR_OUT) {
- if (r->out.level == NULL) {
- return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
- }
- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.level));
- if (r->out.ctr == NULL) {
+ if (r->out.info_ctr == NULL) {
return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
}
- NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.ctr, *r->out.level));
- NDR_CHECK(ndr_push_srvsvc_NetCharDevQCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.ctr));
+ NDR_CHECK(ndr_push_srvsvc_NetCharDevQInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info_ctr));
if (r->out.totalentries == NULL) {
return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
}
uint32_t _ptr_resume_handle;
TALLOC_CTX *_mem_save_server_unc_0;
TALLOC_CTX *_mem_save_user_0;
- TALLOC_CTX *_mem_save_level_0;
- TALLOC_CTX *_mem_save_ctr_0;
+ TALLOC_CTX *_mem_save_info_ctr_0;
TALLOC_CTX *_mem_save_totalentries_0;
TALLOC_CTX *_mem_save_resume_handle_0;
if (flags & NDR_IN) {
NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_0, 0);
}
if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
- NDR_PULL_ALLOC(ndr, r->in.level);
- }
- _mem_save_level_0 = NDR_PULL_GET_MEM_CTX(ndr);
- NDR_PULL_SET_MEM_CTX(ndr, r->in.level, LIBNDR_FLAG_REF_ALLOC);
- NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.level));
- NDR_PULL_SET_MEM_CTX(ndr, _mem_save_level_0, LIBNDR_FLAG_REF_ALLOC);
- if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
- NDR_PULL_ALLOC(ndr, r->in.ctr);
+ NDR_PULL_ALLOC(ndr, r->in.info_ctr);
}
- _mem_save_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
- NDR_PULL_SET_MEM_CTX(ndr, r->in.ctr, LIBNDR_FLAG_REF_ALLOC);
- NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.ctr, *r->in.level));
- NDR_CHECK(ndr_pull_srvsvc_NetCharDevQCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.ctr));
- NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr_0, LIBNDR_FLAG_REF_ALLOC);
+ _mem_save_info_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
+ NDR_PULL_SET_MEM_CTX(ndr, r->in.info_ctr, LIBNDR_FLAG_REF_ALLOC);
+ NDR_CHECK(ndr_pull_srvsvc_NetCharDevQInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info_ctr));
+ NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_ctr_0, LIBNDR_FLAG_REF_ALLOC);
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.max_buffer));
NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
if (_ptr_resume_handle) {
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.resume_handle));
NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
}
- NDR_PULL_ALLOC(ndr, r->out.level);
- *r->out.level = *r->in.level;
- NDR_PULL_ALLOC(ndr, r->out.ctr);
- *r->out.ctr = *r->in.ctr;
+ NDR_PULL_ALLOC(ndr, r->out.info_ctr);
+ *r->out.info_ctr = *r->in.info_ctr;
NDR_PULL_ALLOC(ndr, r->out.totalentries);
ZERO_STRUCTP(r->out.totalentries);
}
if (flags & NDR_OUT) {
if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
- NDR_PULL_ALLOC(ndr, r->out.level);
- }
- _mem_save_level_0 = NDR_PULL_GET_MEM_CTX(ndr);
- NDR_PULL_SET_MEM_CTX(ndr, r->out.level, LIBNDR_FLAG_REF_ALLOC);
- NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.level));
- NDR_PULL_SET_MEM_CTX(ndr, _mem_save_level_0, LIBNDR_FLAG_REF_ALLOC);
- if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
- NDR_PULL_ALLOC(ndr, r->out.ctr);
+ NDR_PULL_ALLOC(ndr, r->out.info_ctr);
}
- _mem_save_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
- NDR_PULL_SET_MEM_CTX(ndr, r->out.ctr, LIBNDR_FLAG_REF_ALLOC);
- NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.ctr, *r->out.level));
- NDR_CHECK(ndr_pull_srvsvc_NetCharDevQCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.ctr));
- NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr_0, LIBNDR_FLAG_REF_ALLOC);
+ _mem_save_info_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
+ NDR_PULL_SET_MEM_CTX(ndr, r->out.info_ctr, LIBNDR_FLAG_REF_ALLOC);
+ NDR_CHECK(ndr_pull_srvsvc_NetCharDevQInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info_ctr));
+ NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_ctr_0, LIBNDR_FLAG_REF_ALLOC);
if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
NDR_PULL_ALLOC(ndr, r->out.totalentries);
}
ndr_print_string(ndr, "user", r->in.user);
}
ndr->depth--;
- ndr_print_ptr(ndr, "level", r->in.level);
- ndr->depth++;
- ndr_print_uint32(ndr, "level", *r->in.level);
- ndr->depth--;
- ndr_print_ptr(ndr, "ctr", r->in.ctr);
+ ndr_print_ptr(ndr, "info_ctr", r->in.info_ctr);
ndr->depth++;
- ndr_print_set_switch_value(ndr, r->in.ctr, *r->in.level);
- ndr_print_srvsvc_NetCharDevQCtr(ndr, "ctr", r->in.ctr);
+ ndr_print_srvsvc_NetCharDevQInfoCtr(ndr, "info_ctr", r->in.info_ctr);
ndr->depth--;
ndr_print_uint32(ndr, "max_buffer", r->in.max_buffer);
ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
if (flags & NDR_OUT) {
ndr_print_struct(ndr, "out", "srvsvc_NetCharDevQEnum");
ndr->depth++;
- ndr_print_ptr(ndr, "level", r->out.level);
- ndr->depth++;
- ndr_print_uint32(ndr, "level", *r->out.level);
- ndr->depth--;
- ndr_print_ptr(ndr, "ctr", r->out.ctr);
+ ndr_print_ptr(ndr, "info_ctr", r->out.info_ctr);
ndr->depth++;
- ndr_print_set_switch_value(ndr, r->out.ctr, *r->out.level);
- ndr_print_srvsvc_NetCharDevQCtr(ndr, "ctr", r->out.ctr);
+ ndr_print_srvsvc_NetCharDevQInfoCtr(ndr, "info_ctr", r->out.info_ctr);
ndr->depth--;
ndr_print_ptr(ndr, "totalentries", r->out.totalentries);
ndr->depth++;
if (r->out.stats == NULL) {
return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
}
- NDR_CHECK(ndr_push_srvsvc_Statistics(ndr, NDR_SCALARS, r->out.stats));
+ NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.stats));
+ if (*r->out.stats) {
+ NDR_CHECK(ndr_push_srvsvc_Statistics(ndr, NDR_SCALARS, *r->out.stats));
+ }
NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
}
return NDR_ERR_SUCCESS;
{
uint32_t _ptr_server_unc;
uint32_t _ptr_service;
+ uint32_t _ptr_stats;
TALLOC_CTX *_mem_save_server_unc_0;
TALLOC_CTX *_mem_save_service_0;
TALLOC_CTX *_mem_save_stats_0;
+ TALLOC_CTX *_mem_save_stats_1;
if (flags & NDR_IN) {
ZERO_STRUCT(r->out);
}
_mem_save_stats_0 = NDR_PULL_GET_MEM_CTX(ndr);
NDR_PULL_SET_MEM_CTX(ndr, r->out.stats, LIBNDR_FLAG_REF_ALLOC);
- NDR_CHECK(ndr_pull_srvsvc_Statistics(ndr, NDR_SCALARS, r->out.stats));
+ NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_stats));
+ if (_ptr_stats) {
+ NDR_PULL_ALLOC(ndr, *r->out.stats);
+ } else {
+ *r->out.stats = NULL;
+ }
+ if (*r->out.stats) {
+ _mem_save_stats_1 = NDR_PULL_GET_MEM_CTX(ndr);
+ NDR_PULL_SET_MEM_CTX(ndr, *r->out.stats, 0);
+ NDR_CHECK(ndr_pull_srvsvc_Statistics(ndr, NDR_SCALARS, *r->out.stats));
+ NDR_PULL_SET_MEM_CTX(ndr, _mem_save_stats_1, 0);
+ }
NDR_PULL_SET_MEM_CTX(ndr, _mem_save_stats_0, LIBNDR_FLAG_REF_ALLOC);
NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
}
ndr->depth++;
ndr_print_ptr(ndr, "stats", r->out.stats);
ndr->depth++;
- ndr_print_srvsvc_Statistics(ndr, "stats", r->out.stats);
+ ndr_print_ptr(ndr, "stats", *r->out.stats);
+ ndr->depth++;
+ if (*r->out.stats) {
+ ndr_print_srvsvc_Statistics(ndr, "stats", *r->out.stats);
+ }
+ ndr->depth--;
ndr->depth--;
ndr_print_WERROR(ndr, "result", r->out.result);
ndr->depth--;
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
}
- if (r->in.level == NULL) {
- return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
- }
- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.level));
if (r->in.transports == NULL) {
return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
}
- NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.transports, *r->in.level));
- NDR_CHECK(ndr_push_srvsvc_NetTransportCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.transports));
+ NDR_CHECK(ndr_push_srvsvc_NetTransportInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.transports));
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.max_buffer));
NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.resume_handle));
if (r->in.resume_handle) {
}
}
if (flags & NDR_OUT) {
- if (r->out.level == NULL) {
- return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
- }
- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.level));
if (r->out.transports == NULL) {
return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
}
- NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.transports, *r->out.level));
- NDR_CHECK(ndr_push_srvsvc_NetTransportCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.transports));
+ NDR_CHECK(ndr_push_srvsvc_NetTransportInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.transports));
if (r->out.totalentries == NULL) {
return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
}
uint32_t _ptr_server_unc;
uint32_t _ptr_resume_handle;
TALLOC_CTX *_mem_save_server_unc_0;
- TALLOC_CTX *_mem_save_level_0;
TALLOC_CTX *_mem_save_transports_0;
TALLOC_CTX *_mem_save_totalentries_0;
TALLOC_CTX *_mem_save_resume_handle_0;
NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
}
- if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
- NDR_PULL_ALLOC(ndr, r->in.level);
- }
- _mem_save_level_0 = NDR_PULL_GET_MEM_CTX(ndr);
- NDR_PULL_SET_MEM_CTX(ndr, r->in.level, LIBNDR_FLAG_REF_ALLOC);
- NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.level));
- NDR_PULL_SET_MEM_CTX(ndr, _mem_save_level_0, LIBNDR_FLAG_REF_ALLOC);
if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
NDR_PULL_ALLOC(ndr, r->in.transports);
}
_mem_save_transports_0 = NDR_PULL_GET_MEM_CTX(ndr);
NDR_PULL_SET_MEM_CTX(ndr, r->in.transports, LIBNDR_FLAG_REF_ALLOC);
- NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.transports, *r->in.level));
- NDR_CHECK(ndr_pull_srvsvc_NetTransportCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.transports));
+ NDR_CHECK(ndr_pull_srvsvc_NetTransportInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.transports));
NDR_PULL_SET_MEM_CTX(ndr, _mem_save_transports_0, LIBNDR_FLAG_REF_ALLOC);
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.max_buffer));
NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.resume_handle));
NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
}
- NDR_PULL_ALLOC(ndr, r->out.level);
- *r->out.level = *r->in.level;
NDR_PULL_ALLOC(ndr, r->out.transports);
*r->out.transports = *r->in.transports;
NDR_PULL_ALLOC(ndr, r->out.totalentries);
ZERO_STRUCTP(r->out.totalentries);
}
if (flags & NDR_OUT) {
- if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
- NDR_PULL_ALLOC(ndr, r->out.level);
- }
- _mem_save_level_0 = NDR_PULL_GET_MEM_CTX(ndr);
- NDR_PULL_SET_MEM_CTX(ndr, r->out.level, LIBNDR_FLAG_REF_ALLOC);
- NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.level));
- NDR_PULL_SET_MEM_CTX(ndr, _mem_save_level_0, LIBNDR_FLAG_REF_ALLOC);
if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
NDR_PULL_ALLOC(ndr, r->out.transports);
}
_mem_save_transports_0 = NDR_PULL_GET_MEM_CTX(ndr);
NDR_PULL_SET_MEM_CTX(ndr, r->out.transports, LIBNDR_FLAG_REF_ALLOC);
- NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.transports, *r->out.level));
- NDR_CHECK(ndr_pull_srvsvc_NetTransportCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.transports));
+ NDR_CHECK(ndr_pull_srvsvc_NetTransportInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.transports));
NDR_PULL_SET_MEM_CTX(ndr, _mem_save_transports_0, LIBNDR_FLAG_REF_ALLOC);
if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
NDR_PULL_ALLOC(ndr, r->out.totalentries);
ndr_print_string(ndr, "server_unc", r->in.server_unc);
}
ndr->depth--;
- ndr_print_ptr(ndr, "level", r->in.level);
- ndr->depth++;
- ndr_print_uint32(ndr, "level", *r->in.level);
- ndr->depth--;
ndr_print_ptr(ndr, "transports", r->in.transports);
ndr->depth++;
- ndr_print_set_switch_value(ndr, r->in.transports, *r->in.level);
- ndr_print_srvsvc_NetTransportCtr(ndr, "transports", r->in.transports);
+ ndr_print_srvsvc_NetTransportInfoCtr(ndr, "transports", r->in.transports);
ndr->depth--;
ndr_print_uint32(ndr, "max_buffer", r->in.max_buffer);
ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
if (flags & NDR_OUT) {
ndr_print_struct(ndr, "out", "srvsvc_NetTransportEnum");
ndr->depth++;
- ndr_print_ptr(ndr, "level", r->out.level);
- ndr->depth++;
- ndr_print_uint32(ndr, "level", *r->out.level);
- ndr->depth--;
ndr_print_ptr(ndr, "transports", r->out.transports);
ndr->depth++;
- ndr_print_set_switch_value(ndr, r->out.transports, *r->out.level);
- ndr_print_srvsvc_NetTransportCtr(ndr, "transports", r->out.transports);
+ ndr_print_srvsvc_NetTransportInfoCtr(ndr, "transports", r->out.transports);
ndr->depth--;
ndr_print_ptr(ndr, "totalentries", r->out.totalentries);
ndr->depth++;
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
}
- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown));
- NDR_CHECK(ndr_push_srvsvc_NetTransportInfo0(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.transport));
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
+ if (r->in.info0 == NULL) {
+ return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+ }
+ NDR_CHECK(ndr_push_srvsvc_NetTransportInfo0(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info0));
}
if (flags & NDR_OUT) {
NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
{
uint32_t _ptr_server_unc;
TALLOC_CTX *_mem_save_server_unc_0;
+ TALLOC_CTX *_mem_save_info0_0;
if (flags & NDR_IN) {
NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
if (_ptr_server_unc) {
NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
}
- NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown));
- NDR_CHECK(ndr_pull_srvsvc_NetTransportInfo0(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.transport));
+ NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
+ if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+ NDR_PULL_ALLOC(ndr, r->in.info0);
+ }
+ _mem_save_info0_0 = NDR_PULL_GET_MEM_CTX(ndr);
+ NDR_PULL_SET_MEM_CTX(ndr, r->in.info0, LIBNDR_FLAG_REF_ALLOC);
+ NDR_CHECK(ndr_pull_srvsvc_NetTransportInfo0(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info0));
+ NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info0_0, LIBNDR_FLAG_REF_ALLOC);
}
if (flags & NDR_OUT) {
NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
ndr_print_string(ndr, "server_unc", r->in.server_unc);
}
ndr->depth--;
- ndr_print_uint32(ndr, "unknown", r->in.unknown);
- ndr_print_srvsvc_NetTransportInfo0(ndr, "transport", &r->in.transport);
+ ndr_print_uint32(ndr, "level", r->in.level);
+ ndr_print_ptr(ndr, "info0", r->in.info0);
+ ndr->depth++;
+ ndr_print_srvsvc_NetTransportInfo0(ndr, "info0", r->in.info0);
+ ndr->depth--;
ndr->depth--;
}
if (flags & NDR_OUT) {
void ndr_print_srvsvc_NetCharDevCtr1(struct ndr_print *ndr, const char *name, const struct srvsvc_NetCharDevCtr1 *r);
void ndr_print_srvsvc_NetCharDevInfo(struct ndr_print *ndr, const char *name, const union srvsvc_NetCharDevInfo *r);
void ndr_print_srvsvc_NetCharDevCtr(struct ndr_print *ndr, const char *name, const union srvsvc_NetCharDevCtr *r);
+void ndr_print_srvsvc_NetCharDevInfoCtr(struct ndr_print *ndr, const char *name, const struct srvsvc_NetCharDevInfoCtr *r);
void ndr_print_srvsvc_NetCharDevQInfo0(struct ndr_print *ndr, const char *name, const struct srvsvc_NetCharDevQInfo0 *r);
void ndr_print_srvsvc_NetCharDevQCtr0(struct ndr_print *ndr, const char *name, const struct srvsvc_NetCharDevQCtr0 *r);
void ndr_print_srvsvc_NetCharDevQInfo1(struct ndr_print *ndr, const char *name, const struct srvsvc_NetCharDevQInfo1 *r);
void ndr_print_srvsvc_NetCharDevQCtr1(struct ndr_print *ndr, const char *name, const struct srvsvc_NetCharDevQCtr1 *r);
void ndr_print_srvsvc_NetCharDevQInfo(struct ndr_print *ndr, const char *name, const union srvsvc_NetCharDevQInfo *r);
void ndr_print_srvsvc_NetCharDevQCtr(struct ndr_print *ndr, const char *name, const union srvsvc_NetCharDevQCtr *r);
+void ndr_print_srvsvc_NetCharDevQInfoCtr(struct ndr_print *ndr, const char *name, const struct srvsvc_NetCharDevQInfoCtr *r);
void ndr_print_srvsvc_NetConnInfo0(struct ndr_print *ndr, const char *name, const struct srvsvc_NetConnInfo0 *r);
void ndr_print_srvsvc_NetConnCtr0(struct ndr_print *ndr, const char *name, const struct srvsvc_NetConnCtr0 *r);
void ndr_print_srvsvc_NetConnInfo1(struct ndr_print *ndr, const char *name, const struct srvsvc_NetConnInfo1 *r);
void ndr_print_srvsvc_NetTransportInfo3(struct ndr_print *ndr, const char *name, const struct srvsvc_NetTransportInfo3 *r);
void ndr_print_srvsvc_NetTransportCtr3(struct ndr_print *ndr, const char *name, const struct srvsvc_NetTransportCtr3 *r);
void ndr_print_srvsvc_NetTransportCtr(struct ndr_print *ndr, const char *name, const union srvsvc_NetTransportCtr *r);
+void ndr_print_srvsvc_NetTransportInfoCtr(struct ndr_print *ndr, const char *name, const struct srvsvc_NetTransportInfoCtr *r);
void ndr_print_srvsvc_NetRemoteTODInfo(struct ndr_print *ndr, const char *name, const struct srvsvc_NetRemoteTODInfo *r);
void ndr_print_srvsvc_NetTransportInfo(struct ndr_print *ndr, const char *name, const union srvsvc_NetTransportInfo *r);
void ndr_print_srvsvc_NetCharDevEnum(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetCharDevEnum *r);
}
ZERO_STRUCT(r->out);
- r->out.level = r->in.level;
- r->out.ctr = r->in.ctr;
+ r->out.info_ctr = r->in.info_ctr;
r->out.totalentries = talloc_zero(r, uint32_t);
if (r->out.totalentries == NULL) {
talloc_free(r);
}
ZERO_STRUCT(r->out);
- r->out.level = r->in.level;
- r->out.ctr = r->in.ctr;
+ r->out.info_ctr = r->in.info_ctr;
r->out.totalentries = talloc_zero(r, uint32_t);
if (r->out.totalentries == NULL) {
talloc_free(r);
}
ZERO_STRUCT(r->out);
- r->out.stats = talloc_zero(r, struct srvsvc_Statistics);
+ r->out.stats = talloc_zero(r, struct srvsvc_Statistics *);
if (r->out.stats == NULL) {
talloc_free(r);
return false;
}
ZERO_STRUCT(r->out);
- r->out.level = r->in.level;
r->out.transports = r->in.transports;
r->out.totalentries = talloc_zero(r, uint32_t);
if (r->out.totalentries == NULL) {
struct srvsvc_NetCharDevCtr1 *ctr1;/* [unique,case] */
};
+struct srvsvc_NetCharDevInfoCtr {
+ uint32_t level;
+ union srvsvc_NetCharDevCtr ctr;/* [switch_is(level)] */
+};
+
struct srvsvc_NetCharDevQInfo0 {
const char *device;/* [unique,charset(UTF16)] */
};
struct srvsvc_NetCharDevQCtr1 *ctr1;/* [unique,case] */
};
+struct srvsvc_NetCharDevQInfoCtr {
+ uint32_t level;
+ union srvsvc_NetCharDevQCtr ctr;/* [switch_is(level)] */
+};
+
struct srvsvc_NetConnInfo0 {
uint32_t conn_id;
};
uint32_t sessreqs;
uint32_t opensearch;
uint32_t activelocks;
+ uint32_t numreqbufs;
uint32_t sizereqbufs;
uint32_t numbigbufs;
uint32_t numfiletasks;
uint32_t sessreqs;
uint32_t opensearch;
uint32_t activelocks;
+ uint32_t numreqbufs;
uint32_t sizereqbufs;
uint32_t numbigbufs;
uint32_t numfiletasks;
};
struct srvsvc_NetDiskInfo0 {
- const char * disk;/* [flag(LIBNDR_FLAG_STR_LEN4)] */
+ uint32_t __disk_offset;/* [value(0)] */
+ uint32_t __disk_length;/* [value(strlen(disk)+1)] */
+ const char *disk;/* [charset(UTF16)] */
};
struct srvsvc_NetDiskInfo {
struct srvsvc_NetTransportCtr3 *ctr3;/* [unique,case(3)] */
};
+struct srvsvc_NetTransportInfoCtr {
+ uint32_t level;
+ union srvsvc_NetTransportCtr ctr;/* [switch_is(level)] */
+};
+
struct srvsvc_NetRemoteTODInfo {
uint32_t elapsed;
uint32_t msecs;
struct {
const char *server_unc;/* [unique,charset(UTF16)] */
uint32_t max_buffer;
- uint32_t *level;/* [ref] */
- union srvsvc_NetCharDevCtr *ctr;/* [ref,switch_is(*level)] */
+ struct srvsvc_NetCharDevInfoCtr *info_ctr;/* [ref] */
uint32_t *resume_handle;/* [unique] */
} in;
struct {
uint32_t *totalentries;/* [ref] */
- uint32_t *level;/* [ref] */
- union srvsvc_NetCharDevCtr *ctr;/* [ref,switch_is(*level)] */
+ struct srvsvc_NetCharDevInfoCtr *info_ctr;/* [ref] */
uint32_t *resume_handle;/* [unique] */
WERROR result;
} out;
const char *server_unc;/* [unique,charset(UTF16)] */
const char *user;/* [unique,charset(UTF16)] */
uint32_t max_buffer;
- uint32_t *level;/* [ref] */
- union srvsvc_NetCharDevQCtr *ctr;/* [ref,switch_is(*level)] */
+ struct srvsvc_NetCharDevQInfoCtr *info_ctr;/* [ref] */
uint32_t *resume_handle;/* [unique] */
} in;
struct {
uint32_t *totalentries;/* [ref] */
- uint32_t *level;/* [ref] */
- union srvsvc_NetCharDevQCtr *ctr;/* [ref,switch_is(*level)] */
+ struct srvsvc_NetCharDevQInfoCtr *info_ctr;/* [ref] */
uint32_t *resume_handle;/* [unique] */
WERROR result;
} out;
} in;
struct {
- struct srvsvc_Statistics *stats;/* [ref] */
+ struct srvsvc_Statistics **stats;/* [ref] */
WERROR result;
} out;
struct {
const char *server_unc;/* [unique,charset(UTF16)] */
uint32_t max_buffer;
- uint32_t *level;/* [ref] */
- union srvsvc_NetTransportCtr *transports;/* [ref,switch_is(*level)] */
+ struct srvsvc_NetTransportInfoCtr *transports;/* [ref] */
uint32_t *resume_handle;/* [unique] */
} in;
struct {
uint32_t *totalentries;/* [ref] */
- uint32_t *level;/* [ref] */
- union srvsvc_NetTransportCtr *transports;/* [ref,switch_is(*level)] */
+ struct srvsvc_NetTransportInfoCtr *transports;/* [ref] */
uint32_t *resume_handle;/* [unique] */
WERROR result;
} out;
struct srvsvc_NetTransportDel {
struct {
const char *server_unc;/* [unique,charset(UTF16)] */
- uint32_t unknown;
- struct srvsvc_NetTransportInfo0 transport;
+ uint32_t level;
+ struct srvsvc_NetTransportInfo0 *info0;/* [ref] */
} in;
struct {
char *binding;
NTSTATUS status;
struct srvsvc_NetShareEnumAll r;
+ struct srvsvc_NetShareInfoCtr info_ctr;
uint32_t resume_handle = 0;
TALLOC_CTX *mem_ctx = talloc_init("browse_host");
struct srvsvc_NetShareCtr1 ctr1;
+ uint32_t totalentries = 0;
binding = talloc_asprintf(mem_ctx, "ncacn_np:%s", query_host);
return false;
}
+ info_ctr.level = 1;
+ info_ctr.ctr.ctr1 = &ctr1;
+
r.in.server_unc = talloc_asprintf(mem_ctx,"\\\\%s",dcerpc_server_name(p));
- r.in.level = 1;
- r.in.ctr.ctr1 = &ctr1;
+ r.in.info_ctr = &info_ctr;
r.in.max_buffer = ~0;
r.in.resume_handle = &resume_handle;
+ r.out.resume_handle = &resume_handle;
+ r.out.totalentries = &totalentries;
+ r.out.info_ctr = &info_ctr;
d_printf("\n\tSharename Type Comment\n");
d_printf("\t--------- ---- -------\n");
if (NT_STATUS_IS_OK(status) &&
(W_ERROR_EQUAL(r.out.result, WERR_MORE_DATA) ||
W_ERROR_IS_OK(r.out.result)) &&
- r.out.ctr.ctr1) {
- display_share_result(r.out.ctr.ctr1);
- resume_handle += r.out.ctr.ctr1->count;
+ r.out.info_ctr->ctr.ctr1) {
+ display_share_result(r.out.info_ctr->ctr.ctr1);
+ resume_handle += r.out.info_ctr->ctr.ctr1->count;
}
} while (NT_STATUS_IS_OK(status) && W_ERROR_EQUAL(r.out.result, WERR_MORE_DATA));
NTSTATUS status;
struct libnet_RpcConnect c;
struct srvsvc_NetShareEnumAll s;
+ struct srvsvc_NetShareInfoCtr info_ctr;
uint32_t resume_handle = 0;
+ uint32_t totalentries = 0;
struct srvsvc_NetShareCtr0 ctr0;
struct srvsvc_NetShareCtr1 ctr1;
struct srvsvc_NetShareCtr2 ctr2;
return status;
}
- s.in.level = r->in.level;
- switch (s.in.level) {
+ info_ctr.level = r->in.level;
+ switch (info_ctr.level) {
case 0:
- s.in.ctr.ctr0 = &ctr0;
+ info_ctr.ctr.ctr0 = &ctr0;
ZERO_STRUCT(ctr0);
break;
case 1:
- s.in.ctr.ctr1 = &ctr1;
+ info_ctr.ctr.ctr1 = &ctr1;
ZERO_STRUCT(ctr1);
break;
case 2:
- s.in.ctr.ctr2 = &ctr2;
+ info_ctr.ctr.ctr2 = &ctr2;
ZERO_STRUCT(ctr2);
break;
case 501:
- s.in.ctr.ctr501 = &ctr501;
+ info_ctr.ctr.ctr501 = &ctr501;
ZERO_STRUCT(ctr501);
break;
case 502:
- s.in.ctr.ctr502 = &ctr502;
+ info_ctr.ctr.ctr502 = &ctr502;
ZERO_STRUCT(ctr502);
break;
default:
r->out.error_string = talloc_asprintf(mem_ctx,
"libnet_ListShares: Invalid info level requested: %d",
- s.in.level);
+ info_ctr.level);
return NT_STATUS_INVALID_PARAMETER;
}
s.in.max_buffer = ~0;
s.in.resume_handle = &resume_handle;
-
+ s.in.info_ctr = &info_ctr;
+ s.out.info_ctr = &info_ctr;
+ s.out.totalentries = &totalentries;
status = dcerpc_srvsvc_NetShareEnumAll(c.out.dcerpc_pipe, mem_ctx, &s);
goto disconnect;
}
- r->out.ctr = s.out.ctr;
+ r->out.ctr = s.out.info_ctr->ctr;
disconnect:
talloc_free(c.out.dcerpc_pipe);
NTSTATUS status;
struct libnet_RpcConnect c;
struct srvsvc_NetShareAdd s;
+ union srvsvc_NetShareInfo info;
c.level = LIBNET_RPC_CONNECT_SERVER;
c.in.name = r->in.server_name;
return status;
}
+ info.info2 = &r->in.share;
+
s.in.level = 2;
- s.in.info.info2 = &r->in.share;
+ s.in.info = &info;
s.in.server_unc = talloc_asprintf(mem_ctx, "\\\\%s", r->in.server_name);
status = dcerpc_srvsvc_NetShareAdd(c.out.dcerpc_pipe, mem_ctx, &s);
NTSTATUS status;
struct libnet_RpcConnect c;
struct srvsvc_NetRemoteTOD tod;
+ struct srvsvc_NetRemoteTODInfo *info = NULL;
struct tm tm;
/* prepare connect to the SRVSVC pipe of a timeserver */
/* prepare srvsvc_NetrRemoteTOD */
tod.in.server_unc = talloc_asprintf(mem_ctx, "\\%s", c.in.name);
+ tod.out.info = &info;
/* 2. try srvsvc_NetRemoteTOD */
status = dcerpc_srvsvc_NetRemoteTOD(c.out.dcerpc_pipe, mem_ctx, &tod);
}
/* need to set the out parameters */
- tm.tm_sec = (int)tod.out.info->secs;
- tm.tm_min = (int)tod.out.info->mins;
- tm.tm_hour = (int)tod.out.info->hours;
- tm.tm_mday = (int)tod.out.info->day;
- tm.tm_mon = (int)tod.out.info->month -1;
- tm.tm_year = (int)tod.out.info->year - 1900;
+ tm.tm_sec = (int)info->secs;
+ tm.tm_min = (int)info->mins;
+ tm.tm_hour = (int)info->hours;
+ tm.tm_mday = (int)info->day;
+ tm.tm_mon = (int)info->month -1;
+ tm.tm_year = (int)info->year - 1900;
tm.tm_wday = -1;
tm.tm_yday = -1;
tm.tm_isdst = -1;
r->srvsvc.out.time = timegm(&tm);
- r->srvsvc.out.time_zone = tod.out.info->timezone * 60;
+ r->srvsvc.out.time_zone = info->timezone * 60;
goto disconnect;
[default] ;
} srvsvc_NetCharDevCtr;
+ typedef struct {
+ uint32 level;
+ [switch_is(level)] srvsvc_NetCharDevCtr ctr;
+ } srvsvc_NetCharDevInfoCtr;
+
/******************/
/* Function: 0x00 */
WERROR srvsvc_NetCharDevEnum(
[in,unique] [string,charset(UTF16)] uint16 *server_unc,
- [in,out] uint32 level,
- [in,out,switch_is(level)] srvsvc_NetCharDevCtr ctr,
+ [in,out,ref] srvsvc_NetCharDevInfoCtr *info_ctr,
[in] uint32 max_buffer,
- [out] uint32 totalentries,
+ [out,ref] uint32 *totalentries,
[in,out,unique] uint32 *resume_handle
);
[in,unique] [string,charset(UTF16)] uint16 *server_unc,
[in] [string,charset(UTF16)] uint16 device_name[],
[in] uint32 level,
- [out,switch_is(level)] srvsvc_NetCharDevInfo info
+ [out,ref,switch_is(level)] srvsvc_NetCharDevInfo *info
);
/******************/
[default] ;
} srvsvc_NetCharDevQCtr;
+ typedef struct {
+ uint32 level;
+ [switch_is(level)] srvsvc_NetCharDevQCtr ctr;
+ } srvsvc_NetCharDevQInfoCtr;
+
/******************/
/* Function: 0x03 */
WERROR srvsvc_NetCharDevQEnum(
[in,unique] [string,charset(UTF16)] uint16 *server_unc,
[in,unique] [string,charset(UTF16)] uint16 *user,
- [in,out] uint32 level,
- [in,out,switch_is(level)] srvsvc_NetCharDevQCtr ctr,
+ [in,out,ref] srvsvc_NetCharDevQInfoCtr *info_ctr,
[in] uint32 max_buffer,
- [out] uint32 totalentries,
+ [out,ref] uint32 *totalentries,
[in,out,unique] uint32 *resume_handle
);
[in] [string,charset(UTF16)] uint16 queue_name[],
[in] [string,charset(UTF16)] uint16 user[],
[in] uint32 level,
- [out,switch_is(level)] srvsvc_NetCharDevQInfo info
+ [out,switch_is(level),ref] srvsvc_NetCharDevQInfo *info
);
/******************/
/* Function: 0x05 */
WERROR srvsvc_NetCharDevQSetInfo(
- [in,unique] [string,charset(UTF16)] uint16 *server_unc,
+ [in,unique] [string,charset(UTF16)] uint16 *server_unc,
[in] [string,charset(UTF16)] uint16 queue_name[],
[in] uint32 level,
[in,switch_is(level)] srvsvc_NetCharDevQInfo info,
WERROR srvsvc_NetConnEnum(
[in,unique] [string,charset(UTF16)] uint16 *server_unc,
[in,unique] [string,charset(UTF16)] uint16 *path,
- [in,out] uint32 level,
- [in,out,switch_is(level)] srvsvc_NetConnCtr ctr,
+ [in,out,ref] srvsvc_NetConnInfoCtr *info_ctr,
[in] uint32 max_buffer,
- [out] uint32 totalentries,
+ [out,ref] uint32 *totalentries,
[in,out,unique] uint32 *resume_handle
);
[in,unique] [string,charset(UTF16)] uint16 *server_unc,
[in,unique] [string,charset(UTF16)] uint16 *path,
[in,unique] [string,charset(UTF16)] uint16 *user,
- [in,out] uint32 level,
- [in,out,switch_is(level)] srvsvc_NetFileCtr ctr,
+ [in,out,ref] srvsvc_NetFileInfoCtr *info_ctr,
[in] uint32 max_buffer,
- [out] uint32 totalentries,
+ [out,ref] uint32 *totalentries,
[in,out,unique] uint32 *resume_handle
);
[in,unique] [string,charset(UTF16)] uint16 *server_unc,
[in] uint32 fid,
[in] uint32 level,
- [out,switch_is(level)] srvsvc_NetFileInfo info
+ [out,switch_is(level),ref] srvsvc_NetFileInfo *info
);
/******************/
[in,unique] [string,charset(UTF16)] uint16 *server_unc,
[in,unique] [string,charset(UTF16)] uint16 *client,
[in,unique] [string,charset(UTF16)] uint16 *user,
- [in,out] uint32 level,
- [in,out,switch_is(level)] srvsvc_NetSessCtr ctr,
+ [in,out,ref] srvsvc_NetSessInfoCtr *info_ctr,
[in] uint32 max_buffer,
- [out] uint32 totalentries,
+ [out,ref] uint32 *totalentries,
[in,out,unique] uint32 *resume_handle
);
srvsvc_ShareType type;
[string,charset(UTF16)] uint16 *comment;
uint32 permissions;
- int32 max_users;
+ uint32 max_users;
uint32 current_users;
[string,charset(UTF16)] uint16 *path;
[string,charset(UTF16)] uint16 *password;
- /* maybe here is a struct sec_desc_buf following */
- uint32 unknown;
- [subcontext(4)] security_descriptor *sd;
+ sec_desc_buf sd_buf;
} srvsvc_NetShareInfo502;
typedef struct {
} srvsvc_NetShareCtr1005;
typedef struct {
- int32 max_users;
+ uint32 max_users;
} srvsvc_NetShareInfo1006;
typedef struct {
WERROR srvsvc_NetShareAdd(
[in,unique] [string,charset(UTF16)] uint16 *server_unc,
[in] uint32 level,
- [in,switch_is(level)] srvsvc_NetShareInfo info,
+ [in,ref,switch_is(level)] srvsvc_NetShareInfo *info,
[in,out,unique] uint32 *parm_error
);
/* Function: 0x0f */
WERROR srvsvc_NetShareEnumAll (
[in,unique] [string,charset(UTF16)] uint16 *server_unc,
- [in,out] uint32 level,
- [in,out,switch_is(level)] srvsvc_NetShareCtr ctr,
+ [in,out,ref] srvsvc_NetShareInfoCtr *info_ctr,
[in] uint32 max_buffer,
- [out] uint32 totalentries,
+ [out,ref] uint32 *totalentries,
[in,out,unique] uint32 *resume_handle
);
[in,unique] [string,charset(UTF16)] uint16 *server_unc,
[in] [string,charset(UTF16)] uint16 share_name[],
[in] uint32 level,
- [out,switch_is(level)] srvsvc_NetShareInfo info
+ [out,ref,switch_is(level)] srvsvc_NetShareInfo *info
);
/******************/
[in,unique] [string,charset(UTF16)] uint16 *server_unc,
[in] [string,charset(UTF16)] uint16 share_name[],
[in] uint32 level,
- [in,switch_is(level)] srvsvc_NetShareInfo info,
+ [in,ref,switch_is(level)] srvsvc_NetShareInfo *info,
[in,out,unique] uint32 *parm_error
);
WERROR srvsvc_NetShareCheck(
[in,unique] [string,charset(UTF16)] uint16 *server_unc,
[in] [string,charset(UTF16)] uint16 device_name[],
- [out] srvsvc_ShareType type
+ [out,ref] srvsvc_ShareType *type
);
/**************************/
uint32 sessreqs;
uint32 opensearch;
uint32 activelocks;
+ uint32 numreqbufs;
uint32 sizereqbufs;
uint32 numbigbufs;
uint32 numfiletasks;
uint32 sessreqs;
uint32 opensearch;
uint32 activelocks;
+ uint32 numreqbufs;
uint32 sizereqbufs;
uint32 numbigbufs;
uint32 numfiletasks;
WERROR srvsvc_NetSrvGetInfo(
[in,unique] [string,charset(UTF16)] uint16 *server_unc,
[in] uint32 level,
- [out,switch_is(level)] srvsvc_NetSrvInfo info
+ [out,ref,switch_is(level)] srvsvc_NetSrvInfo *info
);
/******************/
WERROR srvsvc_NetSrvSetInfo(
[in,unique] [string,charset(UTF16)] uint16 *server_unc,
[in] uint32 level,
- [in,switch_is(level)] srvsvc_NetSrvInfo info,
+ [in,ref,switch_is(level)] srvsvc_NetSrvInfo *info,
[in,out,unique] uint32 *parm_error
);
WERROR srvsvc_NetDiskEnum(
[in,unique] [string,charset(UTF16)] uint16 *server_unc,
[in] uint32 level,
- [in,out] srvsvc_NetDiskInfo info,
+ [in,out,ref] srvsvc_NetDiskInfo *info,
[in] uint32 maxlen,
- [out] uint32 totalentries,
+ [out,ref] uint32 *totalentries,
[in,out,unique] uint32 *resume_handle
);
[in,unique] [string,charset(UTF16)] uint16 *service,
[in] uint32 level,
[in] uint32 options,
- [out] srvsvc_Statistics stat
+ [out,ref] srvsvc_Statistics **stats
);
/**************************/
[default];
} srvsvc_NetTransportCtr;
+ typedef struct {
+ uint32 level;
+ [switch_is(level)] srvsvc_NetTransportCtr ctr;
+ } srvsvc_NetTransportInfoCtr;
+
/******************/
/* Function: 0x1a */
WERROR srvsvc_NetTransportEnum(
[in,unique] [string,charset(UTF16)] uint16 *server_unc,
- [in,out] uint32 level,
- [in,out,switch_is(level)] srvsvc_NetTransportCtr transports,
+ [in,out,ref] srvsvc_NetTransportInfoCtr *transports,
[in] uint32 max_buffer,
- [out] uint32 totalentries,
+ [out,ref] uint32 *totalentries,
[in,out,unique] uint32 *resume_handle
);
WERROR srvsvc_NetTransportDel(
[in,unique] [string,charset(UTF16)] uint16 *server_unc,
[in] uint32 level,
- [in,switch_is(level)] srvsvc_NetTransportInfo info
+ [in] srvsvc_NetTransportInfo0 *info0
);
/**************************/
/* Function: 0x1c */
WERROR srvsvc_NetRemoteTOD(
[in,unique] [string,charset(UTF16)] uint16 *server_unc,
- [out,unique] srvsvc_NetRemoteTODInfo *info
+ [out,ref] srvsvc_NetRemoteTODInfo **info
);
/**************************/
[in,unique] [string,charset(UTF16)] uint16 *server_unc,
[in] [string,charset(UTF16)] uint16 path[],
[in] uint32 pathflags,
- [out] uint32 pathtype
+ [out,ref] uint32 *pathtype
);
/******************/
[out] [size_is(maxbuf)] uint8 can_path[],
[in] uint32 maxbuf,
[in] [string,charset(UTF16)] uint16 prefix[],
- [in,out] uint32 pathtype,
+ [in,out,ref] uint32 *pathtype,
[in] uint32 pathflags
);
total entries ... */
WERROR srvsvc_NetShareEnum(
[in,unique] [string,charset(UTF16)] uint16 *server_unc,
- [in,out] uint32 level,
- [in,out,switch_is(level)] srvsvc_NetShareCtr ctr,
+ [in,out,ref] srvsvc_NetShareInfoCtr *info_ctr,
[in] uint32 max_buffer,
- [out] uint32 totalentries,
+ [out,ref] uint32 *totalentries,
[in,out,unique] uint32 *resume_handle
);
[in,unique] [string,charset(UTF16)] uint16 *share,
[in] [string,charset(UTF16)] uint16 file[],
[in] security_secinfo securityinformation,
- [out,unique] sec_desc_buf *sd_buf
+ [out,ref] sec_desc_buf **sd_buf
);
/******************/
[in,unique] [string,charset(UTF16)] uint16 *share,
[in] [string,charset(UTF16)] uint16 file[],
[in] security_secinfo securityinformation,
- [in] sec_desc_buf sd_buf
+ [in,ref] sec_desc_buf *sd_buf
);
return 0;
}
-/* This hardcoded value should go into a ldb database! */
-uint32_t dcesrv_common_get_share_unknown(TALLOC_CTX *mem_ctx, struct dcesrv_context *dce_ctx, struct share_config *scfg)
-{
- return 0;
-}
-
/* This hardcoded value should go into a ldb database! */
struct security_descriptor *dcesrv_common_get_security_descriptor(TALLOC_CTX *mem_ctx, struct dcesrv_context *dce_ctx, struct share_config *scfg)
{
static WERROR dcesrv_srvsvc_NetCharDevEnum(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
struct srvsvc_NetCharDevEnum *r)
{
- r->out.level = r->in.level;
- r->out.totalentries = 0;
- r->out.resume_handle = NULL;
+ *r->out.totalentries = 0;
- switch (r->in.level) {
+ switch (r->in.info_ctr->level) {
case 0:
- r->out.ctr.ctr0 = talloc(mem_ctx, struct srvsvc_NetCharDevCtr0);
- W_ERROR_HAVE_NO_MEMORY(r->out.ctr.ctr0);
+ r->out.info_ctr->ctr.ctr0 = talloc(mem_ctx, struct srvsvc_NetCharDevCtr0);
+ W_ERROR_HAVE_NO_MEMORY(r->out.info_ctr->ctr.ctr0);
- r->out.ctr.ctr0->count = 0;
- r->out.ctr.ctr0->array = NULL;
+ r->out.info_ctr->ctr.ctr0->count = 0;
+ r->out.info_ctr->ctr.ctr0->array = NULL;
return WERR_NOT_SUPPORTED;
case 1:
- r->out.ctr.ctr1 = talloc(mem_ctx, struct srvsvc_NetCharDevCtr1);
- W_ERROR_HAVE_NO_MEMORY(r->out.ctr.ctr1);
+ r->out.info_ctr->ctr.ctr1 = talloc(mem_ctx, struct srvsvc_NetCharDevCtr1);
+ W_ERROR_HAVE_NO_MEMORY(r->out.info_ctr->ctr.ctr1);
- r->out.ctr.ctr1->count = 0;
- r->out.ctr.ctr1->array = NULL;
+ r->out.info_ctr->ctr.ctr1->count = 0;
+ r->out.info_ctr->ctr.ctr1->array = NULL;
return WERR_NOT_SUPPORTED;
static WERROR dcesrv_srvsvc_NetCharDevGetInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
struct srvsvc_NetCharDevGetInfo *r)
{
- ZERO_STRUCT(r->out);
+ ZERO_STRUCTP(r->out.info);
switch (r->in.level) {
case 0:
static WERROR dcesrv_srvsvc_NetCharDevQEnum(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
struct srvsvc_NetCharDevQEnum *r)
{
- r->out.level = r->in.level;
- r->out.totalentries = 0;
- r->out.resume_handle = NULL;
+ *r->out.totalentries = 0;
- switch (r->in.level) {
+ switch (r->in.info_ctr->level) {
case 0:
{
- r->out.ctr.ctr0 = talloc(mem_ctx, struct srvsvc_NetCharDevQCtr0);
- W_ERROR_HAVE_NO_MEMORY(r->out.ctr.ctr0);
+ r->out.info_ctr->ctr.ctr0 = talloc(mem_ctx, struct srvsvc_NetCharDevQCtr0);
+ W_ERROR_HAVE_NO_MEMORY(r->out.info_ctr->ctr.ctr0);
- r->out.ctr.ctr0->count = 0;
- r->out.ctr.ctr0->array = NULL;
+ r->out.info_ctr->ctr.ctr0->count = 0;
+ r->out.info_ctr->ctr.ctr0->array = NULL;
return WERR_NOT_SUPPORTED;
}
case 1:
{
- r->out.ctr.ctr1 = talloc(mem_ctx, struct srvsvc_NetCharDevQCtr1);
- W_ERROR_HAVE_NO_MEMORY(r->out.ctr.ctr1);
+ r->out.info_ctr->ctr.ctr1 = talloc(mem_ctx, struct srvsvc_NetCharDevQCtr1);
+ W_ERROR_HAVE_NO_MEMORY(r->out.info_ctr->ctr.ctr1);
- r->out.ctr.ctr1->count = 0;
- r->out.ctr.ctr1->array = NULL;
+ r->out.info_ctr->ctr.ctr1->count = 0;
+ r->out.info_ctr->ctr.ctr1->array = NULL;
return WERR_NOT_SUPPORTED;
}
static WERROR dcesrv_srvsvc_NetCharDevQGetInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
struct srvsvc_NetCharDevQGetInfo *r)
{
- ZERO_STRUCT(r->out);
+ ZERO_STRUCTP(r->out.info);
switch (r->in.level) {
case 0:
static WERROR dcesrv_srvsvc_NetConnEnum(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
struct srvsvc_NetConnEnum *r)
{
- r->out.level = r->in.level;
- r->out.totalentries = 0;
- r->out.resume_handle = NULL;
+ *r->out.totalentries = 0;
- switch (r->in.level) {
+ switch (r->in.info_ctr->level) {
case 0:
{
- r->out.ctr.ctr0 = talloc(mem_ctx, struct srvsvc_NetConnCtr0);
- W_ERROR_HAVE_NO_MEMORY(r->out.ctr.ctr0);
+ r->out.info_ctr->ctr.ctr0 = talloc(mem_ctx, struct srvsvc_NetConnCtr0);
+ W_ERROR_HAVE_NO_MEMORY(r->out.info_ctr->ctr.ctr0);
- r->out.ctr.ctr0->count = 0;
- r->out.ctr.ctr0->array = NULL;
+ r->out.info_ctr->ctr.ctr0->count = 0;
+ r->out.info_ctr->ctr.ctr0->array = NULL;
return WERR_NOT_SUPPORTED;
}
case 1:
{
- r->out.ctr.ctr1 = talloc(mem_ctx, struct srvsvc_NetConnCtr1);
- W_ERROR_HAVE_NO_MEMORY(r->out.ctr.ctr1);
+ r->out.info_ctr->ctr.ctr1 = talloc(mem_ctx, struct srvsvc_NetConnCtr1);
+ W_ERROR_HAVE_NO_MEMORY(r->out.info_ctr->ctr.ctr1);
- r->out.ctr.ctr1->count = 0;
- r->out.ctr.ctr1->array = NULL;
+ r->out.info_ctr->ctr.ctr1->count = 0;
+ r->out.info_ctr->ctr.ctr1->array = NULL;
return WERR_NOT_SUPPORTED;
}
static WERROR dcesrv_srvsvc_NetFileEnum(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
struct srvsvc_NetFileEnum *r)
{
- r->out.level = r->in.level;
- r->out.totalentries = 0;
- r->out.resume_handle = NULL;
+ *r->out.totalentries = 0;
- switch (r->in.level) {
+ switch (r->in.info_ctr->level) {
case 2:
{
- r->out.ctr.ctr2 = talloc(mem_ctx, struct srvsvc_NetFileCtr2);
- W_ERROR_HAVE_NO_MEMORY(r->out.ctr.ctr2);
+ r->out.info_ctr->ctr.ctr2 = talloc(mem_ctx, struct srvsvc_NetFileCtr2);
+ W_ERROR_HAVE_NO_MEMORY(r->out.info_ctr->ctr.ctr2);
- r->out.ctr.ctr2->count = 0;
- r->out.ctr.ctr2->array = NULL;
+ r->out.info_ctr->ctr.ctr2->count = 0;
+ r->out.info_ctr->ctr.ctr2->array = NULL;
return WERR_NOT_SUPPORTED;
}
case 3:
{
- r->out.ctr.ctr3 = talloc(mem_ctx, struct srvsvc_NetFileCtr3);
- W_ERROR_HAVE_NO_MEMORY(r->out.ctr.ctr3);
+ r->out.info_ctr->ctr.ctr3 = talloc(mem_ctx, struct srvsvc_NetFileCtr3);
+ W_ERROR_HAVE_NO_MEMORY(r->out.info_ctr->ctr.ctr3);
- r->out.ctr.ctr3->count = 0;
- r->out.ctr.ctr3->array = NULL;
+ r->out.info_ctr->ctr.ctr3->count = 0;
+ r->out.info_ctr->ctr.ctr3->array = NULL;
return WERR_NOT_SUPPORTED;
}
static WERROR dcesrv_srvsvc_NetFileGetInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
struct srvsvc_NetFileGetInfo *r)
{
- ZERO_STRUCT(r->out);
+ ZERO_STRUCTP(r->out.info);
switch (r->in.level) {
case 2:
static WERROR dcesrv_srvsvc_NetSessEnum(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
struct srvsvc_NetSessEnum *r)
{
- r->out.level = r->in.level;
- r->out.totalentries = 0;
- r->out.resume_handle = NULL;
+ *r->out.totalentries = 0;
- switch (r->in.level) {
+ switch (r->in.info_ctr->level) {
case 0:
{
- r->out.ctr.ctr0 = talloc(mem_ctx, struct srvsvc_NetSessCtr0);
- W_ERROR_HAVE_NO_MEMORY(r->out.ctr.ctr0);
+ r->out.info_ctr->ctr.ctr0 = talloc(mem_ctx, struct srvsvc_NetSessCtr0);
+ W_ERROR_HAVE_NO_MEMORY(r->out.info_ctr->ctr.ctr0);
- r->out.ctr.ctr0->count = 0;
- r->out.ctr.ctr0->array = NULL;
+ r->out.info_ctr->ctr.ctr0->count = 0;
+ r->out.info_ctr->ctr.ctr0->array = NULL;
return WERR_NOT_SUPPORTED;
}
case 1:
{
- r->out.ctr.ctr1 = talloc(mem_ctx, struct srvsvc_NetSessCtr1);
- W_ERROR_HAVE_NO_MEMORY(r->out.ctr.ctr1);
+ r->out.info_ctr->ctr.ctr1 = talloc(mem_ctx, struct srvsvc_NetSessCtr1);
+ W_ERROR_HAVE_NO_MEMORY(r->out.info_ctr->ctr.ctr1);
- r->out.ctr.ctr1->count = 0;
- r->out.ctr.ctr1->array = NULL;
+ r->out.info_ctr->ctr.ctr1->count = 0;
+ r->out.info_ctr->ctr.ctr1->array = NULL;
return WERR_NOT_SUPPORTED;
}
case 2:
{
- r->out.ctr.ctr2 = talloc(mem_ctx, struct srvsvc_NetSessCtr2);
- W_ERROR_HAVE_NO_MEMORY(r->out.ctr.ctr2);
+ r->out.info_ctr->ctr.ctr2 = talloc(mem_ctx, struct srvsvc_NetSessCtr2);
+ W_ERROR_HAVE_NO_MEMORY(r->out.info_ctr->ctr.ctr2);
- r->out.ctr.ctr2->count = 0;
- r->out.ctr.ctr2->array = NULL;
+ r->out.info_ctr->ctr.ctr2->count = 0;
+ r->out.info_ctr->ctr.ctr2->array = NULL;
return WERR_NOT_SUPPORTED;
}
case 10:
{
- r->out.ctr.ctr10 = talloc(mem_ctx, struct srvsvc_NetSessCtr10);
- W_ERROR_HAVE_NO_MEMORY(r->out.ctr.ctr10);
+ r->out.info_ctr->ctr.ctr10 = talloc(mem_ctx, struct srvsvc_NetSessCtr10);
+ W_ERROR_HAVE_NO_MEMORY(r->out.info_ctr->ctr.ctr10);
- r->out.ctr.ctr2->count = 0;
- r->out.ctr.ctr2->array = NULL;
+ r->out.info_ctr->ctr.ctr10->count = 0;
+ r->out.info_ctr->ctr.ctr10->array = NULL;
return WERR_NOT_SUPPORTED;
}
case 502:
{
- r->out.ctr.ctr502 = talloc(mem_ctx, struct srvsvc_NetSessCtr502);
- W_ERROR_HAVE_NO_MEMORY(r->out.ctr.ctr502);
+ r->out.info_ctr->ctr.ctr502 = talloc(mem_ctx, struct srvsvc_NetSessCtr502);
+ W_ERROR_HAVE_NO_MEMORY(r->out.info_ctr->ctr.ctr502);
- r->out.ctr.ctr2->count = 0;
- r->out.ctr.ctr2->array = NULL;
+ r->out.info_ctr->ctr.ctr502->count = 0;
+ r->out.info_ctr->ctr.ctr502->array = NULL;
return WERR_NOT_SUPPORTED;
}
info[i].name = SHARE_TYPE;
info[i].type = SHARE_INFO_STRING;
- switch (r->in.info.info2->type) {
+ switch (r->in.info->info2->type) {
case 0x00:
info[i].value = talloc_strdup(info, "DISK");
break;
W_ERROR_HAVE_NO_MEMORY(info[i].value);
i++;
- if (r->in.info.info2->path && r->in.info.info2->path[0]) {
+ if (r->in.info->info2->path && r->in.info->info2->path[0]) {
info[i].name = SHARE_PATH;
info[i].type = SHARE_INFO_STRING;
/* Windows will send a path in a form of C:\example\path */
- if (r->in.info.info2->path[1] == ':') {
- info[i].value = talloc_strdup(info, &r->in.info.info2->path[2]);
+ if (r->in.info->info2->path[1] == ':') {
+ info[i].value = talloc_strdup(info, &r->in.info->info2->path[2]);
} else {
/* very strange let's try to set as is */
- info[i].value = talloc_strdup(info, r->in.info.info2->path);
+ info[i].value = talloc_strdup(info, r->in.info->info2->path);
}
W_ERROR_HAVE_NO_MEMORY(info[i].value);
all_string_sub((char *)info[i].value, "\\", "/", 0);
i++;
}
- if (r->in.info.info2->comment && r->in.info.info2->comment[0]) {
+ if (r->in.info->info2->comment && r->in.info->info2->comment[0]) {
info[i].name = SHARE_COMMENT;
info[i].type = SHARE_INFO_STRING;
- info[i].value = talloc_strdup(info, r->in.info.info2->comment);
+ info[i].value = talloc_strdup(info, r->in.info->info2->comment);
W_ERROR_HAVE_NO_MEMORY(info[i].value);
i++;
}
- if (r->in.info.info2->password && r->in.info.info2->password[0]) {
+ if (r->in.info->info2->password && r->in.info->info2->password[0]) {
info[i].name = SHARE_PASSWORD;
info[i].type = SHARE_INFO_STRING;
- info[i].value = talloc_strdup(info, r->in.info.info2->password);
+ info[i].value = talloc_strdup(info, r->in.info->info2->password);
W_ERROR_HAVE_NO_MEMORY(info[i].value);
i++;
info[i].name = SHARE_MAX_CONNECTIONS;
info[i].type = SHARE_INFO_INT;
info[i].value = talloc(info, int);
- *((int *)info[i].value) = r->in.info.info2->max_users;
+ *((int *)info[i].value) = r->in.info->info2->max_users;
i++;
/* TODO: security descriptor */
- nterr = share_create(sctx, r->in.info.info2->name, info, i);
+ nterr = share_create(sctx, r->in.info->info2->name, info, i);
if (!NT_STATUS_IS_OK(nterr)) {
return ntstatus_to_werror(nterr);
}
info[i].name = SHARE_TYPE;
info[i].type = SHARE_INFO_STRING;
- switch (r->in.info.info502->type) {
+ switch (r->in.info->info502->type) {
case 0x00:
info[i].value = talloc_strdup(info, "DISK");
break;
W_ERROR_HAVE_NO_MEMORY(info[i].value);
i++;
- if (r->in.info.info502->path && r->in.info.info502->path[0]) {
+ if (r->in.info->info502->path && r->in.info->info502->path[0]) {
info[i].name = SHARE_PATH;
info[i].type = SHARE_INFO_STRING;
/* Windows will send a path in a form of C:\example\path */
- if (r->in.info.info502->path[1] == ':') {
- info[i].value = talloc_strdup(info, &r->in.info.info502->path[2]);
+ if (r->in.info->info502->path[1] == ':') {
+ info[i].value = talloc_strdup(info, &r->in.info->info502->path[2]);
} else {
/* very strange let's try to set as is */
- info[i].value = talloc_strdup(info, r->in.info.info502->path);
+ info[i].value = talloc_strdup(info, r->in.info->info502->path);
}
W_ERROR_HAVE_NO_MEMORY(info[i].value);
all_string_sub((char *)info[i].value, "\\", "/", 0);
i++;
}
- if (r->in.info.info502->comment && r->in.info.info502->comment[0]) {
+ if (r->in.info->info502->comment && r->in.info->info502->comment[0]) {
info[i].name = SHARE_COMMENT;
info[i].type = SHARE_INFO_STRING;
- info[i].value = talloc_strdup(info, r->in.info.info502->comment);
+ info[i].value = talloc_strdup(info, r->in.info->info502->comment);
W_ERROR_HAVE_NO_MEMORY(info[i].value);
i++;
}
- if (r->in.info.info502->password && r->in.info.info502->password[0]) {
+ if (r->in.info->info502->password && r->in.info->info502->password[0]) {
info[i].name = SHARE_PASSWORD;
info[i].type = SHARE_INFO_STRING;
- info[i].value = talloc_strdup(info, r->in.info.info502->password);
+ info[i].value = talloc_strdup(info, r->in.info->info502->password);
W_ERROR_HAVE_NO_MEMORY(info[i].value);
i++;
info[i].name = SHARE_MAX_CONNECTIONS;
info[i].type = SHARE_INFO_INT;
info[i].value = talloc(info, int);
- *((int *)info[i].value) = r->in.info.info502->max_users;
+ *((int *)info[i].value) = r->in.info->info502->max_users;
i++;
/* TODO: security descriptor */
- nterr = share_create(sctx, r->in.info.info502->name, info, i);
+ nterr = share_create(sctx, r->in.info->info502->name, info, i);
if (!NT_STATUS_IS_OK(nterr)) {
return ntstatus_to_werror(nterr);
}
info->info502->path = dcesrv_common_get_share_path(mem_ctx, dce_ctx, scfg);
W_ERROR_HAVE_NO_MEMORY(info->info502->path);
info->info502->password = talloc_strdup(mem_ctx, share_string_option(scfg, SHARE_PASSWORD, NULL));
- info->info502->unknown = dcesrv_common_get_share_unknown(mem_ctx, dce_ctx, scfg);
- info->info502->sd = dcesrv_common_get_security_descriptor(mem_ctx, dce_ctx, scfg);
+ info->info502->sd_buf.sd = dcesrv_common_get_security_descriptor(mem_ctx, dce_ctx, scfg);
return WERR_OK;
}
struct share_context *sctx;
struct share_config *scfg;
- r->out.level = r->in.level;
- ZERO_STRUCT(r->out.ctr);
- r->out.totalentries = 0;
- r->out.resume_handle = NULL;
+ *r->out.totalentries = 0;
/* TODO: - paging of results
*/
return ntstatus_to_werror(nterr);
}
- switch (r->in.level) {
+ switch (r->in.info_ctr->level) {
case 0:
{
int i;
ctr0->array = NULL;
if (ctr0->count == 0) {
- r->out.ctr.ctr0 = ctr0;
+ r->out.info_ctr->ctr.ctr0 = ctr0;
return WERR_OK;
}
return WERR_GENERAL_FAILURE;
}
info.info0 = &ctr0->array[i];
- status = dcesrv_srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.level, &info);
+ status = dcesrv_srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.info_ctr->level, &info);
if (!W_ERROR_IS_OK(status)) {
return status;
}
}
talloc_free(snames);
- r->out.ctr.ctr0 = ctr0;
- r->out.totalentries = r->out.ctr.ctr0->count;
+ r->out.info_ctr->ctr.ctr0 = ctr0;
+ *r->out.totalentries = r->out.info_ctr->ctr.ctr0->count;
return WERR_OK;
}
case 1:
ctr1->array = NULL;
if (ctr1->count == 0) {
- r->out.ctr.ctr1 = ctr1;
+ r->out.info_ctr->ctr.ctr1 = ctr1;
return WERR_OK;
}
return WERR_GENERAL_FAILURE;
}
info.info1 = &ctr1->array[i];
- status = dcesrv_srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.level, &info);
+ status = dcesrv_srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.info_ctr->level, &info);
if (!W_ERROR_IS_OK(status)) {
return status;
}
}
talloc_free(snames);
- r->out.ctr.ctr1 = ctr1;
- r->out.totalentries = r->out.ctr.ctr1->count;
+ r->out.info_ctr->ctr.ctr1 = ctr1;
+ *r->out.totalentries = r->out.info_ctr->ctr.ctr1->count;
+
return WERR_OK;
}
case 2:
ctr2->array = NULL;
if (ctr2->count == 0) {
- r->out.ctr.ctr2 = ctr2;
+ r->out.info_ctr->ctr.ctr2 = ctr2;
return WERR_OK;
}
return WERR_GENERAL_FAILURE;
}
info.info2 = &ctr2->array[i];
- status = dcesrv_srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.level, &info);
+ status = dcesrv_srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.info_ctr->level, &info);
if (!W_ERROR_IS_OK(status)) {
return status;
}
}
talloc_free(snames);
- r->out.ctr.ctr2 = ctr2;
- r->out.totalentries = r->out.ctr.ctr2->count;
+ r->out.info_ctr->ctr.ctr2 = ctr2;
+ *r->out.totalentries = r->out.info_ctr->ctr.ctr2->count;
+
return WERR_OK;
}
case 501:
ctr501->array = NULL;
if (ctr501->count == 0) {
- r->out.ctr.ctr501 = ctr501;
+ r->out.info_ctr->ctr.ctr501 = ctr501;
return WERR_OK;
}
return WERR_GENERAL_FAILURE;
}
info.info501 = &ctr501->array[i];
- status = dcesrv_srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.level, &info);
+ status = dcesrv_srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.info_ctr->level, &info);
if (!W_ERROR_IS_OK(status)) {
return status;
}
}
talloc_free(snames);
- r->out.ctr.ctr501 = ctr501;
- r->out.totalentries = r->out.ctr.ctr501->count;
+ r->out.info_ctr->ctr.ctr501 = ctr501;
+ *r->out.totalentries = r->out.info_ctr->ctr.ctr501->count;
+
return WERR_OK;
}
case 502:
ctr502->array = NULL;
if (ctr502->count == 0) {
- r->out.ctr.ctr502 = ctr502;
+ r->out.info_ctr->ctr.ctr502 = ctr502;
return WERR_OK;
}
return WERR_GENERAL_FAILURE;
}
info.info502 = &ctr502->array[i];
- status = dcesrv_srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.level, &info);
+ status = dcesrv_srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.info_ctr->level, &info);
if (!W_ERROR_IS_OK(status)) {
return status;
}
}
talloc_free(snames);
- r->out.ctr.ctr502 = ctr502;
- r->out.totalentries = r->out.ctr.ctr502->count;
+ r->out.info_ctr->ctr.ctr502 = ctr502;
+ *r->out.totalentries = r->out.info_ctr->ctr.ctr502->count;
+
return WERR_OK;
}
default:
struct share_context *sctx = NULL;
struct share_config *scfg = NULL;
- ZERO_STRUCT(r->out);
+ ZERO_STRUCTP(r->out.info);
/* TODO: - access check
*/
return status;
}
- r->out.info.info0 = info.info0;
+ r->out.info->info0 = info.info0;
return WERR_OK;
}
case 1:
return status;
}
- r->out.info.info1 = info.info1;
+ r->out.info->info1 = info.info1;
return WERR_OK;
}
case 2:
return status;
}
- r->out.info.info2 = info.info2;
+ r->out.info->info2 = info.info2;
return WERR_OK;
}
case 501:
return status;
}
- r->out.info.info501 = info.info501;
+ r->out.info->info501 = info.info501;
return WERR_OK;
}
case 502:
return status;
}
- r->out.info.info502 = info.info502;
+ r->out.info->info502 = info.info502;
return WERR_OK;
}
case 1005:
return status;
}
- r->out.info.info1005 = info.info1005;
+ r->out.info->info1005 = info.info1005;
return WERR_OK;
}
default:
{
status = dcesrv_srvsvc_fill_share_info(info, &count,
r->in.share_name, r->in.level,
- r->in.info.info0->name,
+ r->in.info->info0->name,
NULL,
NULL,
NULL,
{
status = dcesrv_srvsvc_fill_share_info(info, &count,
r->in.share_name, r->in.level,
- r->in.info.info1->name,
+ r->in.info->info1->name,
NULL,
- r->in.info.info1->comment,
+ r->in.info->info1->comment,
NULL,
- r->in.info.info1->type,
+ r->in.info->info1->type,
0,
0,
NULL);
{
status = dcesrv_srvsvc_fill_share_info(info, &count,
r->in.share_name, r->in.level,
- r->in.info.info2->name,
- r->in.info.info2->path,
- r->in.info.info2->comment,
- r->in.info.info2->password,
- r->in.info.info2->type,
- r->in.info.info2->max_users,
+ r->in.info->info2->name,
+ r->in.info->info2->path,
+ r->in.info->info2->comment,
+ r->in.info->info2->password,
+ r->in.info->info2->type,
+ r->in.info->info2->max_users,
0,
NULL);
if (W_ERROR_EQUAL(status, WERR_OK)) {
{
status = dcesrv_srvsvc_fill_share_info(info, &count,
r->in.share_name, r->in.level,
- r->in.info.info501->name,
+ r->in.info->info501->name,
NULL,
- r->in.info.info501->comment,
+ r->in.info->info501->comment,
NULL,
- r->in.info.info501->type,
+ r->in.info->info501->type,
0,
- r->in.info.info501->csc_policy,
+ r->in.info->info501->csc_policy,
NULL);
if (W_ERROR_EQUAL(status, WERR_OK)) {
return status;
{
status = dcesrv_srvsvc_fill_share_info(info, &count,
r->in.share_name, r->in.level,
- r->in.info.info502->name,
- r->in.info.info502->path,
- r->in.info.info502->comment,
- r->in.info.info502->password,
- r->in.info.info502->type,
- r->in.info.info502->max_users,
+ r->in.info->info502->name,
+ r->in.info->info502->path,
+ r->in.info->info502->comment,
+ r->in.info->info502->password,
+ r->in.info->info502->type,
+ r->in.info->info502->max_users,
0,
- r->in.info.info502->sd);
+ r->in.info->info502->sd_buf.sd);
if (W_ERROR_EQUAL(status, WERR_OK)) {
return status;
}
r->in.share_name, r->in.level,
NULL,
NULL,
- r->in.info.info1004->comment,
+ r->in.info->info1004->comment,
NULL,
0,
0,
const char **names;
int count, i;
- ZERO_STRUCT(r->out);
+ *r->out.type = 0;
/* TODO: - access check
*/
if (strcmp("", r->in.device_name) == 0) {
- r->out.type = STYPE_IPC;
+ *r->out.type = STYPE_IPC;
return WERR_OK;
}
if (!type) continue;
if (strcmp(type, "DISK") == 0) {
- r->out.type = STYPE_DISKTREE;
+ *r->out.type = STYPE_DISKTREE;
return WERR_OK;
}
if (strcmp(type, "IPC") == 0) {
- r->out.type = STYPE_IPC;
+ *r->out.type = STYPE_IPC;
return WERR_OK;
}
if (strcmp(type, "PRINTER") == 0) {
- r->out.type = STYPE_PRINTQ;
+ *r->out.type = STYPE_PRINTQ;
return WERR_OK;
}
}
{
struct dcesrv_context *dce_ctx = dce_call->conn->dce_ctx;
- ZERO_STRUCT(r->out);
+ ZERO_STRUCTP(r->out.info);
switch (r->in.level) {
case 100:
info100->server_name = dcesrv_common_get_server_name(mem_ctx, dce_ctx, r->in.server_unc);
W_ERROR_HAVE_NO_MEMORY(info100->server_name);
- r->out.info.info100 = info100;
+ r->out.info->info100 = info100;
return WERR_OK;
}
case 101:
info101->comment = talloc_strdup(mem_ctx, lp_serverstring(dce_ctx->lp_ctx));
W_ERROR_HAVE_NO_MEMORY(info101->comment);
- r->out.info.info101 = info101;
+ r->out.info->info101 = info101;
return WERR_OK;
}
case 102:
info102->userpath = dcesrv_common_get_userpath(mem_ctx, dce_ctx);
W_ERROR_HAVE_NO_MEMORY(info102->userpath);
- r->out.info.info102 = info102;
+ r->out.info->info102 = info102;
return WERR_OK;
}
default:
static WERROR dcesrv_srvsvc_NetDiskEnum(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
struct srvsvc_NetDiskEnum *r)
{
- r->out.info.disks = NULL;
- r->out.info.count = 0;
- r->out.totalentries = 0;
- r->out.resume_handle = NULL;
+ r->out.info->disks = NULL;
+ r->out.info->count = 0;
+ *r->out.totalentries = 0;
switch (r->in.level) {
case 0:
{
/* we can safely hardcode the reply and report we have only one disk (C:) */
/* for some reason Windows wants 2 entries with the second being empty */
- r->out.info.disks = talloc_array(mem_ctx, struct srvsvc_NetDiskInfo0, 2);
- W_ERROR_HAVE_NO_MEMORY(r->out.info.disks);
- r->out.info.count = 2;
+ r->out.info->disks = talloc_array(mem_ctx, struct srvsvc_NetDiskInfo0, 2);
+ W_ERROR_HAVE_NO_MEMORY(r->out.info->disks);
+ r->out.info->count = 2;
- r->out.info.disks[0].disk = talloc_strdup(mem_ctx, "C:");
- W_ERROR_HAVE_NO_MEMORY(r->out.info.disks[0].disk);
+ r->out.info->disks[0].disk = talloc_strdup(mem_ctx, "C:");
+ W_ERROR_HAVE_NO_MEMORY(r->out.info->disks[0].disk);
- r->out.info.disks[1].disk = talloc_strdup(mem_ctx, "");
- W_ERROR_HAVE_NO_MEMORY(r->out.info.disks[1].disk);
+ r->out.info->disks[1].disk = talloc_strdup(mem_ctx, "");
+ W_ERROR_HAVE_NO_MEMORY(r->out.info->disks[1].disk);
- r->out.totalentries = 1;
+ *r->out.totalentries = 1;
r->out.resume_handle = r->in.resume_handle;
return WERR_OK;
static WERROR dcesrv_srvsvc_NetTransportEnum(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
struct srvsvc_NetTransportEnum *r)
{
- r->out.level = r->in.level;
- r->out.totalentries = 0;
- r->out.resume_handle = NULL;
+ r->out.transports->level = r->in.transports->level;
+ *r->out.totalentries = 0;
+ if (r->out.resume_handle) {
+ *r->out.resume_handle = 0;
+ }
- switch (r->in.level) {
+ switch (r->in.transports->level) {
case 0:
{
- r->out.transports.ctr0 = talloc(mem_ctx, struct srvsvc_NetTransportCtr0);
- W_ERROR_HAVE_NO_MEMORY(r->out.transports.ctr0);
+ r->out.transports->ctr.ctr0 = talloc(mem_ctx, struct srvsvc_NetTransportCtr0);
+ W_ERROR_HAVE_NO_MEMORY(r->out.transports->ctr.ctr0);
- r->out.transports.ctr0->count = 0;
- r->out.transports.ctr0->array = NULL;
+ r->out.transports->ctr.ctr0->count = 0;
+ r->out.transports->ctr.ctr0->array = NULL;
return WERR_NOT_SUPPORTED;
}
case 1:
{
- r->out.transports.ctr1 = talloc(mem_ctx, struct srvsvc_NetTransportCtr1);
- W_ERROR_HAVE_NO_MEMORY(r->out.transports.ctr1);
+ r->out.transports->ctr.ctr1 = talloc(mem_ctx, struct srvsvc_NetTransportCtr1);
+ W_ERROR_HAVE_NO_MEMORY(r->out.transports->ctr.ctr1);
- r->out.transports.ctr1->count = 0;
- r->out.transports.ctr1->array = NULL;
+ r->out.transports->ctr.ctr1->count = 0;
+ r->out.transports->ctr.ctr1->array = NULL;
return WERR_NOT_SUPPORTED;
}
case 2:
{
- r->out.transports.ctr2 = talloc(mem_ctx, struct srvsvc_NetTransportCtr2);
- W_ERROR_HAVE_NO_MEMORY(r->out.transports.ctr2);
+ r->out.transports->ctr.ctr2 = talloc(mem_ctx, struct srvsvc_NetTransportCtr2);
+ W_ERROR_HAVE_NO_MEMORY(r->out.transports->ctr.ctr2);
- r->out.transports.ctr2->count = 0;
- r->out.transports.ctr2->array = NULL;
+ r->out.transports->ctr.ctr2->count = 0;
+ r->out.transports->ctr.ctr2->array = NULL;
return WERR_NOT_SUPPORTED;
}
case 3:
{
- r->out.transports.ctr3 = talloc(mem_ctx, struct srvsvc_NetTransportCtr3);
- W_ERROR_HAVE_NO_MEMORY(r->out.transports.ctr3);
+ r->out.transports->ctr.ctr3 = talloc(mem_ctx, struct srvsvc_NetTransportCtr3);
+ W_ERROR_HAVE_NO_MEMORY(r->out.transports->ctr.ctr3);
- r->out.transports.ctr3->count = 0;
- r->out.transports.ctr3->array = NULL;
+ r->out.transports->ctr.ctr3->count = 0;
+ r->out.transports->ctr.ctr3->array = NULL;
return WERR_NOT_SUPPORTED;
}
struct timeval tval;
time_t t;
struct tm tm;
+ struct srvsvc_NetRemoteTODInfo *info;
- r->out.info = talloc(mem_ctx, struct srvsvc_NetRemoteTODInfo);
- W_ERROR_HAVE_NO_MEMORY(r->out.info);
+ info = talloc(mem_ctx, struct srvsvc_NetRemoteTODInfo);
+ W_ERROR_HAVE_NO_MEMORY(info);
GetTimeOfDay(&tval);
t = tval.tv_sec;
gmtime_r(&t, &tm);
- r->out.info->elapsed = t;
+ info->elapsed = t;
/* TODO: fake the uptime: just return the milliseconds till 0:00:00 today */
- r->out.info->msecs = (tm.tm_hour*60*60*1000)
- + (tm.tm_min*60*1000)
- + (tm.tm_sec*1000)
- + (tval.tv_usec/1000);
- r->out.info->hours = tm.tm_hour;
- r->out.info->mins = tm.tm_min;
- r->out.info->secs = tm.tm_sec;
- r->out.info->hunds = tval.tv_usec/10000;
- r->out.info->timezone = get_time_zone(t)/60;
- r->out.info->tinterval = 310; /* just return the same as windows */
- r->out.info->day = tm.tm_mday;
- r->out.info->month = tm.tm_mon + 1;
- r->out.info->year = tm.tm_year + 1900;
- r->out.info->weekday = tm.tm_wday;
+ info->msecs = (tm.tm_hour*60*60*1000)
+ + (tm.tm_min*60*1000)
+ + (tm.tm_sec*1000)
+ + (tval.tv_usec/1000);
+ info->hours = tm.tm_hour;
+ info->mins = tm.tm_min;
+ info->secs = tm.tm_sec;
+ info->hunds = tval.tv_usec/10000;
+ info->timezone = get_time_zone(t)/60;
+ info->tinterval = 310; /* just return the same as windows */
+ info->day = tm.tm_mday;
+ info->month = tm.tm_mon + 1;
+ info->year = tm.tm_year + 1900;
+ info->weekday = tm.tm_wday;
+
+ *r->out.info = info;
return WERR_OK;
}
struct share_config *scfg;
struct dcesrv_context *dce_ctx = dce_call->conn->dce_ctx;
- r->out.level = r->in.level;
- ZERO_STRUCT(r->out.ctr);
- r->out.totalentries = 0;
- r->out.resume_handle = NULL;
+ *r->out.totalentries = 0;
/* TODO: - paging of results
*/
return ntstatus_to_werror(nterr);
}
- switch (r->in.level) {
+ switch (r->in.info_ctr->level) {
case 0:
{
int i, y = 0;
ctr0->array = NULL;
if (ctr0->count == 0) {
- r->out.ctr.ctr0 = ctr0;
+ r->out.info_ctr->ctr.ctr0 = ctr0;
return WERR_OK;
}
}
info.info0 = &ctr0->array[y];
- status = dcesrv_srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.level, &info);
+ status = dcesrv_srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.info_ctr->level, &info);
W_ERROR_NOT_OK_RETURN(status);
talloc_free(scfg);
y++;
}
talloc_free(snames);
- r->out.ctr.ctr0 = ctr0;
- r->out.totalentries = r->out.ctr.ctr0->count;
+ r->out.info_ctr->ctr.ctr0 = ctr0;
+ *r->out.totalentries = r->out.info_ctr->ctr.ctr0->count;
+
return WERR_OK;
}
case 1:
ctr1->array = NULL;
if (ctr1->count == 0) {
- r->out.ctr.ctr1 = ctr1;
+ r->out.info_ctr->ctr.ctr1 = ctr1;
return WERR_OK;
}
}
info.info1 = &ctr1->array[y];
- status = dcesrv_srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.level, &info);
+ status = dcesrv_srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.info_ctr->level, &info);
W_ERROR_NOT_OK_RETURN(status);
talloc_free(scfg);
y++;
}
talloc_free(snames);
- r->out.ctr.ctr1 = ctr1;
- r->out.totalentries = r->out.ctr.ctr1->count;
+ r->out.info_ctr->ctr.ctr1 = ctr1;
+ *r->out.totalentries = r->out.info_ctr->ctr.ctr1->count;
+
return WERR_OK;
}
case 2:
ctr2->array = NULL;
if (ctr2->count == 0) {
- r->out.ctr.ctr2 = ctr2;
+ r->out.info_ctr->ctr.ctr2 = ctr2;
return WERR_OK;
}
}
info.info2 = &ctr2->array[y];
- status = dcesrv_srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.level, &info);
+ status = dcesrv_srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.info_ctr->level, &info);
W_ERROR_NOT_OK_RETURN(status);
talloc_free(scfg);
y++;
}
talloc_free(snames);
- r->out.ctr.ctr2 = ctr2;
- r->out.totalentries = r->out.ctr.ctr2->count;
+ r->out.info_ctr->ctr.ctr2 = ctr2;
+ *r->out.totalentries = r->out.info_ctr->ctr.ctr2->count;
+
return WERR_OK;
}
case 502:
ctr502->array = NULL;
if (ctr502->count == 0) {
- r->out.ctr.ctr502 = ctr502;
+ r->out.info_ctr->ctr.ctr502 = ctr502;
return WERR_OK;
}
}
info.info502 = &ctr502->array[y];
- status = dcesrv_srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.level, &info);
+ status = dcesrv_srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.info_ctr->level, &info);
W_ERROR_NOT_OK_RETURN(status);
talloc_free(scfg);
y++;
}
talloc_free(snames);
- r->out.ctr.ctr502 = ctr502;
- r->out.totalentries = r->out.ctr.ctr502->count;
+ r->out.info_ctr->ctr.ctr502 = ctr502;
+ *r->out.totalentries = r->out.info_ctr->ctr.ctr502->count;
+
return WERR_OK;
}
default:
sd_buf->sd = io->query_secdesc.out.sd;
- r->out.sd_buf = sd_buf;
+ *r->out.sd_buf = sd_buf;
return WERR_OK;
}
io->set_secdesc.level = RAW_FILEINFO_SEC_DESC;
io->set_secdesc.in.file.path = r->in.file;
io->set_secdesc.in.secinfo_flags = r->in.securityinformation;
- io->set_secdesc.in.sd = r->in.sd_buf.sd;
+ io->set_secdesc.in.sd = r->in.sd_buf->sd;
nt_status = ntvfs_setpathinfo(ntvfs_req, io);
if (!NT_STATUS_IS_OK(nt_status)) return ntstatus_to_werror(nt_status);
for (j = 0; j < ARRAY_SIZE(share_types); j++) {
if (share_types[j].type == info->type) break;
}
- d_printf("\t[%d] %s\t%s\n\t %s\n\t [perms=0x%08x, max_usr=%d, cur_usr=%d, path=%s, pass=%s, unknown=0x%08x]\n",
+ d_printf("\t[%d] %s\t%s\n\t %s\n\t [perms=0x%08x, max_usr=%d, cur_usr=%d, path=%s, pass=%s]\n",
i, info->name, share_types[j].desc, info->comment,
info->permissions, info->max_users,
info->current_users, info->path,
- info->password, info->unknown);
+ info->password);
}
break;
}
{
NTSTATUS status;
struct srvsvc_NetShareAdd add;
+ union srvsvc_NetShareInfo info;
struct srvsvc_NetShareInfo2 i;
i.name = share;
i.password = NULL;
i.permissions = 0x0;
+ info.info2 = &i;
+
add.in.server_unc = host;
add.in.level = 2;
- add.in.info.info2 = &i;
+ add.in.info = &info;
add.in.parm_error = NULL;
status = dcerpc_srvsvc_NetShareAdd(svc_pipe, mem_ctx, &add);
{
NTSTATUS status;
struct srvsvc_NetShareEnumAll r;
+ struct srvsvc_NetShareInfoCtr info_ctr;
struct srvsvc_NetShareCtr0 c0;
+ struct srvsvc_NetShareCtr1 c1;
+ struct srvsvc_NetShareCtr2 c2;
+ struct srvsvc_NetShareCtr501 c501;
+ struct srvsvc_NetShareCtr502 c502;
+ uint32_t totalentries = 0;
uint32_t levels[] = {0, 1, 2, 501, 502};
int i;
bool ret = true;
uint32_t resume_handle;
- ZERO_STRUCT(c0);
+ ZERO_STRUCT(info_ctr);
r.in.server_unc = talloc_asprintf(mem_ctx,"\\\\%s",dcerpc_server_name(p));
- r.in.ctr.ctr0 = &c0;
+ r.in.info_ctr = &info_ctr;
r.in.max_buffer = (uint32_t)-1;
r.in.resume_handle = &resume_handle;
r.out.resume_handle = &resume_handle;
+ r.out.totalentries = &totalentries;
+ r.out.info_ctr = &info_ctr;
for (i=0;i<ARRAY_SIZE(levels);i++) {
- ZERO_STRUCT(r.out);
resume_handle = 0;
- r.in.level = levels[i];
+ info_ctr.level = levels[i];
+
+ switch (info_ctr.level) {
+ case 0:
+ ZERO_STRUCT(c0);
+ info_ctr.ctr.ctr0 = &c0;
+ break;
+ case 1:
+ ZERO_STRUCT(c1);
+ info_ctr.ctr.ctr1 = &c1;
+ break;
+ case 2:
+ ZERO_STRUCT(c2);
+ info_ctr.ctr.ctr2 = &c2;
+ break;
+ case 501:
+ ZERO_STRUCT(c501);
+ info_ctr.ctr.ctr501 = &c501;
+ break;
+ case 502:
+ ZERO_STRUCT(c502);
+ info_ctr.ctr.ctr502 = &c502;
+ break;
+ }
+
status = dcerpc_srvsvc_NetShareEnumAll(p, mem_ctx, &r);
if (!NT_STATUS_IS_OK(status)) {
- printf("NetShareEnumAll level %u failed - %s\n", r.in.level, nt_errstr(status));
+ printf("NetShareEnumAll level %u failed - %s\n", info_ctr.level, nt_errstr(status));
ret = false;
continue;
}
if (!W_ERROR_IS_OK(r.out.result)) {
- printf("NetShareEnumAll level %u failed - %s\n", r.in.level, win_errstr(r.out.result));
+ printf("NetShareEnumAll level %u failed - %s\n", info_ctr.level, win_errstr(r.out.result));
continue;
}
}
{
NTSTATUS status;
struct srvsvc_NetShareGetInfo r;
+ union srvsvc_NetShareInfo info;
uint32_t levels[] = { 0, 1, 2, 501, 502, 1004, 1005, 1006, 1007, 1501 };
int i;
bool ret = true;
r.in.server_unc = talloc_asprintf(mem_ctx, "\\\\%s",
dcerpc_server_name(p));
r.in.share_name = sharename;
+ r.out.info = &info;
for (i=0;i<ARRAY_SIZE(levels);i++) {
r.in.level = levels[i];
- ZERO_STRUCT(r.out);
-
printf("testing NetShareGetInfo level %u on share '%s'\n",
r.in.level, r.in.share_name);
{
NTSTATUS status;
struct srvsvc_NetShareEnum r;
+ struct srvsvc_NetShareInfoCtr info_ctr;
struct srvsvc_NetShareCtr0 c0;
+ struct srvsvc_NetShareCtr1 c1;
+ struct srvsvc_NetShareCtr2 c2;
+ struct srvsvc_NetShareCtr501 c501;
+ struct srvsvc_NetShareCtr502 c502;
+ struct srvsvc_NetShareCtr1004 c1004;
+ struct srvsvc_NetShareCtr1005 c1005;
+ struct srvsvc_NetShareCtr1006 c1006;
+ struct srvsvc_NetShareCtr1007 c1007;
+ uint32_t totalentries = 0;
uint32_t levels[] = { 0, 1, 2, 501, 502, 1004, 1005, 1006, 1007 };
int i;
bool ret = true;
+ ZERO_STRUCT(info_ctr);
+
r.in.server_unc = talloc_asprintf(mem_ctx,"\\\\%s",dcerpc_server_name(p));
- r.in.ctr.ctr0 = &c0;
- r.in.ctr.ctr0->count = 0;
- r.in.ctr.ctr0->array = NULL;
+ r.in.info_ctr = &info_ctr;
r.in.max_buffer = (uint32_t)-1;
r.in.resume_handle = NULL;
+ r.out.totalentries = &totalentries;
+ r.out.info_ctr = &info_ctr;
for (i=0;i<ARRAY_SIZE(levels);i++) {
- r.in.level = levels[i];
-
- ZERO_STRUCT(r.out);
+ info_ctr.level = levels[i];
+
+ switch (info_ctr.level) {
+ case 0:
+ ZERO_STRUCT(c0);
+ info_ctr.ctr.ctr0 = &c0;
+ break;
+ case 1:
+ ZERO_STRUCT(c1);
+ info_ctr.ctr.ctr1 = &c1;
+ break;
+ case 2:
+ ZERO_STRUCT(c2);
+ info_ctr.ctr.ctr2 = &c2;
+ break;
+ case 501:
+ ZERO_STRUCT(c501);
+ info_ctr.ctr.ctr501 = &c501;
+ break;
+ case 502:
+ ZERO_STRUCT(c502);
+ info_ctr.ctr.ctr502 = &c502;
+ break;
+ case 1004:
+ ZERO_STRUCT(c1004);
+ info_ctr.ctr.ctr1004 = &c1004;
+ break;
+ case 1005:
+ ZERO_STRUCT(c1005);
+ info_ctr.ctr.ctr1005 = &c1005;
+ break;
+ case 1006:
+ ZERO_STRUCT(c1006);
+ info_ctr.ctr.ctr1006 = &c1006;
+ break;
+ case 1007:
+ ZERO_STRUCT(c1007);
+ info_ctr.ctr.ctr1007 = &c1007;
+ break;
+ }
- printf("testing NetShareEnum level %u\n", r.in.level);
+ printf("testing NetShareEnum level %u\n", info_ctr.level);
status = dcerpc_srvsvc_NetShareEnum(p, mem_ctx, &r);
if (!NT_STATUS_IS_OK(status)) {
printf("NetShareEnum level %u failed - %s\n",
- r.in.level, nt_errstr(status));
+ info_ctr.level, nt_errstr(status));
ret = false;
continue;
}
if (!W_ERROR_IS_OK(r.out.result)) {
printf("NetShareEnum level %u failed - %s\n",
- r.in.level, win_errstr(r.out.result));
+ info_ctr.level, win_errstr(r.out.result));
continue;
}
- if (r.in.level == 0) {
- struct srvsvc_NetShareCtr0 *ctr = r.out.ctr.ctr0;
+ if (info_ctr.level == 0) {
+ struct srvsvc_NetShareCtr0 *ctr = r.out.info_ctr->ctr.ctr0;
if (ctr->count > 0) {
*one_sharename = ctr->array[0].name;
}
struct dcerpc_pipe *p;
NTSTATUS status;
struct srvsvc_NetShareGetInfo r;
+ union srvsvc_NetShareInfo info;
struct security_descriptor *result;
if (!(tmp_ctx = talloc_new(mem_ctx))) {
dcerpc_server_name(p));
r.in.share_name = sharename;
r.in.level = 502;
+ r.out.info = &info;
status = dcerpc_srvsvc_NetShareGetInfo(p, tmp_ctx, &r);
if (!NT_STATUS_IS_OK(status)) {
return NULL;
}
- result = talloc_steal(mem_ctx, r.out.info.info502->sd);
+ result = talloc_steal(mem_ctx, info.info502->sd_buf.sd);
talloc_free(tmp_ctx);
return result;
}
NTSTATUS status;
struct sec_desc_buf i;
struct srvsvc_NetShareSetInfo r;
+ union srvsvc_NetShareInfo info;
uint32_t error = 0;
if (!(tmp_ctx = talloc_new(mem_ctx))) {
r.in.share_name = sharename;
r.in.level = 1501;
i.sd = sd;
- r.in.info.info1501 = &i;
+ info.info1501 = &i;
+ r.in.info = &info;
r.in.parm_error = &error;
status = dcerpc_srvsvc_NetShareSetInfo(p, tmp_ctx, &r);
if (!NT_STATUS_IS_OK(status)) {
- d_printf("srvsvc_NetShareGetInfo failed: %s\n",
+ d_printf("srvsvc_NetShareSetInfo failed: %s\n",
nt_errstr(status));
}
NTSTATUS status;
struct dcerpc_pipe *p;
struct srvsvc_NetShareEnum r;
+ struct srvsvc_NetShareInfoCtr info_ctr;
struct srvsvc_NetShareCtr1 c1_in;
struct srvsvc_NetShareCtr1 *c1;
+ uint32_t totalentries = 0;
int i;
mem_ctx = talloc_new(ctx);
return status;
}
+ ZERO_STRUCT(c1_in);
+ info_ctr.level = 1;
+ info_ctr.ctr.ctr1 = &c1_in;
+
r.in.server_unc = talloc_asprintf(
mem_ctx, "\\\\%s", dcerpc_server_name(p));
- r.in.level = 1;
- ZERO_STRUCT(c1_in);
- r.in.ctr.ctr1 = &c1_in;
+ r.in.info_ctr = &info_ctr;
r.in.max_buffer = (uint32_t)-1;
r.in.resume_handle = NULL;
+ r.out.totalentries = &totalentries;
+ r.out.info_ctr = &info_ctr;
status = dcerpc_srvsvc_NetShareEnum(p, mem_ctx, &r);
if (!NT_STATUS_IS_OK(status)) {
d_printf("NetShareEnum level %u failed - %s\n",
- r.in.level, nt_errstr(status));
+ info_ctr.level, nt_errstr(status));
talloc_free(mem_ctx);
return status;
}
*printers = NULL;
*num_printers = 0;
- c1 = r.out.ctr.ctr1;
+ c1 = r.out.info_ctr->ctr.ctr1;
for (i=0; i<c1->count; i++) {
if (c1->array[i].type != STYPE_PRINTQ) {
continue;
struct loadparm_context *lp_ctx,
struct smbcli_state *cli,
const char *share,
- struct srvsvc_NetShareInfo502 **info)
+ struct srvsvc_NetShareInfo502 **info502)
{
struct smbcli_tree *ipc;
struct dcerpc_pipe *p;
struct srvsvc_NetShareGetInfo r;
+ union srvsvc_NetShareInfo info;
NTSTATUS status;
if (!(p = dcerpc_pipe_init(cli,
dcerpc_server_name(p));
r.in.share_name = share;
r.in.level = 502;
+ r.out.info = &info;
status = dcerpc_srvsvc_NetShareGetInfo(p, p, &r);
if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(r.out.result)) {
- d_printf("(%s) OpenHKLM failed: %s, %s\n", __location__,
+ d_printf("(%s) srvsvc_NetShareGetInfo failed: %s, %s\n", __location__,
nt_errstr(status), win_errstr(r.out.result));
goto fail;
}
- *info = talloc_move(mem_ctx, &r.out.info.info502);
+ *info502 = talloc_move(mem_ctx, &info.info502);
return NT_STATUS_OK;
fail:
{
NTSTATUS status;
struct srvsvc_NetCharDevGetInfo r;
+ union srvsvc_NetCharDevInfo info;
uint32_t levels[] = {0, 1};
int i;
r.in.server_unc = talloc_asprintf(tctx,"\\\\%s",dcerpc_server_name(p));
r.in.device_name = devname;
+ r.out.info = &info;
for (i=0;i<ARRAY_SIZE(levels);i++) {
- ZERO_STRUCT(r.out);
r.in.level = levels[i];
torture_comment(tctx, "testing NetCharDevGetInfo level %u on device '%s'\n",
r.in.level, r.in.device_name);
{
NTSTATUS status;
struct srvsvc_NetCharDevEnum r;
+ struct srvsvc_NetCharDevInfoCtr info_ctr;
struct srvsvc_NetCharDevCtr0 c0;
+ struct srvsvc_NetCharDevCtr0 c1;
+ uint32_t totalentries = 0;
uint32_t levels[] = {0, 1};
int i;
+ ZERO_STRUCT(info_ctr);
+
r.in.server_unc = talloc_asprintf(tctx,"\\\\%s",dcerpc_server_name(p));
- r.in.ctr.ctr0 = &c0;
- r.in.ctr.ctr0->count = 0;
- r.in.ctr.ctr0->array = NULL;
+ r.in.info_ctr = &info_ctr;
r.in.max_buffer = (uint32_t)-1;
r.in.resume_handle = NULL;
+ r.out.info_ctr = &info_ctr;
+ r.out.totalentries = &totalentries;
for (i=0;i<ARRAY_SIZE(levels);i++) {
int j;
- ZERO_STRUCT(r.out);
- r.in.level = levels[i];
- torture_comment(tctx, "testing NetCharDevEnum level %u\n", r.in.level);
+ info_ctr.level = levels[i];
+
+ switch(info_ctr.level) {
+ case 0:
+ ZERO_STRUCT(c0);
+ info_ctr.ctr.ctr0 = &c0;
+ break;
+ case 1:
+ ZERO_STRUCT(c1);
+ info_ctr.ctr.ctr0 = &c1;
+ break;
+ }
+
+ torture_comment(tctx, "testing NetCharDevEnum level %u\n", info_ctr.level);
status = dcerpc_srvsvc_NetCharDevEnum(p, tctx, &r);
torture_assert_ntstatus_ok(tctx, status, "NetCharDevEnum failed");
if (!W_ERROR_IS_OK(r.out.result)) {
}
/* call test_NetCharDevGetInfo and test_NetCharDevControl for each returned share */
- if (r.in.level == 1) {
- for (j=0;j<r.out.ctr.ctr1->count;j++) {
+ if (info_ctr.level == 1) {
+ for (j=0;j<r.out.info_ctr->ctr.ctr1->count;j++) {
const char *device;
- device = r.out.ctr.ctr1->array[j].device;
+ device = r.out.info_ctr->ctr.ctr1->array[j].device;
if (!test_NetCharDevGetInfo(p, tctx, device)) {
return false;
}
{
NTSTATUS status;
struct srvsvc_NetCharDevQGetInfo r;
+ union srvsvc_NetCharDevQInfo info;
uint32_t levels[] = {0, 1};
int i;
r.in.server_unc = talloc_asprintf(tctx,"\\\\%s",dcerpc_server_name(p));
r.in.queue_name = devicequeue;
r.in.user = talloc_asprintf(tctx,"Administrator");
+ r.out.info = &info;
for (i=0;i<ARRAY_SIZE(levels);i++) {
- ZERO_STRUCT(r.out);
r.in.level = levels[i];
torture_comment(tctx, "testing NetCharDevQGetInfo level %u on devicequeue '%s'\n",
r.in.level, r.in.queue_name);
{
NTSTATUS status;
struct srvsvc_NetCharDevQEnum r;
+ struct srvsvc_NetCharDevQInfoCtr info_ctr;
struct srvsvc_NetCharDevQCtr0 c0;
+ struct srvsvc_NetCharDevQCtr1 c1;
+ uint32_t totalentries = 0;
uint32_t levels[] = {0, 1};
int i;
+ ZERO_STRUCT(info_ctr);
+
r.in.server_unc = talloc_asprintf(tctx,"\\\\%s",dcerpc_server_name(p));
r.in.user = talloc_asprintf(tctx,"%s","Administrator");
- r.in.ctr.ctr0 = &c0;
- r.in.ctr.ctr0->count = 0;
- r.in.ctr.ctr0->array = NULL;
+ r.in.info_ctr = &info_ctr;
r.in.max_buffer = (uint32_t)-1;
r.in.resume_handle = NULL;
+ r.out.totalentries = &totalentries;
+ r.out.info_ctr = &info_ctr;
for (i=0;i<ARRAY_SIZE(levels);i++) {
int j;
- ZERO_STRUCT(r.out);
- r.in.level = levels[i];
- torture_comment(tctx, "testing NetCharDevQEnum level %u\n", r.in.level);
+ info_ctr.level = levels[i];
+
+ switch (info_ctr.level) {
+ case 0:
+ ZERO_STRUCT(c0);
+ info_ctr.ctr.ctr0 = &c0;
+ break;
+ case 1:
+ ZERO_STRUCT(c1);
+ info_ctr.ctr.ctr1 = &c1;
+ break;
+ }
+ torture_comment(tctx, "testing NetCharDevQEnum level %u\n", info_ctr.level);
status = dcerpc_srvsvc_NetCharDevQEnum(p, tctx, &r);
torture_assert_ntstatus_ok(tctx, status, "NetCharDevQEnum failed");
if (!W_ERROR_IS_OK(r.out.result)) {
}
/* call test_NetCharDevGetInfo and test_NetCharDevControl for each returned share */
- if (r.in.level == 1) {
- for (j=0;j<r.out.ctr.ctr1->count;j++) {
+ if (info_ctr.level == 1) {
+ for (j=0;j<r.out.info_ctr->ctr.ctr1->count;j++) {
const char *device;
- device = r.out.ctr.ctr1->array[j].device;
+ device = r.out.info_ctr->ctr.ctr1->array[j].device;
if (!test_NetCharDevQGetInfo(p, tctx, device)) {
return false;
}
{
NTSTATUS status;
struct srvsvc_NetConnEnum r;
+ struct srvsvc_NetConnInfoCtr info_ctr;
struct srvsvc_NetConnCtr0 c0;
+ struct srvsvc_NetConnCtr1 c1;
+ uint32_t totalentries = 0;
uint32_t levels[] = {0, 1};
int i;
+ ZERO_STRUCT(info_ctr);
+
r.in.server_unc = talloc_asprintf(tctx,"\\\\%s",dcerpc_server_name(p));
r.in.path = talloc_asprintf(tctx,"%s","ADMIN$");
- r.in.ctr.ctr0 = &c0;
- r.in.ctr.ctr0->count = 0;
- r.in.ctr.ctr0->array = NULL;
+ r.in.info_ctr = &info_ctr;
r.in.max_buffer = (uint32_t)-1;
r.in.resume_handle = NULL;
+ r.out.totalentries = &totalentries;
+ r.out.info_ctr = &info_ctr;
for (i=0;i<ARRAY_SIZE(levels);i++) {
- ZERO_STRUCT(r.out);
- r.in.level = levels[i];
- torture_comment(tctx, "testing NetConnEnum level %u\n", r.in.level);
+ info_ctr.level = levels[i];
+
+ switch (info_ctr.level) {
+ case 0:
+ ZERO_STRUCT(c0);
+ info_ctr.ctr.ctr0 = &c0;
+ break;
+ case 1:
+ ZERO_STRUCT(c1);
+ info_ctr.ctr.ctr1 = &c1;
+ break;
+ }
+
+ torture_comment(tctx, "testing NetConnEnum level %u\n", info_ctr.level);
status = dcerpc_srvsvc_NetConnEnum(p, tctx, &r);
torture_assert_ntstatus_ok(tctx, status, "NetConnEnum failed");
if (!W_ERROR_IS_OK(r.out.result)) {
{
NTSTATUS status;
struct srvsvc_NetFileEnum r;
+ struct srvsvc_NetFileInfoCtr info_ctr;
+ struct srvsvc_NetFileCtr2 c2;
struct srvsvc_NetFileCtr3 c3;
+ uint32_t totalentries = 0;
uint32_t levels[] = {2, 3};
int i;
+ ZERO_STRUCT(info_ctr);
+
r.in.server_unc = talloc_asprintf(tctx,"\\\\%s",dcerpc_server_name(p));
r.in.path = NULL;
r.in.user = NULL;
- r.in.ctr.ctr3 = &c3;
- r.in.ctr.ctr3->count = 0;
- r.in.ctr.ctr3->array = NULL;
+ r.in.info_ctr = &info_ctr;
r.in.max_buffer = (uint32_t)4096;
r.in.resume_handle = NULL;
+ r.out.totalentries = &totalentries;
+ r.out.info_ctr = &info_ctr;
for (i=0;i<ARRAY_SIZE(levels);i++) {
- ZERO_STRUCT(r.out);
- r.in.level = levels[i];
- torture_comment(tctx, "testing NetFileEnum level %u\n", r.in.level);
+ info_ctr.level = levels[i];
+
+ switch (info_ctr.level) {
+ case 2:
+ ZERO_STRUCT(c2);
+ info_ctr.ctr.ctr2 = &c2;
+ break;
+ case 3:
+ ZERO_STRUCT(c3);
+ info_ctr.ctr.ctr3 = &c3;
+ break;
+ }
+ torture_comment(tctx, "testing NetFileEnum level %u\n", info_ctr.level);
status = dcerpc_srvsvc_NetFileEnum(p, tctx, &r);
torture_assert_ntstatus_ok(tctx, status, "NetFileEnum failed");
if (!W_ERROR_IS_OK(r.out.result)) {
{
NTSTATUS status;
struct srvsvc_NetSessEnum r;
+ struct srvsvc_NetSessInfoCtr info_ctr;
struct srvsvc_NetSessCtr0 c0;
+ struct srvsvc_NetSessCtr1 c1;
+ struct srvsvc_NetSessCtr2 c2;
+ struct srvsvc_NetSessCtr10 c10;
+ struct srvsvc_NetSessCtr502 c502;
+ uint32_t totalentries = 0;
uint32_t levels[] = {0, 1, 2, 10, 502};
int i;
+ ZERO_STRUCT(info_ctr);
+
r.in.server_unc = talloc_asprintf(tctx,"\\\\%s",dcerpc_server_name(p));
r.in.client = NULL;
r.in.user = NULL;
- r.in.ctr.ctr0 = &c0;
- r.in.ctr.ctr0->count = 0;
- r.in.ctr.ctr0->array = NULL;
+ r.in.info_ctr = &info_ctr;
r.in.max_buffer = (uint32_t)-1;
r.in.resume_handle = NULL;
+ r.out.totalentries = &totalentries;
+ r.out.info_ctr = &info_ctr;
for (i=0;i<ARRAY_SIZE(levels);i++) {
- ZERO_STRUCT(r.out);
- r.in.level = levels[i];
- torture_comment(tctx, "testing NetSessEnum level %u\n", r.in.level);
+ info_ctr.level = levels[i];
+
+ switch (info_ctr.level) {
+ case 0:
+ ZERO_STRUCT(c0);
+ info_ctr.ctr.ctr0 = &c0;
+ break;
+ case 1:
+ ZERO_STRUCT(c1);
+ info_ctr.ctr.ctr1 = &c1;
+ break;
+ case 2:
+ ZERO_STRUCT(c2);
+ info_ctr.ctr.ctr2 = &c2;
+ break;
+ case 10:
+ ZERO_STRUCT(c10);
+ info_ctr.ctr.ctr10 = &c10;
+ break;
+ case 502:
+ ZERO_STRUCT(c502);
+ info_ctr.ctr.ctr502 = &c502;
+ break;
+ }
+
+ torture_comment(tctx, "testing NetSessEnum level %u\n", info_ctr.level);
status = dcerpc_srvsvc_NetSessEnum(p, tctx, &r);
torture_assert_ntstatus_ok(tctx, status, "NetSessEnum failed");
if (!W_ERROR_IS_OK(r.out.result)) {
{
NTSTATUS status;
struct srvsvc_NetShareCheck r;
+ enum srvsvc_ShareType type;
r.in.server_unc = talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p));
r.in.device_name = device_name;
+ r.out.type = &type;
torture_comment(tctx,
"testing NetShareCheck on device '%s'\n", r.in.device_name);
{
NTSTATUS status;
struct srvsvc_NetShareGetInfo r;
+ union srvsvc_NetShareInfo info;
struct {
uint32_t level;
WERROR anon_status;
r.in.server_unc = talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p));
r.in.share_name = sharename;
+ r.out.info = &info;
for (i=0;i<ARRAY_SIZE(levels);i++) {
WERROR expected;
r.in.level = levels[i].level;
expected = levels[i].anon_status;
if (admin) expected = levels[i].admin_status;
- ZERO_STRUCT(r.out);
torture_comment(tctx, "testing NetShareGetInfo level %u on share '%s'\n",
r.in.level, r.in.share_name);
torture_assert_werr_equal(tctx, r.out.result, expected, "NetShareGetInfo failed");
if (r.in.level != 2) continue;
- if (!r.out.info.info2 || !r.out.info.info2->path) continue;
- if (!test_NetShareCheck(p, tctx, r.out.info.info2->path)) {
+ if (!r.out.info->info2 || !r.out.info->info2->path) continue;
+ if (!test_NetShareCheck(p, tctx, r.out.info->info2->path)) {
return false;
}
}
struct srvsvc_NetShareSetInfo r;
struct srvsvc_NetShareGetInfo q;
struct srvsvc_NetShareDel d;
+ struct sec_desc_buf sd_buf;
+ union srvsvc_NetShareInfo info;
struct {
uint32_t level;
WERROR expected;
talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p));
r.in.share_name = talloc_strdup(tctx, "testshare");
+ info.info2 = talloc(tctx, struct srvsvc_NetShareInfo2);
+ info.info2->name = r.in.share_name;
+ info.info2->type = STYPE_DISKTREE;
+ info.info2->comment = talloc_strdup(tctx, "test comment");
+ info.info2->permissions = 123434566;
+ info.info2->max_users = -1;
+ info.info2->current_users = 0;
+ info.info2->path = talloc_strdup(tctx, "C:\\");
+ info.info2->password = NULL;
+
+ a.in.info = &info;
a.in.level = 2;
- a.in.info.info2 = talloc(tctx, struct srvsvc_NetShareInfo2);
- a.in.info.info2->name = r.in.share_name;
- a.in.info.info2->type = STYPE_DISKTREE;
- a.in.info.info2->comment = talloc_strdup(tctx, "test comment");
- a.in.info.info2->permissions = 123434566;
- a.in.info.info2->max_users = -1;
- a.in.info.info2->current_users = 0;
- a.in.info.info2->path = talloc_strdup(tctx, "C:\\");
- a.in.info.info2->password = NULL;
-
a.in.parm_error = NULL;
status = dcerpc_srvsvc_NetShareAdd(p, tctx, &a);
switch (levels[i].level) {
case 0:
- r.in.info.info0 = talloc(tctx, struct srvsvc_NetShareInfo0);
- r.in.info.info0->name = r.in.share_name;
+ info.info0 = talloc(tctx, struct srvsvc_NetShareInfo0);
+ info.info0->name = r.in.share_name;
break;
case 1:
- r.in.info.info1 = talloc(tctx, struct srvsvc_NetShareInfo1);
- r.in.info.info1->name = r.in.share_name;
- r.in.info.info1->type = STYPE_DISKTREE;
- r.in.info.info1->comment = talloc_strdup(tctx, "test comment 1");
+ info.info1 = talloc(tctx, struct srvsvc_NetShareInfo1);
+ info.info1->name = r.in.share_name;
+ info.info1->type = STYPE_DISKTREE;
+ info.info1->comment = talloc_strdup(tctx, "test comment 1");
break;
case 2:
- r.in.info.info2 = talloc(tctx, struct srvsvc_NetShareInfo2);
- r.in.info.info2->name = r.in.share_name;
- r.in.info.info2->type = STYPE_DISKTREE;
- r.in.info.info2->comment = talloc_strdup(tctx, "test comment 2");
- r.in.info.info2->permissions = 0;
- r.in.info.info2->max_users = 2;
- r.in.info.info2->current_users = 1;
- r.in.info.info2->path = talloc_strdup(tctx, "::BLaH::"); /* "C:\\"); */
- r.in.info.info2->password = NULL;
+ info.info2 = talloc(tctx, struct srvsvc_NetShareInfo2);
+ info.info2->name = r.in.share_name;
+ info.info2->type = STYPE_DISKTREE;
+ info.info2->comment = talloc_strdup(tctx, "test comment 2");
+ info.info2->permissions = 0;
+ info.info2->max_users = 2;
+ info.info2->current_users = 1;
+ info.info2->path = talloc_strdup(tctx, "::BLaH::"); /* "C:\\"); */
+ info.info2->password = NULL;
break;
case 501:
- r.in.info.info501 = talloc(tctx, struct srvsvc_NetShareInfo501);
- r.in.info.info501->name = r.in.share_name;
- r.in.info.info501->type = STYPE_DISKTREE;
- r.in.info.info501->comment = talloc_strdup(tctx, "test comment 501");
- r.in.info.info501->csc_policy = 0;
+ info.info501 = talloc(tctx, struct srvsvc_NetShareInfo501);
+ info.info501->name = r.in.share_name;
+ info.info501->type = STYPE_DISKTREE;
+ info.info501->comment = talloc_strdup(tctx, "test comment 501");
+ info.info501->csc_policy = 0;
break;
case 502:
- r.in.info.info502 = talloc(tctx, struct srvsvc_NetShareInfo502);
- r.in.info.info502->name = r.in.share_name;
- r.in.info.info502->type = STYPE_DISKTREE;
- r.in.info.info502->comment = talloc_strdup(tctx, "test comment 502");
- r.in.info.info502->permissions = 0;
- r.in.info.info502->max_users = 502;
- r.in.info.info502->current_users = 1;
- r.in.info.info502->path = talloc_strdup(tctx, "C:\\");
- r.in.info.info502->password = NULL;
- r.in.info.info502->unknown = 0;
- r.in.info.info502->sd = NULL;
+ ZERO_STRUCT(sd_buf);
+ info.info502 = talloc(tctx, struct srvsvc_NetShareInfo502);
+ info.info502->name = r.in.share_name;
+ info.info502->type = STYPE_DISKTREE;
+ info.info502->comment = talloc_strdup(tctx, "test comment 502");
+ info.info502->permissions = 0;
+ info.info502->max_users = 502;
+ info.info502->current_users = 1;
+ info.info502->path = talloc_strdup(tctx, "C:\\");
+ info.info502->password = NULL;
+ info.info502->sd_buf = sd_buf;
break;
case 1004:
- r.in.info.info1004 = talloc(tctx, struct srvsvc_NetShareInfo1004);
- r.in.info.info1004->comment = talloc_strdup(tctx, "test comment 1004");
+ info.info1004 = talloc(tctx, struct srvsvc_NetShareInfo1004);
+ info.info1004->comment = talloc_strdup(tctx, "test comment 1004");
break;
case 1005:
- r.in.info.info1005 = talloc(tctx, struct srvsvc_NetShareInfo1005);
- r.in.info.info1005->dfs_flags = 0;
+ info.info1005 = talloc(tctx, struct srvsvc_NetShareInfo1005);
+ info.info1005->dfs_flags = 0;
break;
case 1006:
- r.in.info.info1006 = talloc(tctx, struct srvsvc_NetShareInfo1006);
- r.in.info.info1006->max_users = 1006;
+ info.info1006 = talloc(tctx, struct srvsvc_NetShareInfo1006);
+ info.info1006->max_users = 1006;
break;
/* case 1007:
- r.in.info.info1007 = talloc(tctx, struct srvsvc_NetShareInfo1007);
- r.in.info.info1007->flags = 0;
- r.in.info.info1007->alternate_directory_name = talloc_strdup(tctx, "test");
+ info.info1007 = talloc(tctx, struct srvsvc_NetShareInfo1007);
+ info.info1007->flags = 0;
+ info.info1007->alternate_directory_name = talloc_strdup(tctx, "test");
break;
*/
case 1501:
- r.in.info.info1501 = talloc_zero(tctx, struct sec_desc_buf);
+ info.info1501 = talloc_zero(tctx, struct sec_desc_buf);
break;
}
-
+
+ r.in.info = &info;
+
status = dcerpc_srvsvc_NetShareSetInfo(p, tctx, &r);
torture_assert_ntstatus_ok(tctx, status, "NetShareGetInfo failed");
torture_assert_werr_equal(tctx, r.out.result, levels[i].expected, "NetShareSetInfo failed");
q.in.share_name = r.in.share_name;
+ q.out.info = &info;
status = dcerpc_srvsvc_NetShareGetInfo(p, tctx, &q);
torture_assert_ntstatus_ok(tctx, status, "NetShareGetInfo failed");
torture_assert_werr_ok(tctx, q.out.result, "NetShareGetInfo failed");
- torture_assert_str_equal(tctx, q.out.info.info502->name, r.in.share_name,
+ torture_assert_str_equal(tctx, q.out.info->info502->name, r.in.share_name,
"share name invalid");
switch (levels[i].level) {
case 0:
break;
case 1:
- torture_assert_str_equal(tctx, q.out.info.info502->comment, "test comment 1", "comment");
+ torture_assert_str_equal(tctx, q.out.info->info502->comment, "test comment 1", "comment");
break;
case 2:
- torture_assert_str_equal(tctx, q.out.info.info502->comment, "test comment 2", "comment");
- torture_assert_int_equal(tctx, q.out.info.info2->max_users, 2, "max users");
- torture_assert_str_equal(tctx, q.out.info.info2->path, "C:\\", "path");
+ torture_assert_str_equal(tctx, q.out.info->info2->comment, "test comment 2", "comment");
+ torture_assert_int_equal(tctx, q.out.info->info2->max_users, 2, "max users");
+ torture_assert_str_equal(tctx, q.out.info->info2->path, "C:\\", "path");
break;
case 501:
- torture_assert_str_equal(tctx, q.out.info.info501->comment, "test comment 501", "comment");
+ torture_assert_str_equal(tctx, q.out.info->info501->comment, "test comment 501", "comment");
break;
case 502:
- torture_assert_str_equal(tctx, q.out.info.info502->comment, "test comment 502", "comment");
- torture_assert_int_equal(tctx, q.out.info.info2->max_users, 502, "max users");
- torture_assert_str_equal(tctx, q.out.info.info2->path, "C:\\", "path");
+ torture_assert_str_equal(tctx, q.out.info->info502->comment, "test comment 502", "comment");
+ torture_assert_int_equal(tctx, q.out.info->info502->max_users, 502, "max users");
+ torture_assert_str_equal(tctx, q.out.info->info502->path, "C:\\", "path");
break;
case 1004:
- torture_assert_str_equal(tctx, q.out.info.info502->comment, "test comment 1004",
+ torture_assert_str_equal(tctx, q.out.info->info1004->comment, "test comment 1004",
"comment");
break;
case 1005:
break;
case 1006:
- torture_assert_int_equal(tctx, q.out.info.info2->max_users, 1006, "Max users");
+ torture_assert_int_equal(tctx, q.out.info->info1006->max_users, 1006, "Max users");
break;
/* case 1007:
break;
{
NTSTATUS status;
struct srvsvc_NetShareEnumAll r;
+ struct srvsvc_NetShareInfoCtr info_ctr;
struct srvsvc_NetShareCtr0 c0;
+ struct srvsvc_NetShareCtr1 c1;
+ struct srvsvc_NetShareCtr2 c2;
+ struct srvsvc_NetShareCtr501 c501;
+ struct srvsvc_NetShareCtr502 c502;
+ uint32_t totalentries = 0;
struct {
uint32_t level;
WERROR anon_status;
int i;
uint32_t resume_handle;
- ZERO_STRUCT(c0);
+ ZERO_STRUCT(info_ctr);
r.in.server_unc = talloc_asprintf(tctx,"\\\\%s",dcerpc_server_name(p));
- r.in.ctr.ctr0 = &c0;
+ r.in.info_ctr = &info_ctr;
r.in.max_buffer = (uint32_t)-1;
r.in.resume_handle = &resume_handle;
r.out.resume_handle = &resume_handle;
+ r.out.totalentries = &totalentries;
+ r.out.info_ctr = &info_ctr;
for (i=0;i<ARRAY_SIZE(levels);i++) {
+
int j;
WERROR expected;
- r.in.level = levels[i].level;
+ info_ctr.level = levels[i].level;
+
+ switch (info_ctr.level) {
+ case 0:
+ ZERO_STRUCT(c0);
+ info_ctr.ctr.ctr0 = &c0;
+ break;
+ case 1:
+ ZERO_STRUCT(c1);
+ info_ctr.ctr.ctr1 = &c1;
+ break;
+ case 2:
+ ZERO_STRUCT(c2);
+ info_ctr.ctr.ctr2 = &c2;
+ break;
+ case 501:
+ ZERO_STRUCT(c501);
+ info_ctr.ctr.ctr501 = &c501;
+ break;
+ case 502:
+ ZERO_STRUCT(c502);
+ info_ctr.ctr.ctr502 = &c502;
+ break;
+ }
+
expected = levels[i].anon_status;
if (admin) expected = levels[i].admin_status;
- ZERO_STRUCT(r.out);
resume_handle = 0;
- torture_comment(tctx, "testing NetShareEnumAll level %u\n", r.in.level);
+ torture_comment(tctx, "testing NetShareEnumAll level %u\n", info_ctr.level);
status = dcerpc_srvsvc_NetShareEnumAll(p, tctx, &r);
torture_assert_ntstatus_ok(tctx, status, "NetShareEnumAll failed");
torture_assert_werr_equal(tctx, r.out.result, expected, "NetShareEnumAll failed");
/* call srvsvc_NetShareGetInfo for each returned share */
- if (r.in.level == 2 && r.out.ctr.ctr2) {
- for (j=0;j<r.out.ctr.ctr2->count;j++) {
+ if (info_ctr.level == 2 && r.out.info_ctr->ctr.ctr2) {
+ for (j=0;j<r.out.info_ctr->ctr.ctr2->count;j++) {
const char *name;
- name = r.out.ctr.ctr2->array[j].name;
+ name = r.out.info_ctr->ctr.ctr2->array[j].name;
if (!test_NetShareGetInfo(tctx, p, name, admin)) {
return false;
}
{
NTSTATUS status;
struct srvsvc_NetShareEnum r;
+ struct srvsvc_NetShareInfoCtr info_ctr;
struct srvsvc_NetShareCtr0 c0;
+ struct srvsvc_NetShareCtr1 c1;
+ struct srvsvc_NetShareCtr2 c2;
+ struct srvsvc_NetShareCtr501 c501;
+ struct srvsvc_NetShareCtr502 c502;
+ uint32_t totalentries = 0;
struct {
uint32_t level;
WERROR anon_status;
int i;
r.in.server_unc = talloc_asprintf(tctx,"\\\\%s",dcerpc_server_name(p));
- r.in.ctr.ctr0 = &c0;
- r.in.ctr.ctr0->count = 0;
- r.in.ctr.ctr0->array = NULL;
+ r.in.info_ctr = &info_ctr;
r.in.max_buffer = (uint32_t)-1;
r.in.resume_handle = NULL;
+ r.out.totalentries = &totalentries;
+ r.out.info_ctr = &info_ctr;
for (i=0;i<ARRAY_SIZE(levels);i++) {
WERROR expected;
- r.in.level = levels[i].level;
+ info_ctr.level = levels[i].level;
+
+ switch (info_ctr.level) {
+ case 0:
+ ZERO_STRUCT(c0);
+ info_ctr.ctr.ctr0 = &c0;
+ break;
+ case 1:
+ ZERO_STRUCT(c1);
+ info_ctr.ctr.ctr1 = &c1;
+ break;
+ case 2:
+ ZERO_STRUCT(c2);
+ info_ctr.ctr.ctr2 = &c2;
+ break;
+ case 501:
+ ZERO_STRUCT(c501);
+ info_ctr.ctr.ctr501 = &c501;
+ break;
+ case 502:
+ ZERO_STRUCT(c502);
+ info_ctr.ctr.ctr502 = &c502;
+ break;
+ }
+
expected = levels[i].anon_status;
if (admin) expected = levels[i].admin_status;
- ZERO_STRUCT(r.out);
-
- torture_comment(tctx, "testing NetShareEnum level %u\n", r.in.level);
+ torture_comment(tctx, "testing NetShareEnum level %u\n", info_ctr.level);
status = dcerpc_srvsvc_NetShareEnum(p, tctx, &r);
torture_assert_ntstatus_ok(tctx, status, "NetShareEnum failed");
torture_assert_werr_equal(tctx, r.out.result, expected, "NetShareEnum failed");
{
NTSTATUS status;
struct srvsvc_NetSrvGetInfo r;
- struct srvsvc_NetSrvInfo503 i503;
+ union srvsvc_NetSrvInfo info;
uint32_t levels[] = {100, 101, 102, 502, 503};
int i;
- uint32_t resume_handle;
-
- ZERO_STRUCT(i503);
r.in.server_unc = talloc_asprintf(tctx,"\\\\%s",dcerpc_server_name(p));
for (i=0;i<ARRAY_SIZE(levels);i++) {
- ZERO_STRUCT(r.out);
- resume_handle = 0;
r.in.level = levels[i];
+ r.out.info = &info;
torture_comment(tctx, "testing NetSrvGetInfo level %u\n", r.in.level);
status = dcerpc_srvsvc_NetSrvGetInfo(p, tctx, &r);
torture_assert_ntstatus_ok(tctx, status, "NetSrvGetInfo failed");
{
NTSTATUS status;
struct srvsvc_NetDiskEnum r;
+ struct srvsvc_NetDiskInfo info;
+ uint32_t totalentries = 0;
uint32_t levels[] = {0};
int i;
uint32_t resume_handle=0;
- ZERO_STRUCT(r.in);
+ ZERO_STRUCT(info);
+
r.in.server_unc = NULL;
r.in.resume_handle = &resume_handle;
+ r.in.info = &info;
+ r.out.info = &info;
+ r.out.totalentries = &totalentries;
+ r.out.resume_handle = &resume_handle;
for (i=0;i<ARRAY_SIZE(levels);i++) {
- ZERO_STRUCT(r.out);
+ ZERO_STRUCTP(r.out.info);
r.in.level = levels[i];
torture_comment(tctx, "testing NetDiskEnum level %u\n", r.in.level);
status = dcerpc_srvsvc_NetDiskEnum(p, tctx, &r);
{
NTSTATUS status;
struct srvsvc_NetTransportEnum r;
- struct srvsvc_NetTransportCtr0 c0;
+ struct srvsvc_NetTransportInfoCtr transports;
+ struct srvsvc_NetTransportCtr0 ctr0;
+ struct srvsvc_NetTransportCtr1 ctr1;
+
+ uint32_t totalentries = 0;
uint32_t levels[] = {0, 1};
int i;
+ ZERO_STRUCT(transports);
+
r.in.server_unc = talloc_asprintf(tctx,"\\\\%s", dcerpc_server_name(p));
- r.in.transports.ctr0 = &c0;
- r.in.transports.ctr0->count = 0;
- r.in.transports.ctr0->array = NULL;
+ r.in.transports = &transports;
r.in.max_buffer = (uint32_t)-1;
r.in.resume_handle = NULL;
+ r.out.totalentries = &totalentries;
+ r.out.transports = &transports;
for (i=0;i<ARRAY_SIZE(levels);i++) {
- ZERO_STRUCT(r.out);
- r.in.level = levels[i];
- torture_comment(tctx, "testing NetTransportEnum level %u\n", r.in.level);
+ transports.level = levels[i];
+ switch (transports.level) {
+ case 0:
+ ZERO_STRUCT(ctr0);
+ transports.ctr.ctr0 = &ctr0;
+ break;
+ case 1:
+ ZERO_STRUCT(ctr1);
+ transports.ctr.ctr1 = &ctr1;
+ break;
+ }
+ torture_comment(tctx, "testing NetTransportEnum level %u\n", transports.level);
status = dcerpc_srvsvc_NetTransportEnum(p, tctx, &r);
torture_assert_ntstatus_ok(tctx, status, "NetTransportEnum failed");
if (!W_ERROR_IS_OK(r.out.result)) {
{
NTSTATUS status;
struct srvsvc_NetRemoteTOD r;
+ struct srvsvc_NetRemoteTODInfo *info = NULL;
r.in.server_unc = talloc_asprintf(tctx,"\\\\%s",dcerpc_server_name(p));
+ r.out.info = &info;
- ZERO_STRUCT(r.out);
torture_comment(tctx, "testing NetRemoteTOD\n");
status = dcerpc_srvsvc_NetRemoteTOD(p, tctx, &r);
torture_assert_ntstatus_ok(tctx, status, "NetRemoteTOD failed");