1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-08 21:18:16 +03:00
Commit Graph

130 Commits

Author SHA1 Message Date
Andrew Tridgell
42c4dd1832 r3341: - don't zero the async structure (makes valgrind more useful)
- get rid of req->mid, as it isn't a safe value to use to match
  requests in the server (it is safe in the client code, as we choose
  the mid, but in the server we can't rely on other clients to choose
  the mid carefully)
(This used to be commit 938fb44351)
2007-10-10 13:04:57 -05:00
Stefan Metzmacher
0197195957 r3336: use a struct ntvfs_async_state to be able to do async chaning of ntvfs modules
the idea is that a passthru module can use ntvfs_async_state_push() before
calling ntvfs_next_*() and in the _send function it calls
ntvfs_async_state_pop() and then call the upper layer send_fn itself

- ntvfs_nbench is now fully async

- the ntvfs_map_*() functions and the trans(2) mapping functions are not converted yet

metze
(This used to be commit fde64c0dc1)
2007-10-10 13:04:57 -05:00
Andrew Tridgell
aa19318fd5 r3307: fixed the send side of the smb_server code to be non-blocking. This
means the whole of the SMB handling code is now non-blocking.
(This used to be commit 30acedb943)
2007-10-10 13:04:52 -05:00
Andrew Tridgell
d668ec53b3 r3306: the main smb server code now handles non-blocking socket receives. I
haven't marked the socket non-blocking yet as I haven't checked that
the send path is OK for non-blocking.
(This used to be commit bda978cc2a)
2007-10-10 13:04:52 -05:00
Andrew Tridgell
c6888da148 r3304: changed the API to lib/socket/ a little.
The main change is to make socket_recv() take a pre-allocated buffer,
rather than allocating one itself. This allows non-blocking users of
this API to avoid a memcpy(). As a result our messaging code is now
about 10% faster, and the ncacn_ip_tcp and ncalrpc code is also
faster.

The second change was to remove the unused mem_ctx argument from
socket_send(). Having it there implied that memory could be allocated,
which meant the caller had to worry about freeing that memory (if for
example it is sending in a tight loop using the same memory
context). Removing that unused argument keeps life simpler for users.
(This used to be commit a16e4756cd)
2007-10-10 13:04:52 -05:00
Andrew Tridgell
9d055846f2 r3278: - rewrote the client side rpc connection code to use lib/socket/
rather than doing everything itself. This greatly simplifies the
  code, although I really don't like the socket_recv() interface (it
  always allocates memory for you, which means an extra memcpy in this
  code)

- fixed several bugs in the socket_ipv4.c code, in particular client
  side code used a non-blocking connect but didn't handle EINPROGRESS,
  so it had no chance of working. Also fixed the error codes, using
  map_nt_error_from_unix()

- cleaned up and expanded map_nt_error_from_unix()

- changed interpret_addr2() to not take a mem_ctx. It makes absolutely
  no sense to allocate a fixed size 4 byte structure like this. Dozens
  of places in the code were also using interpret_addr2() incorrectly
  (precisely because the allocation made no sense)
(This used to be commit 7f2c771b0e)
2007-10-10 13:04:49 -05:00
Andrew Tridgell
79c9d6db55 r3256: get rid of the unused session_claim() and session_yield() calls
(This used to be commit f1c5be396b)
2007-10-10 13:04:47 -05:00
Andrew Tridgell
f9fdeaa8f4 r3255: - fixed 2 uninitialised data errors found with valgrind
- fixed offset of setup words in nttrans reply
(This used to be commit 86b5118c2a)
2007-10-10 13:04:47 -05:00
Andrew Tridgell
8962ec3a68 r3243: read the high offset count in SMBreadx in the server
(This used to be commit 977bc87d18)
2007-10-10 13:04:45 -05:00
Andrew Tridgell
ea43c2a3ed r3234: in SMBreadx, if the client asks for exactly 65535 bytes then don't try
to align the buffer, as that would make the read reply not fit
(This used to be commit 70be45de05)
2007-10-10 13:04:43 -05:00
Andrew Tridgell
611e9e601c r3202: return a old DOS error code ERRSRV:ERRbaduid for a bad vuid. This means we now pass the BASE-VUID test.
(This used to be commit 560300c002)
2007-10-10 13:04:40 -05:00
Andrew Bartlett
e5fc6dd0bb r3186: Use the properties of the new talloc() system to handle the auth
session info and server info structures.

