1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-24 13:57:43 +03:00

cli_pipe.c: Corrected cli_api_pipe() calls.

Jeremy.
This commit is contained in:
Jeremy Allison -
parent 899a9f0dce
commit 2571ba0213

View File

@ -165,7 +165,22 @@ BOOL rpc_api_pipe(struct cli_state *cli, uint16 cmd, uint16 fnum,
BOOL first = True; BOOL first = True;
BOOL last = True; BOOL last = True;
/* prepare return data and params */ /*
* Setup the pointers from the incoming.
*/
char *pparams = param ? param->data->data;
int params_len = param ? param->data->data_used;
char *pdata = data ? data->data->data;
int data_len = data ? data->data->data_used;
/*
* Setup the pointers to the outgoing.
*/
char **pp_ret_params = rparam ? &rparam->data->data : NULL;
uint32 *p_ret_params_len = rparam ? &rparam->data->data_used : NULL;
char **pp_ret_data = rdata ? &rdata->data->data : NULL;
uint32 *p_ret_data_len = rdata ? &rdata->data->data_used : NULL;
/* create setup parameters. */ /* create setup parameters. */
setup[0] = cmd; setup[0] = cmd;
@ -173,16 +188,11 @@ BOOL rpc_api_pipe(struct cli_state *cli, uint16 cmd, uint16 fnum,
/* send the data: receive a response. */ /* send the data: receive a response. */
if (!cli_api_pipe(cli, "\\PIPE\\\0\0\0", 8, if (!cli_api_pipe(cli, "\\PIPE\\\0\0\0", 8,
param != NULL ? param->data->data_used : 0, setup, 2, 0, /* Setup, length, max */
data != NULL ? data ->data->data_used : 0, pparams, params_len, 0, /* Params, length, max */
2, pdata, data_len, 1024, /* data, length, max */
0, pp_ret_params, p_ret_params_len, /* return params, len */
data != NULL ? 1024 : 0 , pp_ret_data, p_ret_data_len)) /* return data, len */
param != NULL ? param->data->data : NULL,
data != NULL ? data ->data->data : NULL,
setup,
rparam != NULL ? rparam->data : NULL,
rdata != NULL ? rdata ->data : NULL))
{ {
DEBUG(5, ("cli_pipe: return critical error\n")); DEBUG(5, ("cli_pipe: return critical error\n"));
return False; return False;
@ -200,6 +210,11 @@ BOOL rpc_api_pipe(struct cli_state *cli, uint16 cmd, uint16 fnum,
rdata->data->offset.end = rdata->data->data_used; rdata->data->offset.end = rdata->data->data_used;
rdata->offset = 0; rdata->offset = 0;
/* cli_api_pipe does an ordinary Realloc - we have no margins now. */
rdata->data->margin = 0;
if(rparam)
rparam->data->margin = 0;
if (!rpc_check_hdr(rdata, &pkt_type, &first, &last, &len)) if (!rpc_check_hdr(rdata, &pkt_type, &first, &last, &len))
return False; return False;
@ -422,27 +437,21 @@ do an rpc bind
BOOL rpc_pipe_set_hnd_state(struct cli_state *cli, char *pipe_name, BOOL rpc_pipe_set_hnd_state(struct cli_state *cli, char *pipe_name,
uint16 fnum, uint16 device_state) uint16 fnum, uint16 device_state)
{ {
prs_struct param;
prs_struct rdata;
prs_struct rparam;
BOOL state_set = False; BOOL state_set = False;
char param[2];
uint16 setup[2]; /* only need 2 uint16 setup parameters */ uint16 setup[2]; /* only need 2 uint16 setup parameters */
char *rparam = NULL;
char *rdata = NULL;
uint32 rparam_len, rdata_len;
if (pipe_name == NULL) if (pipe_name == NULL)
return False; return False;
prs_init(&param , 2, 4, 0 , False);
prs_init(&rdata , 0, 4, SAFETY_MARGIN, True );
prs_init(&rparam, 0, 4, SAFETY_MARGIN, True );
param.data->offset.start = 0;
param.data->offset.end = 2;
DEBUG(5,("Set Handle state Pipe[%x]: %s - device state:%x\n", DEBUG(5,("Set Handle state Pipe[%x]: %s - device state:%x\n",
fnum, pipe_name, device_state)); fnum, pipe_name, device_state));
/* create data parameters: device state */ /* create parameters: device state */
SSVAL(param.data->data, 0, device_state); SSVAL(param, 0, device_state);
/* create setup parameters. */ /* create setup parameters. */
setup[0] = 0x0001; setup[0] = 0x0001;
@ -450,18 +459,20 @@ BOOL rpc_pipe_set_hnd_state(struct cli_state *cli, char *pipe_name,
/* send the data on \PIPE\ */ /* send the data on \PIPE\ */
if (cli_api_pipe(cli, "\\PIPE\\\0\0\0", 8, if (cli_api_pipe(cli, "\\PIPE\\\0\0\0", 8,
2, 0, 2, setup, 2, 0, /* setup, length, max */
0, 1024, param, 2, 0, /* param, length, max */
param.data->data, NULL, setup, NULL, 0, 1024, /* data, length, max */
rparam.data, rdata.data)) &rparam, rparam_len, /* return param, length */
&rdata, rdata_len)) /* return data, length */
{ {
DEBUG(5, ("Set Handle state: return OK\n")); DEBUG(5, ("Set Handle state: return OK\n"));
state_set = True; state_set = True;
} }
prs_mem_free(&param ); if(rparam)
prs_mem_free(&rparam); free(rparam);
prs_mem_free(&rdata ); if(rdata)
free(rdata);
return state_set; return state_set;
} }