r21051: More function refactoring... Added #if 0 for
authorJeremy Allison <jra@samba.org>
Tue, 30 Jan 2007 01:46:14 +0000 (01:46 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:17:30 +0000 (12:17 -0500)
questionable practice (ignoring bad fsp on
handle based call).
Jeremy.

source/smbd/trans2.c

index 1d577f8183dff78e61a5416827703b23d8e0ee43..90365348a0cd1bd7967eae640bf2bca54d24cb23 100644 (file)
@@ -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 :