Andrew Bartlett
(This used to be commit 5bdf391b3b)
2007-10-10 13:04:38 -05:00
Jelmer Vernooij
8debe5a6b8 r3136: - Allow specifying socket type when adding smbd service
- Make sure a epm_tower struct is completely initialized
- Some more minor fixes
(This used to be commit d560dcbdb8)
2007-10-10 13:02:25 -05:00
Andrew Tridgell
7d30e54927 r3134: use struct idr_context * in tid allocation
(This used to be commit 3ea9445226)
2007-10-10 13:02:25 -05:00
Andrew Tridgell
74e741037c r3084: mincnt and maxcnt were the wrong way around in readbraw server code
(This used to be commit e11b000319)
2007-10-10 13:01:57 -05:00
Andrew Tridgell
20d17b8057 r3081: several updates to ntvfs and server side async request handling in
preparation for the full share modes and ntcreatex code that I am
working on.

highlights include:

 - changed the way a backend determines if it is allowed to process a
   request asynchronously. The previous method of looking at the
   send_fn caused problems when an intermediate ntvfs module disabled
   it, and the caller then wanted to finished processing using this
   function. The new method is a REQ_CONTROL_MAY_ASYNC flag in
   req->control_flags, which is also a bit easier to read

 - fixed 2 bugs in the readbraw server code. One related to trying to
   answer a readbraw with smb signing (which can't work, and crashed
   our signing code), the second related to error handling, which
   attempted to send a normal SMB error packet, when readbraw must
   send a 0 read reply (as it has no header)

 - added several more ntvfs_generic.c generic mapping functions. This
   means that backends no longer need to implement such esoteric
   functions as SMBwriteunlock() if they don't want to. The backend
   can just request the mapping layer turn it into a write followed by
   an unlock. This makes the backends considerably simpler as they
   only need to implement one style of each function for lock, read,
   write, open etc, rather than the full host of functions that SMB
   provides. A backend can still choose to implement them
   individually, of course, and the CIFS backend does that.

 - simplified the generic structures to make them identical to the
   principal call for several common SMB calls (such as
   RAW_WRITE_GENERIC now being an alias for RAW_WRITE_WRITEX).

 - started rewriting the pvfs_open() code in preparation for the full
   ntcreatex semantics.

 - in pvfs_open and ipc_open, initially allocate the open file
   structure as a child of the request, so on error we don't need to
   clean up. Then when we are going to succeed the open steal the
   pointer into the long term backend context. This makes for much
   simpler error handling (and fixes some bugs)

 - use a destructor in the ipc backend to make sure that everthing is
   cleaned up on receive error conditions.

 - switched the ipc backend to using idtree for fnum allocation

 - in the ntvfs_generic mapping routines, use a allocated secondary
   structure not a stack structure to ensure the request pointer
   remains valid even if the backend replies async.
(This used to be commit 3457c1836c)
2007-10-10 13:01:57 -05:00
Andrew Tridgell
72093ce62f r3064: - use UINT8_MAX and UINT16_MAX instead of hex values for idr_get_new() limits
- change idr_get_new() to use > instead of >= in the limit check
(This used to be commit 834b09929b)
2007-10-10 13:01:55 -05:00
Tim Potter
b98218c84b r3060: Replace magic number with a C99 constant.
(This used to be commit b572be00b3)
2007-10-10 13:01:55 -05:00
Andrew Tridgell
24bba442bc r3059: completely get rid of the MAX_CONNECTIONS limit, as a idle tree
connect is very cheap now.
(This used to be commit 8856f010e9)
2007-10-10 13:01:55 -05:00
Andrew Tridgell
b2b8282b8c r3057: - moved the idtree.c code into lib/
- converted the tid handling to use a idtree instead of bitmaps
(This used to be commit 4220914179)
2007-10-10 13:01:54 -05:00
Andrew Tridgell
002f883202 r3054: use talloc_zero_array_p() in a couple of places
(This used to be commit cccd59009d)
2007-10-10 13:01:54 -05:00
Andrew Tridgell
7d32679e96 r2857: this commit gets rid of smb_ucs2_t, wpstring and fpstring, plus lots of associated functions.
The motivation for this change was to avoid having to convert to/from
ucs2 strings for so many operations. Doing that was slow, used many
static buffers, and was also incorrect as it didn't cope properly with
unicode codepoints above 65536 (which could not be represented
correctly as smb_ucs2_t chars)

The two core functions that allowed this change are next_codepoint()
and push_codepoint(). These functions allow you to correctly walk a
arbitrary multi-byte string a character at a time without converting
the whole string to ucs2.

While doing this cleanup I also fixed several ucs2 string handling
bugs. See the commit for details.

The following code (which counts the number of occuraces of 'c' in a
string) shows how to use the new interface:

