[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