From 508d0310e7ce990deaba890e5e64eee7f0b4abbb Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 22 May 2008 16:20:25 -0700 Subject: Revert "Arggh. Got the path/user the wrong way around. IDL is correct :-)." This reverts commit 1078b5c53ae9d6f9532eecebf9cf4a1712200b7e. This message doesn't match the actual change. (This used to be commit a65abb49cf8d291c7deb659912c0df34ec37da02) --- source3/rpc_server/srv_srvsvc_nt.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) (limited to 'source3/rpc_server/srv_srvsvc_nt.c') diff --git a/source3/rpc_server/srv_srvsvc_nt.c b/source3/rpc_server/srv_srvsvc_nt.c index 9ffe9a569f..ebbc39c304 100644 --- a/source3/rpc_server/srv_srvsvc_nt.c +++ b/source3/rpc_server/srv_srvsvc_nt.c @@ -32,6 +32,19 @@ extern const struct generic_mapping file_generic_mapping; #define MAX_SERVER_DISK_ENTRIES 15 +/***************************/ + +/* oops - this is going to take up a *massive* amount of stack. */ +/* the UNISTR2s already have 1024 uint16 chars in them... */ + +#define MAX_SESS_ENTRIES 32 + +/***************************/ + +/* oops - this is going to take up a *massive* amount of stack. */ +/* the UNISTR2s already have 1024 uint16 chars in them... */ +#define MAX_CONN_ENTRIES 32 + /* Use for enumerating connections, pipes, & files */ struct file_enum_count { @@ -89,7 +102,7 @@ static int pipe_enum_fn( struct db_record *rec, void *p) fenum->ctr3->array = f; init_srvsvc_NetFileInfo3(&fenum->ctr3->array[i], - (((uint32_t)(procid_to_pid(&prec.pid))<<16) | prec.pnum), + (uint32_t)((procid_to_pid(&prec.pid)<<16) & prec.pnum), (FILE_READ_DATA|FILE_WRITE_DATA), 0, fullpath, @@ -191,7 +204,7 @@ static void enum_file_fn( const struct share_mode_entry *e, /* now fill in the srvsvc_NetFileInfo3 struct */ init_srvsvc_NetFileInfo3(&fenum->ctr3->array[i], - (((uint32_t)(procid_to_pid(&e->pid))<<16) | e->share_file_id), + e->share_file_id, permissions, num_locks, fullpath, @@ -735,7 +748,7 @@ static WERROR init_srv_sess_info_0(pipes_struct *p, return WERR_OK; } - for (; resume_handle < *total_entries; resume_handle++) { + for (; resume_handle < *total_entries && num_entries < MAX_SESS_ENTRIES; resume_handle++) { ctr0->array = TALLOC_REALLOC_ARRAY(p->mem_ctx, ctr0->array, @@ -818,7 +831,7 @@ static WERROR init_srv_sess_info_1(pipes_struct *p, *total_entries = list_sessions(p->mem_ctx, &session_list); - for (; resume_handle < *total_entries; resume_handle++) { + for (; resume_handle < *total_entries && num_entries < MAX_SESS_ENTRIES; resume_handle++) { uint32 num_files; uint32 connect_time; struct passwd *pw = sys_getpwnam(session_list[resume_handle].username); @@ -887,7 +900,7 @@ static WERROR init_srv_conn_info_0(struct srvsvc_NetConnCtr0 *ctr0, ZERO_STRUCTP(ctr0); - for (; resume_handle < *total_entries; resume_handle++) { + for (; resume_handle < *total_entries && num_entries < MAX_CONN_ENTRIES; resume_handle++) { ctr0->array = TALLOC_REALLOC_ARRAY(talloc_tos(), ctr0->array, @@ -942,7 +955,7 @@ static WERROR init_srv_conn_info_1(struct srvsvc_NetConnCtr1 *ctr1, ZERO_STRUCTP(ctr1); - for (; resume_handle < *total_entries; resume_handle++) { + for (; (resume_handle < *total_entries) && num_entries < MAX_CONN_ENTRIES; resume_handle++) { ctr1->array = TALLOC_REALLOC_ARRAY(talloc_tos(), ctr1->array, -- cgit