diff options
author | Luke Leighton <lkcl@samba.org> | 1997-11-01 19:20:29 +0000 |
---|---|---|
committer | Luke Leighton <lkcl@samba.org> | 1997-11-01 19:20:29 +0000 |
commit | 54c245be152e5fa8f5b535c93f8d11c5f591e23f (patch) | |
tree | a2783d989b2b0a7db1f8840e725d44803e6c733f | |
parent | 4525c3b6e57bcc7b878eb4194e21603f33e9d7ea (diff) | |
download | samba-54c245be152e5fa8f5b535c93f8d11c5f591e23f.tar.gz samba-54c245be152e5fa8f5b535c93f8d11c5f591e23f.tar.xz samba-54c245be152e5fa8f5b535c93f8d11c5f591e23f.zip |
client.c clientutil.c proto.h
rpc_pipes/ntclientlsa.c rpc_pipes/ntclientnet.c
rpc_pipes/ntclientpipe.c :
added extra argument to cli_call_api() to allow specifying the length of
the \PIPE\ name. it appears that, like when the name of the pipe is NULL
and OS-2 requires two extra bytes _after_ the NULL name, that NT requires
two bytes after the NULL-terminated name "\PIPE\". these two bytes vary,
but values seen so far are: 0x72 0x70; 0x63 0x65; 0x44 0x65; 0x4E 0x00.
there appears not to be much logic to this. purpose unknown.
ntclient.c:
put Set Named Pipe Handle State call directly after SMBopenX call.
-rw-r--r-- | source/client/client.c | 18 | ||||
-rw-r--r-- | source/client/clientutil.c | 13 | ||||
-rw-r--r-- | source/client/ntclient.c | 24 | ||||
-rw-r--r-- | source/include/proto.h | 5 |
4 files changed, 32 insertions, 28 deletions
diff --git a/source/client/client.c b/source/client/client.c index f1ab4410a9f..52f4b837a6e 100644 --- a/source/client/client.c +++ b/source/client/client.c @@ -551,7 +551,7 @@ static int do_long_dir(char *inbuf,char *outbuf,char *Mask,int attribute,void (* } /* ??? original code added 1 pad byte after param */ - cli_send_trans_request(outbuf,SMBtrans2,NULL,FID_UNUSED,0, + cli_send_trans_request(outbuf,SMBtrans2,NULL,0,FID_UNUSED,0, NULL,param,&setup, 0,12+strlen(mask)+1,1, BUFFER_SIZE,10,0); @@ -2137,7 +2137,7 @@ static void do_cancel(int job) SSVAL(p,0,job); p += 2; - if (cli_call_api(PIPE_LANMAN, PTR_DIFF(p,param),0, 0, + if (cli_call_api(PIPE_LANMAN, 0,PTR_DIFF(p,param),0, 0, 6, 1000, &rprcnt,&rdrcnt, param,NULL, NULL, @@ -2211,7 +2211,7 @@ static void cmd_stat(char *inbuf,char *outbuf) strcpy(p,cur_dir); strcat(p,buf); - cli_send_trans_request(outbuf,SMBtrans2,NULL,FID_UNUSED,0, + cli_send_trans_request(outbuf,SMBtrans2,NULL,0,FID_UNUSED,0, NULL,param,&setup, 0,6 + strlen(p)+1,1, BUFFER_SIZE,2,0); @@ -2473,7 +2473,7 @@ static void cmd_p_queue_4(char *inbuf,char *outbuf ) p = skip_string(p,1); DEBUG(1,("Calling DosPrintJobEnum()...\n")); - if( cli_call_api(PIPE_LANMAN, PTR_DIFF(p,param), 0, + if( cli_call_api(PIPE_LANMAN, 0,PTR_DIFF(p,param), 0, 10, 0, 4096, &rprcnt, &rdrcnt, param, NULL, NULL, @@ -2580,7 +2580,7 @@ static void cmd_qinfo(char *inbuf,char *outbuf ) p = skip_string(p,1); DEBUG(1,("Calling DosPrintQueueGetInfo()...\n")); - if( cli_call_api(PIPE_LANMAN, PTR_DIFF(p,param), 0, 0, + if( cli_call_api(PIPE_LANMAN, 0,PTR_DIFF(p,param), 0, 0, 10, 4096, &rprcnt, &rdrcnt, param, NULL, NULL, @@ -2976,7 +2976,7 @@ static BOOL browse_host(BOOL sort) SSVAL(p,2,BUFFER_SIZE); p += 4; - if (cli_call_api(PIPE_LANMAN, PTR_DIFF(p,param),0, 0, + if (cli_call_api(PIPE_LANMAN, 0,PTR_DIFF(p,param),0, 0, 1024, BUFFER_SIZE, &rprcnt,&rdrcnt, param,NULL, NULL, @@ -3068,7 +3068,7 @@ static void server_info() SSVAL(p,2,1000); p += 6; - if (cli_call_api(PIPE_LANMAN, PTR_DIFF(p,param),0, 0, + if (cli_call_api(PIPE_LANMAN, 0,PTR_DIFF(p,param),0, 0, 6, 1000, &rprcnt,&rdrcnt, param,NULL, NULL, @@ -3143,7 +3143,7 @@ static BOOL list_servers(char *wk_grp) /* first ask for a list of servers in this workgroup */ SIVAL(svtype_p,0,SV_TYPE_ALL); - if (cli_call_api(PIPE_LANMAN, PTR_DIFF(p+4,param),0, 0, + if (cli_call_api(PIPE_LANMAN, 0,PTR_DIFF(p+4,param),0, 0, 8, BUFFER_SIZE - SAFETY_MARGIN, &rprcnt,&rdrcnt, param,NULL, NULL, @@ -3182,7 +3182,7 @@ static BOOL list_servers(char *wk_grp) /* now ask for a list of workgroups */ SIVAL(svtype_p,0,SV_TYPE_DOMAIN_ENUM); - if (cli_call_api(PIPE_LANMAN, PTR_DIFF(p+4,param),0, 0, + if (cli_call_api(PIPE_LANMAN, 0,PTR_DIFF(p+4,param),0, 0, 8, BUFFER_SIZE - SAFETY_MARGIN, &rprcnt,&rdrcnt, param,NULL, NULL, diff --git a/source/client/clientutil.c b/source/client/clientutil.c index 8924e692aa9..1d4f3fcb433 100644 --- a/source/client/clientutil.c +++ b/source/client/clientutil.c @@ -92,7 +92,8 @@ void cli_setup_pkt(char *outbuf) /**************************************************************************** call a remote api ****************************************************************************/ -BOOL cli_call_api(char *pipe_name, int prcnt,int drcnt, int srcnt, +BOOL cli_call_api(char *pipe_name, int pipe_name_len, + int prcnt,int drcnt, int srcnt, int mprcnt,int mdrcnt, int *rprcnt,int *rdrcnt, char *param,char *data, uint16 *setup, @@ -104,7 +105,9 @@ BOOL cli_call_api(char *pipe_name, int prcnt,int drcnt, int srcnt, if (!inbuf) inbuf = (char *)malloc(BUFFER_SIZE + SAFETY_MARGIN); if (!outbuf) outbuf = (char *)malloc(BUFFER_SIZE + SAFETY_MARGIN); - cli_send_trans_request(outbuf,SMBtrans,pipe_name, 0,0, + if (pipe_name_len == 0) pipe_name_len = strlen(pipe_name); + + cli_send_trans_request(outbuf,SMBtrans,pipe_name, pipe_name_len, 0,0, data, param, setup, drcnt, prcnt, srcnt, mdrcnt, mprcnt, 0); @@ -194,7 +197,7 @@ BOOL cli_receive_trans_response(char *inbuf,int trans, send a SMB trans or trans2 request ****************************************************************************/ BOOL cli_send_trans_request(char *outbuf,int trans, - char *name,int fid,int flags, + char *name,int name_len, int fid,int flags, char *data,char *param,uint16 *setup, int ldata,int lparam,int lsetup, int mdata,int mparam,int msetup) @@ -215,7 +218,7 @@ BOOL cli_send_trans_request(char *outbuf,int trans, SSVAL(outbuf,smb_tid,cnum); cli_setup_pkt(outbuf); - outparam = smb_buf(outbuf)+(trans==SMBtrans ? strlen(name)+1 : 3); + outparam = smb_buf(outbuf)+(trans==SMBtrans ? name_len+1 : 3); outdata = outparam+this_lparam; /* primary request */ @@ -235,7 +238,7 @@ BOOL cli_send_trans_request(char *outbuf,int trans, SSVAL(outbuf,smb_setup+i*SIZEOFWORD,setup[i]); p = smb_buf(outbuf); if (trans==SMBtrans) - strcpy(p,name); /* name[] */ + memcpy(p,name, name_len+1); /* name[] */ else { *p++ = 0; /* put in a null smb_name */ diff --git a/source/client/ntclient.c b/source/client/ntclient.c index 65d9da9d5f9..59b4a7fe786 100644 --- a/source/client/ntclient.c +++ b/source/client/ntclient.c @@ -106,6 +106,13 @@ BOOL do_nt_login(char *desthost, char *myhostname, return False; } + /**************** Set Named Pipe State ***************/ + if (!rpc_pipe_set_hnd_state(PIPE_LSARPC, fnum, 0x4300)) + { + free(inbuf); free(outbuf); + return False; + } + /******************* bind request on \PIPE\lsarpc *****************/ /* create and send a MSRPC command with api LSA_OPENPOLICY */ @@ -132,13 +139,6 @@ BOOL do_nt_login(char *desthost, char *myhostname, return False; } - /**************** Set Named Pipe State ***************/ - if (!rpc_pipe_set_hnd_state(PIPE_LSARPC, fnum, 0x4300)) - { - free(inbuf); free(outbuf); - return False; - } - /******************* Open Policy ********************/ fstrcpy(server_name, ("\\\\")); @@ -198,16 +198,16 @@ BOOL do_nt_login(char *desthost, char *myhostname, return False; } - /******************* bind request on \PIPE\NETLOGON *****************/ - - if (!rpc_pipe_bind(PIPE_NETLOGON, fnum, ++call_id, &abstract, &transfer)) + /**************** Set Named Pipe State ***************/ + if (!rpc_pipe_set_hnd_state(PIPE_NETLOGON, fnum, 0x4300)) { free(inbuf); free(outbuf); return False; } - /**************** Set Named Pipe State ***************/ - if (!rpc_pipe_set_hnd_state(PIPE_NETLOGON, fnum, 0x4300)) + /******************* bind request on \PIPE\NETLOGON *****************/ + + if (!rpc_pipe_bind(PIPE_NETLOGON, fnum, ++call_id, &abstract, &transfer)) { free(inbuf); free(outbuf); return False; diff --git a/source/include/proto.h b/source/include/proto.h index 7e4ed43aa0b..56bb1eff448 100644 --- a/source/include/proto.h +++ b/source/include/proto.h @@ -73,7 +73,8 @@ void cli_sockopt(struct cli_state *cli, char *options); /*The following definitions come from clientutil.c */ void cli_setup_pkt(char *outbuf); -BOOL cli_call_api(char *pipe_name, int prcnt,int drcnt, int srcnt, +BOOL cli_call_api(char *pipe_name, int pipe_name_len, + int prcnt,int drcnt, int srcnt, int mprcnt,int mdrcnt, int *rprcnt,int *rdrcnt, char *param,char *data, uint16 *setup, @@ -82,7 +83,7 @@ BOOL cli_receive_trans_response(char *inbuf,int trans, int *data_len,int *param_len, char **data,char **param); BOOL cli_send_trans_request(char *outbuf,int trans, - char *name,int fid,int flags, + char *name,int name_len, int fid,int flags, char *data,char *param,uint16 *setup, int ldata,int lparam,int lsetup, int mdata,int mparam,int msetup); |