diff options
Diffstat (limited to 'source/libsmb/clifile.c')
-rw-r--r-- | source/libsmb/clifile.c | 63 |
1 files changed, 32 insertions, 31 deletions
diff --git a/source/libsmb/clifile.c b/source/libsmb/clifile.c index 07b1ff6b6f5..cce36613b74 100644 --- a/source/libsmb/clifile.c +++ b/source/libsmb/clifile.c @@ -1,5 +1,6 @@ /* - Unix SMB/CIFS implementation. + Unix SMB/Netbios implementation. + Version 3.0 client file operations Copyright (C) Andrew Tridgell 1994-1998 Copyright (C) Jeremy Allison 2001-2002 @@ -41,11 +42,11 @@ static BOOL cli_link_internal(struct cli_state *cli, const char *fname_src, cons SSVAL(param,0,hard_link ? SMB_SET_FILE_UNIX_HLINK : SMB_SET_FILE_UNIX_LINK); p = ¶m[6]; - p += clistr_push(cli, p, fname_src, -1, STR_TERMINATE); + p += clistr_push(cli, p, fname_src, -1, STR_TERMINATE|STR_CONVERT); param_len = PTR_DIFF(p, param); p = data; - p += clistr_push(cli, p, fname_dst, -1, STR_TERMINATE); + p += clistr_push(cli, p, fname_dst, -1, STR_TERMINATE|STR_CONVERT); data_len = PTR_DIFF(p, data); if (!cli_send_trans(cli, SMBtrans2, @@ -76,7 +77,7 @@ static BOOL cli_link_internal(struct cli_state *cli, const char *fname_src, cons uint32 unix_perms_to_wire(mode_t perms) { - unsigned int ret = 0; + uint32 ret = 0; ret |= ((perms & S_IXOTH) ? UNIX_X_OTH : 0); ret |= ((perms & S_IWOTH) ? UNIX_W_OTH : 0); @@ -136,7 +137,7 @@ static BOOL cli_unix_chmod_chown_internal(struct cli_state *cli, const char *fna SSVAL(param,0,SMB_SET_FILE_UNIX_BASIC); p = ¶m[6]; - p += clistr_push(cli, p, fname, -1, STR_TERMINATE); + p += clistr_push(cli, p, fname, -1, STR_TERMINATE|STR_CONVERT); param_len = PTR_DIFF(p, param); SIVAL(data,40,uid); @@ -207,9 +208,9 @@ BOOL cli_rename(struct cli_state *cli, const char *fname_src, const char *fname_ p = smb_buf(cli->outbuf); *p++ = 4; - p += clistr_push(cli, p, fname_src, -1, STR_TERMINATE); + p += clistr_push(cli, p, fname_src, -1, STR_TERMINATE|STR_CONVERT); *p++ = 4; - p += clistr_push(cli, p, fname_dst, -1, STR_TERMINATE); + p += clistr_push(cli, p, fname_dst, -1, STR_TERMINATE|STR_CONVERT); cli_setup_bcc(cli, p); @@ -244,7 +245,7 @@ BOOL cli_unlink(struct cli_state *cli, const char *fname) p = smb_buf(cli->outbuf); *p++ = 4; - p += clistr_push(cli, p, fname, -1, STR_TERMINATE); + p += clistr_push(cli, p, fname, -1, STR_TERMINATE|STR_CONVERT); cli_setup_bcc(cli, p); cli_send_smb(cli); @@ -278,7 +279,7 @@ BOOL cli_mkdir(struct cli_state *cli, const char *dname) p = smb_buf(cli->outbuf); *p++ = 4; - p += clistr_push(cli, p, dname, -1, STR_TERMINATE); + p += clistr_push(cli, p, dname, -1, STR_TERMINATE|STR_CONVERT); cli_setup_bcc(cli, p); @@ -313,7 +314,7 @@ BOOL cli_rmdir(struct cli_state *cli, const char *dname) p = smb_buf(cli->outbuf); *p++ = 4; - p += clistr_push(cli, p, dname, -1, STR_TERMINATE); + p += clistr_push(cli, p, dname, -1, STR_TERMINATE|STR_CONVERT); cli_setup_bcc(cli, p); @@ -349,19 +350,19 @@ int cli_nt_delete_on_close(struct cli_state *cli, int fnum, BOOL flag) data = flag ? 1 : 0; if (!cli_send_trans(cli, SMBtrans2, - NULL, /* name */ - -1, 0, /* fid, flags */ - &setup, 1, 0, /* setup, length, max */ - param, param_len, 2, /* param, length, max */ - (char *)&data, data_len, cli->max_xmit /* data, length, max */ - )) { - return False; + NULL, /* name */ + -1, 0, /* fid, flags */ + &setup, 1, 0, /* setup, length, max */ + param, param_len, 2, /* param, length, max */ + (char *)&data, data_len, cli->max_xmit /* data, length, max */ + )) { + return False; } if (!cli_receive_trans(cli, SMBtrans2, - &rparam, ¶m_len, - &rdata, &data_len)) { - return False; + &rparam, ¶m_len, + &rdata, &data_len)) { + return False; } SAFE_FREE(rdata); @@ -411,7 +412,7 @@ int cli_nt_create_full(struct cli_state *cli, const char *fname, uint32 DesiredA p += len; SSVAL(cli->outbuf,smb_ntcreate_NameLength, len); /* sigh. this copes with broken netapp filer behaviour */ - p += clistr_push(cli, p, "", -1, STR_TERMINATE); + p += clistr_push(cli, p, "", -1, STR_TERMINATE|STR_CONVERT); cli_setup_bcc(cli, p); @@ -500,7 +501,7 @@ int cli_open(struct cli_state *cli, const char *fname, int flags, int share_mode } p = smb_buf(cli->outbuf); - p += clistr_push(cli, p, fname, -1, STR_TERMINATE); + p += clistr_push(cli, p, fname, -1, STR_TERMINATE|STR_CONVERT); cli_setup_bcc(cli, p); @@ -542,12 +543,11 @@ BOOL cli_close(struct cli_state *cli, int fnum) return !cli_is_error(cli); } - /**************************************************************************** - send a lock with a specified locktype + send a lock with a specified locktype this is used for testing LOCKING_ANDX_CANCEL_LOCK ****************************************************************************/ -NTSTATUS cli_locktype(struct cli_state *cli, int fnum, +NTSTATUS cli_locktype(struct cli_state *cli, int fnum, uint32 offset, uint32 len, int timeout, unsigned char locktype) { char *p; @@ -594,7 +594,6 @@ NTSTATUS cli_locktype(struct cli_state *cli, int fnum, return cli_nt_error(cli); } - /**************************************************************************** Lock a file. ****************************************************************************/ @@ -632,6 +631,7 @@ BOOL cli_lock(struct cli_state *cli, int fnum, cli_send_smb(cli); + cli->timeout = (timeout == -1) ? 0x7FFFFFFF : (timeout + 2*1000); if (timeout != 0) { cli->timeout = (timeout == -1) ? 0x7FFFFFFF : (timeout + 2*1000); } @@ -735,6 +735,8 @@ BOOL cli_lock64(struct cli_state *cli, int fnum, cli_setup_bcc(cli, p); cli_send_smb(cli); + cli->timeout = (timeout == -1) ? 0x7FFFFFFF : (timeout + 2*1000); + if (timeout != 0) { cli->timeout = (timeout == -1) ? 0x7FFFFFFF : (timeout + 5*1000); } @@ -799,7 +801,6 @@ BOOL cli_unlock64(struct cli_state *cli, int fnum, SMB_BIG_UINT offset, SMB_BIG_ return True; } - /**************************************************************************** Do a SMBgetattrE call. ****************************************************************************/ @@ -871,7 +872,7 @@ BOOL cli_getatr(struct cli_state *cli, const char *fname, p = smb_buf(cli->outbuf); *p++ = 4; - p += clistr_push(cli, p, fname, -1, STR_TERMINATE); + p += clistr_push(cli, p, fname, -1, STR_TERMINATE|STR_CONVERT); cli_setup_bcc(cli, p); @@ -922,7 +923,7 @@ BOOL cli_setatr(struct cli_state *cli, const char *fname, uint16 attr, time_t t) p = smb_buf(cli->outbuf); *p++ = 4; - p += clistr_push(cli, p, fname, -1, STR_TERMINATE); + p += clistr_push(cli, p, fname, -1, STR_TERMINATE|STR_CONVERT); *p++ = 4; cli_setup_bcc(cli, p); @@ -959,7 +960,7 @@ BOOL cli_chkpath(struct cli_state *cli, const char *path) cli_setup_packet(cli); p = smb_buf(cli->outbuf); *p++ = 4; - p += clistr_push(cli, p, path2, -1, STR_TERMINATE); + p += clistr_push(cli, p, path2, -1, STR_TERMINATE|STR_CONVERT); cli_setup_bcc(cli, p); @@ -1020,7 +1021,7 @@ int cli_ctemp(struct cli_state *cli, const char *path, char **tmp_path) p = smb_buf(cli->outbuf); *p++ = 4; - p += clistr_push(cli, p, path, -1, STR_TERMINATE); + p += clistr_push(cli, p, path, -1, STR_TERMINATE|STR_CONVERT); cli_setup_bcc(cli, p); |