The branch, master has been updated
       via  3975203 s3-spoolss: fix do_drv_upgrade_printer() which must have 
been broken since the days we moved away from fstrings.
       via  fa3264f s3-net: better handle obscure 0x80070002 error reply when 
trying to update an not yet published printer.
       via  21576e3 s3-net: make sure we dont crash when publishing a single 
printer.
       via  5cb5e0a s3-spoolss: make sure we dont crash on NULL setprinter 
level2 elements as seen from win7.
       via  48fca54 s3-spoolss: dont overwrite location change notify.
      from  62d87f8 s3-selftest: added samba3.posix_s3.rpc.spoolss.printer to 
knownfail

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


- Log -----------------------------------------------------------------
commit 3975203a0242a01fe6d3737f8f04ec80e90cb831
Author: Günther Deschner <g...@samba.org>
Date:   Fri Oct 1 06:42:58 2010 +0200

    s3-spoolss: fix do_drv_upgrade_printer() which must have been broken since 
the
    days we moved away from fstrings.
    
    Guenther

commit fa3264f89b1de8c7a284b8bc4469a80db7c6084f
Author: Günther Deschner <g...@samba.org>
Date:   Fri Oct 1 06:08:47 2010 +0200

    s3-net: better handle obscure 0x80070002 error reply when trying to update 
an
    not yet published printer.
    
    Guenther

commit 21576e3f8c32878910460bf9575c200ad93d682a
Author: Günther Deschner <g...@samba.org>
Date:   Fri Oct 1 06:08:12 2010 +0200

    s3-net: make sure we dont crash when publishing a single printer.
    
    Guenther

commit 5cb5e0aa9881758ec9f5af7da4fbc002ba91f49b
Author: Günther Deschner <g...@samba.org>
Date:   Fri Oct 1 06:07:25 2010 +0200

    s3-spoolss: make sure we dont crash on NULL setprinter level2 elements as 
seen from win7.
    
    Guenther

commit 48fca54a29375dfad84a9863c70fed8b88d70221
Author: Günther Deschner <g...@samba.org>
Date:   Fri Oct 1 06:05:38 2010 +0200

    s3-spoolss: dont overwrite location change notify.
    
    Guenther

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

Summary of changes:
 source3/include/proto.h             |    3 +++
 source3/printing/notify.c           |   13 +++++++++++++
 source3/rpc_server/srv_spoolss_nt.c |   33 +++++++++++++++++++++------------
 source3/utils/net_rpc_printer.c     |   15 ++++++++++++---
 4 files changed, 49 insertions(+), 15 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/include/proto.h b/source3/include/proto.h
index 5cdb956..866836f 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -4044,6 +4044,9 @@ void notify_printer_byname(struct tevent_context *ev,
                           struct messaging_context *msg_ctx,
                           const char *printername, uint32 change,
                           const char *value);
+void notify_printer_sepfile(struct tevent_context *ev,
+                           struct messaging_context *msg_ctx,
+                           int snum, const char *sepfile);
 
 /* The following definitions come from printing/pcap.c  */
 
diff --git a/source3/printing/notify.c b/source3/printing/notify.c
index 9f07f6c..84a979e 100644
--- a/source3/printing/notify.c
+++ b/source3/printing/notify.c
@@ -577,6 +577,19 @@ void notify_printer_location(struct tevent_context *ev,
                snum, strlen(location) + 1, location);
 }
 
+void notify_printer_sepfile(struct tevent_context *ev,
+                           struct messaging_context *msg_ctx,
+                           int snum, const char *sepfile)
+{
+       const char *sharename = lp_servicename(snum);
+
+       send_notify_field_buffer(
+               ev, msg_ctx,
+               sharename, PRINTER_NOTIFY_TYPE, PRINTER_NOTIFY_FIELD_SEPFILE,
+               snum, strlen(sepfile) + 1, sepfile);
+}
+
+
 void notify_printer_byname(struct tevent_context *ev,
                           struct messaging_context *msg_ctx,
                           const char *printername, uint32 change,
diff --git a/source3/rpc_server/srv_spoolss_nt.c 
b/source3/rpc_server/srv_spoolss_nt.c
index 889c370..bb3b05d 100644
--- a/source3/rpc_server/srv_spoolss_nt.c
+++ b/source3/rpc_server/srv_spoolss_nt.c
@@ -1493,7 +1493,6 @@ void do_drv_upgrade_printer(struct messaging_context *msg,
        const char *drivername;
        int snum;
        int n_services = lp_numservices();
-       size_t len;
 
        tmp_ctx = talloc_new(NULL);
        if (!tmp_ctx) return;
@@ -1505,8 +1504,7 @@ void do_drv_upgrade_printer(struct messaging_context *msg,
                goto done;
        }
 
-       len = MIN(data->length,sizeof(drivername)-1);
-       drivername = talloc_strndup(tmp_ctx, (const char *)data->data, len);
+       drivername = talloc_strndup(tmp_ctx, (const char *)data->data, 
data->length);
        if (!drivername) {
                DEBUG(0, ("do_drv_upgrade_printer: Out of memoery ?!\n"));
                goto done;
@@ -1522,6 +1520,11 @@ void do_drv_upgrade_printer(struct messaging_context 
*msg,
                        continue;
                }
 
+               /* ignore [printers] share */
+               if (strequal(lp_const_servicename(snum), "printers")) {
+                       continue;
+               }
+
                result = winreg_get_printer(tmp_ctx, server_info, msg,
                                            lp_const_servicename(snum),
                                            &pinfo2);
@@ -6127,7 +6130,8 @@ static WERROR update_dsspooler(TALLOC_CTX *mem_ctx,
                                printer->drivername));
 
                        notify_printer_driver(server_event_context(), msg_ctx,
-                                             snum, printer->drivername);
+                                             snum, printer->drivername ?
+                                             printer->drivername : "");
                }
        }
 
