1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-03 13:47:25 +03:00

56 Commits

Author SHA1 Message Date
Andrew Bartlett
4a5c2bfec1 Use the rpc_parse debug class for PIDL genrated code
This means that the default print binding string qualifier will now go via this debug class
as will explicit calls to ndr_print_debug() and ndr_print_union_debug().

Calls to ndr_print_debugc() are not changed.

Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
2017-09-07 06:56:27 +02:00
Stefan Metzmacher
32aa3a199d librpc/ndr: add LIBNDR_FLAG_IS_SECRET handling
BUG: https://bugzilla.samba.org/show_bug.cgi?id=12782

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
2017-06-27 16:57:43 +02:00
Douglas Bagnall
70923b7521 ndr: Use resizing array instead of linked lists (breaking ABI)
The ndr token code keeps a temporary store of tokens which are
referred to a small number of times (often once) before being
discarded. The access patterns are somewhat stack-like, with recently
placed tokens being accessed most often.

The old code kept these tokens in a linked list, which we replace with
a self-resizing array.

This keeps everything roughly the same in big-O terms, but makes it
all faster in practice by vastly reducing the amount of tallocing and
pointer-chasing.

The peak memory use is strictly reduced. On a 64 bit machine each core
token struct fits in 16 bytes (after padding) while the two pointers
used by the DLIST add another 16 bytes, so the overall list allocation
is the same as the peak 2n array allocation -- except in the list case
it is dwarfed by the talloc and malloc metadata overhead.

Before settling on the resized arrays, we tried red-black trees, which
are bound to be better for large ndr structures. As it happens, we
don't deal with large structures (the size of replication clumps is
limited to 400 objects) and the asymptotic benefits of the trees are
not realised in practice.

With luck you should find graphs comparing the performance of these
various techniques at:

https://www.samba.org/~dbagnall/perf-tests/ndr-token/

This necessarily breaks the ABI because the linked list implementation
was publicly exposed.

Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>

Autobuild-User(master): Andrew Bartlett <abartlet@samba.org>
Autobuild-Date(master): Thu Mar  2 08:38:22 CET 2017 on sn-devel-144
2017-03-02 08:38:21 +01:00
Douglas Bagnall
4bd8e63165 ndr: fix whitespace in libndr.h, ndr.c
Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
2017-03-02 04:35:14 +01:00
Andrew Bartlett
1246904d41 librpc: Add ndr_push_struct_into_fixed_blob() and use it in GUID_to_ndr_blob()
This allows us to allocate only the correct size, not a default of 1024 bytes
per push.

Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Garming Sam <garming@catalyst.net.nz>
2016-07-28 10:06:12 +02:00
Stefan Metzmacher
9722f064e7 librpc/ndr: add support for NDR_ALIGN* to ndr_push_short_relative_ptr2()
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
2016-06-27 05:00:15 +02:00
Andrew Bartlett
98712e9bda libndr: Add ndr_pull_struct_blob_all_noalloc
This allows us to remove talloc() calls from GUID_from_ndr_blob().

To do this the struct ndr_pull is placed on the stack, and filled in there.

Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Garming Sam <garming@catalyst.net.nz>
2016-05-03 08:10:10 +02:00
Douglas Bagnall
c20e7b8c01 ndr: inline search for ndr_token_peek()
This is often a hot path, particularly with complex structures like
nt-acls.

Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Garming Sam <garming@catalyst.net.nz>
2016-03-22 08:00:31 +01:00
Douglas Bagnall
7261433fe1 librpc ndr: add ndr_pull_steal_switch_value()
Switch values currently only have a peek variant, instead of a retrieve
variant for getting their values. This can create performance issues
with complex structures as the token list simply grows longer.

Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Garming Sam <garming@catalyst.net.nz>
2016-03-22 08:00:31 +01:00
Günther Deschner
5b95572a09 libndr: better debug message in ndr_pull_subcontext_start().
Guenther

Signed-off-by: Günther Deschner <gd@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
2015-07-03 02:00:27 +02:00
Stefan Metzmacher
7b5717058a librpc/ndr: add ndr_pull_append/pop()
They can be used to parse a fragmented NDR byte stream.

ndr_pull_append() appends more data that can be processed
and ndr_pull_pop() removed already processed data.

This will be used to implement dcerpc pipes, where we can get
a verify large amount of pipe chunks, once we processed a chunk
we can forget about the related data, but we may need to keep some
bytes in order to get the alignment right.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Guenther Deschner <gd@samba.org>
2014-02-11 16:02:14 +01:00
Stefan Metzmacher
53e0ceddff librpc/ndr: add support for a shallow copy to ndr_pull_subcontext_start/end
This will be usefull to try parsing DCERPC pipe chunks for
LIBNDR_FLAG_INCOMPLETE_BUFFER.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Guenther Deschner <gd@samba.org>
2014-02-11 16:02:14 +01:00
Stefan Metzmacher
e2a621466e librpc/ndr: add NDR_ERR_INCOMPLETE_BUFFER and LIBNDR_FLAG_INCOMPLETE_BUFFER
If we pull a pipe chunk we need a way to check if we
have enough bytes to parse the complete chunk.

