[SCM] Samba Shared Repository - branch master updated

Andreas Schneider asn at samba.org
Thu Feb 9 08:40:02 MST 2012


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 <bb at 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 <metze at samba.org>
    
    Autobuild-User: Andreas Schneider <asn at 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


More information about the samba-cvs mailing list