@@ -6145,7 +6149,8 @@ static WERROR update_dsspooler(TALLOC_CTX *mem_ctx,
 
                if (!force_update) {
                        notify_printer_comment(server_event_context(), msg_ctx,
-                                              snum, printer->comment);
+                                              snum, printer->comment ?
+                                              printer->comment : "");
                }
        }
 
@@ -6164,7 +6169,8 @@ static WERROR update_dsspooler(TALLOC_CTX *mem_ctx,
                if (!force_update) {
                        notify_printer_sharename(server_event_context(),
                                                 msg_ctx,
-                                                snum, printer->sharename);
+                                                snum, printer->sharename ?
+                                                printer->sharename : "");
                }
        }
 
@@ -6191,7 +6197,7 @@ static WERROR update_dsspooler(TALLOC_CTX *mem_ctx,
 
                if (!force_update) {
                        notify_printer_printername(server_event_context(),
-                                                  msg_ctx, snum, p);
+                                                  msg_ctx, snum, p ? p : "");
                }
        }
 
@@ -6209,7 +6215,8 @@ static WERROR update_dsspooler(TALLOC_CTX *mem_ctx,
 
                if (!force_update) {
                        notify_printer_port(server_event_context(),
-                                           msg_ctx, snum, printer->portname);
+                                           msg_ctx, snum, printer->portname ?
+                                           printer->portname : "");
                }
        }
 
@@ -6228,7 +6235,8 @@ static WERROR update_dsspooler(TALLOC_CTX *mem_ctx,
                if (!force_update) {
                        notify_printer_location(server_event_context(),
                                                msg_ctx, snum,
-                                               printer->location);
+                                               printer->location ?
+                                               printer->location : "");
                }
        }
 
@@ -6245,9 +6253,10 @@ static WERROR update_dsspooler(TALLOC_CTX *mem_ctx,
                                          buffer.length);
 
                if (!force_update) {
-                       notify_printer_location(server_event_context(),
-                                               msg_ctx, snum,
-                                               printer->location);
+                       notify_printer_sepfile(server_event_context(),
+                                              msg_ctx, snum,
+                                              printer->sepfile ?
+                                              printer->sepfile : "");
                }
        }
 
diff --git a/source3/utils/net_rpc_printer.c b/source3/utils/net_rpc_printer.c
index 589a569..0396e2a 100644
--- a/source3/utils/net_rpc_printer.c
+++ b/source3/utils/net_rpc_printer.c
@@ -1093,6 +1093,11 @@ static bool get_printer_info(struct rpc_pipe_client 
*pipe_hnd,
                                         &hnd))
                return false;
 
+       *info_p = talloc_zero(mem_ctx, union spoolss_PrinterInfo);
+       if (*info_p == NULL) {
+               return false;
+       }
+
        if (!net_spoolss_getprinter(pipe_hnd, mem_ctx, &hnd, level, *info_p)) {
                rpccli_spoolss_ClosePrinter(pipe_hnd, mem_ctx, &hnd, NULL);
                return false;
@@ -1317,9 +1322,13 @@ static NTSTATUS 
rpc_printer_publish_internals_args(struct rpc_pipe_client *pipe_
                                                      0, /* command */
                                                      &result);
 
-               if (!W_ERROR_IS_OK(result) && (W_ERROR_V(result) != 
W_ERROR_V(WERR_IO_PENDING))) {
-                       printf(_("cannot set printer-info: %s\n"),
-                              win_errstr(result));
+               if (!W_ERROR_IS_OK(result) && !W_ERROR_EQUAL(result, 
WERR_IO_PENDING)) {
+                       if ((action == DSPRINT_UPDATE) && W_ERROR_EQUAL(result, 
W_ERROR(0x80070002))) {
+                               printf(_("printer not published yet\n"));
+                       } else {
+                               printf(_("cannot set printer-info: %s\n"),
+                                      win_errstr(result));
+                       }
                        goto done;
                }
 


-- 
Samba Shared Repository

Reply via email to