Setting ndr_pull->flags |= LIBNDR_FLAG_INCOMPLETE_BUFFER
would change NDR_ERR_BUFSIZE (and later maybe others)
into NDR_ERR_INCOMPLETE_BUFFER.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Guenther Deschner <gd@samba.org>
2014-02-11 16:02:13 +01:00
Gregor Beck
4289750211 librpc: fix possible memory leak
Signed-off-by: Gregor Beck <gbeck@sernet.de>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Michael Adam <obnox@samba.org>
2014-01-07 08:37:35 +01:00
Stefan Metzmacher
b62308ed99 librpc/ndr: add LIBNDR_FLAG_SUBCONTEXT_NO_UNREAD_BYTES
This lets ndr_pull_subcontext_end() make sure that all
subcontext bytes are consumed otherwise it returns NDR_ERR_UNREAD_BYTES.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
2014-01-07 00:27:11 +01:00
Kai Blin
0f5e9d29f6 librpc: Add NDR_PRINT_DEBUGC to ndr print to a debug class
Signed-off-by: Kai Blin <kai@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
2013-05-18 10:58:05 +02:00
Jeremy Allison
035342c117 Fix bug #8373 - Can't join XP Pro workstations to 3.6.1 DC.
Treat LIBNDR_FLAG_NOALIGN and LIBNDR_FLAG_REMAINING the same as the
other align flags - make them mutually exclusive.

Combined work from Metze, Günther and Jeremy.
2012-05-25 09:16:50 -07:00
Jelmer Vernooij
95ca5fbadd libndr: Rename ndr64_transfer_syntax and null_ndr_syntax_id so they have a ndr_ prefix.
This makes the NDR namespace a bit clearer, in preparation of ABI checking.
2012-03-20 13:54:07 +01:00
Andrew Bartlett
c1f8a74320 librpc/ndr remove _SAMBA_BUILD_ conditionals 2011-07-06 12:23:40 +10:00
Stefan Metzmacher
2a47ed8106 librpc/ndr: add ndr_push_pipe_chunk_trailer() and ndr_check_pipe_chunk_trailer()
metze
2011-03-10 14:31:15 +01:00
Stefan Metzmacher
ef224aa004 librpc/ndr: handle NOALIGN flag for relative pointers and alignment DATA_BLOBs
metze

Autobuild-User: Stefan Metzmacher <metze@samba.org>
Autobuild-Date: Tue Mar  1 17:11:03 CET 2011 on sn-devel-104
2011-03-01 17:11:03 +01:00
Stefan Metzmacher
23f6f44979 TODO test/review librpc/ndr: remove align2 hack for relative pointers
metze
2011-02-28 15:54:13 -08:00
Stefan Metzmacher
84b884eb4b librpc/ndr: ndr align relative pointers based on the given flags
We used to do this only for the reverse relative pointers
and now we always do it.

metze
2011-02-28 15:54:13 -08:00
Günther Deschner
8b55ae1785 ndr: move null_ndr_syntax_id to the common libndr location.
Guenther
2011-02-08 08:58:21 +01:00
Matthias Dieter Wallnöfer
14a3d4d7f0 librpc/ndr/ndr.c - fix some counter types
The "depth" is "uint32_t"

Autobuild-User: Matthias Dieter Wallnöfer <mdw@samba.org>
Autobuild-Date: Wed Oct 27 08:13:40 UTC 2010 on sn-devel-104
2010-10-27 08:13:40 +00:00
Andrew Bartlett
d9b7123cb7 librpc Make ndrdump use printf() rather than having to mess with DEBUG()
This means it no longer needs to force the debug level etc.

(this builds on the fine work by Volker to create dump_data_cb())

Andrew Bartlett
2010-10-27 04:42:06 +00:00
Andrew Tridgell
3828c76c76 ndr: allow ndr_print to print DATA_BLOB
this prints DATA_BLOB structures using the ndr->print() calls

Signed-off-by: Andrew Bartlett <abartlet@samba.org>
2010-08-14 11:58:13 +10:00
Jelmer Vernooij
f9ca9e46ad Finish removal of iconv_convenience in public API's. 2010-05-18 11:45:30 +02:00
Andrew Tridgell
55c45110e6 charset: fixed a problem with the global use of the iconv_convenience structure
We had a crash bug where a cached copy of a iconv convenience pointer
was used after being freed when loadparm asked for iconv to
reload. This could happen if a python module used a iconv based
function before loadparm was completed.

