diff options
| -rw-r--r-- | source3/printing/queue_process.c | 12 | ||||
| -rw-r--r-- | source3/printing/queue_process.h | 3 | ||||
| -rw-r--r-- | source3/smbd/process.c | 2 | ||||
| -rw-r--r-- | source3/smbd/server.c | 6 | 
4 files changed, 18 insertions, 5 deletions
diff --git a/source3/printing/queue_process.c b/source3/printing/queue_process.c index 5d18a08d63..82fd70d36d 100644 --- a/source3/printing/queue_process.c +++ b/source3/printing/queue_process.c @@ -295,9 +295,17 @@ bool printing_subsystem_init(struct tevent_context *ev_ctx,  }  void printing_subsystem_update(struct tevent_context *ev_ctx, -			       struct messaging_context *msg_ctx) +			       struct messaging_context *msg_ctx, +			       bool force)  { -	if (background_lpq_updater_pid != -1) return; +	if (background_lpq_updater_pid != -1) { +		if (force) { +			/* Send a sighup to the background process. +			 * this will force it to reload printers */ +			kill(background_lpq_updater_pid, SIGHUP); +		} +		return; +	}  	pcap_cache_reload(ev_ctx, msg_ctx, &reload_pcap_change_notify);  } diff --git a/source3/printing/queue_process.h b/source3/printing/queue_process.h index f0da726058..5f282c4462 100644 --- a/source3/printing/queue_process.h +++ b/source3/printing/queue_process.h @@ -25,6 +25,7 @@ bool printing_subsystem_init(struct tevent_context *ev_ctx,  			     bool start_daemons,  			     bool background_queue);  void printing_subsystem_update(struct tevent_context *ev_ctx, -			       struct messaging_context *msg_ctx); +			       struct messaging_context *msg_ctx, +			       bool force);  pid_t start_background_queue(struct tevent_context *ev,  			     struct messaging_context *msg); diff --git a/source3/smbd/process.c b/source3/smbd/process.c index d96d5fb7e0..f542dcd84f 100644 --- a/source3/smbd/process.c +++ b/source3/smbd/process.c @@ -887,7 +887,7 @@ static void smbd_sig_hup_handler(struct tevent_context *ev,  	DEBUG(1,("Reloading services after SIGHUP\n"));  	reload_services(msg_ctx, smbd_server_conn->sock, False);  	if (am_parent) { -		printing_subsystem_update(ev, msg_ctx); +		printing_subsystem_update(ev, msg_ctx, true);  	}  } diff --git a/source3/smbd/server.c b/source3/smbd/server.c index ee406fdfaf..24d61483e2 100644 --- a/source3/smbd/server.c +++ b/source3/smbd/server.c @@ -64,7 +64,7 @@ static void smb_conf_updated(struct messaging_context *msg,  	change_to_root_user();  	reload_services(msg, smbd_server_conn->sock, False);  	if (am_parent) { -		printing_subsystem_update(ev_ctx, msg); +		printing_subsystem_update(ev_ctx, msg, false);  	}  } @@ -1260,6 +1260,10 @@ extern void build_options(bool screen);  	if (!open_sockets_smbd(parent, ev_ctx, msg_ctx, ports))  		exit_server("open_sockets_smbd() failed"); +	/* force a printer update now that all messaging has been set up, +	 * before we allow clients to start connecting */ +	printing_subsystem_update(ev_ctx, msg_ctx, true); +  	TALLOC_FREE(frame);  	/* make sure we always have a valid stackframe */  	frame = talloc_stackframe();  | 
