r21777: As Stevef requested and the Apple guys agreed, make
authorJeremy Allison <jra@samba.org>
Fri, 9 Mar 2007 18:33:16 +0000 (18:33 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:18:32 +0000 (12:18 -0500)
mode_t in posix_open/posix_mkdir -> 8 bytes to match
the SET_UNIX_INFO_BASIC call. Steve is updating the
Wikki.
Jeremy.
(This used to be commit 2f1c95ac7718c1d2a75367ba712edd6b57069432)

source3/include/trans2.h
source3/libsmb/clifile.c
source3/smbd/trans2.c

index 8d372dcde3ce9d1f52681d58e94f643a80f49082..be635462e1c61d90b00bf2dcf6041cd250203046 100644 (file)
@@ -717,8 +717,8 @@ enum smb_whoami_flags {
 /* Definition of request data block for SMB_POSIX_PATH_OPEN */
 /*
   [4 bytes] flags (as smb_ntcreate_Flags).
-  [4 bytes] open_mode
-  [4 bytes] mode_t             - same encoding as "Standard UNIX permissions" above.
+  [4 bytes] open_mode                  - SMB_O_xxx flags above.
+  [8 bytes] mode_t (permissions)       - same encoding as "Standard UNIX permissions" above in SMB_SET_FILE_UNIX_BASIC.
   [2 bytes] ret_info_level     - optimization. Info level to be returned.
 */
 
index 76eddd3f638a973e9c2b824042710f62a6448e1f..ce2081a81e1f3559b1d3db928bb9669721819946 100644 (file)
@@ -1839,7 +1839,7 @@ static int cli_posix_open_internal(struct cli_state *cli, const char *fname, int
        unsigned int param_len = 0;
        uint16 setup = TRANSACT2_SETPATHINFO;
        char param[sizeof(pstring)+6];
-       char data[14];
+       char data[18];
        char *rparam=NULL, *rdata=NULL;
        char *p;
        int fnum = -1;
@@ -1861,9 +1861,10 @@ static int cli_posix_open_internal(struct cli_state *cli, const char *fname, int
        SIVAL(p,0,0); /* No oplock. */
        SIVAL(p,4,wire_flags);
        SIVAL(p,8,unix_perms_to_wire(mode));
-       SSVAL(p,12,SMB_NO_INFO_LEVEL_RETURNED); /* No info level returned. */
+       SIVAL(p,12,0); /* Top bits of perms currently undefined. */
+       SSVAL(p,16,SMB_NO_INFO_LEVEL_RETURNED); /* No info level returned. */
 
-       data_len = 14;
+       data_len = 18;
 
        if (!cli_send_trans(cli, SMBtrans2,
                NULL,                        /* name */
index a298a258f0fb34ae0a5155f89b3e8ba7e303df74..5401aac15d71e56ed0399dc0e11ffa822c4a19d6 100644 (file)
@@ -5229,11 +5229,13 @@ static NTSTATUS smb_posix_mkdir(connection_struct *conn,
        uint16 info_level_return = 0;
        char *pdata = *ppdata;
 
-       if (total_data < 10) {
+       if (total_data < 18) {
                return NT_STATUS_INVALID_PARAMETER;
        }
 
        raw_unixmode = IVAL(pdata,8);
+       /* Next 4 bytes are not yet defined. */
+
        status = unix_perms_from_wire(conn, psbuf, raw_unixmode, PERM_NEW_DIR, &unixmode);
        if (!NT_STATUS_IS_OK(status)) {
                return status;
@@ -5259,7 +5261,7 @@ static NTSTATUS smb_posix_mkdir(connection_struct *conn,
                 close_file(fsp, NORMAL_CLOSE);
         }
 
-       info_level_return = SVAL(pdata,12);
+       info_level_return = SVAL(pdata,16);
  
        if (info_level_return == SMB_QUERY_FILE_UNIX_BASIC) {
                *pdata_return_size = 8 + SMB_FILE_UNIX_BASIC_SIZE;
@@ -5321,7 +5323,7 @@ static NTSTATUS smb_posix_open(connection_struct *conn,
        int info = 0;
        uint16 info_level_return = 0;
 
-       if (total_data < 14) {
+       if (total_data < 18) {
                return NT_STATUS_INVALID_PARAMETER;
        }
 
@@ -5373,6 +5375,8 @@ static NTSTATUS smb_posix_open(connection_struct *conn,
        }
 
        raw_unixmode = IVAL(pdata,8);
+       /* Next 4 bytes are not yet defined. */
+
        status = unix_perms_from_wire(conn,
                                psbuf,
                                raw_unixmode,
@@ -5424,7 +5428,7 @@ static NTSTATUS smb_posix_open(connection_struct *conn,
                extended_oplock_granted = True;
        }
 
-       info_level_return = SVAL(pdata,12);
+       info_level_return = SVAL(pdata,16);
  
        if (info_level_return == SMB_QUERY_FILE_UNIX_BASIC) {
                *pdata_return_size = 8 + SMB_FILE_UNIX_BASIC_SIZE;