diff options
author | Jeremy Allison <jra@samba.org> | 2007-03-09 18:33:16 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:18:32 -0500 |
commit | 257d2e0d2a6cd4c2ea62399ec97ada46dd8c395c (patch) | |
tree | 0f8a053523bcc4ac424b020ed0fd58614e4350a0 /source3 | |
parent | 10820162f1cfbfd77fae84327c21d81ff8a6881c (diff) | |
download | samba-257d2e0d2a6cd4c2ea62399ec97ada46dd8c395c.tar.gz samba-257d2e0d2a6cd4c2ea62399ec97ada46dd8c395c.tar.bz2 samba-257d2e0d2a6cd4c2ea62399ec97ada46dd8c395c.zip |
r21777: As Stevef requested and the Apple guys agreed, make
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)
Diffstat (limited to 'source3')
-rw-r--r-- | source3/include/trans2.h | 4 | ||||
-rw-r--r-- | source3/libsmb/clifile.c | 7 | ||||
-rw-r--r-- | source3/smbd/trans2.c | 12 |
3 files changed, 14 insertions, 9 deletions
diff --git a/source3/include/trans2.h b/source3/include/trans2.h index 8d372dcde3..be635462e1 100644 --- a/source3/include/trans2.h +++ b/source3/include/trans2.h @@ -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. */ diff --git a/source3/libsmb/clifile.c b/source3/libsmb/clifile.c index 76eddd3f63..ce2081a81e 100644 --- a/source3/libsmb/clifile.c +++ b/source3/libsmb/clifile.c @@ -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 */ diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c index a298a258f0..5401aac15d 100644 --- a/source3/smbd/trans2.c +++ b/source3/smbd/trans2.c @@ -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; |