1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-23 17:34:34 +03:00

r24092: Convert do_ntcreate_pipe_open to the new API

nt_open_pipe_new() is a copy of nt_open_pipe(). It will stick for a bit
until do_nt_transact_create_pipe is converted as well.
This commit is contained in:
Volker Lendecke 2007-07-31 09:22:16 +00:00 committed by Gerald (Jerry) Carter
parent 28025fc17e
commit 247d6baaed

View File

@ -321,7 +321,8 @@ static struct case_semantics_state *set_posix_case_semantics(TALLOC_CTX *mem_ctx
}
/****************************************************************************
Reply to an NT create and X call on a pipe.
Reply to an NT create and X call on a pipe -- this will die when all
callers are converted to nt_open_pipe_new
****************************************************************************/
static int nt_open_pipe(char *fname, connection_struct *conn,
@ -369,24 +370,75 @@ static int nt_open_pipe(char *fname, connection_struct *conn,
return 0;
}
static void nt_open_pipe_new(char *fname, connection_struct *conn,
struct smb_request *req, int *ppnum)
{
smb_np_struct *p = NULL;
int i;
DEBUG(4,("nt_open_pipe: Opening pipe %s.\n", fname));
/* See if it is one we want to handle. */
if (lp_disable_spoolss() && strequal(fname, "\\spoolss")) {
reply_botherror(req, NT_STATUS_OBJECT_NAME_NOT_FOUND,
ERRDOS, ERRbadpipe);
return;
}
for( i = 0; known_nt_pipes[i]; i++ ) {
if( strequal(fname,known_nt_pipes[i])) {
break;
}
}
if ( known_nt_pipes[i] == NULL ) {
reply_botherror(req, NT_STATUS_OBJECT_NAME_NOT_FOUND,
ERRDOS, ERRbadpipe);
return;
}
/* Strip \\ off the name. */
fname++;
DEBUG(3,("nt_open_pipe: Known pipe %s opening.\n", fname));
p = open_rpc_pipe_p(fname, conn, req->vuid);
if (!p) {
reply_doserror(req, ERRSRV, ERRnofids);
return;
}
/* TODO: Add pipe to db */
if ( !store_pipe_opendb( p ) ) {
DEBUG(3,("nt_open_pipe: failed to store %s pipe open.\n", fname));
}
*ppnum = p->pnum;
return;
}
/****************************************************************************
Reply to an NT create and X call for pipes.
****************************************************************************/
static int do_ntcreate_pipe_open(connection_struct *conn,
char *inbuf,char *outbuf,int length,int bufsize)
static void do_ntcreate_pipe_open(connection_struct *conn,
struct smb_request *req)
{
pstring fname;
int ret;
int pnum = -1;
char *p = NULL;
uint32 flags = IVAL(inbuf,smb_ntcreate_Flags);
uint32 flags = IVAL(req->inbuf,smb_ntcreate_Flags);
srvstr_pull_buf(inbuf, SVAL(inbuf, smb_flg2), fname, smb_buf(inbuf),
sizeof(fname), STR_TERMINATE);
srvstr_pull_buf((char *)req->inbuf, req->flags2, fname,
smb_buf(req->inbuf), sizeof(fname), STR_TERMINATE);
if ((ret = nt_open_pipe(fname, conn, inbuf, outbuf, &pnum)) != 0) {
return ret;
nt_open_pipe_new(fname, conn, req, &pnum);
if (req->outbuf) {
/* error reply */
return;
}
/*
@ -399,13 +451,13 @@ static int do_ntcreate_pipe_open(connection_struct *conn,
* the wcnt to 42 ? It's definately
* what happens on the wire....
*/
set_message(inbuf,outbuf,50,0,True);
SCVAL(outbuf,smb_wct,42);
reply_outbuf(req, 50, 0);
SCVAL(req->outbuf,smb_wct,42);
} else {
set_message(inbuf,outbuf,34,0,True);
reply_outbuf(req, 34, 0);
}
p = outbuf + smb_vwv2;
p = (char *)req->outbuf + smb_vwv2;
p++;
SSVAL(p,0,pnum);
p += 2;
@ -433,7 +485,7 @@ static int do_ntcreate_pipe_open(connection_struct *conn,
DEBUG(5,("do_ntcreate_pipe_open: open pipe = %s\n", fname));
return chain_reply(inbuf,&outbuf,length,bufsize);
chain_reply_new(req);
}
/****************************************************************************
@ -545,17 +597,7 @@ void reply_ntcreate_and_X(connection_struct *conn,
if (IS_IPC(conn)) {
if (lp_nt_pipe_support()) {
char *inbuf, *outbuf;
int length, bufsize;
if (!reply_prep_legacy(req, &inbuf, &outbuf,
&length, &bufsize)) {
reply_nterror(req, NT_STATUS_NO_MEMORY);
return;
}
reply_post_legacy(req, do_ntcreate_pipe_open(
conn, inbuf, outbuf,
length, bufsize));
do_ntcreate_pipe_open(conn, req);
END_PROFILE(SMBntcreateX);
return;
} else {