[SCM] Samba Shared Repository - branch v3-3-test updated -
release-3-2-0pre2-3421-ge11b5cb
Volker Lendecke
vlendec at samba.org
Sat Jul 26 11:21:54 GMT 2008
The branch, v3-3-test has been updated
via e11b5cb1e061caf4c3793fb402ca6bee95a8f26c (commit)
via 10b47a0c2cfd62489428518112da82f73a52b7bc (commit)
via defcf0eecfb8eb035d9ca80530720b9e6873f6c7 (commit)
from 1dab45b16a23b1126fbf29890747a2b256f08968 (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-3-test
- Log -----------------------------------------------------------------
commit e11b5cb1e061caf4c3793fb402ca6bee95a8f26c
Author: Volker Lendecke <vl at samba.org>
Date: Sat Jul 12 12:56:00 2008 +0200
make read/write to internal pipes available externally
commit 10b47a0c2cfd62489428518112da82f73a52b7bc
Author: Volker Lendecke <vl at samba.org>
Date: Sat Jul 12 12:25:42 2008 +0200
Refactoring: Make close_internal_rpc_pipe_hnd a talloc destructor
commit defcf0eecfb8eb035d9ca80530720b9e6873f6c7
Author: Volker Lendecke <vl at samba.org>
Date: Sat Jul 12 12:20:08 2008 +0200
Refactor make_internal_rpc_pipe_p: connection_struct is not needed
-----------------------------------------------------------------------
Summary of changes:
source/include/ntdomain.h | 30 ++++++++-------------
source/include/proto.h | 7 +++++
source/rpc_server/srv_pipe_hnd.c | 53 +++++++++++++------------------------
3 files changed, 37 insertions(+), 53 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source/include/ntdomain.h b/source/include/ntdomain.h
index 23bbe9a..de0a313 100644
--- a/source/include/ntdomain.h
+++ b/source/include/ntdomain.h
@@ -303,10 +303,8 @@ typedef struct smb_np_struct {
/*
* NamedPipe state information.
- *
- * (e.g. typecast a np_struct, above).
*/
- void *np_state;
+ struct pipes_struct *np_state;
/*
* NamedPipe functions, to be called to perform
@@ -318,13 +316,16 @@ typedef struct smb_np_struct {
* returns: state information representing the connection.
* is stored in np_state, above.
*/
- void * (*namedpipe_create)(const char *pipe_name,
- connection_struct *conn, uint16 vuid);
+ struct pipes_struct *(*namedpipe_create)(
+ const char *pipe_name,
+ const char *client_address,
+ struct auth_serversupplied_info *server_info,
+ uint16_t vuid);
/* call to perform a write namedpipe operation
*/
- ssize_t (*namedpipe_write)(void * np_state,
- char *data, size_t n);
+ ssize_t (*namedpipe_write)(struct pipes_struct *p,
+ char *data, size_t n);
/* call to perform a read namedpipe operation.
*
@@ -337,18 +338,9 @@ typedef struct smb_np_struct {
* when samba is modified to use namedpipe_transact,
* the pipe_outstanding argument may be removed.
*/
- ssize_t (*namedpipe_read)(void * np_state,
- char *data, size_t max_len,
- bool *pipe_outstanding);
-
- /* call to close a namedpipe.
- * function is expected to perform all cleanups
- * necessary, free all memory etc.
- *
- * returns True if cleanup was successful (not that
- * we particularly care).
- */
- bool (*namedpipe_close)(void * np_state);
+ ssize_t (*namedpipe_read)(struct pipes_struct *p,
+ char *data, size_t max_len,
+ bool *pipe_outstanding);
} smb_np_struct;
diff --git a/source/include/proto.h b/source/include/proto.h
index 47986ee..d1d2c90 100644
--- a/source/include/proto.h
+++ b/source/include/proto.h
@@ -8845,6 +8845,13 @@ bool close_rpc_pipe_hnd(smb_np_struct *p);
void pipe_close_conn(connection_struct *conn);
smb_np_struct *get_rpc_pipe_p(uint16 pnum);
smb_np_struct *get_rpc_pipe(int pnum);
+struct pipes_struct *make_internal_rpc_pipe_p(const char *pipe_name,
+ const char *client_address,
+ struct auth_serversupplied_info *server_info,
+ uint16_t vuid);
+ssize_t read_from_internal_pipe(struct pipes_struct *p, char *data, size_t n,
+ bool *is_data_outstanding);
+ssize_t write_to_internal_pipe(struct pipes_struct *p, char *data, size_t n);
/* The following definitions come from rpc_server/srv_samr_nt.c */
diff --git a/source/rpc_server/srv_pipe_hnd.c b/source/rpc_server/srv_pipe_hnd.c
index c0b525c..bc6d180 100644
--- a/source/rpc_server/srv_pipe_hnd.c
+++ b/source/rpc_server/srv_pipe_hnd.c
@@ -61,12 +61,7 @@ static struct bitmap *bmap;
* system _anyway_. so that's the next step...
*/
-static ssize_t read_from_internal_pipe(void *np_conn, char *data, size_t n,
- bool *is_data_outstanding);
-static ssize_t write_to_internal_pipe(void *np_conn, char *data, size_t n);
-static bool close_internal_rpc_pipe_hnd(void *np_conn);
-static void *make_internal_rpc_pipe_p(const char *pipe_name,
- connection_struct *conn, uint16 vuid);
+static int close_internal_rpc_pipe_hnd(struct pipes_struct *pipe);
/****************************************************************************
Internal Pipe iterator functions.
@@ -215,9 +210,9 @@ smb_np_struct *open_rpc_pipe_p(const char *pipe_name,
p->namedpipe_create = make_internal_rpc_pipe_p;
p->namedpipe_read = read_from_internal_pipe;
p->namedpipe_write = write_to_internal_pipe;
- p->namedpipe_close = close_internal_rpc_pipe_hnd;
- p->np_state = p->namedpipe_create(pipe_name, conn, vuid);
+ p->np_state = p->namedpipe_create(pipe_name, conn->client_address,
+ conn->server_info, vuid);
if (p->np_state == NULL) {
DEBUG(0,("open_rpc_pipe_p: make_internal_rpc_pipe_p failed.\n"));
@@ -266,19 +261,15 @@ smb_np_struct *open_rpc_pipe_p(const char *pipe_name,
Make an internal namedpipes structure
****************************************************************************/
-static void *make_internal_rpc_pipe_p(const char *pipe_name,
- connection_struct *conn, uint16 vuid)
+struct pipes_struct *make_internal_rpc_pipe_p(const char *pipe_name,
+ const char *client_address,
+ struct auth_serversupplied_info *server_info,
+ uint16_t vuid)
{
pipes_struct *p;
- user_struct *vuser = get_valid_user_struct(vuid);
DEBUG(4,("Create pipe requested %s\n", pipe_name));
- if (!vuser && vuid != UID_FIELD_INVALID) {
- DEBUG(0,("ERROR! vuid %d did not map to a valid vuser struct!\n", vuid));
- return NULL;
- }
-
p = TALLOC_ZERO_P(NULL, pipes_struct);
if (!p) {
@@ -314,7 +305,7 @@ static void *make_internal_rpc_pipe_p(const char *pipe_name,
return NULL;
}
- p->server_info = copy_serverinfo(p, conn->server_info);
+ p->server_info = copy_serverinfo(p, server_info);
if (p->server_info == NULL) {
DEBUG(0, ("open_rpc_pipe_p: copy_serverinfo failed\n"));
talloc_destroy(p->mem_ctx);
@@ -325,21 +316,16 @@ static void *make_internal_rpc_pipe_p(const char *pipe_name,
DLIST_ADD(InternalPipes, p);
- memcpy(p->client_address, conn->client_address,
- sizeof(p->client_address));
+ memcpy(p->client_address, client_address, sizeof(p->client_address));
p->endian = RPC_LITTLE_ENDIAN;
ZERO_STRUCT(p->pipe_user);
+ p->pipe_user.vuid = vuid;
p->pipe_user.ut.uid = (uid_t)-1;
p->pipe_user.ut.gid = (gid_t)-1;
-
- /* Store the session key and NT_TOKEN */
- if (vuser) {
- p->pipe_user.nt_user_token = dup_nt_token(
- NULL, vuser->server_info->ptok);
- }
+ p->pipe_user.nt_user_token = dup_nt_token(NULL, server_info->ptok);
/*
* Initialize the outgoing RPC data buffer with no memory.
@@ -351,7 +337,9 @@ static void *make_internal_rpc_pipe_p(const char *pipe_name,
DEBUG(4,("Created internal pipe %s (pipes_open=%d)\n",
pipe_name, pipes_open));
- return (void*)p;
+ talloc_set_destructor(p, close_internal_rpc_pipe_hnd);
+
+ return p;
}
/****************************************************************************
@@ -934,9 +922,8 @@ ssize_t write_to_pipe(smb_np_struct *p, char *data, size_t n)
Accepts incoming data on an internal rpc pipe.
****************************************************************************/
-static ssize_t write_to_internal_pipe(void *np_conn, char *data, size_t n)
+ssize_t write_to_internal_pipe(struct pipes_struct *p, char *data, size_t n)
{
- pipes_struct *p = (pipes_struct*)np_conn;
size_t data_left = n;
while(data_left) {
@@ -994,10 +981,9 @@ ssize_t read_from_pipe(smb_np_struct *p, char *data, size_t n,
have been prepared into arrays of headers + data stream sections.
****************************************************************************/
-static ssize_t read_from_internal_pipe(void *np_conn, char *data, size_t n,
- bool *is_data_outstanding)
+ssize_t read_from_internal_pipe(struct pipes_struct *p, char *data, size_t n,
+ bool *is_data_outstanding)
{
- pipes_struct *p = (pipes_struct*)np_conn;
uint32 pdu_remaining = 0;
ssize_t data_returned = 0;
@@ -1146,7 +1132,7 @@ bool close_rpc_pipe_hnd(smb_np_struct *p)
return False;
}
- p->namedpipe_close(p->np_state);
+ TALLOC_FREE(p->np_state);
bitmap_clear(bmap, p->pnum - pipe_handle_offset);
@@ -1189,9 +1175,8 @@ void pipe_close_conn(connection_struct *conn)
Close an rpc pipe.
****************************************************************************/
-static bool close_internal_rpc_pipe_hnd(void *np_conn)
+static int close_internal_rpc_pipe_hnd(struct pipes_struct *p)
{
- pipes_struct *p = (pipes_struct *)np_conn;
if (!p) {
DEBUG(0,("Invalid pipe in close_internal_rpc_pipe_hnd\n"));
return False;
--
Samba Shared Repository
More information about the samba-cvs
mailing list