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 <g...@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 <g...@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 <g...@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

Reply via email to