[SCM] Samba Shared Repository - branch v3-2-test updated - release-3-2-0pre2-174-g8168fd5

Günther Deschner gd at samba.org
Mon Mar 10 02:45:39 GMT 2008


The branch, v3-2-test has been updated
       via  8168fd583cfc2ad64e5c1aa67047d8c3c607993a (commit)
       via  f90306bd24bc243c8f30a16c0414031d69d05c03 (commit)
       via  692626c1ef46cd27c0df34e2c206d21c929587f4 (commit)
       via  35089b53b81d8a8aa117d6c1972ccb938170a2b3 (commit)
       via  5e112ff3d7984c278949833a00349a9f523d4b23 (commit)
       via  8a10bc13aee7c34f466fa69773694be97f0e7d85 (commit)
      from  98b643366044f471ad69c9e5aac06022f30742d9 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test


- Log -----------------------------------------------------------------
commit 8168fd583cfc2ad64e5c1aa67047d8c3c607993a
Author: Günther Deschner <gd at samba.org>
Date:   Sun Mar 9 21:28:53 2008 +0100

    Add some srvsvc_NetSessInfo init functions.
    
    Guenther

commit f90306bd24bc243c8f30a16c0414031d69d05c03
Author: Günther Deschner <gd at samba.org>
Date:   Sun Mar 9 20:55:19 2008 +0100

    Add netsessenum command to rpcclient.
    
    Guenther

commit 692626c1ef46cd27c0df34e2c206d21c929587f4
Author: Günther Deschner <gd at samba.org>
Date:   Sun Mar 9 20:11:07 2008 +0100

    Re-run make idl.
    
    Guenther

commit 35089b53b81d8a8aa117d6c1972ccb938170a2b3
Author: Günther Deschner <gd at samba.org>
Date:   Sun Mar 9 20:10:22 2008 +0100

    Fix IDL for srvsvc_NetSessEnum().
    
    Guenther

commit 5e112ff3d7984c278949833a00349a9f523d4b23
Author: Günther Deschner <gd at samba.org>
Date:   Sun Mar 9 20:04:35 2008 +0100

    Add netsessdel command to rpcclient.
    
    Guenther

commit 8a10bc13aee7c34f466fa69773694be97f0e7d85
Author: Günther Deschner <gd at samba.org>
Date:   Sun Mar 9 18:01:52 2008 +0100

    Use pidl for _srvsvc_NetSessDel().
    
    Guenther

-----------------------------------------------------------------------

Summary of changes:
 source/librpc/gen_ndr/cli_srvsvc.c |    9 +--
 source/librpc/gen_ndr/cli_srvsvc.h |    3 +-
 source/librpc/gen_ndr/ndr_srvsvc.c |  119 ++++++++++++++++++------------------
 source/librpc/gen_ndr/ndr_srvsvc.h |    1 +
 source/librpc/gen_ndr/srv_srvsvc.c |    3 +-
 source/librpc/gen_ndr/srvsvc.h     |   11 ++-
 source/librpc/idl/srvsvc.idl       |    9 ++-
 source/rpc_client/init_srvsvc.c    |   91 +++++++++++++++++++++++++++
 source/rpc_server/srv_srvsvc.c     |   21 +------
 source/rpc_server/srv_srvsvc_nt.c  |   35 +++++------
 source/rpcclient/cmd_srvsvc.c      |  112 +++++++++++++++++++++++++++++++++
 11 files changed, 298 insertions(+), 116 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/librpc/gen_ndr/cli_srvsvc.c b/source/librpc/gen_ndr/cli_srvsvc.c
