The branch, master has been updated
       via  5ec1273 s3-printing: Add new printers to registry.
      from  2464a7b s3-libsmb: Remove obsolete smb_krb5_locate_kdc.

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


- Log -----------------------------------------------------------------
commit 5ec12732c3092d248a374ae7af155a409c7ee88e
Author: Björn Baumbach <b...@sernet.de>
Date:   Tue Feb 7 11:41:54 2012 +0100

    s3-printing: Add new printers to registry.
    
    This fixes bug #8554, #8612 and #8748.
    
    Pair-Programmed-With: Stefan Metzmacher <me...@samba.org>
    
    Autobuild-User: Andreas Schneider <a...@cryptomilk.org>
    Autobuild-Date: Thu Feb  9 16:39:04 CET 2012 on sn-devel-104

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

Summary of changes:
 source3/include/nt_printing.h  |    4 +++
 source3/printing/nt_printing.c |   19 +++++++++++++++-
 source3/smbd/server_reload.c   |   44 ++++++++++++++++++++++++++++++----------
 3 files changed, 54 insertions(+), 13 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/include/nt_printing.h b/source3/include/nt_printing.h
index 4735c4e..08a2161 100644
--- a/source3/include/nt_printing.h
+++ b/source3/include/nt_printing.h
@@ -176,5 +176,9 @@ void nt_printer_remove(TALLOC_CTX *mem_ctx,
                        const struct auth_session_info *server_info,
                        struct messaging_context *msg_ctx,
                        const char *printer);
+void nt_printer_add(TALLOC_CTX *mem_ctx,
+                   const struct auth_session_info *server_info,
+                   struct messaging_context *msg_ctx,
+                   const char *printer);
 
 #endif /* NT_PRINTING_H_ */
diff --git a/source3/printing/nt_printing.c b/source3/printing/nt_printing.c
index 7fc55c3..92aa320 100644
--- a/source3/printing/nt_printing.c
+++ b/source3/printing/nt_printing.c
@@ -1845,7 +1845,22 @@ void nt_printer_remove(TALLOC_CTX *mem_ctx,
        result = winreg_delete_printer_key_internal(mem_ctx, session_info, 
msg_ctx,
                                           printer, "");
        if (!W_ERROR_IS_OK(result)) {
-               DEBUG(0, ("nt_printer_remove: failed to remove printer %s",
-                         printer));
+               DEBUG(0, ("nt_printer_remove: failed to remove printer %s: "
+               "%s\n", printer, win_errstr(result)));
+       }
+}
+
+void nt_printer_add(TALLOC_CTX *mem_ctx,
+                   const struct auth_session_info *session_info,
+                   struct messaging_context *msg_ctx,
+                   const char *printer)
+{
+       WERROR result;
+
+       result = winreg_create_printer_internal(mem_ctx, session_info, msg_ctx,
+                                               printer);
+       if (!W_ERROR_IS_OK(result)) {
+               DEBUG(0, ("nt_printer_add: failed to add printer %s: %s\n",
+                         printer, win_errstr(result)));
        }
 }
diff --git a/source3/smbd/server_reload.c b/source3/smbd/server_reload.c
index f15f80e..6d4b876 100644
--- a/source3/smbd/server_reload.c
+++ b/source3/smbd/server_reload.c
@@ -50,14 +50,19 @@ void delete_and_reload_printers(struct tevent_context *ev,
 {
        struct auth_session_info *session_info = NULL;
        struct spoolss_PrinterInfo2 *pinfo2 = NULL;
+       int n_services;
+       int pnum;
        int snum;
-       int n_services = lp_numservices();
-       int pnum = lp_servicenumber(PRINTERS_NAME);
        const char *pname;
+       const char *sname;
        NTSTATUS status;
-       bool skip = false;
 
-       SMB_ASSERT(pcap_cache_loaded());
+       /* Get pcap printers updated */
+       load_printers(ev, msg_ctx);
+
+       n_services = lp_numservices();
+       pnum = lp_servicenumber(PRINTERS_NAME);
+
        DEBUG(10, ("reloading printer services from pcap cache\n"));
 
        status = make_session_info_system(talloc_tos(), &session_info);
@@ -66,18 +71,29 @@ void delete_and_reload_printers(struct tevent_context *ev,
                          "Could not create system session_info\n"));
                /* can't remove stale printers before we
                 * are fully initilized */
-               skip = true;
+               return;
        }
 
-       /* remove stale printers */
-       for (snum = 0; skip == false && snum < n_services; snum++) {
-               /* avoid removing PRINTERS_NAME or non-autoloaded printers */
-               if (snum == pnum || !(lp_snum_ok(snum) && lp_print_ok(snum) &&
-                                     lp_autoloaded(snum)))
+       /*
+        * Add default config for printers added to smb.conf file and remove
+        * stale printers
+        */
+       for (snum = 0; snum < n_services; snum++) {
+               /* avoid removing PRINTERS_NAME */
+               if (snum == pnum) {
+                       continue;
+               }
+
+               /* skip no-printer services */
+               if (!(lp_snum_ok(snum) && lp_print_ok(snum))) {
                        continue;
+               }
 
+               sname = lp_const_servicename(snum);
                pname = lp_printername(snum);
-               if (!pcap_printername_ok(pname)) {
+
+               /* check printer, but avoid removing non-autoloaded printers */
+               if (!pcap_printername_ok(pname) && lp_autoloaded(snum)) {
                        DEBUG(3, ("removing stale printer %s\n", pname));
 
                        if (is_printer_published(session_info, session_info,
@@ -94,9 +110,15 @@ void delete_and_reload_printers(struct tevent_context *ev,
                        nt_printer_remove(session_info, session_info, msg_ctx,
                                          pname);
                        lp_killservice(snum);
+               } else {
+                       DEBUG(8, ("Adding default registry entry for printer "
+                                 "[%s], if it doesn't exist.\n", sname));
+                       nt_printer_add(session_info, session_info, msg_ctx,
+                                      sname);
                }
        }
 
+       /* Make sure deleted printers are gone */
        load_printers(ev, msg_ctx);
 
        TALLOC_FREE(session_info);


-- 
Samba Shared Repository

Reply via email to