[SCM] Samba Shared Repository - branch master updated
Andrew Bartlett
abartlet at samba.org
Fri Mar 28 03:35:04 MDT 2014
The branch, master has been updated
via 0dd648a s4:librpc/rpc: remember "ncalrpc_dir" on the dcerpc_pipe->binding
via d29c143 pidl:Samba4/Python: add interface.abstract_syntax() to each interface
via 6d6427b s4:pyrpc: add base.transfer_syntax_ndr*()
via ae02bf6 s4:pyrpc: add py_dcerpc_syntax_init_helper()
via 4f0d598 s4:librpc: compile python bindings for dcerpc.idl
via eabdbc8 dcerpc.idl: hide (ndr->flags & LIBNDR_FLAG_OBJECT_PRESENT) logic behind a define
via f73ef30 dcerpc.idl: fix dcerpc_bind_nack definition
via 9730210 dcerpc.idl: fix typo s/ist/int
via a496c18 dcerpc.idl: make use of DCERPC_NCA_S_* constants for the legacy DCERPC_FAULT_* codes
via 34d45a3 librpc/rpc: try to use DCERPC_NCA_S_* constants for error mappings
from 533ad24 ctdb-tests: Do not mix bool and int data types
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 0dd648a54ed00bfeb7c6074d16173128acd3799e
Author: Stefan Metzmacher <metze at samba.org>
Date: Thu Feb 13 09:42:10 2014 +0100
s4:librpc/rpc: remember "ncalrpc_dir" on the dcerpc_pipe->binding
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Autobuild-User(master): Andrew Bartlett <abartlet at samba.org>
Autobuild-Date(master): Fri Mar 28 10:34:51 CET 2014 on sn-devel-104
commit d29c143fae4b67c9680a0b9773db3461f2d0d2b7
Author: Stefan Metzmacher <metze at samba.org>
Date: Thu Mar 27 14:56:23 2014 +0100
pidl:Samba4/Python: add interface.abstract_syntax() to each interface
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 6d6427b7c8070f2350f337587f9db002056f1b64
Author: Stefan Metzmacher <metze at samba.org>
Date: Thu Mar 27 14:57:29 2014 +0100
s4:pyrpc: add base.transfer_syntax_ndr*()
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit ae02bf6f068d49478f159be726e628fa6287907a
Author: Stefan Metzmacher <metze at samba.org>
Date: Thu Mar 27 14:54:29 2014 +0100
s4:pyrpc: add py_dcerpc_syntax_init_helper()
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 4f0d5981f1fa7f53a3ea0d1a746584a4bf2f08da
Author: Stefan Metzmacher <metze at samba.org>
Date: Thu Mar 27 13:08:22 2014 +0100
s4:librpc: compile python bindings for dcerpc.idl
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit eabdbc886011028d19f5ef9bf6734f9ae6ffbf7f
Author: Stefan Metzmacher <metze at samba.org>
Date: Thu Mar 27 13:08:22 2014 +0100
dcerpc.idl: hide (ndr->flags & LIBNDR_FLAG_OBJECT_PRESENT) logic behind a define
This way we can alter the define depending on the generated code.
E.g python bindings won't have an 'ndr' struct available.
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit f73ef3028c4f4583c81b611a9714608eae79360c
Author: Stefan Metzmacher <metze at samba.org>
Date: Wed Mar 26 22:42:19 2014 +0100
dcerpc.idl: fix dcerpc_bind_nack definition
The version array is always present.
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 97302100d0935653df3da593277b4e356cccf96b
Author: Stefan Metzmacher <metze at samba.org>
Date: Wed Mar 26 22:42:19 2014 +0100
dcerpc.idl: fix typo s/ist/int
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit a496c18997f1f9a600981d20b8204fe471afd8e0
Author: Stefan Metzmacher <metze at samba.org>
Date: Wed Mar 19 14:07:36 2014 +0100
dcerpc.idl: make use of DCERPC_NCA_S_* constants for the legacy DCERPC_FAULT_* codes
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 34d45a3a513c6ce010fa16f809de515250ae1729
Author: Stefan Metzmacher <metze at samba.org>
Date: Wed Mar 19 14:14:36 2014 +0100
librpc/rpc: try to use DCERPC_NCA_S_* constants for error mappings
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
-----------------------------------------------------------------------
Summary of changes:
librpc/idl/dcerpc.idl | 32 ++++++++++----------
librpc/ndr/ndr_dcerpc.h | 4 ++
librpc/rpc/dcerpc_error.c | 8 ++--
pidl/lib/Parse/Pidl/Samba4/Python.pm | 39 +++++++++++++++++++++++++
source4/librpc/rpc/dcerpc_connect.c | 14 +++++++--
source4/librpc/rpc/pyrpc.c | 52 ++++++++++++++++++++++++++++++++++
source4/librpc/rpc/pyrpc.h | 5 +++
source4/librpc/rpc/pyrpc_util.c | 22 ++++++++++++++
source4/librpc/rpc/pyrpc_util.h | 4 ++
source4/librpc/wscript_build | 5 +++
source4/rpc_server/dcerpc_server.c | 9 ++++--
11 files changed, 168 insertions(+), 26 deletions(-)
Changeset truncated at 500 lines:
diff --git a/librpc/idl/dcerpc.idl b/librpc/idl/dcerpc.idl
index 1ffa784..4dad126 100644
--- a/librpc/idl/dcerpc.idl
+++ b/librpc/idl/dcerpc.idl
@@ -56,7 +56,11 @@ interface dcerpc
uint32 alloc_hint;
uint16 context_id;
uint16 opnum;
- [switch_is(ndr->flags & LIBNDR_FLAG_OBJECT_PRESENT)] dcerpc_object object;
+ /*
+ * NDR_DCERPC_REQUEST_OBJECT_PRESENT
+ * is defined differently for ndr_dcerpc.c and py_dcerpc.c
+ */
+ [switch_is(NDR_DCERPC_REQUEST_OBJECT_PRESENT)] dcerpc_object object;
[flag(NDR_ALIGN8)] DATA_BLOB _pad;
[flag(NDR_REMAINING)] DATA_BLOB stub_and_verifier;
} dcerpc_request;
@@ -125,19 +129,15 @@ interface dcerpc
DCERPC_BIND_NAK_REASON_INVALID_AUTH_TYPE;
typedef struct {
- uint32 num_versions;
- uint32 versions[num_versions];
- } dcerpc_bind_nak_versions;
-
- typedef [nodiscriminant] union {
- [case(DCERPC_BIND_NAK_REASON_PROTOCOL_VERSION_NOT_SUPPORTED)]
- dcerpc_bind_nak_versions v;
- [default] ;
- } dcerpc_bind_nak_versions_ctr;
+ uint8 rpc_vers; /* RPC version */
+ uint8 rpc_vers_minor; /* Minor version */
+ } dcerpc_bind_nak_version;
typedef struct {
dcerpc_bind_nak_reason reject_reason;
- [switch_is(reject_reason)] dcerpc_bind_nak_versions_ctr versions;
+ uint8 num_versions;
+ dcerpc_bind_nak_version versions[num_versions];
+ [flag(NDR_REMAINING)] DATA_BLOB _pad;
} dcerpc_bind_nak;
const uint8 DCERPC_RESPONSE_LENGTH = 24;
@@ -200,11 +200,11 @@ interface dcerpc
DCERPC_NCA_S_FAULT_NO_CLIENT_STUB = 0x1C000025
} dcerpc_nca_status;
- const int DCERPC_FAULT_OP_RNG_ERROR = 0x1c010002;
- const int DCERPC_FAULT_UNK_IF = 0x1c010003;
+ const int DCERPC_FAULT_OP_RNG_ERROR = DCERPC_NCA_S_OP_RNG_ERROR;
+ const int DCERPC_FAULT_UNK_IF = DCERPC_NCA_S_UNKNOWN_IF;
const int DCERPC_FAULT_NDR = 0x000006f7;
- const int DCERPC_FAULT_INVALID_TAG = 0x1c000006;
- const int DCERPC_FAULT_CONTEXT_MISMATCH = 0x1c00001a;
+ const int DCERPC_FAULT_INVALID_TAG = DCERPC_NCA_S_FAULT_INVALID_TAG;
+ const int DCERPC_FAULT_CONTEXT_MISMATCH = DCERPC_NCA_S_FAULT_CONTEXT_MISMATCH;
const int DCERPC_FAULT_OTHER = 0x00000001;
const int DCERPC_FAULT_ACCESS_DENIED = 0x00000005;
const int DCERPC_FAULT_CANT_PERFORM = 0x000006d8;
@@ -521,7 +521,7 @@ interface dcerpc
/* Cancel was pending at sender */
const int DCERPC_PFC_FLAG_PENDING_CANCEL =
DCERPC_PFC_FLAG_PENDING_CANCEL_OR_HDR_SIGNING;
- const ist DCERPC_PFC_FLAG_SUPPORT_HEADER_SIGN =
+ const int DCERPC_PFC_FLAG_SUPPORT_HEADER_SIGN =
DCERPC_PFC_FLAG_PENDING_CANCEL_OR_HDR_SIGNING;
/* these offsets are needed by the signing code */
diff --git a/librpc/ndr/ndr_dcerpc.h b/librpc/ndr/ndr_dcerpc.h
index f544fb1..1a7c3bd 100644
--- a/librpc/ndr/ndr_dcerpc.h
+++ b/librpc/ndr/ndr_dcerpc.h
@@ -23,3 +23,7 @@
enum ndr_err_code ndr_pop_dcerpc_sec_verification_trailer(
struct ndr_pull *ndr, TALLOC_CTX *mem_ctx,
struct dcerpc_sec_verification_trailer **_r);
+
+#ifndef NDR_DCERPC_REQUEST_OBJECT_PRESENT
+#define NDR_DCERPC_REQUEST_OBJECT_PRESENT (ndr->flags & LIBNDR_FLAG_OBJECT_PRESENT)
+#endif /* NDR_DCERPC_REQUEST_OBJECT_PRESENT */
diff --git a/librpc/rpc/dcerpc_error.c b/librpc/rpc/dcerpc_error.c
index 7c98386..4f0ed6e 100644
--- a/librpc/rpc/dcerpc_error.c
+++ b/librpc/rpc/dcerpc_error.c
@@ -101,15 +101,15 @@ _PUBLIC_ NTSTATUS dcerpc_fault_to_nt_status(uint32_t fault_code)
{
/* TODO: add more mappings */
switch (fault_code) {
- case DCERPC_FAULT_OP_RNG_ERROR:
+ case DCERPC_NCA_S_OP_RNG_ERROR:
return NT_STATUS_RPC_PROCNUM_OUT_OF_RANGE;
- case DCERPC_FAULT_UNK_IF:
+ case DCERPC_NCA_S_UNKNOWN_IF:
return NT_STATUS_RPC_UNKNOWN_IF;
case DCERPC_FAULT_NDR:
return NT_STATUS_RPC_BAD_STUB_DATA;
- case DCERPC_FAULT_INVALID_TAG:
+ case DCERPC_NCA_S_FAULT_INVALID_TAG:
return NT_STATUS_RPC_ENUM_VALUE_OUT_OF_RANGE;
- case DCERPC_FAULT_CONTEXT_MISMATCH:
+ case DCERPC_NCA_S_FAULT_CONTEXT_MISMATCH:
return NT_STATUS_RPC_SS_CONTEXT_MISMATCH;
case DCERPC_FAULT_OTHER:
return NT_STATUS_RPC_CALL_FAILED;
diff --git a/pidl/lib/Parse/Pidl/Samba4/Python.pm b/pidl/lib/Parse/Pidl/Samba4/Python.pm
index 39884ab..d603176 100644
--- a/pidl/lib/Parse/Pidl/Samba4/Python.pm
+++ b/pidl/lib/Parse/Pidl/Samba4/Python.pm
@@ -768,6 +768,45 @@ sub Interface($$$)
my $dcerpc_typename = $self->import_type_variable("samba.dcerpc.base", "ClientConnection");
$self->register_module_prereadycode(["$if_typename.tp_base = $dcerpc_typename;", ""]);
$self->register_module_postreadycode(["if (!PyInterface_AddNdrRpcMethods(&$if_typename, py_ndr_$interface->{NAME}\_methods))", "\treturn;", ""]);
+
+
+ $self->pidl("static PyObject *syntax_$interface->{NAME}_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)");
+ $self->pidl("{");
+ $self->indent;
+ $self->pidl("return py_dcerpc_syntax_init_helper(type, args, kwargs, &ndr_table_$interface->{NAME}.syntax_id);");
+ $self->deindent;
+ $self->pidl("}");
+
+ $self->pidl("");
+
+ my $signature = "\"abstract_syntax()\\n\"";
+
+ my $docstring = $self->DocString($interface, $interface->{NAME}."_syntax");
+
+ if ($docstring) {
+ $docstring = "$signature$docstring";
+ } else {
+ $docstring = $signature;
+ }
+
+ my $syntax_typename = "$interface->{NAME}_SyntaxType";
+
+ $self->pidl("static PyTypeObject $syntax_typename = {");
+ $self->indent;
+ $self->pidl("PyObject_HEAD_INIT(NULL) 0,");
+ $self->pidl(".tp_name = \"$basename.$interface->{NAME}\",");
+ $self->pidl(".tp_basicsize = sizeof(pytalloc_Object),");
+ $self->pidl(".tp_doc = $docstring,");
+ $self->pidl(".tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,");
+ $self->pidl(".tp_new = syntax_$interface->{NAME}_new,");
+ $self->deindent;
+ $self->pidl("};");
+
+ $self->pidl("");
+
+ $self->register_module_typeobject("abstract_syntax", "&$syntax_typename");
+ my $ndr_typename = $self->import_type_variable("samba.dcerpc.misc", "ndr_syntax_id");
+ $self->register_module_prereadycode(["$syntax_typename.tp_base = $ndr_typename;", ""]);
}
$self->pidl_hdr("\n");
diff --git a/source4/librpc/rpc/dcerpc_connect.c b/source4/librpc/rpc/dcerpc_connect.c
index 6c503ad..da452e6 100644
--- a/source4/librpc/rpc/dcerpc_connect.c
+++ b/source4/librpc/rpc/dcerpc_connect.c
@@ -43,6 +43,9 @@ struct dcerpc_pipe_connect {
const struct ndr_interface_table *interface;
struct cli_credentials *creds;
struct resolve_context *resolve_ctx;
+ struct {
+ const char *dir;
+ } ncalrpc;
};
struct pipe_np_smb_state {
@@ -505,7 +508,7 @@ static void continue_pipe_open_ncalrpc(struct composite_context *ctx)
the binding structure to determine the endpoint and options
*/
static struct composite_context* dcerpc_pipe_connect_ncalrpc_send(TALLOC_CTX *mem_ctx,
- struct dcerpc_pipe_connect *io, struct loadparm_context *lp_ctx)
+ struct dcerpc_pipe_connect *io)
{
struct composite_context *c;
struct pipe_ncalrpc_state *s;
@@ -531,7 +534,7 @@ static struct composite_context* dcerpc_pipe_connect_ncalrpc_send(TALLOC_CTX *me
/* send pipe open request */
pipe_req = dcerpc_pipe_open_pipe_send(s->io.conn,
- lpcfg_ncalrpc_dir(lp_ctx),
+ s->io.ncalrpc.dir,
endpoint);
composite_continue(c, pipe_req, continue_pipe_open_ncalrpc, c);
return c;
@@ -608,6 +611,7 @@ static void continue_connect(struct composite_context *c, struct pipe_connect_st
uint32_t flags;
/* dcerpc pipe connect input parameters */
+ ZERO_STRUCT(pc);
pc.conn = s->pipe->conn;
pc.binding = s->binding;
pc.pipe_name = NULL;
@@ -646,7 +650,11 @@ static void continue_connect(struct composite_context *c, struct pipe_connect_st
return;
case NCALRPC:
- ncalrpc_req = dcerpc_pipe_connect_ncalrpc_send(c, &pc, s->lp_ctx);
+ pc.ncalrpc.dir = lpcfg_ncalrpc_dir(s->lp_ctx);
+ c->status = dcerpc_binding_set_string_option(s->binding, "ncalrpc_dir",
+ pc.ncalrpc.dir);
+ if (!composite_is_ok(c)) return;
+ ncalrpc_req = dcerpc_pipe_connect_ncalrpc_send(c, &pc);
composite_continue(c, ncalrpc_req, continue_pipe_connect_ncalrpc, c);
return;
diff --git a/source4/librpc/rpc/pyrpc.c b/source4/librpc/rpc/pyrpc.c
index 140d86c..360fb24 100644
--- a/source4/librpc/rpc/pyrpc.c
+++ b/source4/librpc/rpc/pyrpc.c
@@ -32,6 +32,8 @@ void initbase(void);
staticforward PyTypeObject dcerpc_InterfaceType;
+static PyTypeObject *ndr_syntax_id_Type;
+
static bool PyString_AsGUID(PyObject *object, struct GUID *uuid)
{
NTSTATUS status;
@@ -368,17 +370,67 @@ static PyTypeObject dcerpc_InterfaceType = {
.tp_new = dcerpc_interface_new,
};
+static PyObject *py_transfer_syntax_ndr_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
+{
+ return py_dcerpc_syntax_init_helper(type, args, kwargs, &ndr_transfer_syntax_ndr);
+}
+
+static PyTypeObject py_transfer_syntax_ndr_SyntaxType = {
+ PyObject_HEAD_INIT(NULL) 0,
+ .tp_name = "base.transfer_syntax_ndr",
+ .tp_basicsize = sizeof(pytalloc_Object),
+ .tp_doc = "transfer_syntax_ndr()\n",
+ .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
+ .tp_new = py_transfer_syntax_ndr_new,
+};
+
+static PyObject *py_transfer_syntax_ndr64_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
+{
+ return py_dcerpc_syntax_init_helper(type, args, kwargs, &ndr_transfer_syntax_ndr64);
+}
+
+static PyTypeObject py_transfer_syntax_ndr64_SyntaxType = {
+ PyObject_HEAD_INIT(NULL) 0,
+ .tp_name = "base.transfer_syntax_ndr64",
+ .tp_basicsize = sizeof(pytalloc_Object),
+ .tp_doc = "transfer_syntax_ndr64()\n",
+ .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
+ .tp_new = py_transfer_syntax_ndr64_new,
+};
+
void initbase(void)
{
PyObject *m;
+ PyObject *dep_samba_dcerpc_misc;
+
+ dep_samba_dcerpc_misc = PyImport_ImportModule("samba.dcerpc.misc");
+ if (dep_samba_dcerpc_misc == NULL)
+ return;
+
+ ndr_syntax_id_Type = (PyTypeObject *)PyObject_GetAttrString(dep_samba_dcerpc_misc, "ndr_syntax_id");
+ if (ndr_syntax_id_Type == NULL)
+ return;
+
+ py_transfer_syntax_ndr_SyntaxType.tp_base = ndr_syntax_id_Type;
+ py_transfer_syntax_ndr64_SyntaxType.tp_base = ndr_syntax_id_Type;
if (PyType_Ready(&dcerpc_InterfaceType) < 0)
return;
+ if (PyType_Ready(&py_transfer_syntax_ndr_SyntaxType) < 0)
+ return;
+ if (PyType_Ready(&py_transfer_syntax_ndr64_SyntaxType) < 0)
+ return;
+
m = Py_InitModule3("base", NULL, "DCE/RPC protocol implementation");
if (m == NULL)
return;
Py_INCREF((PyObject *)&dcerpc_InterfaceType);
PyModule_AddObject(m, "ClientConnection", (PyObject *)&dcerpc_InterfaceType);
+
+ Py_INCREF((PyObject *)(void *)&py_transfer_syntax_ndr_SyntaxType);
+ PyModule_AddObject(m, "transfer_syntax_ndr", (PyObject *)(void *)&py_transfer_syntax_ndr_SyntaxType);
+ Py_INCREF((PyObject *)(void *)&py_transfer_syntax_ndr64_SyntaxType);
+ PyModule_AddObject(m, "transfer_syntax_ndr64", (PyObject *)(void *)&py_transfer_syntax_ndr64_SyntaxType);
}
diff --git a/source4/librpc/rpc/pyrpc.h b/source4/librpc/rpc/pyrpc.h
index 52f4f4d..290c988 100644
--- a/source4/librpc/rpc/pyrpc.h
+++ b/source4/librpc/rpc/pyrpc.h
@@ -56,4 +56,9 @@ union netr_LogonLevel *py_export_netr_LogonLevel(TALLOC_CTX *mem_ctx, int level,
union netr_Validation;
PyObject *py_import_netr_Validation(TALLOC_CTX *mem_ctx, int level, union netr_Validation *in);
+
+#ifndef NDR_DCERPC_REQUEST_OBJECT_PRESENT
+#define NDR_DCERPC_REQUEST_OBJECT_PRESENT LIBNDR_FLAG_OBJECT_PRESENT
+#endif /* NDR_DCERPC_REQUEST_OBJECT_PRESENT */
+
#endif /* _PYRPC_H_ */
diff --git a/source4/librpc/rpc/pyrpc_util.c b/source4/librpc/rpc/pyrpc_util.c
index cec8574..314ad2c 100644
--- a/source4/librpc/rpc/pyrpc_util.c
+++ b/source4/librpc/rpc/pyrpc_util.c
@@ -304,6 +304,28 @@ bool PyInterface_AddNdrRpcMethods(PyTypeObject *ifacetype, const struct PyNdrRpc
return true;
}
+PyObject *py_dcerpc_syntax_init_helper(PyTypeObject *type, PyObject *args, PyObject *kwargs,
+ const struct ndr_syntax_id *syntax)
+{
+ PyObject *ret;
+ struct ndr_syntax_id *obj;
+ const char *kwnames[] = { NULL };
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, ":abstract_syntax", discard_const_p(char *, kwnames))) {
+ return NULL;
+ }
+
+ ret = pytalloc_new(struct ndr_syntax_id, type);
+ if (ret == NULL) {
+ return NULL;
+ }
+
+ obj = (struct ndr_syntax_id *)pytalloc_get_ptr(ret);
+ *obj = *syntax;
+
+ return ret;
+}
+
void PyErr_SetDCERPCStatus(struct dcerpc_pipe *p, NTSTATUS status)
{
if (p && NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) {
diff --git a/source4/librpc/rpc/pyrpc_util.h b/source4/librpc/rpc/pyrpc_util.h
index 837a33b..21454ca 100644
--- a/source4/librpc/rpc/pyrpc_util.h
+++ b/source4/librpc/rpc/pyrpc_util.h
@@ -50,6 +50,10 @@ bool py_check_dcerpc_type(PyObject *obj, const char *module, const char *type_na
bool PyInterface_AddNdrRpcMethods(PyTypeObject *object, const struct PyNdrRpcMethodDef *mds);
PyObject *py_dcerpc_interface_init_helper(PyTypeObject *type, PyObject *args, PyObject *kwargs, const struct ndr_interface_table *table);
+struct ndr_syntax_id;
+PyObject *py_dcerpc_syntax_init_helper(PyTypeObject *type, PyObject *args, PyObject *kwargs,
+ const struct ndr_syntax_id *syntax);
+
PyObject *py_return_ndr_struct(const char *module_name, const char *type_name,
TALLOC_CTX *r_ctx, void *r);
diff --git a/source4/librpc/wscript_build b/source4/librpc/wscript_build
index d1019b2..a047f33 100755
--- a/source4/librpc/wscript_build
+++ b/source4/librpc/wscript_build
@@ -275,6 +275,11 @@ bld.SAMBA_PYTHON('python_dfs',
realname='samba/dcerpc/dfs.so'
)
+bld.SAMBA_PYTHON('python_dcerpc_dcerpc',
+ source='../../librpc/gen_ndr/py_dcerpc.c',
+ deps='NDR_DCERPC pytalloc-util pyrpc_util',
+ realname='samba/dcerpc/dcerpc.so'
+ )
bld.SAMBA_PYTHON('python_unixinfo',
source='../../librpc/gen_ndr/py_unixinfo.c',
diff --git a/source4/rpc_server/dcerpc_server.c b/source4/rpc_server/dcerpc_server.c
index a4afde0..cf737c6 100644
--- a/source4/rpc_server/dcerpc_server.c
+++ b/source4/rpc_server/dcerpc_server.c
@@ -457,6 +457,7 @@ static void dcesrv_call_set_list(struct dcesrv_call_state *call,
static NTSTATUS dcesrv_bind_nak(struct dcesrv_call_state *call, uint32_t reason)
{
struct ncacn_packet pkt;
+ struct dcerpc_bind_nak_version version;
struct data_blob_list_item *rep;
NTSTATUS status;
@@ -467,9 +468,11 @@ static NTSTATUS dcesrv_bind_nak(struct dcesrv_call_state *call, uint32_t reason)
pkt.ptype = DCERPC_PKT_BIND_NAK;
pkt.pfc_flags = DCERPC_PFC_FLAG_FIRST | DCERPC_PFC_FLAG_LAST;
pkt.u.bind_nak.reject_reason = reason;
- if (pkt.u.bind_nak.reject_reason == DECRPC_BIND_PROTOCOL_VERSION_NOT_SUPPORTED) {
- pkt.u.bind_nak.versions.v.num_versions = 0;
- }
+ version.rpc_vers = 5;
+ version.rpc_vers_minor = 0;
+ pkt.u.bind_nak.num_versions = 1;
+ pkt.u.bind_nak.versions = &version;
+ pkt.u.bind_nak._pad = data_blob_null;
rep = talloc(call, struct data_blob_list_item);
if (!rep) {
--
Samba Shared Repository
More information about the samba-cvs
mailing list