[SCM] Samba Shared Repository - branch master updated -
f3e638bc9fad7d3a54a9b41de8857c126c656f5c
Volker Lendecke
vlendec at samba.org
Sun Nov 2 20:57:44 GMT 2008
The branch, master has been updated
via f3e638bc9fad7d3a54a9b41de8857c126c656f5c (commit)
via c2a280ac630a41221cff6e72ceda8661c3b78d83 (commit)
from 77f52d903fbb49972e2a13bc198851db2c57937c (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit f3e638bc9fad7d3a54a9b41de8857c126c656f5c
Author: Volker Lendecke <vl at samba.org>
Date: Sun Nov 2 21:52:16 2008 +0100
Make a [un]become_root wrap a bit tighter
Sooner or later this would bite us.
commit c2a280ac630a41221cff6e72ceda8661c3b78d83
Author: Volker Lendecke <vl at samba.org>
Date: Sun Nov 2 21:24:28 2008 +0100
Pass smb_request to send_trans_reply to match with send_[nt]trans[2]_reply
-----------------------------------------------------------------------
Summary of changes:
source3/include/proto.h | 2 +-
source3/smbd/aio.c | 18 +++++++++++-------
source3/smbd/ipc.c | 18 +++++++++---------
source3/smbd/lanman.c | 2 +-
4 files changed, 22 insertions(+), 18 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 441ab2c..5ca5c77 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -7869,7 +7869,7 @@ NTSTATUS dup_file_fsp(struct smb_request *req, files_struct *fsp,
/* The following definitions come from smbd/ipc.c */
void send_trans_reply(connection_struct *conn,
- const uint8_t *inbuf,
+ struct smb_request *req,
char *rparam, int rparam_len,
char *rdata, int rdata_len,
bool buffer_too_large);
diff --git a/source3/smbd/aio.c b/source3/smbd/aio.c
index aca7a19..4ed574c 100644
--- a/source3/smbd/aio.c
+++ b/source3/smbd/aio.c
@@ -221,6 +221,7 @@ bool schedule_aio_read_and_X(connection_struct *conn,
SMB_STRUCT_AIOCB *a;
size_t bufsize;
size_t min_aio_read_size = lp_aio_read_size(SNUM(conn));
+ int ret;
if (fsp->base_fsp != NULL) {
/* No AIO on streams yet */
@@ -279,14 +280,15 @@ bool schedule_aio_read_and_X(connection_struct *conn,
a->aio_sigevent.sigev_value.sival_int = aio_ex->mid;
become_root();
- if (SMB_VFS_AIO_READ(fsp,a) == -1) {
+ ret = SMB_VFS_AIO_READ(fsp, a);
+ unbecome_root();
+
+ if (ret == -1) {
DEBUG(0,("schedule_aio_read_and_X: aio_read failed. "
"Error %s\n", strerror(errno) ));
delete_aio_ex(aio_ex);
- unbecome_root();
return False;
}
- unbecome_root();
DEBUG(10,("schedule_aio_read_and_X: scheduled aio_read for file %s, "
"offset %.0f, len = %u (mid = %u)\n",
@@ -313,6 +315,7 @@ bool schedule_aio_write_and_X(connection_struct *conn,
size_t inbufsize, outbufsize;
bool write_through = BITSETW(req->vwv+7,0);
size_t min_aio_write_size = lp_aio_write_size(SNUM(conn));
+ int ret;
if (fsp->base_fsp != NULL) {
/* No AIO on streams yet */
@@ -380,15 +383,16 @@ bool schedule_aio_write_and_X(connection_struct *conn,
a->aio_sigevent.sigev_value.sival_int = aio_ex->mid;
become_root();
- if (SMB_VFS_AIO_WRITE(fsp,a) == -1) {
+ ret = SMB_VFS_AIO_WRITE(fsp, a);
+ unbecome_root();
+
+ if (ret == -1) {
DEBUG(3,("schedule_aio_wrote_and_X: aio_write failed. "
"Error %s\n", strerror(errno) ));
delete_aio_ex(aio_ex);
- unbecome_root();
return False;
}
- unbecome_root();
-
+
release_level_2_oplocks_on_change(fsp);
if (!write_through && !lp_syncalways(SNUM(fsp->conn))
diff --git a/source3/smbd/ipc.c b/source3/smbd/ipc.c
index 3d70e7a..b9460e5 100644
--- a/source3/smbd/ipc.c
+++ b/source3/smbd/ipc.c
@@ -81,7 +81,8 @@ static void copy_trans_params_and_data(char *outbuf, int align,
Send a trans reply.
****************************************************************************/
-void send_trans_reply(connection_struct *conn, const uint8_t *inbuf,
+void send_trans_reply(connection_struct *conn,
+ struct smb_request *req,
char *rparam, int rparam_len,
char *rdata, int rdata_len,
bool buffer_too_large)
@@ -103,7 +104,7 @@ void send_trans_reply(connection_struct *conn, const uint8_t *inbuf,
align = ((this_lparam)%4);
- if (!create_outbuf(talloc_tos(), (char *)inbuf, &outbuf,
+ if (!create_outbuf(talloc_tos(), (char *)req->inbuf, &outbuf,
10, 1+align+this_ldata+this_lparam)) {
smb_panic("could not allocate outbuf");
}
@@ -154,7 +155,7 @@ void send_trans_reply(connection_struct *conn, const uint8_t *inbuf,
align = (this_lparam%4);
- if (!create_outbuf(talloc_tos(), (char *)inbuf, &outbuf,
+ if (!create_outbuf(talloc_tos(), (char *)req->inbuf, &outbuf,
10, 1+align+this_ldata+this_lparam)) {
smb_panic("could not allocate outbuf");
}
@@ -218,7 +219,7 @@ static void api_rpc_trans_reply(connection_struct *conn,
return;
}
- send_trans_reply(conn, req->inbuf, NULL, 0, (char *)rdata, data_len,
+ send_trans_reply(conn, req, NULL, 0, (char *)rdata, data_len,
is_data_outstanding);
SAFE_FREE(rdata);
return;
@@ -239,7 +240,7 @@ static void api_WNPHS(connection_struct *conn, struct smb_request *req,
DEBUG(4,("WaitNamedPipeHandleState priority %x\n",
(int)SVAL(param,0)));
- send_trans_reply(conn, req->inbuf, NULL, 0, NULL, 0, False);
+ send_trans_reply(conn, req, NULL, 0, NULL, 0, False);
}
@@ -257,7 +258,7 @@ static void api_SNPHS(connection_struct *conn, struct smb_request *req,
DEBUG(4,("SetNamedPipeHandleState to code %x\n", (int)SVAL(param,0)));
- send_trans_reply(conn, req->inbuf, NULL, 0, NULL, 0, False);
+ send_trans_reply(conn, req, NULL, 0, NULL, 0, False);
}
@@ -276,7 +277,7 @@ static void api_no_reply(connection_struct *conn, struct smb_request *req)
DEBUG(3,("Unsupported API fd command\n"));
/* now send the reply */
- send_trans_reply(conn, req->inbuf, rparam, 4, NULL, 0, False);
+ send_trans_reply(conn, req, rparam, 4, NULL, 0, False);
return;
}
@@ -320,8 +321,7 @@ static void api_fd_reply(connection_struct *conn, uint16 vuid,
/* Win9x does this call with a unicode pipe name, not a pnum. */
/* Just return success for now... */
DEBUG(3,("Got TRANSACT_WAITNAMEDPIPEHANDLESTATE on text pipe name\n"));
- send_trans_reply(conn, req->inbuf, NULL, 0, NULL, 0,
- False);
+ send_trans_reply(conn, req, NULL, 0, NULL, 0, False);
return;
}
diff --git a/source3/smbd/lanman.c b/source3/smbd/lanman.c
index 0c866da..6ed3ce2 100644
--- a/source3/smbd/lanman.c
+++ b/source3/smbd/lanman.c
@@ -4632,7 +4632,7 @@ void api_reply(connection_struct *conn, uint16 vuid,
/* If api_Unsupported returns false we can't return anything. */
if (reply) {
- send_trans_reply(conn, req->inbuf, rparam, rparam_len,
+ send_trans_reply(conn, req, rparam, rparam_len,
rdata, rdata_len, False);
}
--
Samba Shared Repository
More information about the samba-cvs
mailing list