mirror of
https://github.com/samba-team/samba.git
synced 2024-12-27 03:21:53 +03:00
r21051: More function refactoring... Added #if 0 for
questionable practice (ignoring bad fsp on
handle based call).
Jeremy.
(This used to be commit 5a8c9286c3
)
This commit is contained in:
parent
7c5221a777
commit
c219ebd7e8
@ -3745,8 +3745,7 @@ NTSTATUS hardlink_internals(connection_struct *conn, char *oldname, char *newnam
|
||||
Deal with SMB_INFO_SET_EA.
|
||||
****************************************************************************/
|
||||
|
||||
static int smb_info_set_ea(
|
||||
connection_struct *conn,
|
||||
static int smb_info_set_ea(connection_struct *conn,
|
||||
char *outbuf,
|
||||
int bufsize,
|
||||
char *params,
|
||||
@ -3826,12 +3825,12 @@ static int smb_set_file_disposition_info(connection_struct *conn,
|
||||
return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
|
||||
}
|
||||
|
||||
delete_on_close = (CVAL(pdata,0) ? True : False);
|
||||
|
||||
if (fsp == NULL) {
|
||||
return(UNIXERROR(ERRDOS,ERRbadfid));
|
||||
}
|
||||
|
||||
delete_on_close = (CVAL(pdata,0) ? True : False);
|
||||
|
||||
status = can_set_delete_on_close(fsp, delete_on_close, dosmode);
|
||||
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
@ -3848,6 +3847,47 @@ static int smb_set_file_disposition_info(connection_struct *conn,
|
||||
return -1;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Deal with SMB_FILE_POSITION_INFORMATION.
|
||||
****************************************************************************/
|
||||
|
||||
static int smb_file_position_information(connection_struct *conn,
|
||||
char *outbuf,
|
||||
int bufsize,
|
||||
char *params,
|
||||
int total_params,
|
||||
char *pdata,
|
||||
int total_data,
|
||||
unsigned int max_data_bytes,
|
||||
files_struct *fsp)
|
||||
{
|
||||
SMB_BIG_UINT position_information;
|
||||
|
||||
if (total_data < 8) {
|
||||
return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
|
||||
}
|
||||
|
||||
position_information = (SMB_BIG_UINT)IVAL(pdata,0);
|
||||
#ifdef LARGE_SMB_OFF_T
|
||||
position_information |= (((SMB_BIG_UINT)IVAL(pdata,4)) << 32);
|
||||
#else /* LARGE_SMB_OFF_T */
|
||||
if (IVAL(pdata,4) != 0) {
|
||||
/* more than 32 bits? */
|
||||
return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
|
||||
}
|
||||
#endif /* LARGE_SMB_OFF_T */
|
||||
if (fsp) {
|
||||
DEBUG(10,("call_trans2setfilepathinfo: Set file position information for file %s to %.0f\n",
|
||||
fsp->fsp_name, (double)position_information ));
|
||||
fsp->fh->position_information = position_information;
|
||||
}
|
||||
|
||||
/* We're done. We only set position info in this call. */
|
||||
SSVAL(params,0,0);
|
||||
send_trans2_replies(outbuf, bufsize, params, 2, pdata, 0, max_data_bytes);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Reply to a TRANS2_SETFILEINFO (set file info by fileid or pathname).
|
||||
****************************************************************************/
|
||||
@ -4152,15 +4192,12 @@ static int call_trans2setfilepathinfo(connection_struct *conn, char *inbuf, char
|
||||
case SMB_FILE_DISPOSITION_INFORMATION:
|
||||
case SMB_SET_FILE_DISPOSITION_INFO: /* Set delete on close for open file. */
|
||||
{
|
||||
if (total_data < 1) {
|
||||
return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
|
||||
}
|
||||
|
||||
#if 0 /* JRA - should we just ignore this on a path ? */
|
||||
/* Just ignore this set on a path. */
|
||||
if (tran_call != TRANSACT2_SETFILEINFO) {
|
||||
break;
|
||||
}
|
||||
|
||||
#endif
|
||||
return smb_set_file_disposition_info(conn,
|
||||
outbuf,
|
||||
bufsize,
|
||||
@ -4175,31 +4212,15 @@ static int call_trans2setfilepathinfo(connection_struct *conn, char *inbuf, char
|
||||
|
||||
case SMB_FILE_POSITION_INFORMATION:
|
||||
{
|
||||
SMB_BIG_UINT position_information;
|
||||
|
||||
if (total_data < 8) {
|
||||
return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
|
||||
}
|
||||
|
||||
position_information = (SMB_BIG_UINT)IVAL(pdata,0);
|
||||
#ifdef LARGE_SMB_OFF_T
|
||||
position_information |= (((SMB_BIG_UINT)IVAL(pdata,4)) << 32);
|
||||
#else /* LARGE_SMB_OFF_T */
|
||||
if (IVAL(pdata,4) != 0) {
|
||||
/* more than 32 bits? */
|
||||
return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
|
||||
}
|
||||
#endif /* LARGE_SMB_OFF_T */
|
||||
DEBUG(10,("call_trans2setfilepathinfo: Set file position information for file %s to %.0f\n",
|
||||
fname, (double)position_information ));
|
||||
if (fsp) {
|
||||
fsp->fh->position_information = position_information;
|
||||
}
|
||||
|
||||
/* We're done. We only get position info in this call. */
|
||||
SSVAL(params,0,0);
|
||||
send_trans2_replies(outbuf, bufsize, params, 2, *ppdata, 0, max_data_bytes);
|
||||
return(-1);
|
||||
return smb_file_position_information(conn,
|
||||
outbuf,
|
||||
bufsize,
|
||||
params,
|
||||
total_params,
|
||||
*ppdata,
|
||||
total_data,
|
||||
max_data_bytes,
|
||||
fsp);
|
||||
}
|
||||
|
||||
/* From tridge Samba4 :
|
||||
|
Loading…
Reference in New Issue
Block a user