[SCM] Samba Shared Repository - branch master updated
Volker Lendecke
vlendec at samba.org
Tue Aug 2 12:33:02 MDT 2011
The branch, master has been updated
via e114a21 s3: Remove unused ERROR_FORCE_NT macro
via 9b1e4cf s3: Remove unused ERROR_DOS macro
via d20e968 s3: Move deferred_open_queue to smbd_server_connection
via cb69d10 s3: Pass sconn explicitly to get_deferred_open_message_smb
via f9d183f s3: Pass sconn explicitly to open_was_deferred
via 502fdae s3: Pass sconn explicitly to schedule_deferred_open_message_smb
via 04253df s3: Explicitly pass sconn to remove_deferred_open_message_smb
via 77f5246 s3: Fix some nonempty blank lines
from a68f16c s3:server Consolidate printing related initialization
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit e114a21cc27504efc31f9be1616b91c6b1fcc59d
Author: Volker Lendecke <vl at samba.org>
Date: Tue Aug 2 17:18:15 2011 +0200
s3: Remove unused ERROR_FORCE_NT macro
Autobuild-User: Volker Lendecke <vlendec at samba.org>
Autobuild-Date: Tue Aug 2 20:32:08 CEST 2011 on sn-devel-104
commit 9b1e4cfb8f0495cc4af6043c72ff09edf3a0565a
Author: Volker Lendecke <vl at samba.org>
Date: Tue Aug 2 17:17:29 2011 +0200
s3: Remove unused ERROR_DOS macro
commit d20e968cff86eaad62e5fef8d3ee16f8767f8054
Author: Volker Lendecke <vl at samba.org>
Date: Tue Aug 2 17:13:23 2011 +0200
s3: Move deferred_open_queue to smbd_server_connection
commit cb69d105f5cb0336e3b97bf864d164d4daeab5ab
Author: Volker Lendecke <vl at samba.org>
Date: Tue Aug 2 17:07:25 2011 +0200
s3: Pass sconn explicitly to get_deferred_open_message_smb
commit f9d183f931f021c7b76047766838388cb7686c37
Author: Volker Lendecke <vl at samba.org>
Date: Tue Aug 2 17:05:33 2011 +0200
s3: Pass sconn explicitly to open_was_deferred
commit 502fdae7f134bda53e6c95e3a336e7b2fcda77f2
Author: Volker Lendecke <vl at samba.org>
Date: Tue Aug 2 16:58:46 2011 +0200
s3: Pass sconn explicitly to schedule_deferred_open_message_smb
commit 04253dfd9fb024bb8c227b0d9ccb81efa208fabe
Author: Volker Lendecke <vl at samba.org>
Date: Tue Aug 2 16:53:33 2011 +0200
s3: Explicitly pass sconn to remove_deferred_open_message_smb
commit 77f5246f09138c86b8a391a7aa8a0522feb324f6
Author: Volker Lendecke <vl at samba.org>
Date: Tue Aug 2 16:44:53 2011 +0200
s3: Fix some nonempty blank lines
-----------------------------------------------------------------------
Summary of changes:
source3/include/smb_macros.h | 8 ++----
source3/smbd/close.c | 13 ++++++++---
source3/smbd/error.c | 6 ++--
source3/smbd/globals.c | 1 -
source3/smbd/globals.h | 6 +++-
source3/smbd/nttrans.c | 6 ++--
source3/smbd/open.c | 4 +-
source3/smbd/oplock.c | 20 ++++++++++++-----
source3/smbd/process.c | 47 +++++++++++++++++++++++------------------
source3/smbd/proto.h | 8 ++++--
source3/smbd/reply.c | 14 ++++++------
source3/smbd/smb2_create.c | 2 +-
source3/smbd/trans2.c | 4 +-
13 files changed, 79 insertions(+), 60 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/include/smb_macros.h b/source3/include/smb_macros.h
index aba1455..957db5b 100644
--- a/source3/include/smb_macros.h
+++ b/source3/include/smb_macros.h
@@ -5,17 +5,17 @@
Copyright (C) John H Terpstra 1996-1999
Copyright (C) Luke Kenneth Casson Leighton 1996-1999
Copyright (C) Paul Ashton 1998 - 1999
-
+
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
-
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
@@ -104,9 +104,7 @@
#define SMB_LARGE_LKLEN_OFFSET_HIGH(indx) (12 + (20 * (indx)))
#define SMB_LARGE_LKLEN_OFFSET_LOW(indx) (16 + (20 * (indx)))
-#define ERROR_DOS(class,code) error_packet(outbuf,class,code,NT_STATUS_OK,__LINE__,__FILE__)
#define ERROR_NT(status) error_packet(outbuf,0,0,status,__LINE__,__FILE__)
-#define ERROR_FORCE_NT(status) error_packet(outbuf,-1,-1,status,__LINE__,__FILE__)
#define ERROR_BOTH(status,class,code) error_packet(outbuf,class,code,status,__LINE__,__FILE__)
#define reply_nterror(req,status) reply_nt_error(req,status,__LINE__,__FILE__)
diff --git a/source3/smbd/close.c b/source3/smbd/close.c
index 43861b3..a1b6fd8 100644
--- a/source3/smbd/close.c
+++ b/source3/smbd/close.c
@@ -167,22 +167,27 @@ static void notify_deferred_opens(struct messaging_context *msg_ctx,
if (!should_notify_deferred_opens()) {
return;
}
-
+
for (i=0; i<lck->num_share_modes; i++) {
struct share_mode_entry *e = &lck->share_modes[i];
-
+
if (!is_deferred_open_entry(e)) {
continue;
}
-
+
if (procid_is_me(&e->pid)) {
+ struct smbd_server_connection *sconn;
/*
* We need to notify ourself to retry the open. Do
* this by finding the queued SMB record, moving it to
* the head of the queue and changing the wait time to
* zero.
*/
- schedule_deferred_open_message_smb(e->op_mid);
+ sconn = msg_ctx_to_sconn(msg_ctx);
+ if (sconn != NULL) {
+ schedule_deferred_open_message_smb(
+ sconn, e->op_mid);
+ }
} else {
char msg[MSG_SMB_SHARE_MODE_ENTRY_SIZE];
diff --git a/source3/smbd/error.c b/source3/smbd/error.c
index 2fb4241..815b857 100644
--- a/source3/smbd/error.c
+++ b/source3/smbd/error.c
@@ -2,17 +2,17 @@
Unix SMB/CIFS implementation.
error packet handling
Copyright (C) Andrew Tridgell 1992-1998
-
+
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
-
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
diff --git a/source3/smbd/globals.c b/source3/smbd/globals.c
index bf36dcb..8cc1a31 100644
--- a/source3/smbd/globals.c
+++ b/source3/smbd/globals.c
@@ -65,7 +65,6 @@ time_t last_printer_reload_time = 0;
structure to hold a linked list of queued messages.
for processing.
****************************************************************************/
-struct pending_message_list *deferred_open_queue = NULL;
uint32_t common_flags2 = FLAGS2_LONG_PATH_COMPONENTS|FLAGS2_32_BIT_ERROR_CODES|FLAGS2_EXTENDED_ATTRIBUTES;
struct smb_srv_trans_enc_ctx *partial_srv_trans_enc_ctx = NULL;
diff --git a/source3/smbd/globals.h b/source3/smbd/globals.h
index 6d13e56..9e8059b 100644
--- a/source3/smbd/globals.h
+++ b/source3/smbd/globals.h
@@ -70,8 +70,6 @@ extern time_t last_printer_reload_time;
structure to hold a linked list of queued messages.
for processing.
****************************************************************************/
-struct pending_message_list;
-extern struct pending_message_list *deferred_open_queue;
extern uint32_t common_flags2;
struct smb_srv_trans_enc_ctx;
@@ -447,6 +445,7 @@ struct smbd_smb2_tcon {
connection_struct *compat_conn;
};
+struct pending_message_list;
struct pending_auth_data;
struct smbd_server_connection {
@@ -478,6 +477,9 @@ struct smbd_server_connection {
/* number of open connections (tcons) */
int num_tcons_open;
+ struct pending_message_list *deferred_open_queue;
+
+
/* open directory handles. */
struct {
struct bitmap *dptr_bmap;
diff --git a/source3/smbd/nttrans.c b/source3/smbd/nttrans.c
index 9f745f2..8900ec8 100644
--- a/source3/smbd/nttrans.c
+++ b/source3/smbd/nttrans.c
@@ -584,7 +584,7 @@ void reply_ntcreate_and_X(struct smb_request *req)
&info); /* pinfo */
if (!NT_STATUS_IS_OK(status)) {
- if (open_was_deferred(req->mid)) {
+ if (open_was_deferred(req->sconn, req->mid)) {
/* We have re-scheduled this call, no error. */
goto out;
}
@@ -1159,7 +1159,7 @@ static void call_nt_transact_create(connection_struct *conn,
&info); /* pinfo */
if(!NT_STATUS_IS_OK(status)) {
- if (open_was_deferred(req->mid)) {
+ if (open_was_deferred(req->sconn, req->mid)) {
/* We have re-scheduled this call, no error. */
return;
}
@@ -1642,7 +1642,7 @@ void reply_ntrename(struct smb_request *req)
}
if (!NT_STATUS_IS_OK(status)) {
- if (open_was_deferred(req->mid)) {
+ if (open_was_deferred(req->sconn, req->mid)) {
/* We have re-scheduled this call. */
goto out;
}
diff --git a/source3/smbd/open.c b/source3/smbd/open.c
index 510dfe0..61d1a2e 100644
--- a/source3/smbd/open.c
+++ b/source3/smbd/open.c
@@ -794,7 +794,7 @@ static void validate_my_share_entries(struct smbd_server_connection *sconn,
}
if (is_deferred_open_entry(share_entry) &&
- !open_was_deferred(share_entry->op_mid)) {
+ !open_was_deferred(sconn, share_entry->op_mid)) {
char *str = talloc_asprintf(talloc_tos(),
"Got a deferred entry without a request: "
"PANIC: %s\n",
@@ -1621,7 +1621,7 @@ static NTSTATUS open_file_ntcreate(connection_struct *conn,
sconn_server_id(req->sconn));
/* Ensure we don't reprocess this message. */
- remove_deferred_open_message_smb(req->mid);
+ remove_deferred_open_message_smb(req->sconn, req->mid);
}
}
diff --git a/source3/smbd/oplock.c b/source3/smbd/oplock.c
index 284b032..bba2e35 100644
--- a/source3/smbd/oplock.c
+++ b/source3/smbd/oplock.c
@@ -4,17 +4,17 @@
Copyright (C) Andrew Tridgell 1992-1998
Copyright (C) Jeremy Allison 1998 - 2001
Copyright (C) Volker Lendecke 2005
-
+
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
-
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
@@ -688,6 +688,7 @@ static void process_oplock_break_response(struct messaging_context *msg_ctx,
DATA_BLOB *data)
{
struct share_mode_entry msg;
+ struct smbd_server_connection *sconn;
if (data->data == NULL) {
DEBUG(0, ("Got NULL buffer\n"));
@@ -707,7 +708,10 @@ static void process_oplock_break_response(struct messaging_context *msg_ctx,
server_id_str(talloc_tos(), &src), file_id_string_tos(&msg.id),
msg.share_file_id, (unsigned long long)msg.op_mid));
- schedule_deferred_open_message_smb(msg.op_mid);
+ sconn = msg_ctx_to_sconn(msg_ctx);
+ if (sconn != NULL) {
+ schedule_deferred_open_message_smb(sconn, msg.op_mid);
+ }
}
static void process_open_retry_message(struct messaging_context *msg_ctx,
@@ -717,7 +721,8 @@ static void process_open_retry_message(struct messaging_context *msg_ctx,
DATA_BLOB *data)
{
struct share_mode_entry msg;
-
+ struct smbd_server_connection *sconn;
+
if (data->data == NULL) {
DEBUG(0, ("Got NULL buffer\n"));
return;
@@ -735,7 +740,10 @@ static void process_open_retry_message(struct messaging_context *msg_ctx,
server_id_str(talloc_tos(), &src), file_id_string_tos(&msg.id),
(unsigned long long)msg.op_mid));
- schedule_deferred_open_message_smb(msg.op_mid);
+ sconn = msg_ctx_to_sconn(msg_ctx);
+ if (sconn != NULL) {
+ schedule_deferred_open_message_smb(sconn, msg.op_mid);
+ }
}
/****************************************************************************
diff --git a/source3/smbd/process.c b/source3/smbd/process.c
index 86e8347..b105de7 100644
--- a/source3/smbd/process.c
+++ b/source3/smbd/process.c
@@ -41,7 +41,8 @@ extern bool global_machine_password_needs_changing;
static void construct_reply_common(struct smb_request *req, const char *inbuf,
char *outbuf);
-static struct pending_message_list *get_deferred_open_message_smb(uint64_t mid);
+static struct pending_message_list *get_deferred_open_message_smb(
+ struct smbd_server_connection *sconn, uint64_t mid);
static bool smbd_lock_socket_internal(struct smbd_server_connection *sconn)
{
@@ -580,9 +581,9 @@ static void smbd_deferred_open_timer(struct event_context *ev,
msg->seqnum, msg->encrypted, &msg->pcd);
/* If it's still there and was processed, remove it. */
- msg = get_deferred_open_message_smb(mid);
+ msg = get_deferred_open_message_smb(smbd_server_conn, mid);
if (msg && msg->processed) {
- remove_deferred_open_message_smb(mid);
+ remove_deferred_open_message_smb(smbd_server_conn, mid);
}
}
@@ -640,7 +641,8 @@ static bool push_queued_message(struct smb_request *req,
return false;
}
- DLIST_ADD_END(deferred_open_queue, msg, struct pending_message_list *);
+ DLIST_ADD_END(req->sconn->deferred_open_queue, msg,
+ struct pending_message_list *);
DEBUG(10,("push_message: pushed message length %u on "
"deferred_open_queue\n", (unsigned int)msg_len));
@@ -652,22 +654,23 @@ static bool push_queued_message(struct smb_request *req,
Function to delete a sharing violation open message by mid.
****************************************************************************/
-void remove_deferred_open_message_smb(uint64_t mid)
+void remove_deferred_open_message_smb(struct smbd_server_connection *sconn,
+ uint64_t mid)
{
struct pending_message_list *pml;
- if (smbd_server_conn->using_smb2) {
- remove_deferred_open_message_smb2(smbd_server_conn, mid);
+ if (sconn->using_smb2) {
+ remove_deferred_open_message_smb2(sconn, mid);
return;
}
- for (pml = deferred_open_queue; pml; pml = pml->next) {
+ for (pml = sconn->deferred_open_queue; pml; pml = pml->next) {
if (mid == (uint64_t)SVAL(pml->buf.data,smb_mid)) {
DEBUG(10,("remove_deferred_open_message_smb: "
"deleting mid %llu len %u\n",
(unsigned long long)mid,
(unsigned int)pml->buf.length ));
- DLIST_REMOVE(deferred_open_queue, pml);
+ DLIST_REMOVE(sconn->deferred_open_queue, pml);
TALLOC_FREE(pml);
return;
}
@@ -679,17 +682,18 @@ void remove_deferred_open_message_smb(uint64_t mid)
schedule it for immediate processing.
****************************************************************************/
-void schedule_deferred_open_message_smb(uint64_t mid)
+void schedule_deferred_open_message_smb(struct smbd_server_connection *sconn,
+ uint64_t mid)
{
struct pending_message_list *pml;
int i = 0;
- if (smbd_server_conn->using_smb2) {
- schedule_deferred_open_message_smb2(smbd_server_conn, mid);
+ if (sconn->using_smb2) {
+ schedule_deferred_open_message_smb2(sconn, mid);
return;
}
- for (pml = deferred_open_queue; pml; pml = pml->next) {
+ for (pml = sconn->deferred_open_queue; pml; pml = pml->next) {
uint64_t msg_mid = (uint64_t)SVAL(pml->buf.data,smb_mid);
DEBUG(10,("schedule_deferred_open_message_smb: [%d] "
@@ -727,7 +731,7 @@ void schedule_deferred_open_message_smb(uint64_t mid)
TALLOC_FREE(pml->te);
pml->te = te;
- DLIST_PROMOTE(deferred_open_queue, pml);
+ DLIST_PROMOTE(sconn->deferred_open_queue, pml);
return;
}
}
@@ -741,15 +745,15 @@ void schedule_deferred_open_message_smb(uint64_t mid)
Return true if this mid is on the deferred queue and was not yet processed.
****************************************************************************/
-bool open_was_deferred(uint64_t mid)
+bool open_was_deferred(struct smbd_server_connection *sconn, uint64_t mid)
{
struct pending_message_list *pml;
- if (smbd_server_conn->using_smb2) {
- return open_was_deferred_smb2(smbd_server_conn, mid);
+ if (sconn->using_smb2) {
+ return open_was_deferred_smb2(sconn, mid);
}
- for (pml = deferred_open_queue; pml; pml = pml->next) {
+ for (pml = sconn->deferred_open_queue; pml; pml = pml->next) {
if (((uint64_t)SVAL(pml->buf.data,smb_mid)) == mid && !pml->processed) {
return True;
}
@@ -761,11 +765,12 @@ bool open_was_deferred(uint64_t mid)
Return the message queued by this mid.
****************************************************************************/
-static struct pending_message_list *get_deferred_open_message_smb(uint64_t mid)
+static struct pending_message_list *get_deferred_open_message_smb(
+ struct smbd_server_connection *sconn, uint64_t mid)
{
struct pending_message_list *pml;
- for (pml = deferred_open_queue; pml; pml = pml->next) {
+ for (pml = sconn->deferred_open_queue; pml; pml = pml->next) {
if (((uint64_t)SVAL(pml->buf.data,smb_mid)) == mid) {
return pml;
}
@@ -789,7 +794,7 @@ bool get_deferred_open_message_state(struct smb_request *smbreq,
pp_state);
}
- pml = get_deferred_open_message_smb(smbreq->mid);
+ pml = get_deferred_open_message_smb(smbreq->sconn, smbreq->mid);
if (!pml) {
return false;
}
diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h
index 2b24f70..49fc8c7 100644
--- a/source3/smbd/proto.h
+++ b/source3/smbd/proto.h
@@ -771,9 +771,11 @@ int srv_set_message(char *buf,
int num_words,
int num_bytes,
bool zero);
-void remove_deferred_open_message_smb(uint64_t mid);
-void schedule_deferred_open_message_smb(uint64_t mid);
-bool open_was_deferred(uint64_t mid);
+void remove_deferred_open_message_smb(struct smbd_server_connection *sconn,
+ uint64_t mid);
+void schedule_deferred_open_message_smb(struct smbd_server_connection *sconn,
+ uint64_t mid);
+bool open_was_deferred(struct smbd_server_connection *sconn, uint64_t mid);
bool get_deferred_open_message_state(struct smb_request *smbreq,
struct timeval *p_request_time,
void **pp_state);
diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c
index 59ec8f2..2bc80f4 100644
--- a/source3/smbd/reply.c
+++ b/source3/smbd/reply.c
@@ -1816,7 +1816,7 @@ void reply_open(struct smb_request *req)
&info); /* pinfo */
if (!NT_STATUS_IS_OK(status)) {
- if (open_was_deferred(req->mid)) {
+ if (open_was_deferred(req->sconn, req->mid)) {
/* We have re-scheduled this call. */
goto out;
}
@@ -1993,7 +1993,7 @@ void reply_open_and_X(struct smb_request *req)
&smb_action); /* pinfo */
if (!NT_STATUS_IS_OK(status)) {
- if (open_was_deferred(req->mid)) {
+ if (open_was_deferred(req->sconn, req->mid)) {
/* We have re-scheduled this call. */
goto out;
}
@@ -2215,7 +2215,7 @@ void reply_mknew(struct smb_request *req)
NULL); /* pinfo */
if (!NT_STATUS_IS_OK(status)) {
- if (open_was_deferred(req->mid)) {
+ if (open_was_deferred(req->sconn, req->mid)) {
/* We have re-scheduled this call. */
goto out;
}
@@ -2347,7 +2347,7 @@ void reply_ctemp(struct smb_request *req)
close(tmpfd);
if (!NT_STATUS_IS_OK(status)) {
- if (open_was_deferred(req->mid)) {
+ if (open_was_deferred(req->sconn, req->mid)) {
/* We have re-scheduled this call. */
goto out;
}
@@ -2822,7 +2822,7 @@ void reply_unlink(struct smb_request *req)
status = unlink_internals(conn, req, dirtype, smb_fname,
path_contains_wcard);
if (!NT_STATUS_IS_OK(status)) {
- if (open_was_deferred(req->mid)) {
+ if (open_was_deferred(req->sconn, req->mid)) {
/* We have re-scheduled this call. */
goto out;
}
@@ -5663,7 +5663,7 @@ void reply_rmdir(struct smb_request *req)
&info); /* pinfo */
if (!NT_STATUS_IS_OK(status)) {
- if (open_was_deferred(req->mid)) {
+ if (open_was_deferred(req->sconn, req->mid)) {
/* We have re-scheduled this call. */
goto out;
}
@@ -6678,7 +6678,7 @@ void reply_mv(struct smb_request *req)
attrs, False, src_has_wcard, dest_has_wcard,
DELETE_ACCESS);
if (!NT_STATUS_IS_OK(status)) {
- if (open_was_deferred(req->mid)) {
+ if (open_was_deferred(req->sconn, req->mid)) {
/* We have re-scheduled this call. */
goto out;
}
diff --git a/source3/smbd/smb2_create.c b/source3/smbd/smb2_create.c
index 7c6b4bc..aaa461c 100644
--- a/source3/smbd/smb2_create.c
+++ b/source3/smbd/smb2_create.c
@@ -719,7 +719,7 @@ static struct tevent_req *smbd_smb2_create_send(TALLOC_CTX *mem_ctx,
&result,
&info);
if (!NT_STATUS_IS_OK(status)) {
- if (open_was_deferred(smb1req->mid)) {
+ if (open_was_deferred(smb1req->sconn, smb1req->mid)) {
return req;
}
tevent_req_nterror(req, status);
diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c
--
Samba Shared Repository
More information about the samba-cvs
mailing list