[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Thu Jun 30 22:09:01 UTC 2022


The branch, master has been updated
       via  9080cd30d51 s3:printing: Do not clear the printer-list.tdb
      from  5903657bd9b s3: libads: Fix return from malloc check.

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


- Log -----------------------------------------------------------------
commit 9080cd30d517cb50954e440bb4475c2eeb678906
Author: Andreas Schneider <asn at samba.org>
Date:   Wed Jun 22 18:56:26 2022 +0200

    s3:printing: Do not clear the printer-list.tdb
    
    With the new dcerpc architecture we need to keep printer-list.tdb
    around. A spoolss dcerpc call will start rpc-spoolssd which will then
    start the background queue process. However in order to enum the
    printers we need have a printer-list.tdb. Depending on the number of
    printers this task can take several seconds. It is unlinkly that
    the printer-list will change all the time, so we might provide outdated
    data till it gets refreshed, but this is better than providing no
    printer list at all.
    
    If there are a lot of printers, the idle_seconds for the rpc-spoolssd
    should be increased so that the background task can finish.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=15082
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Thu Jun 30 22:08:39 UTC 2022 on sn-devel-184

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

Summary of changes:
 source3/printing/printer_list.c | 41 +++++++++++++++--------------------------
 source3/printing/printer_list.h |  2 --
 source3/printing/printing.c     |  4 ----
 3 files changed, 15 insertions(+), 32 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/printing/printer_list.c b/source3/printing/printer_list.c
index 4efcc2e2dd8..8ff75dc6bdd 100644
--- a/source3/printing/printer_list.c
+++ b/source3/printing/printer_list.c
@@ -30,13 +30,14 @@
 #define PL_DATA_FORMAT "ddPPP"
 #define PL_TSTAMP_FORMAT "dd"
 
+static struct db_context *printerlist_db;
+
 static struct db_context *get_printer_list_db(void)
 {
-	static struct db_context *db;
 	char *db_path;
 
-	if (db != NULL) {
-		return db;
+	if (printerlist_db != NULL) {
+		return printerlist_db;
 	}
 
 	db_path = lock_path(talloc_tos(), "printer_list.tdb");
@@ -44,31 +45,19 @@ static struct db_context *get_printer_list_db(void)
 		return NULL;
 	}
 
-	db = db_open(NULL, db_path, 0,
-		     TDB_DEFAULT|TDB_CLEAR_IF_FIRST|TDB_INCOMPATIBLE_HASH,
-		     O_RDWR|O_CREAT, 0644, DBWRAP_LOCK_ORDER_1,
-		     DBWRAP_FLAG_NONE);
+	printerlist_db = db_open(NULL,
+				 db_path,
+				 0,
+				 TDB_DEFAULT|TDB_INCOMPATIBLE_HASH,
+				 O_RDWR|O_CREAT,
+				 0644,
+				 DBWRAP_LOCK_ORDER_1,
+				 DBWRAP_FLAG_NONE);
 	TALLOC_FREE(db_path);
-	return db;
-}
-
-bool printer_list_parent_init(void)
-{
-	struct db_context *db;
-
-	/*
-	 * Open the tdb in the parent process (smbd) so that our
-	 * CLEAR_IF_FIRST optimization in tdb_reopen_all can properly
-	 * work.
-	 */
-
-	db = get_printer_list_db();
-	if (db == NULL) {
-		DEBUG(1, ("could not open Printer List Database: %s\n",
-			  strerror(errno)));
-		return false;
+	if (printerlist_db == NULL) {
+		DBG_ERR("Failed to open printer_list.tdb\n");
 	}
-	return true;
+	return printerlist_db;
 }
 
 NTSTATUS printer_list_get_printer(TALLOC_CTX *mem_ctx,
diff --git a/source3/printing/printer_list.h b/source3/printing/printer_list.h
index f30b3150671..c687048fc3b 100644
--- a/source3/printing/printer_list.h
+++ b/source3/printing/printer_list.h
@@ -20,8 +20,6 @@
 #ifndef _PRINTER_LIST_H_
 #define _PRINTER_LIST_H_
 
-bool printer_list_parent_init(void);
-
 /**
  * @brief Get the comment and the last refresh time from the printer list
  *        database.
diff --git a/source3/printing/printing.c b/source3/printing/printing.c
index 82903359fc3..dbe5a20e382 100644
--- a/source3/printing/printing.c
+++ b/source3/printing/printing.c
@@ -62,10 +62,6 @@ bool print_backend_init(struct messaging_context *msg_ctx)
 	bool ok;
 	char *print_cache_path;
 
-	if (!printer_list_parent_init()) {
-		return false;
-	}
-
 	print_cache_path = cache_path(talloc_tos(), "printing");
 	if (print_cache_path == NULL) {
 		return false;


-- 
Samba Shared Repository



More information about the samba-cvs mailing list