[SCM] Samba Shared Repository - branch v3-6-test updated
Andreas Schneider
asn at samba.org
Wed Mar 30 07:55:12 MDT 2011
The branch, v3-6-test has been updated
via 54afca7 s3-waf: fix spoolssd compile.
via 52882e7 s3-rpc_server: Fixed rpc_pipe_open_internal documentation.
via cfe3e48 s3-rpc_server: Only allow embedded, daemon and external server type.
via 1c5609b s3-spoolssd: Start the spoolss service correctly.
via ba5938e s3-spoolssd: Register spoolssd endpoints.
via 3fe8a94 s3-epmap: Make rpc_ep_setup_register an internal function.
via 84dc7f8 s3-spoolssd: Fixed logfile creation.
via 86c2e7f s3-spoolssd: Added missing include.
via 56c5813 s3-spoolssd: Pass down event and messanging context.
via 3df906d s3-spoolssd: Fixed reopening of logs.
via 8bb609e s3:spoolssd Start spoolss from smbd
via 953f9b9 s3:spoolssd Initialize the spoolss rpc interfaces
via ef2e27c s3:spoolssd Add spoolss own signal handlers
via e63d8bf s3:spoolssd handle smb.conf reloads directly
via e9dd62b s3:spoolssd Create our own log file
via be4e2cf s3:spoolssd Add skeleton for spoolss daemon
via 7dbe832 s3:printing Make print_queue_receive public
from bbf0762 s3: Use cli_ntcreate to when listing snapshots
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-6-test
- Log -----------------------------------------------------------------
commit 54afca72d33d3ab291f41d101c3ed5ff88abefb7
Author: Günther Deschner <gd at samba.org>
Date: Mon Mar 28 16:42:21 2011 +0200
s3-waf: fix spoolssd compile.
Guenther
Signed-off-by: Günther Deschner <gd at samba.org>
(cherry picked from commit 6a27928cedf31e7e76572775a7f6d4a9e2f01c95)
commit 52882e79724e1bca0e847666c7a216e475627401
Author: Andreas Schneider <asn at samba.org>
Date: Tue Mar 29 12:51:45 2011 +0200
s3-rpc_server: Fixed rpc_pipe_open_internal documentation.
Signed-off-by: Günther Deschner <gd at samba.org>
(cherry picked from commit 2cb797456a3fa016dff31b92bf846b316d47b8a2)
commit cfe3e4886a168df63a78954ed5a80cae7819fca3
Author: Andreas Schneider <asn at samba.org>
Date: Tue Mar 29 10:58:05 2011 +0200
s3-rpc_server: Only allow embedded, daemon and external server type.
Signed-off-by: Günther Deschner <gd at samba.org>
(cherry picked from commit 8dc58057382806d0ac5702321e5b0d4a5186bf6b)
commit 1c5609b31a709a22edc60742cf60ca5c93fcf681
Author: Andreas Schneider <asn at samba.org>
Date: Tue Mar 29 10:52:32 2011 +0200
s3-spoolssd: Start the spoolss service correctly.
Signed-off-by: Günther Deschner <gd at samba.org>
(cherry picked from commit 991fa3a5fecc05a01b2d3696fe23cba109de10c0)
commit ba5938e6588ff7eaa4d8ba78caa860a1cfdab28d
Author: Andreas Schneider <asn at samba.org>
Date: Mon Mar 28 14:18:23 2011 +0200
s3-spoolssd: Register spoolssd endpoints.
Signed-off-by: Günther Deschner <gd at samba.org>
(cherry picked from commit 28b204601556105ad57d7ac69210eb75f248f764)
commit 3fe8a9468299f1bf57e8ed96ffb3dfd7f26e0c0b
Author: Andreas Schneider <asn at samba.org>
Date: Mon Mar 28 14:18:00 2011 +0200
s3-epmap: Make rpc_ep_setup_register an internal function.
Signed-off-by: Günther Deschner <gd at samba.org>
(cherry picked from commit 8c635b669c557cfe6fb5de2bd90302ada54b0fb9)
commit 84dc7f83d362da5b6393bbd9a579d289b0fc4745
Author: Andreas Schneider <asn at samba.org>
Date: Mon Mar 28 14:30:29 2011 +0200
s3-spoolssd: Fixed logfile creation.
Signed-off-by: Günther Deschner <gd at samba.org>
(cherry picked from commit 80fe8fa8d0d2ec787e4d70a3553c1d4e066f4163)
commit 86c2e7f9dcd53050db56624af88540910b402627
Author: Andreas Schneider <asn at samba.org>
Date: Thu Mar 24 10:22:57 2011 +0100
s3-spoolssd: Added missing include.
Signed-off-by: Günther Deschner <gd at samba.org>
(cherry picked from commit a956c57cf939d0a4cdd5793b129e1fa87e63fffd)
commit 56c5813241e5815af782ac006b72aeb5cefd911e
Author: Andreas Schneider <asn at samba.org>
Date: Thu Jan 20 18:59:40 2011 +0100
s3-spoolssd: Pass down event and messanging context.
Signed-off-by: Günther Deschner <gd at samba.org>
(cherry picked from commit c1b7c0c2b78417aac4365a03e858397324728605)
commit 3df906dc8f2c64336121bf4e9e9670dcbc7929cf
Author: Andreas Schneider <asn at samba.org>
Date: Wed Aug 25 10:15:47 2010 +0200
s3-spoolssd: Fixed reopening of logs.
Everytime the log was reopened a .spoolssd has been appended which
resulted in long file names.
Signed-off-by: Günther Deschner <gd at samba.org>
(cherry picked from commit 851f95b121f2fc16ef5cc532b8ad818f5c32e69f)
commit 8bb609eedd4698353aa8d394fec3677d2202244d
Author: Simo Sorce <ssorce at redhat.com>
Date: Thu May 20 08:33:14 2010 -0400
s3:spoolssd Start spoolss from smbd
Signed-off-by: Günther Deschner <gd at samba.org>
(cherry picked from commit fe0e079bc12ebe2e9204ca492337dc754e13832b)
commit 953f9b93730410027c0cdbf0e09edb658e2c93a7
Author: Simo Sorce <idra at samba.org>
Date: Tue Jun 15 18:39:27 2010 -0400
s3:spoolssd Initialize the spoolss rpc interfaces
Signed-off-by: Günther Deschner <gd at samba.org>
(cherry picked from commit 043942720c8bbf8f00476da097a266f162f2edd9)
commit ef2e27cbb10ab5aa23fd86d4e228c6b4d7fafe3c
Author: Simo Sorce <idra at samba.org>
Date: Wed Jun 16 13:03:32 2010 -0400
s3:spoolssd Add spoolss own signal handlers
Signed-off-by: Günther Deschner <gd at samba.org>
(cherry picked from commit 0c130105f5b70803daf784bd9a3c86ed34295338)
commit e63d8bf32489a1fddbaccbc40f392dc3c2a9e083
Author: Simo Sorce <idra at samba.org>
Date: Wed Jun 16 15:36:06 2010 -0400
s3:spoolssd handle smb.conf reloads directly
Signed-off-by: Günther Deschner <gd at samba.org>
(cherry picked from commit 0b7b8414ddb94ea05c633ec655493db4ffcad3cd)
commit e9dd62bc6f8b85ddfcab5e22d2655d7e2d1f6067
Author: Simo Sorce <idra at samba.org>
Date: Tue Jun 15 18:38:44 2010 -0400
s3:spoolssd Create our own log file
Signed-off-by: Günther Deschner <gd at samba.org>
(cherry picked from commit 2d333ae8bc42a5aab7df6985b1432e3a480e74dc)
commit be4e2cf95c786a36d4d90ea1892f73de872db328
Author: Simo Sorce <ssorce at redhat.com>
Date: Thu May 20 08:48:18 2010 -0400
s3:spoolssd Add skeleton for spoolss daemon
Signed-off-by: Günther Deschner <gd at samba.org>
(cherry picked from commit 99941eb92b2fa5b6c80649abc36b159802241088)
commit 7dbe832bb074d86035d25ed12180e59394640853
Author: Simo Sorce <ssorce at redhat.com>
Date: Thu May 20 08:49:50 2010 -0400
s3:printing Make print_queue_receive public
Signed-off-by: Günther Deschner <gd at samba.org>
(cherry picked from commit 1d33474dad5a101666044f58a00f33bd6a134080)
-----------------------------------------------------------------------
Summary of changes:
source3/Makefile.in | 2 +-
source3/include/printing.h | 5 +
source3/printing/printing.c | 2 +-
source3/printing/spoolssd.c | 242 +++++++++++++++++++++++++++++++++++++
source3/rpc_server/rpc_ep_setup.c | 32 +++--
source3/rpc_server/rpc_ep_setup.h | 24 ++++
source3/rpc_server/rpc_ncacn_np.c | 26 +++-
source3/smbd/server.c | 17 +++
source3/wscript_build | 2 +-
9 files changed, 331 insertions(+), 21 deletions(-)
create mode 100644 source3/printing/spoolssd.c
Changeset truncated at 500 lines:
diff --git a/source3/Makefile.in b/source3/Makefile.in
index 05f1ccd..34f5f82 100644
--- a/source3/Makefile.in
+++ b/source3/Makefile.in
@@ -886,7 +886,7 @@ SMBD_OBJ_SRV = smbd/server_reload.o \
smbd/posix_acls.o lib/sysacls.o \
smbd/process.o smbd/service.o smbd/error.o \
rpc_server/epmd.o \
- printing/printspoolss.o \
+ printing/printspoolss.o printing/spoolssd.o \
lib/sysquotas.o lib/sysquotas_linux.o \
lib/sysquotas_xfs.o lib/sysquotas_4A.o \
lib/sysquotas_nfs.o \
diff --git a/source3/include/printing.h b/source3/include/printing.h
index 3752b9c..084c699 100644
--- a/source3/include/printing.h
+++ b/source3/include/printing.h
@@ -251,4 +251,9 @@ void release_print_db( struct tdb_print_db *pdb);
void close_all_print_db(void);
TDB_DATA get_printer_notify_pid_list(TDB_CONTEXT *tdb, const char *printer_name, bool cleanlist);
+void print_queue_receive(struct messaging_context *msg,
+ void *private_data,
+ uint32_t msg_type,
+ struct server_id server_id,
+ DATA_BLOB *data);
#endif /* PRINTING_H_ */
diff --git a/source3/printing/printing.c b/source3/printing/printing.c
index b1aff3e..177048d 100644
--- a/source3/printing/printing.c
+++ b/source3/printing/printing.c
@@ -1560,7 +1560,7 @@ static void print_queue_update_with_lock( struct tevent_context *ev,
/****************************************************************************
this is the receive function of the background lpq updater
****************************************************************************/
-static void print_queue_receive(struct messaging_context *msg,
+void print_queue_receive(struct messaging_context *msg,
void *private_data,
uint32_t msg_type,
struct server_id server_id,
diff --git a/source3/printing/spoolssd.c b/source3/printing/spoolssd.c
new file mode 100644
index 0000000..94694fc
--- /dev/null
+++ b/source3/printing/spoolssd.c
@@ -0,0 +1,242 @@
+/*
+ Unix SMB/Netbios implementation.
+ SPOOLSS Daemon
+ Copyright (C) Simo Sorce 2010
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "includes.h"
+#include "serverid.h"
+
+#include "librpc/gen_ndr/messaging.h"
+#include "include/printing.h"
+#include "printing/nt_printing_migrate.h"
+#include "librpc/gen_ndr/srv_winreg.h"
+#include "librpc/gen_ndr/srv_spoolss.h"
+#include "rpc_server/rpc_server.h"
+#include "rpc_server/rpc_ep_setup.h"
+
+#define SPOOLSS_PIPE_NAME "spoolss"
+#define DAEMON_NAME "spoolssd"
+
+void start_spoolssd(struct tevent_context *ev_ctx,
+ struct messaging_context *msg_ctx);
+
+static void spoolss_reopen_logs(void)
+{
+ char *lfile = lp_logfile();
+ int rc;
+
+ if (lfile == NULL || lfile[0] == '\0') {
+ rc = asprintf(&lfile, "%s/log.%s", get_dyn_LOGFILEBASE(), DAEMON_NAME);
+ if (rc > 0) {
+ lp_set_logfile(lfile);
+ SAFE_FREE(lfile);
+ }
+ } else {
+ if (strstr(lfile, DAEMON_NAME) == NULL) {
+ rc = asprintf(&lfile, "%s.%s", lp_logfile(), DAEMON_NAME);
+ if (rc > 0) {
+ lp_set_logfile(lfile);
+ SAFE_FREE(lfile);
+ }
+ }
+ }
+
+ reopen_logs();
+}
+
+static void smb_conf_updated(struct messaging_context *msg,
+ void *private_data,
+ uint32_t msg_type,
+ struct server_id server_id,
+ DATA_BLOB *data)
+{
+ struct tevent_context *ev_ctx = talloc_get_type_abort(private_data,
+ struct tevent_context);
+
+ DEBUG(10, ("Got message saying smb.conf was updated. Reloading.\n"));
+ change_to_root_user();
+ reload_printers(ev_ctx, msg);
+ spoolss_reopen_logs();
+}
+
+static void spoolss_sig_term_handler(struct tevent_context *ev,
+ struct tevent_signal *se,
+ int signum,
+ int count,
+ void *siginfo,
+ void *private_data)
+{
+ exit_server_cleanly("termination signal");
+}
+
+static void spoolss_setup_sig_term_handler(struct tevent_context *ev_ctx)
+{
+ struct tevent_signal *se;
+
+ se = tevent_add_signal(ev_ctx,
+ ev_ctx,
+ SIGTERM, 0,
+ spoolss_sig_term_handler,
+ NULL);
+ if (!se) {
+ exit_server("failed to setup SIGTERM handler");
+ }
+}
+
+static void spoolss_sig_hup_handler(struct tevent_context *ev,
+ struct tevent_signal *se,
+ int signum,
+ int count,
+ void *siginfo,
+ void *private_data)
+{
+ struct messaging_context *msg_ctx = talloc_get_type_abort(private_data,
+ struct messaging_context);
+
+ change_to_root_user();
+ DEBUG(1,("Reloading printers after SIGHUP\n"));
+ reload_printers(ev, msg_ctx);
+ spoolss_reopen_logs();
+}
+
+static void spoolss_setup_sig_hup_handler(struct tevent_context *ev_ctx,
+ struct messaging_context *msg_ctx)
+{
+ struct tevent_signal *se;
+
+ se = tevent_add_signal(ev_ctx,
+ ev_ctx,
+ SIGHUP, 0,
+ spoolss_sig_hup_handler,
+ msg_ctx);
+ if (!se) {
+ exit_server("failed to setup SIGHUP handler");
+ }
+}
+
+static bool spoolss_init_cb(void *ptr)
+{
+ struct messaging_context *msg_ctx = talloc_get_type_abort(
+ ptr, struct messaging_context);
+
+ return nt_printing_tdb_migrate(msg_ctx);
+}
+
+static bool spoolss_shutdown_cb(void *ptr)
+{
+ srv_spoolss_cleanup();
+
+ return true;
+}
+
+void start_spoolssd(struct tevent_context *ev_ctx,
+ struct messaging_context *msg_ctx)
+{
+ struct rpc_srv_callbacks spoolss_cb;
+ pid_t pid;
+ NTSTATUS status;
+ int ret;
+
+ DEBUG(1, ("Forking SPOOLSS Daemon\n"));
+
+ pid = sys_fork();
+
+ if (pid == -1) {
+ DEBUG(0, ("Failed to fork SPOOLSS [%s], aborting ...\n",
+ strerror(errno)));
+ exit(1);
+ }
+
+ if (pid) {
+ /* parent */
+ return;
+ }
+
+ /* child */
+ close_low_fds(false);
+
+ status = reinit_after_fork(msg_ctx,
+ ev_ctx,
+ procid_self(), true);
+ if (!NT_STATUS_IS_OK(status)) {
+ DEBUG(0,("reinit_after_fork() failed\n"));
+ smb_panic("reinit_after_fork() failed");
+ }
+
+ spoolss_reopen_logs();
+
+ spoolss_setup_sig_term_handler(ev_ctx);
+ spoolss_setup_sig_hup_handler(ev_ctx, msg_ctx);
+
+ if (!serverid_register(procid_self(),
+ FLAG_MSG_GENERAL|FLAG_MSG_SMBD
+ |FLAG_MSG_PRINT_GENERAL)) {
+ exit(1);
+ }
+
+ if (!locking_init()) {
+ exit(1);
+ }
+
+ messaging_register(msg_ctx, NULL,
+ MSG_PRINTER_UPDATE, print_queue_receive);
+ messaging_register(msg_ctx, ev_ctx,
+ MSG_SMB_CONF_UPDATED, smb_conf_updated);
+
+ /*
+ * Initialize spoolss with an init function to convert printers first.
+ * static_init_rpc will try to initialize the spoolss server too but you
+ * can't register it twice.
+ */
+ spoolss_cb.init = spoolss_init_cb;
+ spoolss_cb.shutdown = spoolss_shutdown_cb;
+ spoolss_cb.private_data = msg_ctx;
+
+ status = rpc_winreg_init(NULL);
+ if (!NT_STATUS_IS_OK(status)) {
+ DEBUG(0, ("Failed to register winreg rpc inteface! (%s)\n",
+ nt_errstr(status)));
+ exit(1);
+ }
+
+ status = rpc_spoolss_init(&spoolss_cb);
+ if (!NT_STATUS_IS_OK(status)) {
+ DEBUG(0, ("Failed to register spoolss rpc inteface! (%s)\n",
+ nt_errstr(status)));
+ exit(1);
+ }
+
+ if (!setup_named_pipe_socket(SPOOLSS_PIPE_NAME, ev_ctx)) {
+ exit(1);
+ }
+
+ status = rpc_ep_setup_register(ev_ctx, msg_ctx, &ndr_table_spoolss, NULL, 0);
+ if (!NT_STATUS_IS_OK(status)) {
+ DEBUG(0, ("Failed to register spoolss endpoint! (%s)\n",
+ nt_errstr(status)));
+ exit(1);
+ }
+
+ DEBUG(1, ("SPOOLSS Daemon Started (%d)\n", getpid()));
+
+ /* loop forever */
+ ret = tevent_loop_wait(ev_ctx);
+
+ /* should not be reached */
+ DEBUG(0,("background_queue: tevent_loop_wait() exited with %d - %s\n",
+ ret, (ret == 0) ? "out of events" : strerror(errno)));
+ exit(1);
+}
diff --git a/source3/rpc_server/rpc_ep_setup.c b/source3/rpc_server/rpc_ep_setup.c
index 9bed63d..d517bb8 100644
--- a/source3/rpc_server/rpc_ep_setup.c
+++ b/source3/rpc_server/rpc_ep_setup.c
@@ -149,11 +149,11 @@ struct rpc_ep_regsiter_state {
uint32_t wait_time;
};
-static NTSTATUS rpc_ep_setup_register(struct tevent_context *ev_ctx,
- struct messaging_context *msg_ctx,
- const struct ndr_interface_table *iface,
- const char *ncalrpc,
- uint16_t port)
+NTSTATUS rpc_ep_setup_register(struct tevent_context *ev_ctx,
+ struct messaging_context *msg_ctx,
+ const struct ndr_interface_table *iface,
+ const char *ncalrpc,
+ uint16_t port)
{
struct rpc_ep_regsiter_state *state;
struct tevent_req *req;
@@ -1103,14 +1103,24 @@ bool dcesrv_ep_setup(struct tevent_context *ev_ctx,
return false;
}
- spoolss_cb.init = spoolss_init_cb;
- spoolss_cb.shutdown = spoolss_shutdown_cb;
- spoolss_cb.private_data = ep_ctx;
- if (!NT_STATUS_IS_OK(rpc_spoolss_init(&spoolss_cb))) {
- return false;
+ rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
+ "rpc_server",
+ "spoolss",
+ "embedded");
+ if (StrCaseCmp(rpcsrv_type, "embedded") == 0) {
+ spoolss_cb.init = spoolss_init_cb;
+ spoolss_cb.shutdown = spoolss_shutdown_cb;
+ spoolss_cb.private_data = ep_ctx;
+ if (!NT_STATUS_IS_OK(rpc_spoolss_init(&spoolss_cb))) {
+ return false;
+ }
+ } else if (StrCaseCmp(rpcsrv_type, "daemon") == 0 ||
+ StrCaseCmp(rpcsrv_type, "external") == 0) {
+ if (!NT_STATUS_IS_OK(rpc_spoolss_init(NULL))) {
+ return false;
+ }
}
-
svcctl_cb.init = svcctl_init_cb;
svcctl_cb.shutdown = svcctl_shutdown_cb;
svcctl_cb.private_data = ep_ctx;
diff --git a/source3/rpc_server/rpc_ep_setup.h b/source3/rpc_server/rpc_ep_setup.h
index 272910a..b96de36 100644
--- a/source3/rpc_server/rpc_ep_setup.h
+++ b/source3/rpc_server/rpc_ep_setup.h
@@ -22,6 +22,30 @@
#ifndef _SMBD_RPC_CALLBACKS_H
#define _SMBD_RPC_CALLBACKS_H
+/**
+ * @brief Register an endpoint at the endpoint mapper.
+ *
+ * This just sets up a register and monitor loop to try to regsiter the
+ * endpoint at the endpoint mapper.
+ *
+ * @param[in] ev_ctx The event context to setup the loop.
+ *
+ * @param[in] msg_ctx The messaging context to use for the connnection.
+ *
+ * @param[in] iface The interface table to register.
+ *
+ * @param[in] ncalrpc The name of the ncalrpc pipe or NULL.
+ *
+ * @param[in] port The tcpip port or 0.
+ *
+ * @return NT_STATUS_OK on success or a corresponding error code.
+ */
+NTSTATUS rpc_ep_setup_register(struct tevent_context *ev_ctx,
+ struct messaging_context *msg_ctx,
+ const struct ndr_interface_table *iface,
+ const char *ncalrpc,
+ uint16_t port);
+
bool dcesrv_ep_setup(struct tevent_context *ev_ctx,
struct messaging_context *msg_ctx);
diff --git a/source3/rpc_server/rpc_ncacn_np.c b/source3/rpc_server/rpc_ncacn_np.c
index 41985e4..df9799b 100644
--- a/source3/rpc_server/rpc_ncacn_np.c
+++ b/source3/rpc_server/rpc_ncacn_np.c
@@ -510,18 +510,24 @@ NTSTATUS rpcint_binding_handle(TALLOC_CTX *mem_ctx,
}
/**
- * @brief Create a new RPC client context which uses a local dispatch function.
+ * @internal
+ *
+ * @brief Create a new RPC client context which uses a local transport.
+ *
+ * This creates a local transport. It is a shortcut to directly call the server
+ * functions and avoid marschalling.
*
* @param[in] mem_ctx The memory context to use.
*
* @param[in] abstract_syntax Normally the syntax_id of the autogenerated
* ndr_table_<name>.
*
- * @param[in] dispatch The corresponding autogenerated dispatch function
- * rpc_<name>_dispatch.
- *
* @param[in] serversupplied_info The server supplied authentication function.
*
+ * @param[in] client_id The client address information.
+ *
+ * @param[in] msg_ctx The messaging context to use.
+ *
* @param[out] presult A pointer to store the connected rpc client pipe.
*
* @return NT_STATUS_OK on success, a corresponding NT status if an
@@ -533,8 +539,8 @@ NTSTATUS rpcint_binding_handle(TALLOC_CTX *mem_ctx,
*
* status = rpc_pipe_open_internal(tmp_ctx,
* &ndr_table_winreg.syntax_id,
- * rpc_winreg_dispatch,
* p->session_info,
+ * client_id,
* &winreg_pipe);
* @endcode
*/
@@ -875,7 +881,8 @@ NTSTATUS rpc_pipe_open_interface(TALLOC_CTX *mem_ctx,
if (!NT_STATUS_IS_OK(status)) {
goto done;
}
- } else {
+ } else if (StrCaseCmp(server_type, "daemon") == 0 ||
+ StrCaseCmp(server_type, "external") == 0) {
/* It would be nice to just use rpc_pipe_open_ncalrpc() but
* for now we need to use the special proxy setup to connect
* to spoolssd. */
@@ -887,7 +894,12 @@ NTSTATUS rpc_pipe_open_interface(TALLOC_CTX *mem_ctx,
if (!NT_STATUS_IS_OK(status)) {
goto done;
}
- }
+ } else {
+ status = NT_STATUS_NOT_IMPLEMENTED;
+ DEBUG(0, ("Wrong servertype specified in config file: %s",
+ nt_errstr(status)));
+ goto done;
+ }
status = NT_STATUS_OK;
done:
diff --git a/source3/smbd/server.c b/source3/smbd/server.c
index 5d2abc0..e8c1169 100644
--- a/source3/smbd/server.c
+++ b/source3/smbd/server.c
@@ -40,6 +40,9 @@
extern void start_epmd(struct tevent_context *ev_ctx,
struct messaging_context *msg_ctx);
+extern void start_spoolssd(struct event_context *ev_ctx,
+ struct messaging_context *msg_ctx);
+
#ifdef WITH_DFS
extern int dcelogin_atmost_once;
#endif /* WITH_DFS */
@@ -1242,6 +1245,20 @@ extern void build_options(bool screen);
smbd_messaging_context());
}
+ if (is_daemon && !_lp_disable_spoolss()) {
+ const char *rpcsrv_type;
+
+ /* start spoolss daemon */
+ /* start as a separate daemon only if enabled */
+ rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
+ "rpc_server", "spoolss",
+ "embedded");
+ if (StrCaseCmp(rpcsrv_type, "daemon") == 0) {
+ start_spoolssd(smbd_event_context(),
+ smbd_messaging_context());
+ }
+ }
+
if (!is_daemon) {
/* inetd mode */
TALLOC_FREE(frame);
diff --git a/source3/wscript_build b/source3/wscript_build
index b5aa2b7..781074c 100644
--- a/source3/wscript_build
+++ b/source3/wscript_build
@@ -356,7 +356,7 @@ SMBD_SRC_SRV = '''smbd/server_reload.c smbd/files.c smbd/connection.c
smbd/vfs.c smbd/perfcount.c smbd/statcache.c smbd/seal.c
smbd/posix_acls.c lib/sysacls.c
smbd/process.c smbd/service.c smbd/error.c
- printing/printspoolss.c
+ printing/printspoolss.c printing/spoolssd.c
lib/sysquotas.c lib/sysquotas_linux.c
lib/sysquotas_xfs.c lib/sysquotas_4A.c
lib/sysquotas_nfs.c
--
Samba Shared Repository
More information about the samba-cvs
mailing list