summaryrefslogtreecommitdiff
path: root/source4/smbd
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2004-10-17 02:55:47 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:59:57 -0500
commitfef617c31bd4a8be09449d6bc726c729ae758423 (patch)
tree4951f62b04442e046f786b88e76dc48aac901e3f /source4/smbd
parentf6da6a10de7d7f101f6485f4a34ef4ef5b6ab6c0 (diff)
downloadsamba-fef617c31bd4a8be09449d6bc726c729ae758423.tar.gz
samba-fef617c31bd4a8be09449d6bc726c729ae758423.tar.bz2
samba-fef617c31bd4a8be09449d6bc726c729ae758423.zip
r3012: added initial support for byte range locking in the posix vfs. This is
enough for us to pass locktest, but does not yet support lock timeouts and some of the other esoteric features. (This used to be commit 58a92abd88f190bc60894a68e0528e95ae33fe39)
Diffstat (limited to 'source4/smbd')
-rw-r--r--source4/smbd/process_model.h2
-rw-r--r--source4/smbd/process_single.c2
-rw-r--r--source4/smbd/process_standard.c2
-rw-r--r--source4/smbd/process_thread.c2
-rw-r--r--source4/smbd/service.c6
-rw-r--r--source4/smbd/service.h15
6 files changed, 22 insertions, 7 deletions
diff --git a/source4/smbd/process_model.h b/source4/smbd/process_model.h
index 376b9a8ef8..79373d8a39 100644
--- a/source4/smbd/process_model.h
+++ b/source4/smbd/process_model.h
@@ -23,8 +23,6 @@
#ifndef SAMBA_PROCESS_MODEL_H
#define SAMBA_PROCESS_MODEL_H
-struct server_service_connection;
-
/* modules can use the following to determine if the interface has changed
* please increment the version number after each interface change
* with a comment and maybe update struct process_model_critical_sizes.
diff --git a/source4/smbd/process_single.c b/source4/smbd/process_single.c
index 12a265b62f..b96a1d0b2c 100644
--- a/source4/smbd/process_single.c
+++ b/source4/smbd/process_single.c
@@ -49,7 +49,7 @@ static void single_accept_connection(struct event_context *ev, struct fd_event *
return;
}
- conn = server_setup_connection(ev, server_socket, sock, t);
+ conn = server_setup_connection(ev, server_socket, sock, t, socket_get_fd(sock));
if (!conn) {
DEBUG(0,("server_setup_connection(ev, server_socket, sock, t) failed\n"));
return;
diff --git a/source4/smbd/process_standard.c b/source4/smbd/process_standard.c
index 122c6581b0..d70cfa676b 100644
--- a/source4/smbd/process_standard.c
+++ b/source4/smbd/process_standard.c
@@ -74,7 +74,7 @@ static void standard_accept_connection(struct event_context *ev, struct fd_event
set_need_random_reseed();
- conn = server_setup_connection(ev, server_socket, sock, t);
+ conn = server_setup_connection(ev, server_socket, sock, t, getpid());
if (!conn) {
DEBUG(0,("server_setup_connection(ev, server_socket, sock, t) failed\n"));
return;
diff --git a/source4/smbd/process_thread.c b/source4/smbd/process_thread.c
index 55688f85e8..85f30c9ddd 100644
--- a/source4/smbd/process_thread.c
+++ b/source4/smbd/process_thread.c
@@ -79,7 +79,7 @@ static void thread_accept_connection(struct event_context *ev, struct fd_event *
return;
}
- conn = server_setup_connection(ev, server_socket, sock, t);
+ conn = server_setup_connection(ev, server_socket, sock, t, pthread_self());
if (!conn) {
DEBUG(0,("server_setup_connection(ev, server_socket, sock, t) failed\n"));
event_context_destroy(ev);
diff --git a/source4/smbd/service.c b/source4/smbd/service.c
index 5aae84b2c9..9a7ac73559 100644
--- a/source4/smbd/service.c
+++ b/source4/smbd/service.c
@@ -198,7 +198,8 @@ static int server_destructor(void *ptr)
struct server_connection *server_setup_connection(struct event_context *ev,
struct server_socket *server_socket,
struct socket_context *sock,
- time_t t)
+ time_t t,
+ servid_t server_id)
{
struct fd_event fde;
struct timed_event idle;
@@ -206,7 +207,7 @@ struct server_connection *server_setup_connection(struct event_context *ev,
srv_conn = talloc_p(server_socket, struct server_connection);
if (!srv_conn) {
- DEBUG(0,("talloc_p(mem_ctx, struct server_service_connection) failed\n"));
+ DEBUG(0,("talloc_p(mem_ctx, struct server_connection) failed\n"));
return NULL;
}
@@ -229,6 +230,7 @@ struct server_connection *server_setup_connection(struct event_context *ev,
srv_conn->server_socket = server_socket;
srv_conn->service = server_socket->service;
srv_conn->socket = sock;
+ srv_conn->server_id = server_id;
/* create a smb server context and add it to out event
handling */
diff --git a/source4/smbd/service.h b/source4/smbd/service.h
index 88618964ce..e9ef0bff06 100644
--- a/source4/smbd/service.h
+++ b/source4/smbd/service.h
@@ -93,6 +93,19 @@ struct server_service {
struct server_context *srv_ctx;
};
+/* the concept of whether two operations are on the same server
+ connection or different connections is an important one in SMB, especially
+ for locking and share modes. We will use a servid_t to distinguish different
+ connections
+
+ this means that (for example) a unique open file is distinguished by the triple
+ of
+ servid_t server;
+ uint16 tid;
+ uint16 fnum;
+*/
+typedef uint32_t servid_t;
+
struct server_connection {
struct server_connection *next,*prev;
void *private_data;
@@ -104,6 +117,8 @@ struct server_connection {
time_t idle_time;
} event;
+ servid_t server_id;
+
struct socket_context *socket;
struct server_socket *server_socket;