[SCM] Samba Shared Repository - branch v3-5-test updated

Karolin Seeger kseeger at samba.org
Mon Sep 6 12:51:12 MDT 2010


The branch, v3-5-test has been updated
       via  1a4a8e9 s3-spoolss: add and use spoolss_printerinfo2_to_setprinterinfo2().
       via  589bb48 s3-rpcclient: fix two more invalid typecasts in spoolss commands.
       via  a88f1bd s3-net: fix a "dereferencing type-punned pointer will break strict-aliasing rules" warning.
      from  de445e2 s3: Cache results of finding printer names

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


- Log -----------------------------------------------------------------
commit 1a4a8e9bfb146276174a3723e3f20897e0443542
Author: Günther Deschner <gd at samba.org>
Date:   Thu Jun 3 16:30:55 2010 +0200

    s3-spoolss: add and use spoolss_printerinfo2_to_setprinterinfo2().
    
    This fixes some invalid typecasts.
    
    Guenther
    
    The last 3 patches address bug #7658 (fix some "dereferencing type-punned
    pointer will break strict-aliasing rules" warnings).

commit 589bb48af5708501ab47335c84a59f0923ccb20b
Author: Günther Deschner <gd at samba.org>
Date:   Mon May 10 14:44:30 2010 +0200

    s3-rpcclient: fix two more invalid typecasts in spoolss commands.
    
    Guenther
    (cherry picked from commit 83736066a3f94eaadb422016c9f22cb18bec2cd7)

commit a88f1bddbc348075c322834153040b57f5eb6ab0
Author: Günther Deschner <gd at samba.org>
Date:   Tue May 25 12:43:00 2010 +0200

    s3-net: fix a "dereferencing type-punned pointer will break strict-aliasing rules" warning.
    
    Guenther
    (cherry picked from commit f12028a3fd5c64bc8e13996cb9a18a19ec0929e0)

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

Summary of changes:
 source3/include/proto.h           |    2 +
 source3/rpc_client/init_spoolss.c |   29 ++++++++++++++++++++++++++
 source3/rpcclient/cmd_spoolss.c   |   41 ++++++++++---------------------------
 source3/utils/net_ads.c           |    4 +-
 source3/utils/net_rpc_printer.c   |   11 ++++++---
 5 files changed, 51 insertions(+), 36 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/include/proto.h b/source3/include/proto.h
index 4d3fb63..483fd84 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -5595,6 +5595,8 @@ WERROR pull_spoolss_PrinterData(TALLOC_CTX *mem_ctx,
 WERROR push_spoolss_PrinterData(TALLOC_CTX *mem_ctx, DATA_BLOB *blob,
 				enum winreg_Type type,
 				union spoolss_PrinterData *data);
+void spoolss_printerinfo2_to_setprinterinfo2(const struct spoolss_PrinterInfo2 *i,
+					     struct spoolss_SetPrinterInfo2 *s);
 
 /* The following definitions come from rpc_client/init_lsa.c  */
 
diff --git a/source3/rpc_client/init_spoolss.c b/source3/rpc_client/init_spoolss.c
index 4c105ea..d557ff2 100644
--- a/source3/rpc_client/init_spoolss.c
+++ b/source3/rpc_client/init_spoolss.c
@@ -73,3 +73,32 @@ WERROR push_spoolss_PrinterData(TALLOC_CTX *mem_ctx, DATA_BLOB *blob,
 	}
 	return WERR_OK;
 }