size_t count_chars(const char *s, char c)
{
	size_t count = 0;

	while (*s) {
		size_t size;
		codepoint_t c2 = next_codepoint(s, &size);
		if (c2 == c) count++;
		s += size;
	}

	return count;
}
(This used to be commit 814881f0e5)
2007-10-10 12:59:39 -05:00
Andrew Tridgell
c4bf8c5b2c r2797: don't free the server_info before using it for anonymous connections
(This used to be commit 5f5b04196c)
2007-10-10 12:59:35 -05:00
Andrew Tridgell
a46270e2fa r2784: - fixed alignment of ascii directory listings
- fixed minimum parameter size for ascii qpathinfo call
(This used to be commit ee065ae7f9)
2007-10-10 12:59:32 -05:00
Andrew Tridgell
20c550d87f r2783: got rid of the unused remote architecture detection code
(This used to be commit 9a04664531)
2007-10-10 12:59:32 -05:00
Stefan Metzmacher
dcad0f6fd4 r2751: this is a new ntvfs design which tries to solve:
- the stacking of modules
- finding the modules private data
- hide the ntvfs details from the calling layer
- I set NTVFS_INTERFACE_VERSION 0 till we are closer to release
  (because we need to solve some async problems with the module stacking)

metze
(This used to be commit 3ff03b5cb2)
2007-10-10 12:59:30 -05:00
Andrew Tridgell
5b44130afa r2671: we're getting too many errors caused by the talloc_realloc() API not
taking a context (so when you pass a NULL pointer you end up with
memory in a top level context). Fixed it by changing the API to take a
context. The context is only used if the pointer you are reallocing is
NULL.
(This used to be commit 8dc23821c9)
2007-10-10 12:59:20 -05:00
Andrew Tridgell
5a064d4a62 r2669: convert make_user_info() and associated functions from malloc to talloc
(This used to be commit 278cef77f0)
2007-10-10 12:59:19 -05:00
Andrew Tridgell
729d17c270 r2664: fixed the final server leak for normal operation. We now get a clean report from --leak-check
(This used to be commit 1ff41bbcae)
2007-10-10 12:59:19 -05:00
Andrew Tridgell
e3880fa759 r2660: - converted the libcli/raw/ library to use talloc_increase_ref_count()
rather than manual reference counts

- properly support SMBexit in the cifs and posix backends

- added a logoff method to all backends

With these changes the RAW-CONTEXT test now passes against the posix backend
(This used to be commit c315d6ac1c)
2007-10-10 12:59:18 -05:00
Andrew Tridgell
5a830d0626 r2658: fixed a couple of error codes found with RAW-CONTEXT
(This used to be commit 18632ec565)
2007-10-10 12:59:17 -05:00
Andrew Tridgell
5d45a332d5 r2657: if we are already fully authenticated in session setup then the vuid is ignored
(This used to be commit 50d5c638a3)
2007-10-10 12:59:17 -05:00
Andrew Tridgell
9a62dce0ac r2648: - use a destructor on struct server_connection to simplify the
connection termination cleanup, and to ensure that the event
  contexts are properly removed for every process model

- gave auth_context the new talloc treatment, which removes another
  source of memory leaks.
(This used to be commit 230e1cd777)
2007-10-10 12:59:16 -05:00
Andrew Tridgell
764eddb696 r2646: - use a talloc destructor to ensure that sockets from the new socket
library are closed on abnormal termination

