diff options
author | Jeremy Allison <jra@samba.org> | 1998-07-11 01:25:02 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 1998-07-11 01:25:02 +0000 |
commit | ebad4278b72289f10ce7afa72a137f5e3e998b01 (patch) | |
tree | 091e2d39460dab7b85652d554237a3b248e27a82 /source3/smbd/nttrans.c | |
parent | 5ffb30858f3b9181c90e50f6a3d791e017be3f7e (diff) | |
download | samba-ebad4278b72289f10ce7afa72a137f5e3e998b01.tar.gz samba-ebad4278b72289f10ce7afa72a137f5e3e998b01.tar.xz samba-ebad4278b72289f10ce7afa72a137f5e3e998b01.zip |
nntrans.c: Fully implemented transact rename.
reply.c: Added NT specific rename if exists flag to rename_internals().
smb.h: Added NT rename flag.
Jeremy.
(This used to be commit b398f7daf58459db6e8d3496502abeb634ac2183)
Diffstat (limited to 'source3/smbd/nttrans.c')
-rw-r--r-- | source3/smbd/nttrans.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/source3/smbd/nttrans.c b/source3/smbd/nttrans.c index c452e945c7c..fa47bc7a17e 100644 --- a/source3/smbd/nttrans.c +++ b/source3/smbd/nttrans.c @@ -469,6 +469,7 @@ int reply_ntcreate_and_X(char *inbuf,char *outbuf,int length,int bufsize) set_posix_case_semantics(file_attributes); StrnCpy(fname,smb_buf(inbuf),fname_len); + fname[fname_len] = '\0'; unix_convert(fname,cnum,0,&bad_path); fnum = find_free_file(); @@ -622,6 +623,7 @@ static int call_nt_transact_create(char *inbuf, char *outbuf, int bufsize, int c set_posix_case_semantics(file_attributes); StrnCpy(fname,params+53,fname_len); + fname[fname_len] = '\0'; unix_convert(fname,cnum,0,&bad_path); fnum = find_free_file(); @@ -753,16 +755,27 @@ static int call_nt_transact_rename(char *inbuf, char *outbuf, int bufsize, int c { char *params = *pparams; pstring new_name; - pstring old_name; int fnum = SVAL(params, 0); - uint16 rename_flags = SVAL(params,2); + BOOL replace_if_exists = (SVAL(params,2) & RENAME_REPLACE_IF_EXISTS) ? True : False; uint32 total_parameter_count = IVAL(inbuf, smb_nt_TotalParameterCount); uint32 fname_len = MIN((((uint32)IVAL(inbuf,smb_nt_TotalParameterCount)-4)), ((uint32)sizeof(fname)-1)); + int outsize = 0; + CHECK_FNUM(fnum, cnum); StrnCpy(new_name,params+4,fname_len); - unix_convert(new_name,cnum,0,&bad_path); + new_name[fname_len] = '\0'; + + outsize = rename_internals(inbuf, outbuf, Files[fnum].name, newname, replace_if_exists); + if(outsize == 0) { + /* + * Rename was successful. + */ + send_nt_replies(outbuf, bufsize, NULL, 0, NULL, 0); + outsize = -1; + } + return(outsize); } /**************************************************************************** |