+
+/*******************************************************************
+ ********************************************************************/
+
+void spoolss_printerinfo2_to_setprinterinfo2(const struct spoolss_PrinterInfo2 *i,
+					     struct spoolss_SetPrinterInfo2 *s)
+{
+	s->servername		= i->servername;
+	s->printername		= i->printername;
+	s->sharename		= i->sharename;
+	s->portname		= i->portname;
+	s->drivername		= i->drivername;
+	s->comment		= i->comment;
+	s->location		= i->location;
+	s->devmode_ptr		= 0;
+	s->sepfile		= i->sepfile;
+	s->printprocessor	= i->printprocessor;
+	s->datatype		= i->datatype;
+	s->parameters		= i->parameters;
+	s->secdesc_ptr		= 0;
+	s->attributes		= i->attributes;
+	s->priority		= i->priority;
+	s->defaultpriority	= i->defaultpriority;
+	s->starttime		= i->starttime;
+	s->untiltime		= i->untiltime;
+	s->status		= i->status;
+	s->cjobs		= i->cjobs;
+	s->averageppm		= i->averageppm;
+}
diff --git a/source3/rpcclient/cmd_spoolss.c b/source3/rpcclient/cmd_spoolss.c
index 21fbaf9..2d79b11 100644
--- a/source3/rpcclient/cmd_spoolss.c
+++ b/source3/rpcclient/cmd_spoolss.c
@@ -462,6 +462,7 @@ static WERROR cmd_spoolss_setprinter(struct rpc_pipe_client *cli,
 	uint32_t 	info_level = 2;
 	union spoolss_PrinterInfo info;
 	struct spoolss_SetPrinterInfoCtr info_ctr;
+	struct spoolss_SetPrinterInfo2 info2;
 	const char	*printername, *comment = NULL;
 	struct spoolss_DevmodeContainer devmode_ctr;
 	struct sec_desc_buf secdesc_ctr;
@@ -501,12 +502,11 @@ static WERROR cmd_spoolss_setprinter(struct rpc_pipe_client *cli,
 
 
 	/* Modify the comment. */
-	info.info2.comment = comment;
-	info.info2.secdesc = NULL;
-	info.info2.devmode = NULL;
+	spoolss_printerinfo2_to_setprinterinfo2(&info.info2, &info2);
+	info2.comment = comment;
 
 	info_ctr.level = 2;
-	info_ctr.info.info2 = (struct spoolss_SetPrinterInfo2 *)&info.info2;
+	info_ctr.info.info2 = &info2;
 
 	status = rpccli_spoolss_SetPrinter(cli, mem_ctx,
 					   &pol,
@@ -540,6 +540,7 @@ static WERROR cmd_spoolss_setprintername(struct rpc_pipe_client *cli,
 	const char 	*printername,
 			*new_printername = NULL;
 	struct spoolss_SetPrinterInfoCtr info_ctr;
+	struct spoolss_SetPrinterInfo2 info2;
 	struct spoolss_DevmodeContainer devmode_ctr;
 	struct sec_desc_buf secdesc_ctr;
 
@@ -577,12 +578,11 @@ static WERROR cmd_spoolss_setprintername(struct rpc_pipe_client *cli,
                 goto done;
 
 	/* Modify the printername. */
-	info.info2.printername = new_printername;
-	info.info2.devmode = NULL;
-	info.info2.secdesc = NULL;
+	spoolss_printerinfo2_to_setprinterinfo2(&info.info2, &info2);
+	info2.printername = new_printername;
 
-	info_ctr.level = info_level;
-	info_ctr.info.info2 = (struct spoolss_SetPrinterInfo2 *)&info.info2;
+	info_ctr.level = 2;
+	info_ctr.info.info2 = &info2;
 
 	status = rpccli_spoolss_SetPrinter(cli, mem_ctx,
 					   &pol,
@@ -1776,27 +1776,8 @@ static WERROR cmd_spoolss_setdriver(struct rpc_pipe_client *cli,
 
 	/* Set the printer driver */
 
-	info2.servername	= info.info2.servername;
-	info2.printername	= info.info2.printername;
-	info2.sharename		= info.info2.sharename;
-	info2.portname		= info.info2.portname;
-	info2.drivername	= argv[2];
-	info2.comment		= info.info2.comment;
-	info2.location		= info.info2.location;
-	info2.devmode_ptr	= 0;
-	info2.sepfile		= info.info2.sepfile;
-	info2.printprocessor	= info.info2.printprocessor;
-	info2.datatype		= info.info2.datatype;
-	info2.parameters	= info.info2.parameters;
-	info2.secdesc_ptr	= 0;
-	info2.attributes	= info.info2.attributes;
-	info2.priority		= info.info2.priority;
-	info2.defaultpriority	= info.info2.defaultpriority;
-	info2.starttime		= info.info2.starttime;
-	info2.untiltime		= info.info2.untiltime;
-	info2.status		= info.info2.status;
-	info2.cjobs		= info.info2.cjobs;
-	info2.averageppm	= info.info2.averageppm;
+	spoolss_printerinfo2_to_setprinterinfo2(&info.info2, &info2);
+	info2.drivername = argv[2];
 
 	info_ctr.level = 2;
 	info_ctr.info.info2 = &info2;
diff --git a/source3/utils/net_ads.c b/source3/utils/net_ads.c
index 3cd4fd8..b618ab8 100644
--- a/source3/utils/net_ads.c
+++ b/source3/utils/net_ads.c
@@ -541,7 +541,7 @@ static int ads_user_info(struct net_context *c, int argc, const char **argv)
 	char *escaped_user;
 	DOM_SID primary_group_sid;
 	uint32_t group_rid;
-	enum SID_NAME_USE type;
+	enum wbcSidType type;
 
 	if (argc < 1 || c->display_usage) {
 		return net_ads_user_usage(c, argc, argv);
@@ -596,7 +596,7 @@ static int ads_user_info(struct net_context *c, int argc, const char **argv)
 	wbc_status = wbcLookupSid((struct wbcDomainSid *)&primary_group_sid,
 				  NULL, /* don't look up domain */
 				  &primary_group,
-				  (enum wbcSidType *) &type);
+				  &type);
 	if (!WBC_ERROR_IS_OK(wbc_status)) {
 		d_fprintf(stderr, "wbcLookupSid: %s\n",
 			  wbcErrorString(wbc_status));
diff --git a/source3/utils/net_rpc_printer.c b/source3/utils/net_rpc_printer.c
index 6c11a2f..dfc150f 100644
--- a/source3/utils/net_rpc_printer.c
+++ b/source3/utils/net_rpc_printer.c
@@ -754,6 +754,7 @@ static bool net_spoolss_setprinter(struct rpc_pipe_client *pipe_hnd,
 	WERROR result;
 	NTSTATUS status;
 	struct spoolss_SetPrinterInfoCtr info_ctr;
+	struct spoolss_SetPrinterInfo2 info2;
 	struct spoolss_DevmodeContainer devmode_ctr;
 	struct sec_desc_buf secdesc_ctr;
 
@@ -773,8 +774,8 @@ static bool net_spoolss_setprinter(struct rpc_pipe_client *pipe_hnd,
 			(void *)&info->info1;
 		break;
 	case 2:
-		info_ctr.info.info2 = (struct spoolss_SetPrinterInfo2 *)
-			(void *)&info->info2;
+		spoolss_printerinfo2_to_setprinterinfo2(&info->info2, &info2);
+		info_ctr.info.info2 = &info2;
 		break;
 	case 3:
 		info_ctr.info.info3 = (struct spoolss_SetPrinterInfo3 *)
@@ -2044,6 +2045,8 @@ NTSTATUS rpc_printer_migrate_printers_internals(struct net_context *c,
 	/* do something for all printers */
 	for (i = 0; i < num_printers; i++) {
 
+		struct spoolss_SetPrinterInfo2 info2;
+
 		/* do some initialization */
 		printername = info_enum[i].info2.printername;
 		sharename = info_enum[i].info2.sharename;
@@ -2095,8 +2098,8 @@ NTSTATUS rpc_printer_migrate_printers_internals(struct net_context *c,
 		d_printf(_("creating printer: %s\n"), printername);
 
 		info_ctr.level = level;
-		info_ctr.info.info2 = (struct spoolss_SetPrinterInfo2 *)
-			(void *)&info_src.info2;
+		spoolss_printerinfo2_to_setprinterinfo2(&info_src.info2, &info2);
+		info_ctr.info.info2 = &info2;
 
 		result = rpccli_spoolss_addprinterex(pipe_hnd_dst,
 						     mem_ctx,


-- 
Samba Shared Repository


More information about the samba-cvs mailing list