[SCM] Samba Shared Repository - branch v3-2-test updated - initial-v3-2-test-2362-g8971afa

Günther Deschner gd at samba.org
Sun Feb 17 22:46:22 GMT 2008


The branch, v3-2-test has been updated
       via  8971afaf744e5124d4b82cad76e368ccd05be394 (commit)
       via  7973a103aa91497807cb0e3bf19dba172ae613b8 (commit)
       via  a2e6727ff7d75b50a33c4186f48477ca35b3fbb9 (commit)
       via  6f396608bda65c98dfbb13f6e8661a8246c649a2 (commit)
       via  3ebece24eb7c1898963fd95b4ab4d66d3c5d1d49 (commit)
       via  58970cc6a8761c30bc4b772b28bb25a112cb684f (commit)
      from  5300ff01b9098ccd78cb38b4d6abc85b2d340a55 (commit)

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


- Log -----------------------------------------------------------------
commit 8971afaf744e5124d4b82cad76e368ccd05be394
Author: Günther Deschner <gd at samba.org>
Date:   Sun Feb 17 23:42:52 2008 +0100

    Remove unused marshalling for NTSVCS_VALIDATE_DEVICE_INSTANCE.
    
    Guenther

commit 7973a103aa91497807cb0e3bf19dba172ae613b8
Author: Günther Deschner <gd at samba.org>
Date:   Sun Feb 17 23:42:20 2008 +0100

    Use pidl for _PNP_ValidateDeviceInstance().
    
    Guenther

commit a2e6727ff7d75b50a33c4186f48477ca35b3fbb9
Author: Günther Deschner <gd at samba.org>
Date:   Sun Feb 17 23:41:31 2008 +0100

    Add ValidateDeviceInstance command to rpcclient.
    
    Guenther

commit 6f396608bda65c98dfbb13f6e8661a8246c649a2
Author: Günther Deschner <gd at samba.org>
Date:   Sun Feb 17 23:44:50 2008 +0100

    Re-run make idl.
    
    Guenther

commit 3ebece24eb7c1898963fd95b4ab4d66d3c5d1d49
Author: Günther Deschner <gd at samba.org>
Date:   Sun Feb 17 23:40:14 2008 +0100

    Fill in IDL for PNP_ValidateDeviceInstance (based on samba3).
    
    Guenther

commit 58970cc6a8761c30bc4b772b28bb25a112cb684f
Author: Günther Deschner <gd at samba.org>
Date:   Sun Feb 17 23:37:45 2008 +0100

    Remove unused marshalling for NTSVCS_GET_VERSION.
    
    Guenther

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

Summary of changes:
 source/include/rpc_ntsvcs.h        |   24 -----------
 source/librpc/gen_ndr/cli_ntsvcs.c |    4 ++
 source/librpc/gen_ndr/cli_ntsvcs.h |    2 +
 source/librpc/gen_ndr/ndr_ntsvcs.c |   21 +++++++++
 source/librpc/gen_ndr/ntsvcs.h     |    5 ++
 source/librpc/idl/ntsvcs.idl       |    5 ++-
 source/rpc_parse/parse_ntsvcs.c    |   80 ------------------------------------
 source/rpc_server/srv_ntsvcs.c     |   18 +--------
 source/rpc_server/srv_ntsvcs_nt.c  |   13 +-----
 source/rpcclient/cmd_ntsvcs.c      |   33 +++++++++++++++
 10 files changed, 72 insertions(+), 133 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/include/rpc_ntsvcs.h b/source/include/rpc_ntsvcs.h
index 045d9b4..12224fe 100644
--- a/source/include/rpc_ntsvcs.h
+++ b/source/include/rpc_ntsvcs.h
@@ -36,19 +36,6 @@
 /**************************/
 
 typedef struct {
-	/* nothing in the request */
-	uint32 dummy;
-} NTSVCS_Q_GET_VERSION;
-
-typedef struct {
-	uint32 version;
-	WERROR status;
-} NTSVCS_R_GET_VERSION;
-
-
-/**************************/
-
-typedef struct {
 	UNISTR2 *devicename;
 	uint32 flags;
 } NTSVCS_Q_GET_DEVICE_LIST_SIZE;