- convert the service.h structures to the new talloc methods
(This used to be commit 2dc334a328)
2007-10-10 12:59:16 -05:00
Andrew Tridgell
c5f4378361 r2629: convert gensec to the new talloc model
by making our gensec structures a talloc child of the open connection
we can be sure that it will be destroyed when the connection is
dropped.
(This used to be commit f12ee2f241)
2007-10-10 12:59:14 -05:00
Andrew Tridgell
d79c7d41da r2627: use the new talloc capabilities in a bunch more places in the rpc
server code. This fixes a number of memory leaks I found when testing
with valgrind and smbtorture, as the cascading effect of a
talloc_free() ensures that anything derived from the top level object
is destroyed on disconnect.
(This used to be commit 76d0b8206c)
2007-10-10 12:59:13 -05:00
Andrew Tridgell
045543b661 r2618: before we had refererence counts in talloc I added a hack in the
server side request structure to prevent a structing being freed in
some circumstances. This change replaces this with the much more
robust mechanism of talloc_increase_ref_count().
(This used to be commit 3f7741f178)
2007-10-10 12:59:12 -05:00
Andrew Tridgell
69d170e723 r2616: the cascading nature of talloc_free() can lead to some surprises. In
this case the bug was that server_terminate_connection() destroys the
server context, which in turn cascades down to destroy all current
request contexts, so we musn't then try to destroy the request
structure a second time.
(This used to be commit 28a647f681)
2007-10-10 12:59:12 -05:00
Andrew Tridgell
7358fb62b8 r2590: fixed one of the server security memory leaks. There are more :(
(This used to be commit 9e1eb58e4b)
2007-10-10 12:59:10 -05:00
Andrew Tridgell
fe45888e22 r2581: added "hosts allow" and "hosts deny" checking in smbd. I needed this
as my box keeps getting hit by viruses spreading on my companies
internal network, which screws up my debug log badly (sigh).

metze, I'm not sure if you think access.c should go in the socket
library or not. It is closely tied to the socket functions, but you
may prefer it separate.

The access.c code is a port from Samba3, but with some cleanups to
make it (slighly) less ugly.
(This used to be commit 058b2fd99e)
2007-10-10 12:59:07 -05:00
Andrew Tridgell
a3cec511bb r2561: completely redid the ntvfs module chaining code, You can now do something like:
ntvfs handler = nbench posix

and the nbench pass-thru module will be called before the posix
module. The chaining logic is now much saner, and less racy, with each
level in the chain getting its own private pointer rather than relying
on save/restore logic in the pass-thru module.

The only pass-thru module we have at the moment is the nbench one
(which records all traffic in a nbench compatibe format), but I plan
on soon writing a "unixuid" pass-thru module that will implement the
setegid()/setgroups()/seteuid() logic for standard posix uid
handling. This separation of the posix backend from the uid handling
should simplify the code, and make development easier.

I also modified the nbench module so it can do multiple chaining, so
if you want to you can do:

   ntvfs module = nbench nbench posix

and it will save 2 copies of the log file in /tmp. This is really only
useful for testing at the moment until we have more than one pass-thru
module.
(This used to be commit f84c0af35c)
2007-10-10 12:59:06 -05:00
Andrew Bartlett
9a9dcc7250 r2552: Character set conversion and string handling updates.
The intial motivation for this commit was to merge in some of the
bugfixes present in Samba3's chrcnv and string handling code into
Samba4.  However, along the way I found a lot of unused functions, and
decided to do a bit more...

The strlen_m code now does not use a fixed buffer, but more work is
needed to finish off other functions in str_util.c.  These fixed
length buffers hav caused very nasty, hard to chase down bugs at some
sites.

The strupper_m() function has a strupper_talloc() to replace it (we
need to go around and fix more uses, but it's a start).  Use of these
new functions will avoid bugs where the upper or lowercase version of
a string is a different length.

I have removed the push_*_allocate functions, which are replaced by
calls to push_*_talloc.  Likewise, pstring and other 'fixed length'
wrappers are removed, where possible.

I have removed the first ('base pointer') argument, used by push_ucs2,
as the Samba4 way of doing things ensures that this is always on an
even boundary anyway.  (It was used in only one place, in any case).
(This used to be commit dfecb01506)
2007-10-10 12:59:05 -05:00
Andrew Bartlett
0d2b17666a r2550: survive our own BASE-NEGNOWAIT torture test.
Andrew Bartlett
(This used to be commit a132082249)
2007-10-10 12:59:05 -05:00
Andrew Bartlett
e517b653ab r2544: (missed from the last commit)
smb_conn->socket has gone away, and the packet count is now in the
main structure.

Andrew Bartlett
(This used to be commit 2e197f05ff)
2007-10-10 12:59:04 -05:00
Andrew Bartlett
79ae828819 r2542: I really don't like the 'substitute' code, and I particularly don't
like it in the mainline code (outside the smb.conf magic).

We will need to have a more useful 'helper' routine for this, but for
now we at least get a reliable IP address.

Also remove the unused 'socket' structure in the smb server - it seems
to have been replaced by the socket library.

Andrew Bartlett
(This used to be commit d8fd19a202)
2007-10-10 12:59:04 -05:00
Andrew Bartlett
3fb57e31a0 r2541: Add a TODO: This is one place we can grab the remote netbios name.
Andrew Bartlett
(This used to be commit cd2f97530b)
2007-10-10 12:59:04 -05:00
Andrew Tridgell
1e09ab3774 r2521: fixed two uninitialised data errors found with valgrind when
negotiating a old style session setup (eg. LANMAN1)
(This used to be commit 04f68f481c)
2007-10-10 12:59:01 -05:00
Andrew Tridgell
ca60193f24 r2520: - finished implementing the server side of the old style search requests
(This used to be commit 4e4859c06b)
2007-10-10 12:59:01 -05:00
Andrew Tridgell
dd7862cb6a r2503: the RAW-SEARCH test now mostly passes against the posix backend
(This used to be commit 9710f24b1f)
2007-10-10 12:58:59 -05:00
Andrew Tridgell
23ba434b01 r2469: complete overhaul of the old-style RAW_SEARCH_ calls (the OS/2 and
original core level calls). The old code was completely wrong in many respects.

also fixed the EA_SIZE level in the server

extended the RAW-SEARCH test suite to test the new code properly
(This used to be commit 71480271ad)
2007-10-10 12:58:56 -05:00