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:
parent
899a9f0dce
commit
2571ba0213
@ -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(¶m , 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(¶m );
|
if(rparam)
|
||||||
prs_mem_free(&rparam);
|
free(rparam);
|
||||||
prs_mem_free(&rdata );
|
if(rdata)
|
||||||
|
free(rdata);
|
||||||
|
|
||||||
return state_set;
|
return state_set;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user