summaryrefslogtreecommitdiff
path: root/source3/rpc_server
diff options
context:
space:
mode:
authorSimo Sorce <idra@samba.org>2010-04-28 09:51:12 -0400
committerGünther Deschner <gd@samba.org>2010-05-26 15:07:57 +0200
commit8aa96566a96413384b7c8af0143c4ed1af100492 (patch)
tree656fb67679b91a2d024f1b735ea9e1e389568e36 /source3/rpc_server
parent83b2fd30215c5286f0f05bddce76bd5e0959c5c8 (diff)
downloadsamba-8aa96566a96413384b7c8af0143c4ed1af100492.tar.gz
samba-8aa96566a96413384b7c8af0143c4ed1af100492.tar.bz2
samba-8aa96566a96413384b7c8af0143c4ed1af100492.zip
s3-rpc_server: Created a per connection spoolss pipe.
This way all code can reuse the same connection to spoolss and not have to deal with the creation of a new pipe all over the code every time we need to ask a service off spoolss. Signed-off-by: Günther Deschner <gd@samba.org>
Diffstat (limited to 'source3/rpc_server')
-rw-r--r--source3/rpc_server/srv_pipe_hnd.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/source3/rpc_server/srv_pipe_hnd.c b/source3/rpc_server/srv_pipe_hnd.c
index 847953d186..075d705ef0 100644
--- a/source3/rpc_server/srv_pipe_hnd.c
+++ b/source3/rpc_server/srv_pipe_hnd.c
@@ -20,6 +20,7 @@
*/
#include "includes.h"
+#include "../librpc/gen_ndr/srv_spoolss.h"
#include "librpc/gen_ndr/ndr_named_pipe_auth.h"
#undef DBGC_CLASS
@@ -1516,3 +1517,35 @@ NTSTATUS rpc_pipe_open_internal(TALLOC_CTX *mem_ctx,
*presult = result;
return NT_STATUS_OK;
}
+
+/**
+ * @brief Create a new RPC client context which uses a local dispatch function.
+ *
+ * @param[in] conn The connection struct that will hold the pipe
+ *
+ * @param[out] spoolss_pipe A pointer to the connected rpc client pipe.
+ *
+ * @return NT_STATUS_OK on success, a corresponding NT status if an
+ * error occured.
+ */
+NTSTATUS rpc_connect_spoolss_pipe(connection_struct *conn,
+ struct rpc_pipe_client **spoolss_pipe)
+{
+ NTSTATUS status;
+
+ /* TODO: check and handle disconnections */
+
+ if (!conn->spoolss_pipe) {
+ status = rpc_pipe_open_internal(conn,
+ &ndr_table_spoolss.syntax_id,
+ rpc_spoolss_dispatch,
+ conn->server_info,
+ &conn->spoolss_pipe);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+ }
+
+ *spoolss_pipe = conn->spoolss_pipe;
+ return NT_STATUS_OK;
+}