[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha6-1011-gc71fa39

Günther Deschner gd at samba.org
Thu Feb 19 18:25:00 GMT 2009


The branch, master has been updated
       via  c71fa39c29ee64b80adf92090a61c81f323742b9 (commit)
       via  286ec6847b623ddd33d2fb7690c994feb4e3e17a (commit)
       via  8c569b59f0c8ed1d1d65fd49561201d035f20fb5 (commit)
      from  e9c42e3c21cdc1fa25a05ef0f2edc4ca9b0b486e (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit c71fa39c29ee64b80adf92090a61c81f323742b9
Author: Günther Deschner <gd at samba.org>
Date:   Thu Feb 19 10:44:42 2009 +0100

    s3-spoolss: remove old spoolss_GetPrintProcessorDirectory.
    
    Guenther

commit 286ec6847b623ddd33d2fb7690c994feb4e3e17a
Author: Günther Deschner <gd at samba.org>
Date:   Thu Feb 19 10:42:49 2009 +0100

    s3-spoolss: use pidl for _spoolss_GetPrintProcessorDirectory.
    
    Guenther.

commit 8c569b59f0c8ed1d1d65fd49561201d035f20fb5
Author: Günther Deschner <gd at samba.org>
Date:   Thu Feb 19 10:26:00 2009 +0100

    s3-rpcclient: use rpccli_spoolss_GetPrintProcessorDirectory in rpcclient.
    
    Guenther

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

Summary of changes:
 source3/include/proto.h             |   10 ---
 source3/include/rpc_spoolss.h       |   29 --------
 source3/rpc_client/cli_spoolss.c    |   58 ---------------
 source3/rpc_parse/parse_spoolss.c   |  137 -----------------------------------
 source3/rpc_server/srv_spoolss.c    |   22 +------
 source3/rpc_server/srv_spoolss_nt.c |  106 ++++++++++++----------------
 source3/rpcclient/cmd_spoolss.c     |   43 +++++++++---
 7 files changed, 79 insertions(+), 326 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/include/proto.h b/source3/include/proto.h
index 80db935..63adbf5 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -5497,10 +5497,6 @@ WERROR rpccli_spoolss_addprinterdriver (struct rpc_pipe_client *cli,
 				     PRINTER_DRIVER_CTR *ctr);
 WERROR rpccli_spoolss_addprinterex (struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
 				 uint32 level, PRINTER_INFO_CTR*ctr);
-WERROR rpccli_spoolss_getprintprocessordirectory(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      char *name, char *environment,
-					      fstring procdir);
 WERROR rpccli_spoolss_enumforms(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
 			     POLICY_HND *handle, int level, uint32 *num_forms,
 			     FORM_1 **forms);
@@ -5885,7 +5881,6 @@ uint32 spoolss_size_job_info_1(JOB_INFO_1 *info);
 uint32 spoolss_size_job_info_2(JOB_INFO_2 *info);
 uint32 spoolss_size_form_1(FORM_1 *info);
 uint32 spoolss_size_port_info_1(PORT_INFO_1 *info);
-uint32 spoolss_size_printprocessordirectory_info_1(PRINTPROCESSOR_DIRECTORY_1 *info);
 uint32 spoolss_size_port_info_2(PORT_INFO_2 *info);
 uint32 spoolss_size_printprocessor_info_1(PRINTPROCESSOR_1 *info);
 uint32 spoolss_size_printprocdatatype_info_1(PRINTPROCDATATYPE_1 *info);
@@ -6018,10 +6013,6 @@ bool spoolss_io_q_enumprinterkey(const char *desc, SPOOL_Q_ENUMPRINTERKEY *q_u,
 bool spoolss_io_r_enumprinterkey(const char *desc, SPOOL_R_ENUMPRINTERKEY *r_u, prs_struct *ps, int depth);
 bool spoolss_io_q_enumprinterdataex(const char *desc, SPOOL_Q_ENUMPRINTERDATAEX *q_u, prs_struct *ps, int depth);
 bool spoolss_io_r_enumprinterdataex(const char *desc, SPOOL_R_ENUMPRINTERDATAEX *r_u, prs_struct *ps, int depth);
-bool make_spoolss_q_getprintprocessordirectory(SPOOL_Q_GETPRINTPROCESSORDIRECTORY *q_u, const char *name, char *environment, int level, RPC_BUFFER *buffer, uint32 offered);
-bool spoolss_io_q_getprintprocessordirectory(const char *desc, SPOOL_Q_GETPRINTPROCESSORDIRECTORY *q_u, prs_struct *ps, int depth);
-bool spoolss_io_r_getprintprocessordirectory(const char *desc, SPOOL_R_GETPRINTPROCESSORDIRECTORY *r_u, prs_struct *ps, int depth);
-bool smb_io_printprocessordirectory_1(const char *desc, RPC_BUFFER *buffer, PRINTPROCESSOR_DIRECTORY_1 *info, int depth);
 bool make_spoolss_q_enumforms(SPOOL_Q_ENUMFORMS *q_u, POLICY_HND *handle, 
 			      uint32 level, RPC_BUFFER *buffer,
 			      uint32 offered);
@@ -6245,7 +6236,6 @@ WERROR _spoolss_enumprintmonitors(pipes_struct *p, SPOOL_Q_ENUMPRINTMONITORS *q_
 WERROR _spoolss_getjob( pipes_struct *p, SPOOL_Q_GETJOB *q_u, SPOOL_R_GETJOB *r_u);
 WERROR _spoolss_enumprinterkey(pipes_struct *p, SPOOL_Q_ENUMPRINTERKEY *q_u, SPOOL_R_ENUMPRINTERKEY *r_u);
 WERROR _spoolss_enumprinterdataex(pipes_struct *p, SPOOL_Q_ENUMPRINTERDATAEX *q_u, SPOOL_R_ENUMPRINTERDATAEX *r_u);
-WERROR _spoolss_getprintprocessordirectory(pipes_struct *p, SPOOL_Q_GETPRINTPROCESSORDIRECTORY *q_u, SPOOL_R_GETPRINTPROCESSORDIRECTORY *r_u);
 
 /* The following definitions come from rpc_server/srv_srvsvc_nt.c  */
 
diff --git a/source3/include/rpc_spoolss.h b/source3/include/rpc_spoolss.h
index 24a3377..d7d93e3 100644
--- a/source3/include/rpc_spoolss.h
+++ b/source3/include/rpc_spoolss.h
@@ -1438,34 +1438,5 @@ typedef struct spool_r_enumprinterdataex
 }
 SPOOL_R_ENUMPRINTERDATAEX;
 
-typedef struct printprocessor_directory_1
-{
-	UNISTR name;
-}
-PRINTPROCESSOR_DIRECTORY_1;
-
-typedef struct spool_q_getprintprocessordirectory
-{
-	UNISTR2 name;
-	UNISTR2 environment;
-	uint32 level;
-	RPC_BUFFER *buffer;
-	uint32 offered;
-}
-SPOOL_Q_GETPRINTPROCESSORDIRECTORY;
-
-typedef struct spool_r_getprintprocessordirectory
-{
-	RPC_BUFFER *buffer;
-	uint32 needed;
-	WERROR status;
-}
-SPOOL_R_GETPRINTPROCESSORDIRECTORY;
-
-/**************************************/
-
-#define PRINTER_DRIVER_VERSION 2
-#define PRINTER_DRIVER_ARCHITECTURE "Windows NT x86"
-
 #endif /* _RPC_SPOOLSS_H */
 
diff --git a/source3/rpc_client/cli_spoolss.c b/source3/rpc_client/cli_spoolss.c
index 23ac690..489b9ca 100644
--- a/source3/rpc_client/cli_spoolss.c
+++ b/source3/rpc_client/cli_spoolss.c
@@ -967,64 +967,6 @@ WERROR rpccli_spoolss_addprinterex (struct rpc_pipe_client *cli, TALLOC_CTX *mem
 /**********************************************************************
 **********************************************************************/
 
-WERROR rpccli_spoolss_getprintprocessordirectory(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      char *name, char *environment,
-					      fstring procdir)
-{
-	prs_struct qbuf, rbuf;
-	SPOOL_Q_GETPRINTPROCESSORDIRECTORY in;
-	SPOOL_R_GETPRINTPROCESSORDIRECTORY out;
-	int level = 1;
-	RPC_BUFFER buffer;
-	uint32 offered;
-
-	ZERO_STRUCT(in);
-	ZERO_STRUCT(out);
-
-	offered = 0;
-	if (!rpcbuf_init(&buffer, offered, mem_ctx))
-		return WERR_NOMEM;
-	make_spoolss_q_getprintprocessordirectory( &in, name, 
-		environment, level, &buffer, offered );
-
-	CLI_DO_RPC_WERR( cli, mem_ctx, &syntax_spoolss, SPOOLSS_GETPRINTPROCESSORDIRECTORY,
-	            in, out, 
-	            qbuf, rbuf,
-	            spoolss_io_q_getprintprocessordirectory,
-	            spoolss_io_r_getprintprocessordirectory, 
-	            WERR_GENERAL_FAILURE );
-		    
-	if ( W_ERROR_EQUAL( out.status, WERR_INSUFFICIENT_BUFFER ) ) {
-		offered = out.needed;
-		
-		ZERO_STRUCT(in);
-		ZERO_STRUCT(out);
-		
-		if (!rpcbuf_init(&buffer, offered, mem_ctx))
-			return WERR_NOMEM;
-		make_spoolss_q_getprintprocessordirectory( &in, name, 
-			environment, level, &buffer, offered );
-
-		CLI_DO_RPC_WERR( cli, mem_ctx, &syntax_spoolss, SPOOLSS_GETPRINTPROCESSORDIRECTORY,
-		            in, out, 
-		            qbuf, rbuf,
-		            spoolss_io_q_getprintprocessordirectory,
-		            spoolss_io_r_getprintprocessordirectory, 
-		            WERR_GENERAL_FAILURE );
-	}
-	
-	if ( !W_ERROR_IS_OK(out.status) )
-		return out.status;
-	
-	fstrcpy(procdir, "Not implemented!");
-	
-	return out.status;
-}
-
-/**********************************************************************
-**********************************************************************/
-
 WERROR rpccli_spoolss_enumforms(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
 			     POLICY_HND *handle, int level, uint32 *num_forms,
 			     FORM_1 **forms)
diff --git a/source3/rpc_parse/parse_spoolss.c b/source3/rpc_parse/parse_spoolss.c
index 19738cf..b798eef 100644
--- a/source3/rpc_parse/parse_spoolss.c
+++ b/source3/rpc_parse/parse_spoolss.c
@@ -2472,21 +2472,6 @@ uint32 spoolss_size_port_info_1(PORT_INFO_1 *info)
 return the size required by a struct in the stream
 ********************************************************************/  
 
-uint32 spoolss_size_printprocessordirectory_info_1(PRINTPROCESSOR_DIRECTORY_1 *info)
-{
-	int size=0;
-
-	size=str_len_uni(&info->name);	/* the string length       */
-	size=size+1;			/* add the leading zero    */
-	size=size*2;			/* convert in char         */
-
-	return size;
-}
-
-/*******************************************************************
-return the size required by a struct in the stream
-********************************************************************/  
-
 uint32 spoolss_size_port_info_2(PORT_INFO_2 *info)
 {
 	int size=0;
@@ -5240,128 +5225,6 @@ bool spoolss_io_r_enumprinterdataex(const char *desc, SPOOL_R_ENUMPRINTERDATAEX
 }
 
 /*******************************************************************
- * write a structure.
- ********************************************************************/  
-
-/* 
-   uint32 GetPrintProcessorDirectory(
-       [in] unistr2 *name,
-       [in] unistr2 *environment,
-       [in] uint32 level,
-       [in,out] RPC_BUFFER buffer,
-       [in] uint32 offered,
-       [out] uint32 needed,
-       [out] uint32 returned
-   );
-
-*/
-
-bool make_spoolss_q_getprintprocessordirectory(SPOOL_Q_GETPRINTPROCESSORDIRECTORY *q_u, const char *name, char *environment, int level, RPC_BUFFER *buffer, uint32 offered)
-{
-	DEBUG(5,("make_spoolss_q_getprintprocessordirectory\n"));
-
-	init_unistr2(&q_u->name, name, UNI_STR_TERMINATE);
-	init_unistr2(&q_u->environment, environment, UNI_STR_TERMINATE);
-
-	q_u->level = level;
-
-	q_u->buffer = buffer;
-	q_u->offered = offered;
-
-	return True;
-}
-
-bool spoolss_io_q_getprintprocessordirectory(const char *desc, SPOOL_Q_GETPRINTPROCESSORDIRECTORY *q_u, prs_struct *ps, int depth)
-{
-	uint32 ptr = 0;
-
-	prs_debug(ps, depth, desc, "spoolss_io_q_getprintprocessordirectory");
-	depth++;
-
-	if(!prs_align(ps))
-		return False;	
-
-	if (!prs_uint32("ptr", ps, depth, &ptr)) 
-		return False;
-
-	if (ptr) {
-		if(!smb_io_unistr2("name", &q_u->name, True, ps, depth))
-			return False;
-	}
-
-	if (!prs_align(ps))
-		return False;
-
-	if (!prs_uint32("ptr", ps, depth, &ptr))
-		return False;
-
-	if (ptr) {
-		if(!smb_io_unistr2("environment", &q_u->environment, True, 
-				   ps, depth))
-			return False;
-	}
-
-	if (!prs_align(ps))
-		return False;
-
-	if(!prs_uint32("level",   ps, depth, &q_u->level))
-		return False;
-
-	if(!prs_rpcbuffer_p("", ps, depth, &q_u->buffer))
-		return False;
-	
-	if(!prs_align(ps))
-		return False;
-
-	if(!prs_uint32("offered", ps, depth, &q_u->offered))
-		return False;
-
-	return True;
-}
-
-/*******************************************************************
- * write a structure.
- ********************************************************************/  
-
-bool spoolss_io_r_getprintprocessordirectory(const char *desc, SPOOL_R_GETPRINTPROCESSORDIRECTORY *r_u, prs_struct *ps, int depth)
-{
-	prs_debug(ps, depth, desc, "spoolss_io_r_getprintprocessordirectory");
-	depth++;
-
-	if(!prs_align(ps))
-		return False;
-
-	if(!prs_rpcbuffer_p("", ps, depth, &r_u->buffer))
-		return False;
-	
-	if(!prs_align(ps))
-		return False;
-
-	if(!prs_uint32("needed",     ps, depth, &r_u->needed))
-		return False;
-		
-	if(!prs_werror("status",     ps, depth, &r_u->status))
-		return False;
-
-	return True;
-}
-
-bool smb_io_printprocessordirectory_1(const char *desc, RPC_BUFFER *buffer, PRINTPROCESSOR_DIRECTORY_1 *info, int depth)
-{
-	prs_struct *ps=&buffer->prs;
-
-	prs_debug(ps, depth, desc, "smb_io_printprocessordirectory_1");
-	depth++;
-
-	buffer->struct_start=prs_offset(ps);
-
-	if (!smb_io_unistr(desc, &info->name, ps, depth))
-		return False;
-
-	return True;
-}
-
-/*******************************************************************
  * init a structure.
  ********************************************************************/
 
diff --git a/source3/rpc_server/srv_spoolss.c b/source3/rpc_server/srv_spoolss.c
index 4074f86..639dbde 100644
--- a/source3/rpc_server/srv_spoolss.c
+++ b/source3/rpc_server/srv_spoolss.c
@@ -865,27 +865,7 @@ static bool api_spoolss_enumprinterdataex(pipes_struct *p)
 
 static bool api_spoolss_getprintprocessordirectory(pipes_struct *p)
 {
-	SPOOL_Q_GETPRINTPROCESSORDIRECTORY q_u;
-	SPOOL_R_GETPRINTPROCESSORDIRECTORY 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(!spoolss_io_q_getprintprocessordirectory("", &q_u, data, 0)) {
-		DEBUG(0,("spoolss_io_q_getprintprocessordirectory: unable to unmarshall SPOOL_Q_GETPRINTPROCESSORDIRECTORY.\n"));
-		return False;
-	}
-	
-	r_u.status = _spoolss_getprintprocessordirectory(p, &q_u, &r_u);
-				
-	if(!spoolss_io_r_getprintprocessordirectory("", &r_u, rdata, 0)) {
-		DEBUG(0,("spoolss_io_r_getprintprocessordirectory: unable to marshall SPOOL_R_GETPRINTPROCESSORDIRECTORY.\n"));
-		return False;
-	}
-	
-	return True;
+	return proxy_spoolss_call(p, NDR_SPOOLSS_GETPRINTPROCESSORDIRECTORY);
 }
 
 /****************************************************************************
diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c
index 171953b..9d7e4d2 100644
--- a/source3/rpc_server/srv_spoolss_nt.c
+++ b/source3/rpc_server/srv_spoolss_nt.c
@@ -9730,84 +9730,79 @@ done:
 /****************************************************************************
 ****************************************************************************/
 
-static void fill_printprocessordirectory_1(PRINTPROCESSOR_DIRECTORY_1 *info, const char *name)
+static WERROR getprintprocessordirectory_level_1(TALLOC_CTX *mem_ctx,
+						 const char *servername,
+						 const char *environment,
+						 struct spoolss_PrintProcessorDirectoryInfo1 *info1,
+						 uint32_t offered,
+						 uint32_t *needed)
 {
-	init_unistr(&info->name, name);
-}
-
-static WERROR getprintprocessordirectory_level_1(UNISTR2 *name,
-						 UNISTR2 *environment,
-						 RPC_BUFFER *buffer,
-						 uint32 offered,
-						 uint32 *needed)
-{
-	char *long_archi = NULL;
-	PRINTPROCESSOR_DIRECTORY_1 *info=NULL;
-	WERROR result = WERR_OK;
-	TALLOC_CTX *ctx = talloc_tos();
+	const char *long_archi = SPOOLSS_ARCHITECTURE_NT_X86;
+	const char *short_archi;
 
-	long_archi = unistr2_to_ascii_talloc(ctx, environment);
-	if (!long_archi) {
-		return WERR_NOMEM;
+	if (environment) {
+		long_archi = environment;
 	}
 
-	if (!get_short_archi(long_archi))
+	short_archi = get_short_archi(long_archi);
+	if (!short_archi) {
 		return WERR_INVALID_ENVIRONMENT;
+	}
 
-	if((info=SMB_MALLOC_P(PRINTPROCESSOR_DIRECTORY_1)) == NULL)
-		return WERR_NOMEM;
+	/* I think this should look like this - gd
+	info1->directory_name = talloc_asprintf(mem_ctx,
+		"C:\\WINNT\\System32\\spool\\PRTPROCS\\%s", short_archi);
+	*/
+	info1->directory_name = talloc_strdup(mem_ctx,
+		"C:\\WINNT\\System32\\spool\\PRTPROCS\\W32X86");
 
-	fill_printprocessordirectory_1(info, "C:\\WINNT\\System32\\spool\\PRTPROCS\\W32X86");
+	if (!info1->directory_name) {
+		return WERR_NOMEM;
+	}
 
-	*needed += spoolss_size_printprocessordirectory_info_1(info);
+	*needed += ndr_size_spoolss_PrintProcessorDirectoryInfo1(info1, NULL, 0);
 
 	if (*needed > offered) {
-		result = WERR_INSUFFICIENT_BUFFER;
-		goto out;
-	}
-
-	if (!rpcbuf_alloc_size(buffer, *needed)) {
-		result = WERR_INSUFFICIENT_BUFFER;
-		goto out;
+		return WERR_INSUFFICIENT_BUFFER;
 	}
 
-	smb_io_printprocessordirectory_1("", buffer, info, 0);
-
-out:
-	SAFE_FREE(info);
-
-	return result;
+	return WERR_OK;
 }
 
-WERROR _spoolss_getprintprocessordirectory(pipes_struct *p, SPOOL_Q_GETPRINTPROCESSORDIRECTORY *q_u, SPOOL_R_GETPRINTPROCESSORDIRECTORY *r_u)
+/****************************************************************
+ _spoolss_GetPrintProcessorDirectory
+****************************************************************/
+
+WERROR _spoolss_GetPrintProcessorDirectory(pipes_struct *p,
+					   struct spoolss_GetPrintProcessorDirectory *r)
 {
-	uint32 level = q_u->level;
-	RPC_BUFFER *buffer = NULL;
-	uint32 offered = q_u->offered;
-	uint32 *needed = &r_u->needed;
 	WERROR result;
 
 	/* that's an [in out] buffer */
 
-	if (!q_u->buffer && (offered!=0)) {
+	if (!r->in.buffer && (r->in.offered != 0)) {
 		return WERR_INVALID_PARAM;
 	}
 
-	if (offered > MAX_RPC_DATA_SIZE) {
+	if (r->in.offered > MAX_RPC_DATA_SIZE) {
 		return WERR_INVALID_PARAM;
 	}
 
-	rpcbuf_move(q_u->buffer, &r_u->buffer);
-	buffer = r_u->buffer;
+	DEBUG(5,("_spoolss_GetPrintProcessorDirectory\n"));
 
- 	DEBUG(5,("_spoolss_getprintprocessordirectory\n"));
-
-	*needed=0;
+	*r->out.needed = 0;
 
-	switch(level) {
+	switch (r->in.level) {
 	case 1:
-		result = getprintprocessordirectory_level_1
-		  (&q_u->name, &q_u->environment, buffer, offered, needed);
+		result = getprintprocessordirectory_level_1(p->mem_ctx,
+							    r->in.server,
+							    r->in.environment,
+							    &r->out.info->info1,
+							    r->in.offered,
+							    r->out.needed);
+		if (W_ERROR_EQUAL(result, WERR_INSUFFICIENT_BUFFER)) {
+			TALLOC_FREE(r->out.info);
+		}
 		break;
 	default:
 		result = WERR_UNKNOWN_LEVEL;
@@ -10246,17 +10241,6 @@ WERROR _spoolss_EnumPrintProcessors(pipes_struct *p,
 }
 
 /****************************************************************
- _spoolss_GetPrintProcessorDirectory
-****************************************************************/
-
-WERROR _spoolss_GetPrintProcessorDirectory(pipes_struct *p,
-					   struct spoolss_GetPrintProcessorDirectory *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
  _spoolss_ReadPrinter
 ****************************************************************/
 
diff --git a/source3/rpcclient/cmd_spoolss.c b/source3/rpcclient/cmd_spoolss.c
index 90995ff..944bac7 100644
--- a/source3/rpcclient/cmd_spoolss.c
+++ b/source3/rpcclient/cmd_spoolss.c
@@ -1661,8 +1661,12 @@ static WERROR cmd_spoolss_getprintprocdir(struct rpc_pipe_client *cli,
 					    int argc, const char **argv)
 {
 	WERROR result;
-	char *environment = NULL;
-	fstring procdir;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list