diff options
Diffstat (limited to 'source')
34 files changed, 399 insertions, 330 deletions
diff --git a/source/browserd/browserd.c b/source/browserd/browserd.c index dde62721ead..d5e60f21bc8 100644 --- a/source/browserd/browserd.c +++ b/source/browserd/browserd.c @@ -30,8 +30,9 @@ extern BOOL append_log; /************************************************************************* initialise an msrpc service *************************************************************************/ -void msrpc_service_init(void) +void msrpc_service_init(char* service_name) { + add_msrpc_command_processor( pipe_name, service_name, api_brs_rpc ); } /**************************************************************************** @@ -91,7 +92,6 @@ BOOL reload_services(BOOL test) setup_logging(argv[0],False); fstrcpy(pipe_name, "browser"); slprintf(debugf, sizeof(debugf), "%s/log.%s", LOGFILEBASE, pipe_name); - add_msrpc_command_processor( pipe_name, argv[0], api_brs_rpc ); return msrpc_main(argc, argv); } diff --git a/source/include/ntdomain.h b/source/include/ntdomain.h index e27f3cc68d8..1548e98ee15 100644 --- a/source/include/ntdomain.h +++ b/source/include/ntdomain.h @@ -52,13 +52,25 @@ * in the NTDOM branch - it didn't belong there. */ +#define CHECK_STRUCT(data) \ +{ \ + if ((data)->struct_start != 0xfefefefe || \ + (data)->struct_end != 0xdcdcdcdc) \ + { \ + DEBUG(0,("uninitialised structure (%s, %d)\n", \ + __FUNCTION__, __LINE__)); \ + } \ +} + typedef struct { + uint32 struct_start; struct mem_buf *data; /* memory buffer */ uint32 offset; /* offset currently being accessed in memory buffer */ uint8 align; /* data alignment */ BOOL io; /* parsing in or out of data stream */ BOOL error; /* error occurred */ + uint32 struct_end; } prs_struct; @@ -152,6 +164,7 @@ struct mem_desc struct mem_buf { + uint32 struct_start; BOOL dynamic; /* True iff data has been dynamically allocated (and therefore can be freed) */ char *data; @@ -165,6 +178,7 @@ struct mem_buf struct mem_desc offset; struct mem_buf *next; + uint32 struct_end; }; struct acct_info diff --git a/source/include/proto.h b/source/include/proto.h index 47d8b1b7fa4..a7372f4e397 100644 --- a/source/include/proto.h +++ b/source/include/proto.h @@ -5,7 +5,7 @@ /*The following definitions come from browserd/browserd.c */ -void msrpc_service_init(void); +void msrpc_service_init(char* service_name); BOOL reload_services(BOOL test); /*The following definitions come from client/client.c */ @@ -283,7 +283,7 @@ void mem_free_data(struct mem_buf *buf); BOOL mem_realloc_data(struct mem_buf *buf, size_t new_size); BOOL mem_grow_data(struct mem_buf **buf, BOOL io, int new_size, BOOL force_grow); uint32 mem_buf_len(struct mem_buf *buf); -char *mem_data(struct mem_buf **buf, uint32 offset); +char *mem_data(struct mem_buf *buf, uint32 offset); /*The following definitions come from lib/msrpc-agent.c */ @@ -1044,7 +1044,7 @@ struct shmem_ops *sysv_shm_open(int ronly); /*The following definitions come from lsarpcd/lsarpcd.c */ -void msrpc_service_init(void); +void msrpc_service_init(char* service_name); BOOL reload_services(BOOL test); /*The following definitions come from lsarpcd/srv_lsa.c */ @@ -1054,7 +1054,7 @@ BOOL api_ntlsa_rpc(rpcsrv_struct *p, prs_struct *data); /*The following definitions come from mem_man/mem_man.c */ void *smb_mem_malloc(size_t size,char *file,int line); -char *smb_mem_strdup(char *s, char *file, int line); +char *smb_mem_strdup(const char *s, char *file, int line); int smb_mem_free(void *ptr,char *file,int line); void smb_mem_write_info(void *ptr,FILE *outfile); size_t smb_mem_query_size(void *ptr); @@ -1081,7 +1081,7 @@ void msrpcd_process(int c, pipes_struct *p); /*The following definitions come from netlogond/netlogond.c */ -void msrpc_service_init(void); +void msrpc_service_init(char* service_name); BOOL reload_services(BOOL test); /*The following definitions come from nmbd/asyncdns.c */ @@ -4094,7 +4094,7 @@ void readline_init(void); /*The following definitions come from samrd/samrd.c */ -void msrpc_service_init(void); +void msrpc_service_init(char* service_name); BOOL reload_services(BOOL test); /*The following definitions come from smbd/blocking.c */ @@ -4581,17 +4581,17 @@ int smbw_stat(const char *fname, struct stat *st); /*The following definitions come from spoolssd/spoolssd.c */ -void msrpc_service_init(void); +void msrpc_service_init(char* service_name); BOOL reload_services(BOOL test); /*The following definitions come from srvsvcd/srvsvcd.c */ -void msrpc_service_init(void); +void msrpc_service_init(char* service_name); BOOL reload_services(BOOL test); /*The following definitions come from svcctld/svcctld.c */ -void msrpc_service_init(void); +void msrpc_service_init(char* service_name); BOOL reload_services(BOOL test); /*The following definitions come from utils/smbpasswd.c */ @@ -4633,11 +4633,11 @@ void status_page(void); /*The following definitions come from winregd/winregd.c */ -void msrpc_service_init(void); +void msrpc_service_init(char* service_name); BOOL reload_services(BOOL test); /*The following definitions come from wkssvcd/wkssvcd.c */ -void msrpc_service_init(void); +void msrpc_service_init(char* service_name); BOOL reload_services(BOOL test); #endif /* _PROTO_H_ */ diff --git a/source/include/rpcclient.h b/source/include/rpcclient.h index 63b8e83a555..11e7ff4a28b 100644 --- a/source/include/rpcclient.h +++ b/source/include/rpcclient.h @@ -77,7 +77,6 @@ struct client_info fstring dest_host; fstring myhostname; - fstring mach_acct; struct tar_client_info tar; struct nt_client_info dom; diff --git a/source/lib/domain_namemap.c b/source/lib/domain_namemap.c index 9c947832395..78a2a8a61be 100644 --- a/source/lib/domain_namemap.c +++ b/source/lib/domain_namemap.c @@ -882,8 +882,7 @@ static BOOL lookup_remote_ntname(const char *ntname, DOM_SID *sid, uint8 *type) struct cli_state cli; POLICY_HND lsa_pol; fstring srv_name; - extern struct ntuser_creds *usr_creds; - struct ntuser_creds usr; + extern struct user_creds *usr_creds; BOOL res3 = True; BOOL res4 = True; @@ -892,10 +891,7 @@ static BOOL lookup_remote_ntname(const char *ntname, DOM_SID *sid, uint8 *type) uint8 *types; char *names[1]; - usr_creds = &usr; - - ZERO_STRUCT(usr); - pwd_set_nullpwd(&usr.pwd); + usr_creds = NULL; DEBUG(5,("lookup_remote_ntname: %s\n", ntname)); diff --git a/source/lib/membuffer.c b/source/lib/membuffer.c index e228503643f..fc4a88aeadf 100644 --- a/source/lib/membuffer.c +++ b/source/lib/membuffer.c @@ -60,6 +60,7 @@ extern int DEBUGLEVEL; ********************************************************************/ void mem_init(struct mem_buf *buf, int margin) { + buf->struct_start = 0xfefefefe; buf->dynamic = True; buf->data = NULL; buf->data_size = 0; @@ -71,6 +72,8 @@ void mem_init(struct mem_buf *buf, int margin) buf->offset.start = 0; buf->offset.end = 0x0; + buf->struct_end = 0xdcdcdcdc; + CHECK_STRUCT(buf); } /******************************************************************* @@ -81,6 +84,7 @@ void mem_init(struct mem_buf *buf, int margin) ********************************************************************/ void mem_create(struct mem_buf *buf, char *data, int offset, int size, int margin, BOOL dynamic) { + buf->struct_start = 0xfefefefe; buf->dynamic = dynamic; buf->data = data; buf->data_size = size; @@ -92,6 +96,8 @@ void mem_create(struct mem_buf *buf, char *data, int offset, int size, int margi buf->offset.start = offset; buf->offset.end = offset + size; + buf->struct_end = 0xdcdcdcdc; + CHECK_STRUCT(buf); } /******************************************************************* @@ -99,6 +105,7 @@ void mem_create(struct mem_buf *buf, char *data, int offset, int size, int margi ********************************************************************/ BOOL mem_alloc_data(struct mem_buf *buf, int size) { + CHECK_STRUCT(buf); if (!buf->dynamic) { DEBUG(3,("mem_alloc_data: warning - memory buffer type is set to static\n")); @@ -121,10 +128,42 @@ BOOL mem_alloc_data(struct mem_buf *buf, int size) bzero(buf->data, buf->data_size); buf->offset.end = buf->offset.start + size; + CHECK_STRUCT(buf); return True; } /******************************************************************* + search for a memory buffer that falls within the specified offset + ********************************************************************/ +static struct mem_buf *mem_find(struct mem_buf *buf, uint32 offset) +{ + struct mem_buf *f; + if (buf == NULL) return False; + + f = buf; + + CHECK_STRUCT(f); + DEBUG(200,("mem_find: data[%d..%d] offset: %d\n", + f->offset.start, f->offset.end, offset)); + + while (f != NULL && offset >= f->offset.end) + { + DEBUG(200,("mem_find: next[%d..%d]\n", + f->offset.start, f->offset.end)); + + f = f->next; + } + + if (f != NULL) + { + DEBUG(200,("mem_find: found data[%d..%d]\n", + f->offset.start, f->offset.end)); + } + + return f; +} + +/******************************************************************* allocates a memory buffer structure ********************************************************************/ BOOL mem_buf_copy(char *copy_into, struct mem_buf *buf, @@ -134,20 +173,23 @@ BOOL mem_buf_copy(char *copy_into, struct mem_buf *buf, char *q = NULL; uint32 data_len = mem_buf_len(buf); uint32 start_offset = offset; - struct mem_buf **bcp = &buf; + struct mem_buf *bcp = buf; if (buf == NULL || copy_into == NULL) return False; + CHECK_STRUCT(buf); DEBUG(200,("mem_buf_copy: data[%d..%d] offset %d len %d\n", buf->offset.start, data_len, offset, len)); /* there's probably an off-by-one bug, here, and i haven't even tested the code :-) */ while (offset < end && ((q = mem_data(bcp, offset)) != NULL)) { - uint32 copy_len = (*bcp)->offset.end - offset; + uint32 copy_len; + bcp = mem_find(bcp, offset); + copy_len = bcp->offset.end - offset; DEBUG(200,("\tdata[%d..%d] - offset %d len %d\n", - (*bcp)->offset.start, (*bcp)->offset.end, + bcp->offset.start, bcp->offset.end, offset, copy_len)); memcpy(copy_into, q, copy_len); @@ -156,7 +198,7 @@ BOOL mem_buf_copy(char *copy_into, struct mem_buf *buf, copy_into += copy_len; } - if ((*bcp) != NULL) + if (bcp != NULL) { DEBUG(200,("mem_buf_copy: copied %d bytes\n", offset - start_offset)); } @@ -186,6 +228,7 @@ BOOL mem_buf_init(struct mem_buf **buf, uint32 margin) } else { + CHECK_STRUCT(*buf); (*buf)->margin = margin; return True; } @@ -200,6 +243,7 @@ void mem_buf_free(struct mem_buf **buf) if (buf == NULL) return; if ((*buf) == NULL) return; + CHECK_STRUCT(*buf); mem_free_data(*buf); /* delete memory data */ free(*buf); /* delete item */ (*buf) = NULL; @@ -213,6 +257,7 @@ static void mem_free_chain(struct mem_buf **buf) if (buf == NULL) return; if ((*buf) == NULL) return; + CHECK_STRUCT(*buf); if ((*buf)->next != NULL) { mem_free_chain(&((*buf)->next)); /* delete all other items in chain */ @@ -229,6 +274,7 @@ void mem_free_data(struct mem_buf *buf) if (buf->data != NULL && buf->dynamic) { + CHECK_STRUCT(buf); free(buf->data); /* delete data in this structure */ buf->data = NULL; } @@ -242,9 +288,11 @@ BOOL mem_realloc_data(struct mem_buf *buf, size_t new_size) { char *new_data; + CHECK_STRUCT(buf); if (!buf->dynamic) { DEBUG(3,("mem_realloc_data: memory buffer has not been dynamically allocated!\n")); + sleep(30); return False; } @@ -290,6 +338,13 @@ BOOL mem_realloc_data(struct mem_buf *buf, size_t new_size) ********************************************************************/ BOOL mem_grow_data(struct mem_buf **buf, BOOL io, int new_size, BOOL force_grow) { + if (buf == NULL || ((*buf) == NULL)) + { + return False; + } + + CHECK_STRUCT(*buf); + if (new_size + (*buf)->margin >= (*buf)->data_size) { if (!io || force_grow) @@ -304,38 +359,6 @@ BOOL mem_grow_data(struct mem_buf **buf, BOOL io, int new_size, BOOL force_grow) return True; } -/******************************************************************* - search for a memory buffer that falls within the specified offset - ********************************************************************/ -static BOOL mem_find(struct mem_buf **buf, uint32 offset) -{ - struct mem_buf *f; - if (buf == NULL) return False; - - f = *buf; - - DEBUG(200,("mem_find: data[%d..%d] offset: %d\n", - f->offset.start, f->offset.end, offset)); - - while (f != NULL && offset >= f->offset.end) - { - DEBUG(200,("mem_find: next[%d..%d]\n", - f->offset.start, f->offset.end)); - - f = f->next; - } - - (*buf) = f; - - if (f != NULL) - { - DEBUG(200,("mem_find: found data[%d..%d]\n", - (*buf)->offset.start,(*buf)->offset.end)); - } - - return f != NULL; -} - /******************************************************************* add up the lengths of all sections. @@ -343,6 +366,7 @@ static BOOL mem_find(struct mem_buf **buf, uint32 offset) uint32 mem_buf_len(struct mem_buf *buf) { int len = 0; + CHECK_STRUCT(buf); while (buf != NULL) { len += buf->offset.end - buf->offset.start; @@ -355,11 +379,13 @@ uint32 mem_buf_len(struct mem_buf *buf) /******************************************************************* return the memory location specified by offset. may return NULL. ********************************************************************/ -char *mem_data(struct mem_buf **buf, uint32 offset) +char *mem_data(struct mem_buf *buf, uint32 offset) { - if (mem_find(buf, offset)) + CHECK_STRUCT(buf); + buf = mem_find(buf, offset); + if (buf != NULL) { - return &((*buf)->data[offset - (*buf)->offset.start]); + return &(buf->data[offset - buf->offset.start]); } return NULL; } diff --git a/source/lib/msrpc-client.c b/source/lib/msrpc-client.c index 583aaafaf1b..1612bbe0d08 100644 --- a/source/lib/msrpc-client.c +++ b/source/lib/msrpc-client.c @@ -79,7 +79,7 @@ BOOL msrpc_receive_prs(struct msrpc_state *msrpc, prs_struct *ps) prs_init(ps, len, 4, 0, False); ps->offset = len; - data = mem_data(&ps->data, 0); + data = mem_data(ps->data, 0); if (data == NULL || len <= 0) { return False; @@ -192,7 +192,7 @@ static BOOL msrpc_authenticate(struct msrpc_state *msrpc, } len = ps.offset; - data = mem_data(&ps.data, 0); + data = mem_data(ps.data, 0); SIVAL(data, 0, len); diff --git a/source/lib/util_hnd.c b/source/lib/util_hnd.c index cf8377b0d0d..e631ce615ac 100644 --- a/source/lib/util_hnd.c +++ b/source/lib/util_hnd.c @@ -60,7 +60,7 @@ struct samr_info struct con_info { struct cli_connection *con; - void (*free)(struct cli_connection*); + void (*free_con)(struct cli_connection*); }; static struct policy @@ -445,8 +445,8 @@ BOOL set_policy_con(POLICY_HND *hnd, struct cli_connection *con, { return False; } - p->dev.con->con = con; - p->dev.con->free = free_fn; + p->dev.con->con = con; + p->dev.con->free_con = free_fn; return True; } @@ -519,9 +519,9 @@ BOOL close_policy_hnd(POLICY_HND *hnd) } case POL_CLI_INFO: { - if (p->dev.con->free != NULL) + if (p->dev.con->free_con != NULL) { - p->dev.con->free(p->dev.con->con); + p->dev.con->free_con(p->dev.con->con); } free(p->dev.con); break; diff --git a/source/libsmb/clientgen.c b/source/libsmb/clientgen.c index e8c581bbcb6..5ececc72614 100644 --- a/source/libsmb/clientgen.c +++ b/source/libsmb/clientgen.c @@ -3008,7 +3008,7 @@ static BOOL cli_init_redirect(struct cli_state *cli, } len = ps.offset; - data = mem_data(&ps.data, 0); + data = mem_data(ps.data, 0); #ifdef DEBUG_PASSWORD DEBUG(100,("data len: %d\n", len)); diff --git a/source/lsarpcd/lsarpcd.c b/source/lsarpcd/lsarpcd.c index 622660e0349..36505d1a34f 100644 --- a/source/lsarpcd/lsarpcd.c +++ b/source/lsarpcd/lsarpcd.c @@ -28,8 +28,10 @@ extern pstring debugf; extern BOOL append_log; extern int DEBUGLEVEL; -void msrpc_service_init(void) +void msrpc_service_init(char* service_name) { + add_msrpc_command_processor( pipe_name, service_name, api_ntlsa_rpc ); + if (!pwdb_initialise(True)) { exit(-1); @@ -100,7 +102,6 @@ BOOL reload_services(BOOL test) fstrcpy(pipe_name, "lsarpc"); setup_logging(argv[0],False); slprintf(debugf, sizeof(debugf), "%s/log.%s", LOGFILEBASE, pipe_name); - add_msrpc_command_processor( pipe_name, argv[0], api_ntlsa_rpc ); return msrpc_main(argc, argv); } diff --git a/source/lsarpcd/srv_lsa.c b/source/lsarpcd/srv_lsa.c index 5f8fca32dee..7a2ca4f22f2 100644 --- a/source/lsarpcd/srv_lsa.c +++ b/source/lsarpcd/srv_lsa.c @@ -651,7 +651,7 @@ static void api_lsa_open_secret( rpcsrv_struct *p, prs_struct *data, prs_struct *rdata) { /* XXXX this is NOT good */ - char *q = mem_data(&(rdata->data), rdata->offset); + char *q = mem_data(rdata->data, rdata->offset); SIVAL(q, 0, 0); q += 4; diff --git a/source/mem_man/mem_man.c b/source/mem_man/mem_man.c index 34ae6fd43c1..ec0ac1dd5ff 100644 --- a/source/mem_man/mem_man.c +++ b/source/mem_man/mem_man.c @@ -195,7 +195,6 @@ static void error_signal_handler() mem_check_buffers(); smb_mem_write_status(dbf); smb_mem_write_errors(dbf); - abort(); } #endif @@ -259,7 +258,7 @@ static int mem_first_avail_slot(void) /******************************************************************* find which Index a pointer refers to ********************************************************************/ -static int mem_find_Index(void *ptr) +static int mem_find_Index(const void *ptr) { int i; int start = last_block_allocated+mem_blocks_allocated/50; @@ -410,7 +409,7 @@ void *smb_mem_malloc(size_t size,char *file,int line) /******************************************************************* dup a string ********************************************************************/ -char *smb_mem_strdup(char *s, char *file, int line) +char *smb_mem_strdup(const char *s, char *file, int line) { char *ret = (char *)smb_mem_malloc(strlen(s)+1, file, line); strcpy(ret, s); diff --git a/source/msrpc/msrpcd.c b/source/msrpc/msrpcd.c index 2bfea6aebcf..dcf57d175cc 100644 --- a/source/msrpc/msrpcd.c +++ b/source/msrpc/msrpcd.c @@ -555,7 +555,8 @@ int msrpc_main(int argc,char *argv[]) DEBUG(2,("Changed root to %s\n", lp_rootdir())); } - msrpc_service_init(); + msrpc_service_init(argv[0]); + dbgflush(); ZERO_STRUCT(static_pipe); fstrcpy(static_pipe.name, pipe_name); diff --git a/source/netlogond/netlogond.c b/source/netlogond/netlogond.c index a3a31574b79..27c9d63cbc6 100644 --- a/source/netlogond/netlogond.c +++ b/source/netlogond/netlogond.c @@ -31,8 +31,9 @@ extern int DEBUGLEVEL; /************************************************************************* initialise an msrpc service *************************************************************************/ -void msrpc_service_init(void) +void msrpc_service_init(char* service_name) { + add_msrpc_command_processor( pipe_name, service_name, api_netlog_rpc ); if (!pwdb_initialise(True) || !initialise_password_db()) { exit(-1); @@ -128,7 +129,6 @@ BOOL reload_services(BOOL test) setup_logging(argv[0],False); fstrcpy(pipe_name, "NETLOGON"); slprintf(debugf, sizeof(debugf), "%s/log.%s", LOGFILEBASE, pipe_name); - add_msrpc_command_processor( pipe_name, argv[0], api_netlog_rpc ); return msrpc_main(argc, argv); } diff --git a/source/rpc_client/cli_connect.c b/source/rpc_client/cli_connect.c index 92a90caaaa8..560f4d6ecdb 100644 --- a/source/rpc_client/cli_connect.c +++ b/source/rpc_client/cli_connect.c @@ -24,7 +24,7 @@ #include "includes.h" -struct ntuser_creds *usr_creds = NULL; +struct user_creds *usr_creds = NULL; extern int DEBUGLEVEL; extern pstring scope; @@ -102,9 +102,7 @@ static struct cli_connection *cli_con_get(const char* srv_name, memset(con, 0, sizeof(*con)); con->type = MSRPC_NONE; - copy_user_creds(&con->usr_creds, NULL); - copy_nt_creds(&con->usr_creds.ntc, usr_creds); - con->usr_creds.ptr_ntc = 1; + copy_user_creds(&con->usr_creds, usr_creds); con->usr_creds.reuse = reuse; if (srv_name != NULL) @@ -606,6 +604,10 @@ BOOL rpc_hnd_pipe_req(const POLICY_HND *hnd, uint8 op_num, BOOL rpc_con_pipe_req(struct cli_connection *con, uint8 op_num, prs_struct *data, prs_struct *rdata) { + DEBUG(10,("rpc_con_pipe_req: op_num %d offset %d used: %d\n", + op_num, data->offset, data->data->data_used)); + data->data->margin = 0; + mem_realloc_data(data->data, data->offset); return rpc_api_pipe_req(con, op_num, data, rdata); } diff --git a/source/rpc_client/cli_lsarpc.c b/source/rpc_client/cli_lsarpc.c index b039bde159b..14a2198193f 100644 --- a/source/rpc_client/cli_lsarpc.c +++ b/source/rpc_client/cli_lsarpc.c @@ -43,12 +43,9 @@ BOOL get_domain_sids(const char *domain, DOM_SID *sid3, DOM_SID *sid5) BOOL res1 = True; fstring dom3; fstring dom5; - extern struct ntuser_creds *usr_creds; - struct ntuser_creds usr; + extern struct user_creds *usr_creds; - usr_creds = &usr; - ZERO_STRUCT(usr); - pwd_set_nullpwd(&usr.pwd); + usr_creds = NULL; if (sid3 == NULL && sid5 == NULL) { @@ -139,12 +136,9 @@ BOOL get_trust_sid_and_domain(const char* myname, char *server, fstring dom3; fstring dom5; - extern struct ntuser_creds *usr_creds; - struct ntuser_creds usr; + extern struct user_creds *usr_creds; - usr_creds = &usr; - ZERO_STRUCT(usr); - pwd_set_nullpwd(&usr.pwd); + usr_creds = NULL; if (!cli_connection_init_list(server, PIPE_LSARPC, &con)) { @@ -228,7 +222,7 @@ BOOL lsa_open_policy(const char *server_name, POLICY_HND *hnd, if (hnd == NULL) return False; - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); /* create and send a MSRPC command with api LSA_OPENPOLICY */ @@ -303,7 +297,7 @@ BOOL lsa_open_policy2( const char *server_name, POLICY_HND *hnd, if (hnd == NULL) return False; - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); /* create and send a MSRPC command with api LSA_OPENPOLICY2 */ @@ -371,7 +365,7 @@ BOOL lsa_open_secret( const POLICY_HND *hnd, if (hnd == NULL) return False; - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); /* create and send a MSRPC command with api LSA_OPENSECRET */ @@ -426,7 +420,7 @@ BOOL lsa_query_secret(POLICY_HND *hnd, STRING2 *secret, if (hnd == NULL) return False; - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); /* create and send a MSRPC command with api LSA_QUERYSECRET */ @@ -498,7 +492,7 @@ BOOL lsa_lookup_names( POLICY_HND *hnd, if (hnd == NULL || num_sids == 0 || sids == NULL) return False; - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); /* create and send a MSRPC command with api LSA_LOOKUP_NAMES */ @@ -644,7 +638,7 @@ BOOL lsa_lookup_sids(POLICY_HND *hnd, *names = NULL; } - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); /* create and send a MSRPC command with api LSA_LOOKUP_SIDS */ @@ -777,7 +771,7 @@ BOOL lsa_query_info_pol(POLICY_HND *hnd, uint16 info_class, if (hnd == NULL || domain_name == NULL || domain_sid == NULL) return False; - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); /* create and send a MSRPC command with api LSA_QUERYINFOPOLICY */ @@ -883,7 +877,7 @@ BOOL lsa_enum_trust_dom(POLICY_HND *hnd, uint32 *enum_ctx, if (hnd == NULL || num_doms == NULL || names == NULL) return False; - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); /* create and send a MSRPC command with api LSA_ENUMTRUSTDOM */ @@ -959,7 +953,7 @@ BOOL lsa_close(POLICY_HND *hnd) /* create and send a MSRPC command with api LSA_OPENPOLICY */ - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); DEBUG(4,("LSA Close\n")); diff --git a/source/rpc_client/cli_pipe.c b/source/rpc_client/cli_pipe.c index 34b77366b57..f7c2312250d 100644 --- a/source/rpc_client/cli_pipe.c +++ b/source/rpc_client/cli_pipe.c @@ -165,7 +165,7 @@ static BOOL rpc_auth_pipe(struct ntdom_info *nt, prs_struct *rdata, RPC_AUTH_NTLMSSP_CHK chk; uint32 crc32; int data_len = len - 0x18 - auth_len - 8; - char *reply_data = mem_data(&rdata->data, 0x18); + char *reply_data = mem_data(rdata->data, 0x18); BOOL auth_verify = IS_BITS_SET_ALL(nt->ntlmssp_srv_flgs, NTLMSSP_NEGOTIATE_SIGN); BOOL auth_seal = IS_BITS_SET_ALL(nt->ntlmssp_srv_flgs, NTLMSSP_NEGOTIATE_SEAL); @@ -187,7 +187,7 @@ static BOOL rpc_auth_pipe(struct ntdom_info *nt, prs_struct *rdata, { RPC_HDR_AUTH rhdr_auth; prs_struct auth_req; - char *data = mem_data(&rdata->data, len - auth_len - 8); + char *data = mem_data(rdata->data, len - auth_len - 8); prs_init(&auth_req , 0x08, 4, 0, True); memcpy(auth_req.data->data, data, 8); smb_io_rpc_hdr_auth("hdr_auth", &rhdr_auth, &auth_req, 0); @@ -202,7 +202,7 @@ static BOOL rpc_auth_pipe(struct ntdom_info *nt, prs_struct *rdata, if (auth_verify) { prs_struct auth_verf; - char *data = mem_data(&rdata->data, len - auth_len); + char *data = mem_data(rdata->data, len - auth_len); if (data == NULL) return False; DEBUG(10,("rpc_auth_pipe: verify\n")); @@ -295,7 +295,7 @@ static BOOL create_request_pdu(struct cli_connection *con, BOOL auth_verify; BOOL auth_seal; uint32 crc32 = 0; - char *d = mem_data(&data->data, data_start); + char *d = mem_data(data->data, data_start); struct ntdom_info *nt = cli_conn_get_ntinfo(con); uint8 flags = 0; @@ -355,7 +355,7 @@ static BOOL create_request_pdu(struct cli_connection *con, make_rpc_auth_ntlmssp_chk(&chk, NTLMSSP_SIGN_VERSION, crc32, nt->ntlmssp_seq_num++); smb_io_rpc_auth_ntlmssp_chk("auth_sign", &chk, &auth_verf, 0); - NTLMSSPcalc_ap(nt, (uchar*)mem_data(&auth_verf.data, 4), 12); + NTLMSSPcalc_ap(nt, (uchar*)mem_data(auth_verf.data, 4), 12); } if (auth_seal || auth_verify) @@ -385,7 +385,7 @@ static BOOL create_request_pdu(struct cli_connection *con, } /* this is all a hack */ - prs_init(dataa, data_len, 4, SAFETY_MARGIN, False); + prs_init(dataa, data_len, 4, 0, False); mem_buf_copy(dataa->data->data, hdr.data, 0, data_len); prs_mem_free(&hdr_auth ); @@ -451,7 +451,7 @@ BOOL rpc_api_pipe_bind(struct cli_connection *con, prs_struct *data, prs_struct } { - char *d = mem_data(&rpdu.data, rpdu.offset); + char *d = mem_data(rpdu.data, rpdu.offset); int l = rhdr.frag_len - rpdu.offset; prs_append_data(rdata, d, l); prs_mem_free(&rpdu); @@ -494,16 +494,13 @@ BOOL rpc_api_pipe_req(struct cli_connection *con, uint8 opnum, prs_init(&rpdu, 0, 4, 0, True); - while (data_end != data->offset) + do { prs_struct data_t; DEBUG(10,("rpc_api_pipe_req: start: %d end: %d off: %d\n", data_start, data_end, data->offset)); - prs_mem_free(&rpdu); - prs_init(&rpdu, 0, 4, 0, True); - if (!create_request_pdu(con, opnum, data, data_start, &data_end, &data_t)) { @@ -518,7 +515,14 @@ BOOL rpc_api_pipe_req(struct cli_connection *con, uint8 opnum, return False; } prs_mem_free(&data_t); - } + + if (data_end != data->offset) + { + prs_mem_free(&rpdu); + prs_init(&rpdu, 0, 4, 0, True); + } + + } while (data_end != data->offset); /**** parse the header: check it's a response record */ @@ -554,7 +558,7 @@ BOOL rpc_api_pipe_req(struct cli_connection *con, uint8 opnum, } { - char *d = mem_data(&rpdu.data, rpdu.offset); + char *d = mem_data(rpdu.data, rpdu.offset); int l = rhdr.frag_len - rpdu.offset; prs_append_data(rdata, d, l); prs_mem_free(&rpdu); @@ -612,7 +616,7 @@ BOOL rpc_api_pipe_req(struct cli_connection *con, uint8 opnum, } { - char *d = mem_data(&rpdu.data, rpdu.offset); + char *d = mem_data(rpdu.data, rpdu.offset); int l = rhdr.frag_len - rpdu.offset; prs_append_data(rdata, d, l); prs_mem_free(&rpdu); @@ -663,7 +667,7 @@ static BOOL cli_send_trans_data(struct cli_state *cli, uint16 fnum, /* * Setup the pointers from the incoming. */ - char *pdata = mem_data(&data->data, data_offset); + char *pdata = mem_data(data->data, data_offset); int data_len = data ? (data->data->data_used - data_offset) : 0; data_len = MIN(max_data_len, data_len); @@ -1255,12 +1259,12 @@ BOOL rpc_pipe_bind(struct cli_connection *con, if (!valid_pipe_name(pipe_name, abstract, transfer)) return False; prs_init(&hdr , 0x10 , 4, 0x0 , False); - prs_init(&hdr_rb , 1024 , 4, SAFETY_MARGIN, False); - prs_init(&hdr_auth , (ntlmssp_auth ? 8 : 0), 4, SAFETY_MARGIN, False); - prs_init(&auth_req , (ntlmssp_auth ? 1024 : 0), 4, SAFETY_MARGIN, False); - prs_init(&auth_ntlm, (ntlmssp_auth ? 1024 : 0), 4, SAFETY_MARGIN, False); + prs_init(&hdr_rb , 1024 , 4, 0, False); + prs_init(&hdr_auth , (ntlmssp_auth ? 8 : 0), 4, 0, False); + prs_init(&auth_req , (ntlmssp_auth ? 1024 : 0), 4, 0, False); + prs_init(&auth_ntlm, (ntlmssp_auth ? 1024 : 0), 4, 0, False); - prs_init(&rdata , 0 , 4, SAFETY_MARGIN, True); + prs_init(&rdata , 0 , 4, 0, True); rpc_call_id = get_rpc_call_id(); create_rpc_bind_req(&hdr, &hdr_rb, @@ -1331,8 +1335,8 @@ BOOL rpc_pipe_bind(struct cli_connection *con, nt->ntlmssp_cli_flgs = rhdr_chal.neg_flags; prs_init(&hdra , 0x10, 4, 0x0 , False); - prs_init(&hdr_autha, 1024, 4, SAFETY_MARGIN, False); - prs_init(&auth_resp, 1024, 4, SAFETY_MARGIN, False); + prs_init(&hdr_autha, 1024, 4, 0, False); + prs_init(&auth_resp, 1024, 4, 0, False); pwd_make_lm_nt_owf(&usr->pwd, rhdr_chal.challenge); diff --git a/source/rpc_client/cli_reg.c b/source/rpc_client/cli_reg.c index 4f1c28a7015..5d8567763e7 100644 --- a/source/rpc_client/cli_reg.c +++ b/source/rpc_client/cli_reg.c @@ -127,8 +127,8 @@ BOOL reg_open_hkcr( struct cli_connection *con, if (hnd == NULL) return False; - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); + prs_init(&rbuf, 0, 4, SAFETY_MARGIN, True ); /* create and send a MSRPC command with api REG_OPEN_HKCR */ @@ -185,8 +185,8 @@ BOOL reg_open_hklm( struct cli_connection *con, if (hnd == NULL) return False; - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); + prs_init(&rbuf, 0, 4, SAFETY_MARGIN, True ); /* create and send a MSRPC command with api REG_OPEN_HKLM */ @@ -243,8 +243,8 @@ BOOL reg_open_hku( struct cli_connection *con, if (hnd == NULL) return False; - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); + prs_init(&rbuf, 0, 4, SAFETY_MARGIN, True ); /* create and send a MSRPC command with api REG_OPEN_HKU */ @@ -301,8 +301,8 @@ BOOL reg_flush_key( POLICY_HND *hnd) if (hnd == NULL) return False; - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); + prs_init(&rbuf, 0, 4, SAFETY_MARGIN, True ); /* create and send a MSRPC command with api REG_FLUSH_KEY */ @@ -360,8 +360,8 @@ BOOL reg_query_key( POLICY_HND *hnd, if (hnd == NULL) return False; - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); + prs_init(&rbuf, 0, 4, SAFETY_MARGIN, True ); /* create and send a MSRPC command with api REG_QUERY_KEY */ @@ -425,8 +425,8 @@ BOOL reg_unknown_1a( POLICY_HND *hnd, uint32 *unk) if (hnd == NULL) return False; - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); + prs_init(&rbuf, 0, 4, SAFETY_MARGIN, True ); /* create and send a MSRPC command with api REG_UNKNOWN_1A */ @@ -482,8 +482,8 @@ BOOL reg_query_info( POLICY_HND *hnd, if (hnd == NULL) return False; - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); + prs_init(&rbuf, 0, 4, SAFETY_MARGIN, True ); /* create and send a MSRPC command with api REG_INFO */ @@ -541,8 +541,8 @@ BOOL reg_set_key_sec( POLICY_HND *hnd, if (hnd == NULL) return False; - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); + prs_init(&rbuf, 0, 4, SAFETY_MARGIN, True ); /* create and send a MSRPC command with api REG_SET_KEY_SEC */ @@ -591,8 +591,8 @@ BOOL reg_get_key_sec( POLICY_HND *hnd, if (hnd == NULL) return False; - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); + prs_init(&rbuf, 0, 4, SAFETY_MARGIN, True ); /* create and send a MSRPC command with api REG_GET_KEY_SEC */ @@ -659,8 +659,8 @@ BOOL reg_delete_val( POLICY_HND *hnd, char *val_name) if (hnd == NULL) return False; - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); + prs_init(&rbuf, 0, 4, SAFETY_MARGIN, True ); /* create and send a MSRPC command with api REG_DELETE_VALUE */ @@ -713,8 +713,8 @@ BOOL reg_delete_key( POLICY_HND *hnd, char *key_name) if (hnd == NULL) return False; - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); + prs_init(&rbuf, 0, 4, SAFETY_MARGIN, True ); /* create and send a MSRPC command with api REG_DELETE_KEY */ @@ -777,8 +777,8 @@ BOOL reg_create_key( POLICY_HND *hnd, if (hnd == NULL) return False; - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); + prs_init(&rbuf, 0, 4, SAFETY_MARGIN, True ); /* create and send a MSRPC command with api REG_CREATE_KEY */ @@ -844,8 +844,8 @@ BOOL reg_enum_key( POLICY_HND *hnd, if (hnd == NULL) return False; - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); + prs_init(&rbuf, 0, 4, SAFETY_MARGIN, True ); /* create and send a MSRPC command with api REG_ENUM_KEY */ @@ -904,8 +904,8 @@ BOOL reg_create_val( POLICY_HND *hnd, if (hnd == NULL) return False; - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); + prs_init(&rbuf, 0, 4, SAFETY_MARGIN, True ); /* create and send a MSRPC command with api REG_CREATE_VALUE */ @@ -961,8 +961,8 @@ BOOL reg_enum_val( POLICY_HND *hnd, if (hnd == NULL) return False; - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); + prs_init(&rbuf, 0, 4, SAFETY_MARGIN, True ); /* create and send a MSRPC command with api REG_ENUM_VALUE */ @@ -1020,8 +1020,8 @@ BOOL reg_open_entry( POLICY_HND *hnd, if (hnd == NULL) return False; - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); + prs_init(&rbuf, 0, 4, SAFETY_MARGIN, True ); /* create and send a MSRPC command with api REG_OPEN_ENTRY */ @@ -1084,8 +1084,8 @@ BOOL reg_close( POLICY_HND *hnd) /* create and send a MSRPC command with api REG_CLOSE */ - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); + prs_init(&rbuf, 0, 4, SAFETY_MARGIN, True ); DEBUG(4,("REG Close\n")); @@ -1162,8 +1162,8 @@ BOOL reg_shutdown(const char *srv_name, if (msg == NULL) return False; - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); + prs_init(&rbuf, 0, 4, SAFETY_MARGIN, True ); /* create and send a MSRPC command with api REG_SHUTDOWN */ diff --git a/source/rpc_client/cli_samr.c b/source/rpc_client/cli_samr.c index 9a68016c666..266f2f0fd4a 100644 --- a/source/rpc_client/cli_samr.c +++ b/source/rpc_client/cli_samr.c @@ -47,8 +47,8 @@ BOOL samr_chgpasswd_user( struct cli_connection *con, /* create and send a MSRPC command with api SAMR_CHGPASSWD_USER */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); DEBUG(4,("SAMR Change User Password. server:%s username:%s\n", srv_name, user_name)); @@ -104,8 +104,8 @@ BOOL samr_unknown_38(struct cli_connection *con, char *srv_name) /* create and send a MSRPC command with api SAMR_ENUM_DOM_USERS */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); DEBUG(4,("SAMR Unknown 38 server:%s\n", srv_name)); @@ -161,8 +161,8 @@ BOOL samr_query_dom_info( POLICY_HND *domain_pol, uint16 switch_value, /* create and send a MSRPC command with api SAMR_ENUM_DOM_USERS */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); /* store the parameters */ make_samr_q_query_dom_info(&q_e, domain_pol, switch_value); @@ -222,8 +222,8 @@ uint32 samr_enum_domains( POLICY_HND *pol, /* create and send a MSRPC command with api SAMR_ENUM_DOMAINS */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); /* store the parameters */ make_samr_q_enum_domains(&q_e, pol, *start_idx, size); @@ -323,8 +323,8 @@ uint32 samr_enum_dom_groups( POLICY_HND *pol, /* create and send a MSRPC command with api SAMR_ENUM_DOM_GROUPS */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); /* store the parameters */ make_samr_q_enum_dom_groups(&q_e, pol, *start_idx, size); @@ -424,8 +424,8 @@ uint32 samr_enum_dom_aliases( POLICY_HND *pol, /* create and send a MSRPC command with api SAMR_ENUM_DOM_ALIASES */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); /* store the parameters */ make_samr_q_enum_dom_aliases(&q_e, pol, *start_idx, size); @@ -524,8 +524,8 @@ uint32 samr_enum_dom_users( POLICY_HND *pol, uint32 *start_idx, /* create and send a MSRPC command with api SAMR_ENUM_DOM_USERS */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); /* store the parameters */ make_samr_q_enum_dom_users(&q_e, pol, *start_idx, @@ -634,8 +634,8 @@ BOOL samr_connect( const char *srv_name, uint32 unknown_0, /* create and send a MSRPC command with api SAMR_CONNECT */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); /* store the parameters */ make_samr_q_connect(&q_o, srv_name, unknown_0); @@ -694,8 +694,8 @@ BOOL samr_open_user( const POLICY_HND *pol, /* create and send a MSRPC command with api SAMR_OPEN_USER */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); /* store the parameters */ make_samr_q_open_user(&q_o, pol, unk_0, rid); @@ -751,8 +751,8 @@ BOOL samr_open_alias( const POLICY_HND *domain_pol, /* create and send a MSRPC command with api SAMR_OPEN_ALIAS */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); /* store the parameters */ make_samr_q_open_alias(&q_o, domain_pol, flags, rid); @@ -804,8 +804,8 @@ BOOL samr_del_aliasmem( POLICY_HND *alias_pol, DOM_SID *sid) /* create and send a MSRPC command with api SAMR_DEL_ALIASMEM */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); DEBUG(4,("SAMR Delete Alias Member.\n")); @@ -858,8 +858,8 @@ BOOL samr_add_aliasmem( POLICY_HND *alias_pol, DOM_SID *sid) /* create and send a MSRPC command with api SAMR_ADD_ALIASMEM */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); DEBUG(4,("SAMR Add Alias Member.\n")); @@ -912,8 +912,8 @@ BOOL samr_delete_dom_alias( POLICY_HND *alias_pol) /* delete and send a MSRPC command with api SAMR_DELETE_DOM_ALIAS */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); DEBUG(4,("SAMR Delete Domain Alias.\n")); @@ -968,8 +968,8 @@ uint32 samr_create_dom_user( POLICY_HND *domain_pol, const char *acct_name, /* create and send a MSRPC command with api SAMR_CREATE_USER */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); DEBUG(4,("SAMR Create Domain User. Name:%s\n", acct_name)); @@ -1029,8 +1029,8 @@ BOOL samr_create_dom_alias( POLICY_HND *domain_pol, const char *acct_name, /* create and send a MSRPC command with api SAMR_CREATE_DOM_ALIAS */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); DEBUG(4,("SAMR Create Domain Alias. Name:%s\n", acct_name)); @@ -1086,8 +1086,8 @@ BOOL samr_query_aliasinfo( POLICY_HND *alias_pol, uint16 switch_value, /* create and send a MSRPC command with api SAMR_GET_ALIASINFO */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); DEBUG(4,("SAMR Get Alias Info\n")); @@ -1143,8 +1143,8 @@ BOOL samr_set_aliasinfo( POLICY_HND *alias_pol, ALIAS_INFO_CTR *ctr) /* create and send a MSRPC command with api SAMR_SET_ALIASINFO */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); DEBUG(4,("SAMR Set Alias Info\n")); @@ -1201,8 +1201,8 @@ BOOL samr_open_group( const POLICY_HND *domain_pol, /* create and send a MSRPC command with api SAMR_OPEN_GROUP */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); /* store the parameters */ make_samr_q_open_group(&q_o, domain_pol, flags, rid); @@ -1254,8 +1254,8 @@ BOOL samr_del_groupmem( POLICY_HND *group_pol, uint32 rid) /* create and send a MSRPC command with api SAMR_DEL_GROUPMEM */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); DEBUG(4,("SAMR Delete Group Member.\n")); @@ -1308,8 +1308,8 @@ BOOL samr_add_groupmem( POLICY_HND *group_pol, uint32 rid) /* create and send a MSRPC command with api SAMR_ADD_GROUPMEM */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); DEBUG(4,("SAMR Add Group Member.\n")); @@ -1362,8 +1362,8 @@ BOOL samr_delete_dom_group( POLICY_HND *group_pol) /* delete and send a MSRPC command with api SAMR_DELETE_DOM_GROUP */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); DEBUG(4,("SAMR Delete Domain Group.\n")); @@ -1417,8 +1417,8 @@ BOOL samr_create_dom_group( POLICY_HND *domain_pol, const char *acct_name, /* create and send a MSRPC command with api SAMR_CREATE_DOM_GROUP */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); DEBUG(4,("SAMR Create Domain Group. Name:%s\n", acct_name)); @@ -1473,8 +1473,8 @@ BOOL samr_set_groupinfo( POLICY_HND *group_pol, GROUP_INFO_CTR *ctr) /* create and send a MSRPC command with api SAMR_SET_GROUPINFO */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); DEBUG(4,("SAMR Set Group Info\n")); @@ -1538,8 +1538,8 @@ BOOL samr_open_domain( const POLICY_HND *connect_pol, /* create and send a MSRPC command with api SAMR_OPEN_DOMAIN */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); /* store the parameters */ make_samr_q_open_domain(&q_o, connect_pol, ace_perms, sid); @@ -1592,8 +1592,8 @@ BOOL samr_query_lookup_domain( POLICY_HND *pol, const char *dom_name, /* create and send a MSRPC command with api SAMR_LOOKUP_DOMAIN */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); DEBUG(4,("SAMR Query Lookup Domain.\n")); @@ -1652,8 +1652,8 @@ BOOL samr_query_lookup_names( POLICY_HND *pol, uint32 flags, /* create and send a MSRPC command with api SAMR_LOOKUP_NAMES */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); DEBUG(4,("SAMR Query Lookup NAMES.\n")); @@ -1736,8 +1736,8 @@ BOOL samr_query_lookup_rids( const POLICY_HND *pol, uint32 flags, /* create and send a MSRPC command with api SAMR_LOOKUP_RIDS */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); DEBUG(4,("SAMR Query Lookup RIDs.\n")); @@ -1832,8 +1832,8 @@ BOOL samr_query_aliasmem( const POLICY_HND *alias_pol, /* create and send a MSRPC command with api SAMR_QUERY_ALIASMEM */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); /* store the parameters */ make_samr_q_query_aliasmem(&q_o, alias_pol); @@ -1894,8 +1894,8 @@ BOOL samr_query_useraliases( const POLICY_HND *pol, /* create and send a MSRPC command with api SAMR_QUERY_USERALIASES */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); /* store the parameters */ make_samr_q_query_useraliases(&q_o, pol, ptr_sid, sid); @@ -1954,8 +1954,8 @@ BOOL samr_query_groupmem( POLICY_HND *group_pol, /* create and send a MSRPC command with api SAMR_QUERY_GROUPMEM */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); /* store the parameters */ make_samr_q_query_groupmem(&q_o, group_pol); @@ -2018,8 +2018,8 @@ BOOL samr_query_usergroups( POLICY_HND *pol, uint32 *num_groups, /* create and send a MSRPC command with api SAMR_QUERY_USERGROUPS */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); /* store the parameters */ make_samr_q_query_usergroups(&q_o, pol); @@ -2079,8 +2079,8 @@ BOOL samr_query_groupinfo( POLICY_HND *pol, /* create and send a MSRPC command with api SAMR_QUERY_GROUPINFO */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); /* store the parameters */ make_samr_q_query_groupinfo(&q_o, pol, switch_value); @@ -2143,8 +2143,8 @@ BOOL samr_set_userinfo2( POLICY_HND *pol, uint16 switch_value, /* create and send a MSRPC command with api SAMR_SET_USERINFO2 */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); /* store the parameters */ make_samr_q_set_userinfo2(&q_o, pol, switch_value, usr); @@ -2197,8 +2197,8 @@ BOOL samr_set_userinfo( POLICY_HND *pol, uint16 switch_value, void* usr) /* create and send a MSRPC command with api SAMR_SET_USERINFO */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); /* store the parameters */ make_samr_q_set_userinfo(&q_o, pol, switch_value, usr); @@ -2251,8 +2251,8 @@ BOOL samr_query_userinfo( POLICY_HND *pol, uint16 switch_value, void* usr) /* create and send a MSRPC command with api SAMR_QUERY_USERINFO */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); /* store the parameters */ make_samr_q_query_userinfo(&q_o, pol, switch_value); @@ -2312,8 +2312,8 @@ BOOL samr_close( POLICY_HND *hnd) if (hnd == NULL) return False; - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); /* create and send a MSRPC command with api SAMR_CLOSE_HND */ @@ -2391,8 +2391,8 @@ BOOL samr_query_dispinfo( POLICY_HND *pol_domain, uint16 level, /* create and send a MSRPC command with api SAMR_QUERY_DISPINFO */ - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , 0, 4, SAFETY_MARGIN, False); + prs_init(&rdata, 0, 4, SAFETY_MARGIN, True ); /* store the parameters */ make_samr_q_query_dispinfo(&q_o, pol_domain, level, 0, 0xffffffff); diff --git a/source/rpc_client/cli_svcctl.c b/source/rpc_client/cli_svcctl.c index b284b2661e1..901a0757bba 100644 --- a/source/rpc_client/cli_svcctl.c +++ b/source/rpc_client/cli_svcctl.c @@ -52,8 +52,8 @@ BOOL svc_open_sc_man( const char *srv_name, char *db_name, if (hnd == NULL) return False; - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); + prs_init(&rbuf, 0, 4, SAFETY_MARGIN, True ); /* create and send a MSRPC command with api SVC_OPEN_SC_MAN */ @@ -122,8 +122,8 @@ BOOL svc_open_service( POLICY_HND *scm_hnd, if (hnd == NULL || scm_hnd == NULL) return False; - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); + prs_init(&rbuf, 0, 4, SAFETY_MARGIN, True ); /* create and send a MSRPC command with api SVC_OPEN_SERVICE */ @@ -194,8 +194,8 @@ BOOL svc_enum_svcs( POLICY_HND *hnd, return False; } - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); + prs_init(&rbuf, 0, 4, SAFETY_MARGIN, True ); /* create and send a MSRPC command with api SVC_ENUM_SVCS_STATUS */ @@ -273,8 +273,8 @@ BOOL svc_stop_service( POLICY_HND *hnd, /* create and send a MSRPC command with api SVC_STOP_SERVICE */ - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); + prs_init(&rbuf, 0, 4, SAFETY_MARGIN, True ); DEBUG(4,("SVC Stop Service\n")); @@ -338,8 +338,8 @@ BOOL svc_start_service( POLICY_HND *hnd, /* create and send a MSRPC command with api SVC_START_SERVICE */ - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); + prs_init(&rbuf, 0, 4, SAFETY_MARGIN, True ); DEBUG(4,("SVC Start Service\n")); @@ -403,8 +403,8 @@ BOOL svc_query_svc_cfg( POLICY_HND *hnd, /* create and send a MSRPC command with api SVC_QUERY_SVC_CONFIG */ - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); + prs_init(&rbuf, 0, 4, SAFETY_MARGIN, True ); DEBUG(4,("SVC Query Service Config\n")); @@ -469,8 +469,8 @@ BOOL svc_close(POLICY_HND *hnd) /* create and send a MSRPC command with api SVC_CLOSE */ - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); + prs_init(&rbuf, 0, 4, SAFETY_MARGIN, True ); DEBUG(4,("SVC Close\n")); @@ -556,8 +556,8 @@ BOOL svc_change_svc_cfg( POLICY_HND *hnd, /* create and send a MSRPC command with api SVC_CHANGE_SVC_CONFIG */ - prs_init(&buf , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&buf , 0, 4, SAFETY_MARGIN, False); + prs_init(&rbuf, 0, 4, SAFETY_MARGIN, True ); DEBUG(4,("SVC Change Service Config\n")); diff --git a/source/rpc_parse/parse_prs.c b/source/rpc_parse/parse_prs.c index fe47c855a3f..55ab53cfd67 100644 --- a/source/rpc_parse/parse_prs.c +++ b/source/rpc_parse/parse_prs.c @@ -33,6 +33,7 @@ extern int DEBUGLEVEL; ********************************************************************/ void prs_debug(prs_struct *ps, int depth, char *desc, char *fn_name) { + CHECK_STRUCT(ps); DEBUG(5+depth, ("%s%06x %s %s\n", tab_depth(depth), ps->offset, fn_name, desc)); } @@ -41,6 +42,7 @@ void prs_debug(prs_struct *ps, int depth, char *desc, char *fn_name) ********************************************************************/ void prs_debug_out(prs_struct *ps, char *msg, int level) { + CHECK_STRUCT(ps); DEBUG(level,("%s ps: io %s align %d offset %d err %d data %p len %d\n", msg, BOOLSTR(ps->io), ps->align, ps->offset, ps->error, ps->data, @@ -54,13 +56,15 @@ void prs_init(prs_struct *ps, uint32 size, uint8 align, uint32 margin, BOOL io) { + ps->struct_start = 0xfefefefe; ps->io = io; ps->align = align; ps->offset = 0; ps->error = False; ps->data = NULL; - mem_buf_init(&(ps->data), margin); + ps->struct_end = 0xdcdcdcdc; + mem_buf_init(&(ps->data), 0); if (size != 0) { @@ -68,6 +72,7 @@ void prs_init(prs_struct *ps, uint32 size, ps->data->offset.start = 0; ps->data->offset.end = 0xffffffff; } + CHECK_STRUCT(ps); } /******************************************************************* @@ -76,8 +81,9 @@ void prs_init(prs_struct *ps, uint32 size, BOOL prs_copy(prs_struct *ps, const prs_struct *from) { int len = mem_buf_len(from->data); + CHECK_STRUCT(ps); prs_init(ps, len, from->align, from->data->margin, from->io); - if (!mem_buf_copy(mem_data(&ps->data, 0), from->data, 0, len)) + if (!mem_buf_copy(mem_data(ps->data, 0), from->data, 0, len)) { return False; } @@ -91,6 +97,7 @@ BOOL prs_copy(prs_struct *ps, const prs_struct *from) ********************************************************************/ void prs_mem_free(prs_struct *ps) { + CHECK_STRUCT(ps); mem_buf_free(&(ps->data)); } @@ -99,6 +106,7 @@ void prs_mem_free(prs_struct *ps) ********************************************************************/ void prs_link(prs_struct *prev, prs_struct *ps, prs_struct *next) { + CHECK_STRUCT(ps); ps->data->offset.start = prev != NULL ? prev->data->offset.end : 0; ps->data->offset.end = ps->data->offset.start + ps->offset; ps->data->next = next != NULL ? next->data : NULL; @@ -115,6 +123,7 @@ void prs_link(prs_struct *prev, prs_struct *ps, prs_struct *next) void prs_align(prs_struct *ps) { int mod; + CHECK_STRUCT(ps); if (ps->error) return; mod = ps->offset & (ps->align-1); if (ps->align != 0 && mod != 0) @@ -130,6 +139,7 @@ void prs_align(prs_struct *ps) ********************************************************************/ BOOL prs_grow(prs_struct *ps, uint32 new_size) { + CHECK_STRUCT(ps); if (ps->error) return False; return mem_grow_data(&(ps->data), ps->io, new_size, False); } @@ -143,8 +153,9 @@ BOOL prs_append_data(prs_struct *ps, const char *data, int len) int new_size = prev_size + len; char *to; + CHECK_STRUCT(ps); mem_realloc_data(ps->data, new_size); - to = mem_data(&ps->data, prev_size); + to = mem_data(ps->data, prev_size); if (to == NULL || ps->data->data_used != new_size) { return False; @@ -160,9 +171,10 @@ BOOL prs_append_data(prs_struct *ps, const char *data, int len) BOOL _prs_uint8(char *name, prs_struct *ps, int depth, uint8 *data8) { char *q; + CHECK_STRUCT(ps); if (ps->error) return False; prs_grow(ps, ps->offset + 1); - q = mem_data(&(ps->data), ps->offset); + q = mem_data(ps->data, ps->offset); if (q == NULL) { ps->error = True; @@ -183,9 +195,10 @@ BOOL _prs_uint8(char *name, prs_struct *ps, int depth, uint8 *data8) BOOL _prs_uint16(char *name, prs_struct *ps, int depth, uint16 *data16) { char *q; + CHECK_STRUCT(ps); if (ps->error) return False; prs_grow(ps, ps->offset + 2); - q = mem_data(&(ps->data), ps->offset); + q = mem_data(ps->data, ps->offset); if (q == NULL) { ps->error = True; @@ -205,8 +218,9 @@ BOOL _prs_uint16(char *name, prs_struct *ps, int depth, uint16 *data16) BOOL _prs_hash1(prs_struct *ps, uint32 offset, uint8 sess_key[16]) { char *q; + CHECK_STRUCT(ps); if (ps->error) return False; - q = mem_data(&(ps->data), ps->offset); + q = mem_data(ps->data, ps->offset); if (q == NULL) { ps->error = True; @@ -233,9 +247,10 @@ BOOL _prs_hash1(prs_struct *ps, uint32 offset, uint8 sess_key[16]) BOOL _prs_uint32(char *name, prs_struct *ps, int depth, uint32 *data32) { char *q; + CHECK_STRUCT(ps); if (ps->error) return False; prs_grow(ps, ps->offset + 4); - q = mem_data(&(ps->data), ps->offset); + q = mem_data(ps->data, ps->offset); if (q == NULL) { ps->error = True; @@ -258,11 +273,12 @@ BOOL _prs_uint8s(BOOL charmode, char *name, prs_struct *ps, int depth, uint8 *da char *q; int end_offset; char *e; + CHECK_STRUCT(ps); if (ps->error) return False; end_offset = ps->offset + len * sizeof(uint8); prs_grow(ps, end_offset); - q = mem_data(&(ps->data), ps->offset); - e = mem_data(&(ps->data), end_offset-1); + q = mem_data(ps->data, ps->offset); + e = mem_data(ps->data, end_offset-1); if (q == NULL || e == NULL) { @@ -285,11 +301,12 @@ BOOL _prs_uint16s(BOOL charmode, char *name, prs_struct *ps, int depth, uint16 * char *q; int end_offset; char *e; + CHECK_STRUCT(ps); if (ps->error) return False; end_offset = ps->offset + len * sizeof(uint16); prs_grow(ps, end_offset); - q = mem_data(&(ps->data), ps->offset); - e = mem_data(&(ps->data), end_offset-1); + q = mem_data(ps->data, ps->offset); + e = mem_data(ps->data, end_offset-1); if (q == NULL || e == NULL) { @@ -312,11 +329,12 @@ BOOL _prs_uint32s(BOOL charmode, char *name, prs_struct *ps, int depth, uint32 * char *q; int end_offset; char *e; + CHECK_STRUCT(ps); if (ps->error) return False; end_offset = ps->offset + len * sizeof(uint32); prs_grow(ps, end_offset); - q = mem_data(&(ps->data), ps->offset); - e = mem_data(&(ps->data), end_offset-1); + q = mem_data(ps->data, ps->offset); + e = mem_data(ps->data, end_offset-1); if (q == NULL || e == NULL) { @@ -340,11 +358,12 @@ BOOL _prs_buffer2(BOOL charmode, char *name, prs_struct *ps, int depth, BUFFER2 char *q; int end_offset; char *e; + CHECK_STRUCT(ps); if (ps->error) return False; end_offset = ps->offset + str->buf_len * sizeof(uint8); prs_grow(ps, end_offset); - q = mem_data(&(ps->data), ps->offset); - e = mem_data(&(ps->data), end_offset-1); + q = mem_data(ps->data, ps->offset); + e = mem_data(ps->data, end_offset-1); if (q == NULL || e == NULL) { @@ -368,11 +387,12 @@ BOOL _prs_string2(BOOL charmode, char *name, prs_struct *ps, int depth, STRING2 char *q; int end_offset; char *e; + CHECK_STRUCT(ps); if (ps->error) return False; end_offset = ps->offset + str->str_str_len * sizeof(uint8); prs_grow(ps, end_offset); - q = mem_data(&(ps->data), ps->offset); - e = mem_data(&(ps->data), end_offset-1); + q = mem_data(ps->data, ps->offset); + e = mem_data(ps->data, end_offset-1); if (q == NULL || e == NULL) { @@ -396,11 +416,12 @@ BOOL _prs_unistr2(BOOL charmode, char *name, prs_struct *ps, int depth, UNISTR2 char *q; int end_offset; char *e; + CHECK_STRUCT(ps); if (ps->error) return False; end_offset = ps->offset + str->uni_str_len * sizeof(uint16); prs_grow(ps, end_offset); - q = mem_data(&(ps->data), ps->offset); - e = mem_data(&(ps->data), end_offset-1); + q = mem_data(ps->data, ps->offset); + e = mem_data(ps->data, end_offset-1); if (q == NULL || e == NULL) { @@ -424,11 +445,12 @@ BOOL _prs_unistr3(BOOL charmode, char *name, UNISTR3 *str, prs_struct *ps, int d char *q; int end_offset; char *e; + CHECK_STRUCT(ps); if (ps->error) return False; end_offset = ps->offset + str->uni_str_len * sizeof(uint16); prs_grow(ps, end_offset); - q = mem_data(&(ps->data), ps->offset); - e = mem_data(&(ps->data), end_offset-1); + q = mem_data(ps->data, ps->offset); + e = mem_data(ps->data, end_offset-1); if (q == NULL || e == NULL) { @@ -450,15 +472,16 @@ BOOL _prs_unistr(char *name, prs_struct *ps, int depth, UNISTR *str) { int i = -1; uint8 *start; + CHECK_STRUCT(ps); if (ps->error) return False; - start = (uint8*)mem_data(&(ps->data), ps->offset); + start = (uint8*)mem_data(ps->data, ps->offset); do { char *q; i++; prs_grow(ps, ps->offset + i*2); - q = mem_data(&(ps->data), ps->offset + i*2); + q = mem_data(ps->data, ps->offset + i*2); if (q == NULL) { ps->error = True; @@ -490,8 +513,9 @@ BOOL _prs_string(char *name, prs_struct *ps, int depth, char *str, uint16 len, u { int i = -1; /* start off at zero after 1st i++ */ uint8 *start; + CHECK_STRUCT(ps); if (ps->error) return False; - start = (uint8*)mem_data(&(ps->data), ps->offset); + start = (uint8*)mem_data(ps->data, ps->offset); DEBUG(200,("_prs_string: string %s len %d max %d\n", str, len, max_buf_size)); @@ -504,7 +528,7 @@ BOOL _prs_string(char *name, prs_struct *ps, int depth, char *str, uint16 len, u i++; prs_grow(ps, ps->offset + i); - q = mem_data(&(ps->data), ps->offset + i); + q = mem_data(ps->data, ps->offset + i); if (q == NULL) { ps->error = True; @@ -540,6 +564,7 @@ BOOL _prs_string(char *name, prs_struct *ps, int depth, char *str, uint16 len, u ********************************************************************/ BOOL _prs_uint16_pre(char *name, prs_struct *ps, int depth, uint16 *data16, uint32 *offset) { + CHECK_STRUCT(ps); if (ps->error) return False; (*offset) = ps->offset; if (ps->io) @@ -561,6 +586,7 @@ BOOL _prs_uint16_pre(char *name, prs_struct *ps, int depth, uint16 *data16, uint BOOL _prs_uint16_post(char *name, prs_struct *ps, int depth, uint16 *data16, uint32 ptr_uint16, uint32 start_offset) { + CHECK_STRUCT(ps); if (ps->error) return False; if (!ps->io) { @@ -585,6 +611,7 @@ BOOL _prs_uint16_post(char *name, prs_struct *ps, int depth, uint16 *data16, ********************************************************************/ BOOL _prs_uint32_pre(char *name, prs_struct *ps, int depth, uint32 *data32, uint32 *offset) { + CHECK_STRUCT(ps); if (ps->error) return False; (*offset) = ps->offset; if (ps->io) @@ -606,6 +633,7 @@ BOOL _prs_uint32_pre(char *name, prs_struct *ps, int depth, uint32 *data32, uint BOOL _prs_uint32_post(char *name, prs_struct *ps, int depth, uint32 *data32, uint32 ptr_uint32, uint32 data_size) { + CHECK_STRUCT(ps); if (ps->error) return False; if (!ps->io) { diff --git a/source/rpc_server/srv_pipe.c b/source/rpc_server/srv_pipe.c index 8a11b7ad3df..70a958388db 100644 --- a/source/rpc_server/srv_pipe.c +++ b/source/rpc_server/srv_pipe.c @@ -171,7 +171,7 @@ BOOL create_rpc_reply(rpcsrv_struct *l, uint32 data_start) l->rdata_i.data = NULL; prs_init(&l->rdata_i, 0, l->rdata.align, l->rdata.data->margin, l->rdata.io); - data = mem_data(&(l->rdata.data), data_start); + data = mem_data(l->rdata.data, data_start); mem_create(l->rdata_i.data, data, 0, data_len, 0, False); l->rdata_i.offset = data_len; l->rdata_offset += data_len; @@ -201,7 +201,7 @@ BOOL create_rpc_reply(rpcsrv_struct *l, uint32 data_start) l->ntlmssp_seq_num++; make_rpc_auth_ntlmssp_chk(&l->ntlmssp_chk, NTLMSSP_SIGN_VERSION, crc32, l->ntlmssp_seq_num++); smb_io_rpc_auth_ntlmssp_chk("auth_sign", &(l->ntlmssp_chk), &l->rverf, 0); - auth_data = mem_data(&l->rverf.data, 4); + auth_data = mem_data(l->rverf.data, 4); NTLMSSPcalc_p(l, (uchar*)auth_data, 12); } } @@ -759,7 +759,7 @@ static BOOL api_pipe_auth_process(rpcsrv_struct *l, prs_struct *pd) if (auth_seal) { - char *data = mem_data(&pd->data, pd->offset); + char *data = mem_data(pd->data, pd->offset); DEBUG(5,("api_pipe_auth_process: data %d\n", pd->offset)); NTLMSSPcalc_p(l, (uchar*)data, data_len); crc32 = crc32_calc_buffer(data_len, data); @@ -776,7 +776,7 @@ static BOOL api_pipe_auth_process(rpcsrv_struct *l, prs_struct *pd) if (auth_verify) { - char *req_data = mem_data(&pd->data, pd->offset + 4); + char *req_data = mem_data(pd->data, pd->offset + 4); DEBUG(5,("api_pipe_auth_process: auth %d\n", pd->offset + 4)); NTLMSSPcalc_p(l, (uchar*)req_data, 12); smb_io_rpc_auth_ntlmssp_chk("auth_sign", &(l->ntlmssp_chk), pd, 0); @@ -853,7 +853,7 @@ BOOL rpc_add_to_pdu(prs_struct *ps, const char *data, int len) DEBUG(10,("ps->data->start: %d\n", ps->data->offset.start)); ps->data->offset.start = 0x0; - to = mem_data(&ps->data, prev_size); + to = mem_data(ps->data, prev_size); if (to == NULL) { DEBUG(10,("rpc_add_to_pdu: data could not be found\n")); @@ -1044,8 +1044,7 @@ static BOOL api_rpc_command(rpcsrv_struct *l, return False; } - /* start off with 1024 bytes, and a large safety margin too */ - prs_init(&l->rdata, 1024, 4, SAFETY_MARGIN, False); + prs_init(&l->rdata, 0, 4, 0, False); /* do the actual command */ api_rpc_cmds[fn_num].fn(l, data, &(l->rdata)); diff --git a/source/rpc_server/srv_pipe_hnd.c b/source/rpc_server/srv_pipe_hnd.c index 2452293ce7a..8f0f6e2fe6c 100644 --- a/source/rpc_server/srv_pipe_hnd.c +++ b/source/rpc_server/srv_pipe_hnd.c @@ -135,7 +135,10 @@ pipes_struct *open_rpc_pipe_p(char *pipe_name, DEBUG(5,("open pipes: name %s pnum=%x\n", p->name, p->pnum)); } + become_root(False); /* to connect to pipe */ m = msrpc_use_add(pipe_name, &usr, False); + unbecome_root(False); + if (m == NULL) { DEBUG(5,("open pipes: msrpc redirect failed\n")); diff --git a/source/rpcclient/cmd_netlogon.c b/source/rpcclient/cmd_netlogon.c index c518fbb9f5f..6c51e4bb628 100644 --- a/source/rpcclient/cmd_netlogon.c +++ b/source/rpcclient/cmd_netlogon.c @@ -33,7 +33,7 @@ extern int DEBUGLEVEL; #define DEBUG_TESTING -extern struct ntuser_creds *usr_creds; +extern struct user_creds *usr_creds; extern FILE* out_hnd; @@ -61,7 +61,7 @@ void cmd_netlogon_login_test(struct client_info *info, int argc, char *argv[]) fstrcat(srv_name, info->dest_host); strupper(srv_name); - fstrcpy(domain, usr_creds->domain); + fstrcpy(domain, usr_creds->ntc.domain); if (domain[0] == 0) { @@ -80,7 +80,7 @@ void cmd_netlogon_login_test(struct client_info *info, int argc, char *argv[]) if (argc < 1) { - fstrcpy(nt_user_name, usr_creds->user_name); + fstrcpy(nt_user_name, usr_creds->ntc.user_name); if (nt_user_name[0] == 0) { report(out_hnd,"ntlogin: must specify username with anonymous connection\n"); @@ -134,7 +134,7 @@ void cmd_netlogon_login_test(struct client_info *info, int argc, char *argv[]) #if 0 /* check whether the user wants to change their machine password */ res = res ? trust_account_check(info->dest_ip, info->dest_host, - info->myhostname, usr_creds->domain, + info->myhostname, usr_creds->ntc.domain, info->mach_acct, new_mach_pwd) : False; #endif @@ -163,7 +163,7 @@ void cmd_netlogon_login_test(struct client_info *info, int argc, char *argv[]) /* do an NT login */ res = res ? cli_nt_login_interactive(srv_name, info->myhostname, - usr_creds->domain, nt_user_name, + usr_creds->ntc.domain, nt_user_name, getuid(), nt_password, &info->dom.ctr, &info->dom.user_info3) : False; @@ -209,7 +209,7 @@ void cmd_netlogon_domain_test(struct client_info *info, int argc, char *argv[]) fstrcpy(inter_dom_acct, nt_trust_dom); fstrcat(inter_dom_acct, "$"); - res = res ? trust_get_passwd(trust_passwd, usr_creds->domain, nt_trust_dom) : False; + res = res ? trust_get_passwd(trust_passwd, usr_creds->ntc.domain, nt_trust_dom) : False; res = res ? cli_nt_setup_creds(srv_name, info->myhostname, inter_dom_acct, @@ -241,7 +241,7 @@ void cmd_sam_sync(struct client_info *info, int argc, char *argv[]) fstrcpy(trust_acct, info->myhostname); fstrcat(trust_acct, "$"); - if (!trust_get_passwd(trust_passwd, usr_creds->domain, info->myhostname)) + if (!trust_get_passwd(trust_passwd, usr_creds->ntc.domain, info->myhostname)) { report(out_hnd, "cmd_sam_sync: no trust account password\n"); return; diff --git a/source/rpcclient/cmd_samr.c b/source/rpcclient/cmd_samr.c index 77db0c1e88d..9be701db496 100644 --- a/source/rpcclient/cmd_samr.c +++ b/source/rpcclient/cmd_samr.c @@ -33,7 +33,7 @@ extern int DEBUGLEVEL; #define DEBUG_TESTING -extern struct ntuser_creds *usr_creds; +extern struct user_creds *usr_creds; extern FILE* out_hnd; @@ -167,8 +167,8 @@ void cmd_sam_ntchange_pwd(struct client_info *info, int argc, char *argv[]) } else { - safe_strcpy(acct_name, usr_creds->user_name, sizeof(acct_name)); - pwd_get_lm_nt_16(&(usr_creds->pwd), lm_oldhash, nt_oldhash ); + safe_strcpy(acct_name, usr_creds->ntc.user_name, sizeof(acct_name)); + pwd_get_lm_nt_16(&(usr_creds->ntc.pwd), lm_oldhash, nt_oldhash ); } new_passwd = (char*)getpass("New Password (ONCE ONLY - get it right :-)"); @@ -178,7 +178,7 @@ void cmd_sam_ntchange_pwd(struct client_info *info, int argc, char *argv[]) E_old_pw_hash(lm_newhash, lm_oldhash, lm_hshhash); E_old_pw_hash(lm_newhash, nt_oldhash, nt_hshhash); - usr_creds->ntlmssp_flags = NTLMSSP_NEGOTIATE_UNICODE | + usr_creds->ntc.ntlmssp_flags = NTLMSSP_NEGOTIATE_UNICODE | NTLMSSP_NEGOTIATE_OEM | NTLMSSP_NEGOTIATE_SIGN | NTLMSSP_NEGOTIATE_SEAL | @@ -240,7 +240,7 @@ void cmd_sam_test(struct client_info *info, int argc, char *argv[]) report(out_hnd, "SAM Encryption Test\n"); - usr_creds->ntlmssp_flags = NTLMSSP_NEGOTIATE_UNICODE | + usr_creds->ntc.ntlmssp_flags = NTLMSSP_NEGOTIATE_UNICODE | NTLMSSP_NEGOTIATE_OEM | NTLMSSP_NEGOTIATE_SIGN | NTLMSSP_NEGOTIATE_SEAL | diff --git a/source/rpcclient/cmd_spoolss.c b/source/rpcclient/cmd_spoolss.c index 43fa9900d40..1bca5e418f3 100644 --- a/source/rpcclient/cmd_spoolss.c +++ b/source/rpcclient/cmd_spoolss.c @@ -34,7 +34,7 @@ extern int DEBUGLEVEL; extern FILE* out_hnd; -extern struct ntuser_creds *usr_creds; +extern struct user_creds *usr_creds; /**************************************************************************** nt spoolss query @@ -127,11 +127,11 @@ void cmd_spoolss_open_printer_ex(struct client_info *info, int argc, char *argv[ } DEBUG(4,("spoolopen - printer: %s server: %s user: %s\n", - printer_name, station, usr_creds->user_name)); + printer_name, station, usr_creds->ntc.user_name)); res = res ? spoolss_open_printer_ex( printer_name, 0, 0, 0, - station, usr_creds->user_name, + station, usr_creds->ntc.user_name, &hnd) : False; res = res ? spoolss_closeprinter(&hnd) : False; @@ -245,10 +245,10 @@ void cmd_spoolss_enum_jobs(struct client_info *info, int argc, char *argv[]) } DEBUG(4,("spoolopen - printer: %s station: %s user: %s\n", - printer_name, station, usr_creds->user_name)); + printer_name, station, usr_creds->ntc.user_name)); if (msrpc_spoolss_enum_jobs( printer_name, station, - usr_creds->user_name, + usr_creds->ntc.user_name, level, &num, &ctr, spool_job_info_ctr)) { diff --git a/source/rpcclient/rpcclient.c b/source/rpcclient/rpcclient.c index 517697a8c5b..dbf7174b289 100644 --- a/source/rpcclient/rpcclient.c +++ b/source/rpcclient/rpcclient.c @@ -48,7 +48,7 @@ static void cmd_quit(struct client_info *info, int argc, char *argv[]); static void cmd_set (struct client_info *info, int argc, char *argv[]); static void cmd_net (struct client_info *info, int argc, char *argv[]); -static struct ntuser_creds usr; +static struct user_creds usr; static struct client_info cli_info; @@ -759,15 +759,15 @@ static BOOL process( struct client_info *info, char *cmd_str) BOOL at_sym = False; pline[0] = 0; safe_strcat(pline, "[", sizeof(pline)-1); - if (usr.domain[0] != 0) + if (usr.ntc.domain[0] != 0) { - safe_strcat(pline, usr.domain, sizeof(pline)-1); + safe_strcat(pline, usr.ntc.domain, sizeof(pline)-1); safe_strcat(pline, "\\", sizeof(pline)-1); at_sym = True; } - if (usr.user_name[0] != 0) + if (usr.ntc.user_name[0] != 0) { - safe_strcat(pline, usr.user_name, sizeof(pline)-1); + safe_strcat(pline, usr.ntc.user_name, sizeof(pline)-1); at_sym = True; } if (at_sym) @@ -1356,9 +1356,9 @@ static void cmd_net(struct client_info *info, int argc, char *argv[]) BOOL null_pwd = False; BOOL got_pwd = False; pstring password; - extern struct ntuser_creds *usr_creds; + extern struct user_creds *usr_creds; - copy_nt_creds(&u, usr_creds); + copy_nt_creds(&u, &usr_creds->ntc); pstrcpy(dest_host, cli_info.dest_host); pstrcpy(u.user_name,optarg); @@ -1635,15 +1635,15 @@ static void cmd_set(struct client_info *info, int argc, char *argv[]) { char *lp; cmd_set_options |= CMD_USER; - pstrcpy(usr.user_name,optarg); - if ((lp=strchr(usr.user_name,'%'))) + pstrcpy(usr.ntc.user_name,optarg); + if ((lp=strchr(usr.ntc.user_name,'%'))) { *lp = 0; pstrcpy(password,lp+1); cmd_set_options |= CMD_PASS; memset(strchr(optarg,'%')+1,'X',strlen(password)); } - if (usr.user_name[0] == 0 && password[0] == 0) + if (usr.ntc.user_name[0] == 0 && password[0] == 0) { cmd_set_options |= CMD_NOPW; } @@ -1653,7 +1653,7 @@ static void cmd_set(struct client_info *info, int argc, char *argv[]) case 'W': { cmd_set_options |= CMD_DOM; - pstrcpy(usr.domain,optarg); + pstrcpy(usr.ntc.domain,optarg); break; } @@ -1760,11 +1760,11 @@ static void cmd_set(struct client_info *info, int argc, char *argv[]) if (IS_BITS_SET_ALL(cmd_set_options, CMD_NOPW)) { - set_user_password(&usr, True, NULL); + set_user_password(&usr.ntc, True, NULL); } else if (IS_BITS_SET_ALL(cmd_set_options, CMD_PASS)) { - set_user_password(&usr, True, password); + set_user_password(&usr.ntc, True, password); } /* paranoia: destroy the local copy of the password */ @@ -1860,12 +1860,12 @@ void readline_init(void) ****************************************************************************/ int main(int argc,char *argv[]) { - extern struct ntuser_creds *usr_creds; + extern struct user_creds *usr_creds; mode_t myumask = 0755; DEBUGLEVEL = 2; - usr.ntlmssp_flags = 0x0; + usr.ntc.ntlmssp_flags = 0x0; usr_creds = &usr; out_hnd = stdout; @@ -1873,8 +1873,8 @@ void readline_init(void) init_policy_hnd(64); - pstrcpy(usr.domain, ""); - pstrcpy(usr.user_name, ""); + pstrcpy(usr.ntc.domain, ""); + pstrcpy(usr.ntc.user_name, ""); pstrcpy(cli_info.myhostname, ""); pstrcpy(cli_info.dest_host, ""); @@ -1905,7 +1905,7 @@ void readline_init(void) exit(1); } - read_user_env(&usr); + read_user_env(&usr.ntc); cmd_set_options &= ~CMD_HELP; cmd_set_options &= ~CMD_NOPW; diff --git a/source/samrd/samrd.c b/source/samrd/samrd.c index f88902cfb4c..590b17a6157 100644 --- a/source/samrd/samrd.c +++ b/source/samrd/samrd.c @@ -31,9 +31,13 @@ extern int DEBUGLEVEL; /************************************************************************* initialise an msrpc service *************************************************************************/ -void msrpc_service_init(void) +void msrpc_service_init(char* service_name) { - if (!pwdb_initialise(False) || !initialise_password_db()) + DEBUG(10,("msrpc_service_init\n")); + + add_msrpc_command_processor( pipe_name, service_name, api_samr_rpc ); + + if (!pwdb_initialise(True) || !initialise_password_db()) { exit(-1); } @@ -128,7 +132,6 @@ BOOL reload_services(BOOL test) setup_logging(argv[0],False); fstrcpy(pipe_name, "samr"); slprintf(debugf, sizeof(debugf), "%s/log.%s", LOGFILEBASE, pipe_name); - add_msrpc_command_processor( pipe_name, argv[0], api_samr_rpc ); return msrpc_main(argc, argv); } diff --git a/source/spoolssd/spoolssd.c b/source/spoolssd/spoolssd.c index 7ea5195009b..a576b6d7ad0 100644 --- a/source/spoolssd/spoolssd.c +++ b/source/spoolssd/spoolssd.c @@ -30,8 +30,9 @@ extern BOOL append_log; /************************************************************************* initialise an msrpc service *************************************************************************/ -void msrpc_service_init(void) +void msrpc_service_init(char* service_name) { + add_msrpc_command_processor( pipe_name, service_name, api_spoolss_rpc ); init_printer_hnd(); /* for SPOOLSS handles */ } @@ -94,7 +95,6 @@ BOOL reload_services(BOOL test) setup_logging(argv[0],False); fstrcpy(pipe_name, "spoolss"); slprintf(debugf, sizeof(debugf), "%s/log.%s", LOGFILEBASE, pipe_name); - add_msrpc_command_processor( pipe_name, argv[0], api_spoolss_rpc ); return msrpc_main(argc, argv); } diff --git a/source/srvsvcd/srvsvcd.c b/source/srvsvcd/srvsvcd.c index 78c64a200b3..be22b4ac77b 100644 --- a/source/srvsvcd/srvsvcd.c +++ b/source/srvsvcd/srvsvcd.c @@ -30,8 +30,9 @@ extern BOOL append_log; /************************************************************************* initialise an msrpc service *************************************************************************/ -void msrpc_service_init(void) +void msrpc_service_init(char* service_name) { + add_msrpc_command_processor( pipe_name, service_name, api_srvsvc_rpc ); } /**************************************************************************** @@ -91,7 +92,6 @@ BOOL reload_services(BOOL test) setup_logging(argv[0],False); fstrcpy(pipe_name, "srvsvc"); slprintf(debugf, sizeof(debugf), "%s/log.%s", LOGFILEBASE, pipe_name); - add_msrpc_command_processor( pipe_name, argv[0], api_srvsvc_rpc ); return msrpc_main(argc, argv); } diff --git a/source/svcctld/svcctld.c b/source/svcctld/svcctld.c index 95470ad4a49..a9656685ad5 100644 --- a/source/svcctld/svcctld.c +++ b/source/svcctld/svcctld.c @@ -30,8 +30,9 @@ extern BOOL append_log; /************************************************************************* initialise an msrpc service *************************************************************************/ -void msrpc_service_init(void) +void msrpc_service_init(char* service_name) { + add_msrpc_command_processor( pipe_name, service_name, api_svcctl_rpc ); } /**************************************************************************** @@ -91,7 +92,6 @@ BOOL reload_services(BOOL test) setup_logging(argv[0],False); fstrcpy(pipe_name, "svcctl"); slprintf(debugf, sizeof(debugf), "%s/log.%s", LOGFILEBASE, pipe_name); - add_msrpc_command_processor( pipe_name, argv[0], api_svcctl_rpc ); return msrpc_main(argc, argv); } diff --git a/source/utils/rpctorture.c b/source/utils/rpctorture.c index 0933cf38c1f..7d1bedb6cd1 100644 --- a/source/utils/rpctorture.c +++ b/source/utils/rpctorture.c @@ -247,7 +247,7 @@ BOOL do_random_rpc(struct cli_state *cli, uint16 nt_pipe_fnum, int max_len) opcode = sys_random() % 256; /* turn parameters into data stream */ - rand_buf(mem_data(&buf.data, 0), param_len); + rand_buf(mem_data(buf.data, 0), param_len); buf.offset = param_len; /* send the data on \PIPE\ */ @@ -259,9 +259,9 @@ BOOL do_random_rpc(struct cli_state *cli, uint16 nt_pipe_fnum, int max_len) { DEBUG(0,("response! opcode: 0x%x\n", opcode)); DEBUG(0,("request: length %d\n", param_len)); - dump_data(0, mem_data(&buf.data , 0), MIN(param_len, 128)); + dump_data(0, mem_data(buf.data , 0), MIN(param_len, 128)); DEBUG(0,("response: length %d\n", rbuf.data->offset.end)); - dump_data(0, mem_data(&rbuf.data, 0), rbuf.data->offset.end); + dump_data(0, mem_data(rbuf.data, 0), rbuf.data->offset.end); } } diff --git a/source/winregd/winregd.c b/source/winregd/winregd.c index c317ddd6f44..9d1fde7972c 100644 --- a/source/winregd/winregd.c +++ b/source/winregd/winregd.c @@ -30,8 +30,9 @@ extern BOOL append_log; /************************************************************************* initialise an msrpc service *************************************************************************/ -void msrpc_service_init(void) +void msrpc_service_init(char* service_name) { + add_msrpc_command_processor( pipe_name, service_name, api_reg_rpc ); } /**************************************************************************** @@ -91,7 +92,6 @@ BOOL reload_services(BOOL test) setup_logging(argv[0],False); fstrcpy(pipe_name, "winreg"); slprintf(debugf, sizeof(debugf), "%s/log.%s", LOGFILEBASE, pipe_name); - add_msrpc_command_processor( pipe_name, argv[0], api_reg_rpc ); return msrpc_main(argc, argv); } diff --git a/source/wkssvcd/wkssvcd.c b/source/wkssvcd/wkssvcd.c index dcb5bb98eef..32c2ab0c9ea 100644 --- a/source/wkssvcd/wkssvcd.c +++ b/source/wkssvcd/wkssvcd.c @@ -30,8 +30,9 @@ extern BOOL append_log; /************************************************************************* initialise an msrpc service *************************************************************************/ -void msrpc_service_init(void) +void msrpc_service_init(char* service_name) { + add_msrpc_command_processor( pipe_name, service_name, api_wkssvc_rpc ); } /**************************************************************************** @@ -91,7 +92,6 @@ BOOL reload_services(BOOL test) setup_logging(argv[0],False); fstrcpy(pipe_name, "wkssvc"); slprintf(debugf, sizeof(debugf), "%s/log.%s", LOGFILEBASE, pipe_name); - add_msrpc_command_processor( pipe_name, argv[0], api_wkssvc_rpc ); return msrpc_main(argc, argv); } |