The fix is to ensure that any use of this pointer remains valid, by
reusing the pointer itself when it has already been initialised, but
filling in the child elements with the updated values.
2010-03-18 14:18:41 +11:00
Stefan Metzmacher
76aa37f653 librpc/ndr: don't overwrite the content in ndr_push_relative_ptr2_end()
metze
2010-02-19 08:12:42 +01:00
Stefan Metzmacher
8310f02414 libndr: fix ndr_size_* calculation with relative reverse buffers
metze
2010-02-18 15:47:52 +01:00
Stefan Metzmacher
4a76d29374 libndr: for now align reverse relative pointers to 2 bytes by default.
This is just a hack and we should let the callers use FLAG_ALIGN2
explicit in future.

metze
2010-02-18 13:44:04 +01:00
Stefan Metzmacher
31c7780c16 libndr: implement LIBNDR_RELATIVE_REVERSE handling
This is based on Guenther's initial code.

metze
2010-02-18 13:44:03 +01:00
Günther Deschner
05347754ee libndr: store a subcontext buffer size in ndr_push_subcontext_start.
Guenther
2010-02-18 13:44:03 +01:00
Stefan Metzmacher
b5f9c44da5 libndr: give an error when ndr_push_relative_ptr2_start()/_end() is used with the RELATIVE_REVERSE flag
metze
2010-02-18 13:44:03 +01:00
Günther Deschner
a2c34296fa libndr: add LIBNDR_FLAG_NO_RELATIVE_REVERSE so that relative reverse processing
can be disabled for single structure elements.

Guenther
2010-02-18 13:44:02 +01:00
Günther Deschner
c9fa97b017 libndr: change subcontext buffer allocation to allocate on subcontext_start.
Guenther
2010-02-18 13:44:01 +01:00
Stefan Metzmacher
98e143cd31 librpc/ndr: make ndr_push_relative_ptr2() static
metze
2010-02-18 13:44:01 +01:00
Günther Deschner
bc20d3446a libndr: add ndr_push_relative_ptr2_start and ndr_push_relative_ptr2_end.
Guenther
2010-02-18 13:43:59 +01:00
Matthieu Patou
f0054da041 librpc/ndr: add support for relative_short pointers
relative_short is like relative but instead of having the offset coded on 4 bytes
it's coded on 2 bytes. Such things happen in GET_DFS_REFERAL messages.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
2009-12-12 10:21:22 +01:00
Stefan Metzmacher
4b6c03a108 librpc/ndr: remember the highest offset we parsed with relative pointer buffers
ndr_*_pull_blob_all() will now work if relative pointers are used.

metze
2009-11-20 13:48:35 +01:00
Andrew Tridgell
1a1cb92583 ndr: split out ndr enum functions
This allows for easier implementation of the NDR32/NDR64 split
2009-09-17 15:19:30 -07:00
Andrew Tridgell
056cbf7f81 ndr: added support for NDR64
This adds NDR64 support for the push functions in libndr
2009-09-17 15:19:27 -07:00
Andrew Tridgell
9407ab573e ndr: added --ndr64 flag to ndrdump
This only does pull, but it is useful for w2k8-r2 <-> w2k8-r2 ndrdump
usage, which is always 64bit.
2009-09-16 23:59:53 -07:00
Andrew Tridgell
5c33042498 s4-ndr: fixed memory leaks in ndr_pull_*_blob()
We needed to free the ndr structures, both on error and normal return
2009-09-12 15:21:33 +10:00
Andrew Tridgell
642a84c129 fix the ndr print routines for samba4
This uses a hackish #if just for samba4. The proper fix is much more
complex.
2009-09-03 18:36:08 +10:00
Anatoliy Atanasov
c033b2dd2d Fix for DSSYNC test against Windows 2003 2009-09-03 18:36:08 +10:00
Andrew Tridgell
ff4acca13a Revert "avoid crashes in ndr_print_*() calls"
This reverts commit f5a47dc4bf2793ab328c8b0e35adace497819e7d.

This change broke Samba3. We'll need to do it the long way.
2009-06-12 15:37:48 +10:00
Andrew Tridgell
f5a47dc4bf avoid crashes in ndr_print_*() calls
This is a hackish fix, but it will do for now
2009-06-12 12:23:46 +10:00
Volker Lendecke
8c41e0e5a6 Don't log NDR_PRINT_DEBUG at level 0, this always ends up in syslog
I think we eventually need to pass down the debuglevel here.
2009-03-10 17:07:38 +01:00