summaryrefslogtreecommitdiffstats
path: root/source4/librpc
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2013-09-19 18:50:27 +0200
committerStefan Metzmacher <metze@samba.org>2014-01-07 08:37:45 +0100
commita9bb84c4b0d572338258c88140b4f3fe2b425675 (patch)
tree4b3b2c682417a21d7d30a8aac519b6563b105829 /source4/librpc
parent7352f7f91dcb8fb98a8a33000f3caf8b6a21ce4a (diff)
downloadsamba-a9bb84c4b0d572338258c88140b4f3fe2b425675.tar.gz
samba-a9bb84c4b0d572338258c88140b4f3fe2b425675.tar.xz
samba-a9bb84c4b0d572338258c88140b4f3fe2b425675.zip
s4:librpc: implement dcerpc_pipe_open_smb2() in dcerpc_smb.c
Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
Diffstat (limited to 'source4/librpc')
-rw-r--r--source4/librpc/rpc/dcerpc.h3
-rw-r--r--source4/librpc/rpc/dcerpc_smb.c45
-rw-r--r--source4/librpc/rpc/dcerpc_smb2.c8
3 files changed, 48 insertions, 8 deletions
diff --git a/source4/librpc/rpc/dcerpc.h b/source4/librpc/rpc/dcerpc.h
index 8b1c39655cb..242f356a602 100644
--- a/source4/librpc/rpc/dcerpc.h
+++ b/source4/librpc/rpc/dcerpc.h
@@ -170,6 +170,9 @@ struct dcerpc_pipe *dcerpc_pipe_init(TALLOC_CTX *mem_ctx, struct tevent_context
NTSTATUS dcerpc_pipe_open_smb(struct dcerpc_pipe *p,
struct smbcli_tree *tree,
const char *pipe_name);
+NTSTATUS dcerpc_pipe_open_smb2(struct dcerpc_pipe *p,
+ struct smb2_tree *tree,
+ const char *pipe_name);
NTSTATUS dcerpc_bind_auth_none(struct dcerpc_pipe *p,
const struct ndr_interface_table *table);
NTSTATUS dcerpc_fetch_session_key(struct dcerpc_pipe *p,
diff --git a/source4/librpc/rpc/dcerpc_smb.c b/source4/librpc/rpc/dcerpc_smb.c
index 0651f5e61bd..adfb870db78 100644
--- a/source4/librpc/rpc/dcerpc_smb.c
+++ b/source4/librpc/rpc/dcerpc_smb.c
@@ -28,6 +28,7 @@
#include "libcli/smb/smbXcli_base.h"
#include "libcli/smb/tstream_smbXcli_np.h"
#include "libcli/raw/libcliraw.h"
+#include "libcli/smb2/smb2.h"
#include "librpc/rpc/dcerpc.h"
#include "librpc/rpc/dcerpc_proto.h"
#include "libcli/composite/composite.h"
@@ -590,6 +591,50 @@ _PUBLIC_ NTSTATUS dcerpc_pipe_open_smb(struct dcerpc_pipe *p,
return dcerpc_pipe_open_smb_recv(ctx);
}
+_PUBLIC_ NTSTATUS dcerpc_pipe_open_smb2(struct dcerpc_pipe *p,
+ struct smb2_tree *t,
+ const char *pipe_name)
+{
+ struct smbXcli_conn *conn;
+ struct smbXcli_session *session;
+ struct smbXcli_tcon *tcon;
+ uint32_t timeout_msec;
+ struct composite_context *ctx;
+
+ conn = t->session->transport->conn;
+ session = t->session->smbXcli;
+ tcon = t->smbXcli;
+ timeout_msec = t->session->transport->options.request_timeout * 1000;
+
+ /* if we don't have a binding on this pipe yet, then create one */
+ if (p->binding == NULL) {
+ NTSTATUS status;
+ const char *r = smbXcli_conn_remote_name(conn);
+ char *str;
+ SMB_ASSERT(r != NULL);
+ str = talloc_asprintf(p, "ncacn_np:%s", r);
+ if (str == NULL) {
+ return NT_STATUS_NO_MEMORY;
+ }
+ status = dcerpc_parse_binding(p, str,
+ &p->binding);
+ talloc_free(str);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+ }
+
+ ctx = dcerpc_pipe_open_smb_send(p->conn,
+ conn, session,
+ tcon, timeout_msec,
+ pipe_name);
+ if (ctx == NULL) {
+ return NT_STATUS_NO_MEMORY;
+ }
+
+ return dcerpc_pipe_open_smb_recv(ctx);
+}
+
struct composite_context *dcerpc_secondary_smb_send(struct dcecli_connection *c1,
struct dcecli_connection *c2,
const char *pipe_name)
diff --git a/source4/librpc/rpc/dcerpc_smb2.c b/source4/librpc/rpc/dcerpc_smb2.c
index 2b1c66e232f..571c50fb83f 100644
--- a/source4/librpc/rpc/dcerpc_smb2.c
+++ b/source4/librpc/rpc/dcerpc_smb2.c
@@ -539,14 +539,6 @@ NTSTATUS dcerpc_pipe_open_smb2_recv(struct composite_context *c)
return status;
}
-NTSTATUS dcerpc_pipe_open_smb2(struct dcerpc_pipe *p,
- struct smb2_tree *tree,
- const char *pipe_name)
-{
- struct composite_context *ctx = dcerpc_pipe_open_smb2_send(p, tree, pipe_name);
- return dcerpc_pipe_open_smb2_recv(ctx);
-}
-
/*
return the SMB2 tree used for a dcerpc over SMB2 pipe
*/