diff options
Diffstat (limited to 'source4/smbd')
-rw-r--r-- | source4/smbd/process_model.h | 2 | ||||
-rw-r--r-- | source4/smbd/process_single.c | 2 | ||||
-rw-r--r-- | source4/smbd/process_standard.c | 2 | ||||
-rw-r--r-- | source4/smbd/process_thread.c | 2 | ||||
-rw-r--r-- | source4/smbd/service.c | 6 | ||||
-rw-r--r-- | source4/smbd/service.h | 15 |
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; |