@@ -75,17 +62,6 @@ typedef struct {
 
 /**************************/
 
-typedef struct {
-	UNISTR2 devicepath;
-	uint32 flags;
-} NTSVCS_Q_VALIDATE_DEVICE_INSTANCE;
-
-typedef struct {
-	WERROR status;
-} NTSVCS_R_VALIDATE_DEVICE_INSTANCE;
-
-/**************************/
-
 #define DEV_REGPROP_DESC	1
 
 typedef struct {
diff --git a/source/librpc/gen_ndr/cli_ntsvcs.c b/source/librpc/gen_ndr/cli_ntsvcs.c
index da43d45..c21910c 100644
--- a/source/librpc/gen_ndr/cli_ntsvcs.c
+++ b/source/librpc/gen_ndr/cli_ntsvcs.c
@@ -262,12 +262,16 @@ NTSTATUS rpccli_PNP_ReportLogOn(struct rpc_pipe_client *cli,
 
 NTSTATUS rpccli_PNP_ValidateDeviceInstance(struct rpc_pipe_client *cli,
 					   TALLOC_CTX *mem_ctx,
+					   const char *devicepath,
+					   uint32_t flags,
 					   WERROR *werror)
 {
 	struct PNP_ValidateDeviceInstance r;
 	NTSTATUS status;
 
 	/* In parameters */
+	r.in.devicepath = devicepath;
+	r.in.flags = flags;
 
 	if (DEBUGLEVEL >= 10) {
 		NDR_PRINT_IN_DEBUG(PNP_ValidateDeviceInstance, &r);
diff --git a/source/librpc/gen_ndr/cli_ntsvcs.h b/source/librpc/gen_ndr/cli_ntsvcs.h
index 852cc81..666ea9b 100644
--- a/source/librpc/gen_ndr/cli_ntsvcs.h
+++ b/source/librpc/gen_ndr/cli_ntsvcs.h
@@ -22,6 +22,8 @@ NTSTATUS rpccli_PNP_ReportLogOn(struct rpc_pipe_client *cli,
 				WERROR *werror);
 NTSTATUS rpccli_PNP_ValidateDeviceInstance(struct rpc_pipe_client *cli,
 					   TALLOC_CTX *mem_ctx,
+					   const char *devicepath,
+					   uint32_t flags,
 					   WERROR *werror);
 NTSTATUS rpccli_PNP_GetRootDeviceInstance(struct rpc_pipe_client *cli,
 					  TALLOC_CTX *mem_ctx,
diff --git a/source/librpc/gen_ndr/ndr_ntsvcs.c b/source/librpc/gen_ndr/ndr_ntsvcs.c
index 73dd4d3..be55319 100644
--- a/source/librpc/gen_ndr/ndr_ntsvcs.c
+++ b/source/librpc/gen_ndr/ndr_ntsvcs.c
@@ -272,6 +272,14 @@ _PUBLIC_ void ndr_print_PNP_ReportLogOn(struct ndr_print *ndr, const char *name,
 static enum ndr_err_code ndr_push_PNP_ValidateDeviceInstance(struct ndr_push *ndr, int flags, const struct PNP_ValidateDeviceInstance *r)
 {
 	if (flags & NDR_IN) {
+		if (r->in.devicepath == NULL) {
+			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+		}
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.devicepath, CH_UTF16)));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.devicepath, CH_UTF16)));
+		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.devicepath, ndr_charset_length(r->in.devicepath, CH_UTF16), sizeof(uint16_t), CH_UTF16));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.flags));
 	}
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
@@ -282,6 +290,14 @@ static enum ndr_err_code ndr_push_PNP_ValidateDeviceInstance(struct ndr_push *nd
 static enum ndr_err_code ndr_pull_PNP_ValidateDeviceInstance(struct ndr_pull *ndr, int flags, struct PNP_ValidateDeviceInstance *r)
 {
 	if (flags & NDR_IN) {
+		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.devicepath));
+		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.devicepath));
+		if (ndr_get_array_length(ndr, &r->in.devicepath) > ndr_get_array_size(ndr, &r->in.devicepath)) {
+			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.devicepath), ndr_get_array_length(ndr, &r->in.devicepath));
+		}
+		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.devicepath), sizeof(uint16_t)));
+		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.devicepath, ndr_get_array_length(ndr, &r->in.devicepath), sizeof(uint16_t), CH_UTF16));
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.flags));
 	}
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
@@ -299,6 +315,11 @@ _PUBLIC_ void ndr_print_PNP_ValidateDeviceInstance(struct ndr_print *ndr, const
 	if (flags & NDR_IN) {
 		ndr_print_struct(ndr, "in", "PNP_ValidateDeviceInstance");
 		ndr->depth++;
+		ndr_print_ptr(ndr, "devicepath", r->in.devicepath);
+		ndr->depth++;
+		ndr_print_string(ndr, "devicepath", r->in.devicepath);
+		ndr->depth--;
+		ndr_print_uint32(ndr, "flags", r->in.flags);
 		ndr->depth--;
 	}
 	if (flags & NDR_OUT) {
diff --git a/source/librpc/gen_ndr/ntsvcs.h b/source/librpc/gen_ndr/ntsvcs.h
index 571b746..477d6ad 100644
--- a/source/librpc/gen_ndr/ntsvcs.h
+++ b/source/librpc/gen_ndr/ntsvcs.h
@@ -57,6 +57,11 @@ struct PNP_ReportLogOn {
 
 struct PNP_ValidateDeviceInstance {
 	struct {
+		const char *devicepath;/* [ref,charset(UTF16)] */
+		uint32_t flags;
+	} in;
+
+	struct {
 		WERROR result;
 	} out;
 
diff --git a/source/librpc/idl/ntsvcs.idl b/source/librpc/idl/ntsvcs.idl
index 3c38bc3..a9c41cc 100644
--- a/source/librpc/idl/ntsvcs.idl
+++ b/source/librpc/idl/ntsvcs.idl
@@ -44,7 +44,10 @@ interface ntsvcs
 	/******************/
 	/* Function: 0x06 */
 
-	WERROR PNP_ValidateDeviceInstance();
+	WERROR PNP_ValidateDeviceInstance(
+		[in,ref] [string,charset(UTF16)] uint16 *devicepath,
+		[in] uint32 flags
+		);
 
 	/******************/
 	/* Function: 0x07 */
diff --git a/source/rpc_parse/parse_ntsvcs.c b/source/rpc_parse/parse_ntsvcs.c
index 5758517..86e8d9d 100644
--- a/source/rpc_parse/parse_ntsvcs.c
+++ b/source/rpc_parse/parse_ntsvcs.c
@@ -25,43 +25,6 @@
 /*******************************************************************
 ********************************************************************/
 
-bool ntsvcs_io_q_get_version(const char *desc, NTSVCS_Q_GET_VERSION *q_u, prs_struct *ps, int depth)
-{
-	if (q_u == NULL)
-		return False;
-
-	prs_debug(ps, depth, desc, "ntsvcs_io_q_get_version");
-	depth++;
-
-	/* there is nothing to parse in this PDU */
-
-	return True;
-
-}
-
-/*******************************************************************
-********************************************************************/
-
-bool ntsvcs_io_r_get_version(const char *desc, NTSVCS_R_GET_VERSION *r_u, prs_struct *ps, int depth)
-{
-	if ( !r_u )
-		return False;
-
-	prs_debug(ps, depth, desc, "ntsvcs_io_r_get_version");
-	depth++;
-
-	if(!prs_align(ps))
-		return False;
-		
-	if(!prs_uint32("version", ps, depth, &r_u->version))
-		return False;
-		
-	if(!prs_werror("status", ps, depth, &r_u->status))
-		return False;
-
-	return True;
-}
-
 /*******************************************************************
 ********************************************************************/
 
@@ -171,49 +134,6 @@ bool ntsvcs_io_r_get_device_list(const char *desc, NTSVCS_R_GET_DEVICE_LIST *r_u
 /*******************************************************************
 ********************************************************************/
 
-bool ntsvcs_io_q_validate_device_instance(const char *desc, NTSVCS_Q_VALIDATE_DEVICE_INSTANCE *q_u, prs_struct *ps, int depth)
-{
-	if (q_u == NULL)
-		return False;
-
-	prs_debug(ps, depth, desc, "ntsvcs_io_q_validate_device_instance");
-	depth++;
-	
-	if(!prs_align(ps))
-		return False;
-
-	if ( !prs_io_unistr2("devicepath", ps, depth, &q_u->devicepath) )
-		return False;
-	if( !prs_align(ps) )
-		return False;
-		
-	if ( !prs_uint32("flags", ps, depth, &q_u->flags) )
-		return False;
-	
-	return True;
-
-}
-
-/*******************************************************************
-********************************************************************/
-
-bool ntsvcs_io_r_validate_device_instance(const char *desc, NTSVCS_R_VALIDATE_DEVICE_INSTANCE *r_u, prs_struct *ps, int depth)
-{
-	if ( !r_u )
-		return False;
-
-	prs_debug(ps, depth, desc, "ntsvcs_io_r_validate_device_instance");
-	depth++;
-
-	if(!prs_werror("status", ps, depth, &r_u->status))
-		return False;
-
-	return True;
-}
-
-/*******************************************************************
-********************************************************************/
-
 bool ntsvcs_io_q_get_device_reg_property(const char *desc, NTSVCS_Q_GET_DEVICE_REG_PROPERTY *q_u, prs_struct *ps, int depth)
 {
 	if (q_u == NULL)
diff --git a/source/rpc_server/srv_ntsvcs.c b/source/rpc_server/srv_ntsvcs.c
index ec65919..cd22489 100644
--- a/source/rpc_server/srv_ntsvcs.c
+++ b/source/rpc_server/srv_ntsvcs.c
@@ -104,23 +104,7 @@ static bool api_ntsvcs_get_device_list(pipes_struct *p)
 
 static bool api_ntsvcs_validate_device_instance(pipes_struct *p)
 {
-	NTSVCS_Q_VALIDATE_DEVICE_INSTANCE q_u;
-	NTSVCS_R_VALIDATE_DEVICE_INSTANCE r_u;
-	prs_struct *data = &p->in_data.data;
-	prs_struct *rdata = &p->out_data.rdata;
-
-	ZERO_STRUCT(q_u);
-	ZERO_STRUCT(r_u);
-
-	if(!ntsvcs_io_q_validate_device_instance("", &q_u, data, 0))
-		return False;
-
-	r_u.status = _ntsvcs_validate_device_instance(p, &q_u, &r_u);
-
-	if(!ntsvcs_io_r_validate_device_instance("", &r_u, rdata, 0))
-		return False;
-
-	return True;
+	return proxy_ntsvcs_call(p, NDR_PNP_VALIDATEDEVICEINSTANCE);
 }
 
 /*******************************************************************
diff --git a/source/rpc_server/srv_ntsvcs_nt.c b/source/rpc_server/srv_ntsvcs_nt.c
index 0cf2e5c..b6e0126 100644
--- a/source/rpc_server/srv_ntsvcs_nt.c
+++ b/source/rpc_server/srv_ntsvcs_nt.c
@@ -144,7 +144,8 @@ WERROR _ntsvcs_get_device_reg_property( pipes_struct *p, NTSVCS_Q_GET_DEVICE_REG
 /********************************************************************
 ********************************************************************/
 
-WERROR _ntsvcs_validate_device_instance( pipes_struct *p, NTSVCS_Q_VALIDATE_DEVICE_INSTANCE *q_u, NTSVCS_R_VALIDATE_DEVICE_INSTANCE *r_u )
+WERROR _PNP_ValidateDeviceInstance(pipes_struct *p,
+				   struct PNP_ValidateDeviceInstance *r)
 {
 	/* whatever dude */
 	return WERR_OK;
@@ -228,16 +229,6 @@ WERROR _PNP_ReportLogOn(pipes_struct *p,
 /****************************************************************
 ****************************************************************/
 
-WERROR _PNP_ValidateDeviceInstance(pipes_struct *p,
-				   struct PNP_ValidateDeviceInstance *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
 WERROR _PNP_GetRootDeviceInstance(pipes_struct *p,
 				  struct PNP_GetRootDeviceInstance *r)
 {
diff --git a/source/rpcclient/cmd_ntsvcs.c b/source/rpcclient/cmd_ntsvcs.c
index a595948..f764806 100644
--- a/source/rpcclient/cmd_ntsvcs.c
+++ b/source/rpcclient/cmd_ntsvcs.c
@@ -43,9 +43,42 @@ static WERROR cmd_ntsvcs_get_version(struct rpc_pipe_client *cli,
 	return werr;
 }
 
+static WERROR cmd_ntsvcs_validate_dev_inst(struct rpc_pipe_client *cli,
+					   TALLOC_CTX *mem_ctx,
+					   int argc,
+					   const char **argv)
+{
+	NTSTATUS status;
+	WERROR werr;
+	const char *devicepath = NULL;
+	uint32_t flags = 0;
+
+	if (argc < 2 || argc > 3) {
+		printf("usage: %s [devicepath] <flags>\n", argv[0]);
+		return WERR_OK;
+	}
+
+	devicepath = argv[1];
+
+	if (argc >= 3) {
+		flags = atoi(argv[2]);
+	}
+
+	status = rpccli_PNP_ValidateDeviceInstance(cli, mem_ctx,
+						   devicepath,
+						   flags,
+						   &werr);
+	if (!NT_STATUS_IS_OK(status)) {
+		return ntstatus_to_werror(status);
+	}
+
+	return werr;
+}
+
 struct cmd_set ntsvcs_commands[] = {
 
 	{ "NTSVCS" },
 	{ "ntsvcs_getversion", RPC_RTYPE_WERROR, NULL, cmd_ntsvcs_get_version, PI_NTSVCS, NULL, "Query NTSVCS version", "" },
+	{ "ntsvcs_validatedevinst", RPC_RTYPE_WERROR, NULL, cmd_ntsvcs_validate_dev_inst, PI_NTSVCS, NULL, "Query NTSVCS device instance", "" },
 	{ NULL }
 };


-- 
Samba Shared Repository


More information about the samba-cvs mailing list