index 2b61fb8..18bec1f 100644
--- a/source/librpc/gen_ndr/cli_srvsvc.c
+++ b/source/librpc/gen_ndr/cli_srvsvc.c
@@ -650,8 +650,7 @@ NTSTATUS rpccli_srvsvc_NetSessEnum(struct rpc_pipe_client *cli,
 				   const char *server_unc,
 				   const char *client,
 				   const char *user,
-				   uint32_t *level,
-				   union srvsvc_NetSessCtr *ctr,
+				   struct srvsvc_NetSessInfoCtr *info_ctr,
 				   uint32_t max_buffer,
 				   uint32_t *totalentries,
 				   uint32_t *resume_handle,
@@ -664,8 +663,7 @@ NTSTATUS rpccli_srvsvc_NetSessEnum(struct rpc_pipe_client *cli,
 	r.in.server_unc = server_unc;
 	r.in.client = client;
 	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;
 
@@ -693,8 +691,7 @@ NTSTATUS rpccli_srvsvc_NetSessEnum(struct rpc_pipe_client *cli,
 	}
 
 	/* 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;
diff --git a/source/librpc/gen_ndr/cli_srvsvc.h b/source/librpc/gen_ndr/cli_srvsvc.h
index b8171a3..bccf95e 100644
--- a/source/librpc/gen_ndr/cli_srvsvc.h
+++ b/source/librpc/gen_ndr/cli_srvsvc.h
@@ -98,8 +98,7 @@ NTSTATUS rpccli_srvsvc_NetSessEnum(struct rpc_pipe_client *cli,
 				   const char *server_unc,
 				   const char *client,
 				   const char *user,
-				   uint32_t *level,
-				   union srvsvc_NetSessCtr *ctr,
+				   struct srvsvc_NetSessInfoCtr *info_ctr,
 				   uint32_t max_buffer,
 				   uint32_t *totalentries,
 				   uint32_t *resume_handle,
diff --git a/source/librpc/gen_ndr/ndr_srvsvc.c b/source/librpc/gen_ndr/ndr_srvsvc.c
index 8f577c6..bfb4ced 100644
--- a/source/librpc/gen_ndr/ndr_srvsvc.c
+++ b/source/librpc/gen_ndr/ndr_srvsvc.c
@@ -3496,6 +3496,44 @@ _PUBLIC_ void ndr_print_srvsvc_NetSessCtr(struct ndr_print *ndr, const char *nam
 	}
 }
 
+static enum ndr_err_code ndr_push_srvsvc_NetSessInfoCtr(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSessInfoCtr *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_NetSessCtr(ndr, NDR_SCALARS, &r->ctr));
+	}
+	if (ndr_flags & NDR_BUFFERS) {
+		NDR_CHECK(ndr_push_srvsvc_NetSessCtr(ndr, NDR_BUFFERS, &r->ctr));
+	}
+	return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_srvsvc_NetSessInfoCtr(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSessInfoCtr *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_NetSessCtr(ndr, NDR_SCALARS, &r->ctr));
+	}
+	if (ndr_flags & NDR_BUFFERS) {
+		NDR_CHECK(ndr_pull_srvsvc_NetSessCtr(ndr, NDR_BUFFERS, &r->ctr));
+	}
+	return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_srvsvc_NetSessInfoCtr(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSessInfoCtr *r)
+{
+	ndr_print_struct(ndr, name, "srvsvc_NetSessInfoCtr");
+	ndr->depth++;
+	ndr_print_uint32(ndr, "level", r->level);
+	ndr_print_set_switch_value(ndr, &r->ctr, r->level);
+	ndr_print_srvsvc_NetSessCtr(ndr, "ctr", &r->ctr);
+	ndr->depth--;
+}
+
 static enum ndr_err_code ndr_push_srvsvc_ShareType(struct ndr_push *ndr, int ndr_flags, enum srvsvc_ShareType r)
 {
 	{
@@ -14824,15 +14862,10 @@ static enum ndr_err_code ndr_push_srvsvc_NetSessEnum(struct ndr_push *ndr, int f
 			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_NetSessCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.ctr));
+		NDR_CHECK(ndr_push_srvsvc_NetSessInfoCtr(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) {
@@ -14840,15 +14873,10 @@ static enum ndr_err_code ndr_push_srvsvc_NetSessEnum(struct ndr_push *ndr, int f
 		}
 	}
 	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_NetSessCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.ctr));
+		NDR_CHECK(ndr_push_srvsvc_NetSessInfoCtr(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");
 		}
@@ -14871,8 +14899,7 @@ static enum ndr_err_code ndr_pull_srvsvc_NetSessEnum(struct ndr_pull *ndr, int f
 	TALLOC_CTX *_mem_save_server_unc_0;
 	TALLOC_CTX *_mem_save_client_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) {
@@ -14933,20 +14960,12 @@ static enum ndr_err_code ndr_pull_srvsvc_NetSessEnum(struct ndr_pull *ndr, int f
 			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_NetSessCtr(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_NetSessInfoCtr(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) {
@@ -14960,29 +14979,19 @@ static enum ndr_err_code ndr_pull_srvsvc_NetSessEnum(struct ndr_pull *ndr, int f
 			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_NetSessCtr(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_NetSessInfoCtr(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);
 		}
@@ -15035,14 +15044,9 @@ _PUBLIC_ void ndr_print_srvsvc_NetSessEnum(struct ndr_print *ndr, const char *na
 			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_NetSessCtr(ndr, "ctr", r->in.ctr);
+		ndr_print_srvsvc_NetSessInfoCtr(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);
@@ -15056,14 +15060,9 @@ _PUBLIC_ void ndr_print_srvsvc_NetSessEnum(struct ndr_print *ndr, const char *na
 	if (flags & NDR_OUT) {
 		ndr_print_struct(ndr, "out", "srvsvc_NetSessEnum");
 		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_NetSessCtr(ndr, "ctr", r->out.ctr);
+		ndr_print_srvsvc_NetSessInfoCtr(ndr, "info_ctr", r->out.info_ctr);
 		ndr->depth--;
 		ndr_print_ptr(ndr, "totalentries", r->out.totalentries);
 		ndr->depth++;
diff --git a/source/librpc/gen_ndr/ndr_srvsvc.h b/source/librpc/gen_ndr/ndr_srvsvc.h
index fb96d4b..0469040 100644
--- a/source/librpc/gen_ndr/ndr_srvsvc.h
+++ b/source/librpc/gen_ndr/ndr_srvsvc.h
@@ -154,6 +154,7 @@ void ndr_print_srvsvc_NetSessCtr10(struct ndr_print *ndr, const char *name, cons
 void ndr_print_srvsvc_NetSessInfo502(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSessInfo502 *r);
 void ndr_print_srvsvc_NetSessCtr502(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSessCtr502 *r);
 void ndr_print_srvsvc_NetSessCtr(struct ndr_print *ndr, const char *name, const union srvsvc_NetSessCtr *r);
+void ndr_print_srvsvc_NetSessInfoCtr(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSessInfoCtr *r);
 void ndr_print_srvsvc_ShareType(struct ndr_print *ndr, const char *name, enum srvsvc_ShareType r);
 void ndr_print_srvsvc_NetShareInfo0(struct ndr_print *ndr, const char *name, const struct srvsvc_NetShareInfo0 *r);
 void ndr_print_srvsvc_NetShareCtr0(struct ndr_print *ndr, const char *name, const struct srvsvc_NetShareCtr0 *r);
diff --git a/source/librpc/gen_ndr/srv_srvsvc.c b/source/librpc/gen_ndr/srv_srvsvc.c
index 1bbf679..2817542 100644
--- a/source/librpc/gen_ndr/srv_srvsvc.c
+++ b/source/librpc/gen_ndr/srv_srvsvc.c
@@ -984,8 +984,7 @@ static bool api_srvsvc_NetSessEnum(pipes_struct *p)
 	}
 
 	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);
diff --git a/source/librpc/gen_ndr/srvsvc.h b/source/librpc/gen_ndr/srvsvc.h
index cf3f237..31a9ba6 100644
--- a/source/librpc/gen_ndr/srvsvc.h
+++ b/source/librpc/gen_ndr/srvsvc.h
@@ -209,6 +209,11 @@ union srvsvc_NetSessCtr {
 	struct srvsvc_NetSessCtr502 *ctr502;/* [unique,case(502)] */
 };
 
+struct srvsvc_NetSessInfoCtr {
+	uint32_t level;
+	union srvsvc_NetSessCtr ctr;/* [switch_is(level)] */
+};
+
 enum srvsvc_ShareType
 #ifndef USE_UINT_ENUMS
  {
@@ -1218,15 +1223,13 @@ struct srvsvc_NetSessEnum {
 		const char *client;/* [unique,charset(UTF16)] */
 		const char *user;/* [unique,charset(UTF16)] */
 		uint32_t max_buffer;
-		uint32_t *level;/* [ref] */
-		union srvsvc_NetSessCtr *ctr;/* [ref,switch_is(*level)] */
+		struct srvsvc_NetSessInfoCtr *info_ctr;/* [ref] */
 		uint32_t *resume_handle;/* [unique] */
 	} in;
 
 	struct {
 		uint32_t *totalentries;/* [ref] */
-		uint32_t *level;/* [ref] */
-		union srvsvc_NetSessCtr *ctr;/* [ref,switch_is(*level)] */
+		struct srvsvc_NetSessInfoCtr *info_ctr;/* [ref] */
 		uint32_t *resume_handle;/* [unique] */
 		WERROR result;
 	} out;
diff --git a/source/librpc/idl/srvsvc.idl b/source/librpc/idl/srvsvc.idl
index 3154940..4076aac 100644
--- a/source/librpc/idl/srvsvc.idl
+++ b/source/librpc/idl/srvsvc.idl
@@ -355,12 +355,17 @@ import "security.idl", "svcctl.idl";
 
 	/******************/
 	/* Function: 0x0c */
+
+	typedef struct {
+		uint32 level;
+		[switch_is(level)] srvsvc_NetSessCtr ctr;
+	} srvsvc_NetSessInfoCtr;
+
 	WERROR srvsvc_NetSessEnum(
 		[in,unique]   [string,charset(UTF16)] uint16 *server_unc,
 		[in,unique]   [string,charset(UTF16)] uint16 *client,
 		[in,unique]   [string,charset(UTF16)] uint16 *user,
-		[in,out,ref]   uint32 *level,
-		[in,out,switch_is(*level),ref]   srvsvc_NetSessCtr *ctr,
+		[in,out,ref]   srvsvc_NetSessInfoCtr *info_ctr,
 		[in]   uint32 max_buffer,
 		[out,ref]   uint32 *totalentries,
 		[in,out,unique]   uint32 *resume_handle
diff --git a/source/rpc_client/init_srvsvc.c b/source/rpc_client/init_srvsvc.c
index 579756c..0d4d616 100644
--- a/source/rpc_client/init_srvsvc.c
+++ b/source/rpc_client/init_srvsvc.c
@@ -251,3 +251,94 @@ void init_srvsvc_NetRemoteTODInfo(struct srvsvc_NetRemoteTODInfo *r,
 	r->weekday = weekday;
 }
 
+/*******************************************************************
+ inits a srvsvc_NetSessInfo0 structure
+ ********************************************************************/
+
+void init_srvsvc_NetSessInfo0(struct srvsvc_NetSessInfo0 *r,
+			      const char *client)
+{
+	r->client = client;
+}
+
+/*******************************************************************
+ inits a srvsvc_NetSessInfo1 structure
+ ********************************************************************/
+
+void init_srvsvc_NetSessInfo1(struct srvsvc_NetSessInfo1 *r,
+			      const char *client,
+			      const char *user,
+			      uint32_t num_open,
+			      uint32_t _time,
+			      uint32_t idle_time,
+			      uint32_t user_flags)
+{
+	r->client = client;
+	r->user = user;
+	r->num_open = num_open;
+	r->time = _time;
+	r->idle_time = idle_time;
+	r->user_flags = user_flags;
+}
+
+/*******************************************************************
+ inits a srvsvc_NetSessInfo2 structure
+ ********************************************************************/
+
+void init_srvsvc_NetSessInfo2(struct srvsvc_NetSessInfo2 *r,
+			      const char *client,
+			      const char *user,
+			      uint32_t num_open,
+			      uint32_t _time,
+			      uint32_t idle_time,
+			      uint32_t user_flags,
+			      const char *client_type)
+{
+	r->client = client;
+	r->user = user;
+	r->num_open = num_open;
+	r->time = _time;
+	r->idle_time = idle_time;
+	r->user_flags = user_flags;
+	r->client_type = client_type;
+}
+
+/*******************************************************************
+ inits a srvsvc_NetSessInfo10 structure
+ ********************************************************************/
+
+void init_srvsvc_NetSessInfo10(struct srvsvc_NetSessInfo10 *r,
+			       const char *client,
+			       const char *user,
+			       uint32_t _time,
+			       uint32_t idle_time)
+{
+	r->client = client;
+	r->user = user;
+	r->time = _time;
+	r->idle_time = idle_time;
+}
+
+/*******************************************************************
+ inits a srvsvc_NetSessInfo502 structure
+ ********************************************************************/
+
+void init_srvsvc_NetSessInfo502(struct srvsvc_NetSessInfo502 *r,
+			       const char *client,
+			       const char *user,
+			       uint32_t num_open,
+			       uint32_t _time,
+			       uint32_t idle_time,
+			       uint32_t user_flags,
+			       const char *client_type,
+			       const char *transport)
+{
+	r->client = client;
+	r->user = user;
+	r->num_open = num_open;
+	r->time = _time;
+	r->idle_time = idle_time;
+	r->user_flags = user_flags;
+	r->client_type = client_type;
+	r->transport = transport;
+}
diff --git a/source/rpc_server/srv_srvsvc.c b/source/rpc_server/srv_srvsvc.c
index 5351f93..7579e10 100644
--- a/source/rpc_server/srv_srvsvc.c
+++ b/source/rpc_server/srv_srvsvc.c
@@ -152,26 +152,7 @@ static bool api_srv_net_sess_enum(pipes_struct *p)
 
 static bool api_srv_net_sess_del(pipes_struct *p)
 {
-	SRV_Q_NET_SESS_DEL q_u;
-	SRV_R_NET_SESS_DEL r_u;
-	prs_struct *data = &p->in_data.data;
-	prs_struct *rdata = &p->out_data.rdata;
-
-	ZERO_STRUCT(q_u);
-	ZERO_STRUCT(r_u);
-
-	/* grab the net server get enum */
-	if (!srv_io_q_net_sess_del("", &q_u, data, 0))
-		return False;
-
-	/* construct reply.  always indicate success */
-	r_u.status = _srv_net_sess_del(p, &q_u, &r_u);
-
-	/* store the response in the SMB stream */
-	if (!srv_io_r_net_sess_del("", &r_u, rdata, 0))
-		return False;
-
-	return True;
+	return proxy_srvsvc_call(p, NDR_SRVSVC_NETSESSDEL);
 }
 
 /*******************************************************************
diff --git a/source/rpc_server/srv_srvsvc_nt.c b/source/rpc_server/srv_srvsvc_nt.c
index 0d4addd..7c2efc9 100644
--- a/source/rpc_server/srv_srvsvc_nt.c
+++ b/source/rpc_server/srv_srvsvc_nt.c
@@ -1274,31 +1274,33 @@ WERROR _srv_net_sess_enum(pipes_struct *p, SRV_Q_NET_SESS_ENUM *q_u, SRV_R_NET_S
 }
 
 /*******************************************************************
-net sess del
+ _srvsvc_NetSessDel
 ********************************************************************/
 
-WERROR _srv_net_sess_del(pipes_struct *p, SRV_Q_NET_SESS_DEL *q_u, SRV_R_NET_SESS_DEL *r_u)
+WERROR _srvsvc_NetSessDel(pipes_struct *p,
+			  struct srvsvc_NetSessDel *r)
 {
 	struct sessionid *session_list;
 	struct current_user user;
 	int num_sessions, snum;
-	fstring username;
-	fstring machine;
+	const char *username;
+	const char *machine;
 	bool not_root = False;
+	WERROR werr;
 
-	rpcstr_pull_unistr2_fstring(username, &q_u->uni_user_name);
-	rpcstr_pull_unistr2_fstring(machine, &q_u->uni_cli_name);
+	username = r->in.user;
+	machine = r->in.client;
 
 	/* strip leading backslashes if any */
-	while (machine[0] == '\\') {
-		memmove(machine, &machine[1], strlen(machine));
+	if (machine && machine[0] == '\\' && machine[1] == '\\') {
+		machine += 2;
 	}
 
 	num_sessions = list_sessions(p->mem_ctx, &session_list);
 
-	DEBUG(5,("_srv_net_sess_del: %d\n", __LINE__));
+	DEBUG(5,("_srvsvc_NetSessDel: %d\n", __LINE__));
 
-	r_u->status = WERR_ACCESS_DENIED;
+	werr = WERR_ACCESS_DENIED;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list